Merge "mediawiki.page.gallery.resize: Remove weird mw.hook call"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 9 Jul 2014 11:13:00 +0000 (11:13 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 9 Jul 2014 11:13:00 +0000 (11:13 +0000)
1307 files changed:
.travis.yml
RELEASE-NOTES-1.24
StartProfiler.sample
docs/hooks.txt
docs/scripts.txt
includes/Article.php [deleted file]
includes/AutoLoader.php
includes/Category.php
includes/CategoryPage.php [deleted file]
includes/CategoryViewer.php
includes/ChangeTags.php
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/GitInfo.php
includes/GlobalFunctions.php
includes/Hooks.php
includes/HtmlFormatter.php
includes/ImagePage.php [deleted file]
includes/ImageQueryPage.php [deleted file]
includes/MWTimestamp.php
includes/MagicWord.php
includes/Message.php
includes/MimeMagic.php
includes/Namespace.php
includes/OutputPage.php
includes/PageQueryPage.php [deleted file]
includes/Preferences.php
includes/QueryPage.php [deleted file]
includes/Revision.php
includes/Sanitizer.php
includes/Setup.php
includes/SiteConfiguration.php
includes/SiteStats.php
includes/Skin.php
includes/SkinTemplate.php
includes/StubObject.php
includes/Title.php
includes/User.php
includes/UserMailer.php
includes/WebRequest.php
includes/WebStart.php
includes/WikiCategoryPage.php [deleted file]
includes/WikiFilePage.php [deleted file]
includes/WikiPage.php [deleted file]
includes/actions/Action.php
includes/actions/EditAction.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/RevertAction.php
includes/api/ApiBase.php
includes/api/ApiExpandTemplates.php
includes/api/ApiImageRotate.php
includes/api/ApiParse.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiResult.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiWatch.php
includes/cache/CacheDependency.php
includes/cache/LocalisationCache.php
includes/cache/MessageCache.php
includes/clientpool/RedisConnectionPool.php
includes/config/GlobalVarConfig.php
includes/content/AbstractContent.php
includes/content/Content.php
includes/content/ContentHandler.php
includes/content/WikitextContent.php
includes/context/ContextSource.php
includes/context/DerivativeContext.php
includes/context/IContextSource.php
includes/context/RequestContext.php
includes/dao/IDBAccessObject.php
includes/db/CloneDatabase.php
includes/db/Database.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabaseMysqli.php
includes/db/DatabasePostgres.php
includes/db/LBFactorySingle.php
includes/db/LoadBalancer.php
includes/debug/Debug.php
includes/deferred/SearchUpdate.php
includes/diff/DifferenceEngine.php
includes/diff/TableDiffFormatter.php
includes/filebackend/FSFileBackend.php
includes/filebackend/FileBackendStore.php
includes/filebackend/FileOpBatch.php
includes/filerepo/FileRepo.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/RepoGroup.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/HTMLSelectField.php
includes/htmlform/HTMLSelectOrOtherField.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MssqlInstaller.php
includes/installer/MssqlUpdater.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/PostgresInstaller.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstallerOutput.php
includes/installer/WebInstallerPage.php
includes/installer/i18n/bar.json
includes/installer/i18n/bn.json
includes/installer/i18n/br.json
includes/installer/i18n/ce.json
includes/installer/i18n/de.json
includes/installer/i18n/en.json
includes/installer/i18n/et.json
includes/installer/i18n/haw.json
includes/installer/i18n/it.json
includes/installer/i18n/mk.json
includes/installer/i18n/nan.json
includes/installer/i18n/nl.json
includes/installer/i18n/pt-br.json
includes/installer/i18n/qqq.json
includes/installer/i18n/sv.json
includes/installer/i18n/tl.json
includes/installer/i18n/tr.json
includes/installer/i18n/tyv.json [new file with mode: 0644]
includes/installer/i18n/yi.json
includes/installer/i18n/zh-hans.json
includes/jobqueue/JobQueueRedis.php
includes/libs/CSSMin.php
includes/libs/HashRing.php
includes/libs/HttpStatus.php
includes/logging/LogEventsList.php
includes/logging/PageLangLogFormatter.php [new file with mode: 0644]
includes/logging/PatrolLog.php
includes/media/Bitmap.php
includes/media/FormatMetadata.php
includes/media/MediaHandler.php
includes/media/XCF.php
includes/media/XMP.php
includes/mime.info
includes/mime.types
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/LinkHolderArray.php
includes/parser/Parser.php
includes/parser/ParserDiffTest.php [new file with mode: 0644]
includes/parser/Parser_DiffTest.php [deleted file]
includes/parser/Preprocessor.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/poolcounter/PoolCounterRedis.php
includes/poolcounter/PoolCounterWork.php
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/search/SearchMySQL.php
includes/search/SearchPostgres.php
includes/search/SearchResultSet.php
includes/search/SearchSqlite.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/SpecialActiveusers.php
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/SpecialLinkSearch.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialLog.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPageLanguage.php [new file with mode: 0644]
includes/specials/SpecialPagesWithProp.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialTrackingCategories.php
includes/specials/SpecialUpload.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWantedfiles.php
includes/specials/SpecialWatchlist.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/title/MediaWikiTitleCodec.php
includes/upload/UploadBase.php
includes/utils/UIDGenerator.php
languages/Language.php
languages/LanguageConverter.php
languages/Names.php
languages/classes/LanguageRu.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/sr.json [deleted file]
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/MessagesAng.php
languages/messages/MessagesAr.php
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/install.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/nextJobDB.php
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/i18n/ce.json
resources/lib/oojs-ui/i18n/kn.json
resources/lib/oojs-ui/i18n/lv.json
resources/lib/oojs-ui/images/icons/accept.svg
resources/lib/oojs-ui/images/icons/add-item.svg
resources/lib/oojs-ui/images/icons/advanced.svg
resources/lib/oojs-ui/images/icons/alert.svg
resources/lib/oojs-ui/images/icons/arched-arrow-ltr.svg
resources/lib/oojs-ui/images/icons/arched-arrow-rtl.svg
resources/lib/oojs-ui/images/icons/check.svg
resources/lib/oojs-ui/images/icons/clear.svg
resources/lib/oojs-ui/images/icons/close.svg
resources/lib/oojs-ui/images/icons/code.svg
resources/lib/oojs-ui/images/icons/collapse.svg
resources/lib/oojs-ui/images/icons/comment.svg
resources/lib/oojs-ui/images/icons/expand.svg
resources/lib/oojs-ui/images/icons/help.svg
resources/lib/oojs-ui/images/icons/history.svg
resources/lib/oojs-ui/images/icons/info.svg
resources/lib/oojs-ui/images/icons/link.svg
resources/lib/oojs-ui/images/icons/menu.svg
resources/lib/oojs-ui/images/icons/move-ltr.svg
resources/lib/oojs-ui/images/icons/move-rtl.svg
resources/lib/oojs-ui/images/icons/picture.svg
resources/lib/oojs-ui/images/icons/remove-item.svg
resources/lib/oojs-ui/images/icons/remove.svg
resources/lib/oojs-ui/images/icons/search.svg
resources/lib/oojs-ui/images/icons/settings.svg
resources/lib/oojs-ui/images/icons/tag.svg
resources/lib/oojs-ui/images/icons/window.svg
resources/lib/oojs-ui/images/indicators/alert.svg
resources/lib/oojs-ui/images/indicators/arrow-down.png
resources/lib/oojs-ui/images/indicators/arrow-down.svg
resources/lib/oojs-ui/images/indicators/arrow-ltr.png
resources/lib/oojs-ui/images/indicators/arrow-ltr.svg
resources/lib/oojs-ui/images/indicators/arrow-rtl.png
resources/lib/oojs-ui/images/indicators/arrow-rtl.svg
resources/lib/oojs-ui/images/indicators/arrow-up.png
resources/lib/oojs-ui/images/indicators/arrow-up.svg
resources/lib/oojs-ui/images/indicators/required.svg
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.ui-themes/vector/jquery.ui.core.css
resources/src/jquery/jquery.qunit.completenessTest.js
resources/src/jquery/jquery.suggestions.js
resources/src/json-skip.js [new file with mode: 0644]
resources/src/mediawiki.language/languages/ru.js
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.page/mediawiki.page.image.pagination.js
resources/src/mediawiki.page/mediawiki.page.patrol.ajax.js
resources/src/mediawiki.skinning/content.parsoid.less
resources/src/mediawiki.special/mediawiki.special.block.css
resources/src/mediawiki.special/mediawiki.special.css
resources/src/mediawiki.special/mediawiki.special.pageLanguage.js [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.search.css
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.feedback.js
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.searchSuggest.js
skins/.gitignore
skins/MonoBook/COPYING [new file with mode: 0644]
skins/MonoBook/IE60Fixes.css [new file with mode: 0644]
skins/MonoBook/IE70Fixes.css [new file with mode: 0644]
skins/MonoBook/MonoBook.php [new file with mode: 0644]
skins/MonoBook/MonoBookTemplate.php [new file with mode: 0644]
skins/MonoBook/SkinMonoBook.php [new file with mode: 0644]
skins/MonoBook/audio.png [new file with mode: 0644]
skins/MonoBook/bullet.gif [new file with mode: 0644]
skins/MonoBook/discussionitem_icon.gif [new file with mode: 0644]
skins/MonoBook/document.png [new file with mode: 0644]
skins/MonoBook/external-ltr.png [new file with mode: 0644]
skins/MonoBook/external-rtl.png [new file with mode: 0644]
skins/MonoBook/file_icon.gif [new file with mode: 0644]
skins/MonoBook/headbg.jpg [new file with mode: 0644]
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 [new file with mode: 0644]
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 [new file with mode: 0644]
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/MonoBook/link_icon.gif [new file with mode: 0644]
skins/MonoBook/lock_icon.gif [new file with mode: 0644]
skins/MonoBook/magnify-clip.png [new file with mode: 0644]
skins/MonoBook/mail_icon.gif [new file with mode: 0644]
skins/MonoBook/main.css [new file with mode: 0644]
skins/MonoBook/news_icon.png [new file with mode: 0644]
skins/MonoBook/required.gif [new file with mode: 0644]
skins/MonoBook/user.gif [new file with mode: 0644]
skins/MonoBook/video.png [new file with mode: 0644]
skins/MonoBook/wiki-indexed.png [new file with mode: 0644]
skins/MonoBook/wiki.png [new file with mode: 0644]
skins/Vector/COPYING [new file with mode: 0644]
skins/Vector/SkinVector.php [new file with mode: 0644]
skins/Vector/Vector.php [new file with mode: 0644]
skins/Vector/VectorTemplate.php [new file with mode: 0644]
skins/Vector/collapsibleTabs.js [new file with mode: 0644]
skins/Vector/components/animations.less [new file with mode: 0644]
skins/Vector/components/common.less [new file with mode: 0644]
skins/Vector/components/externalLinks.less [new file with mode: 0644]
skins/Vector/components/footer.less [new file with mode: 0644]
skins/Vector/components/navigation.less [new file with mode: 0644]
skins/Vector/components/notifications.less [new file with mode: 0644]
skins/Vector/components/personalMenu.less [new file with mode: 0644]
skins/Vector/components/search.less [new file with mode: 0644]
skins/Vector/components/tabs.less [new file with mode: 0644]
skins/Vector/components/watchstar.less [new file with mode: 0644]
skins/Vector/csshover.htc [new file with mode: 0644]
skins/Vector/csshover.min.htc [new file with mode: 0644]
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 [new file with mode: 0644]
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 [new file with mode: 0644]
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]
skins/Vector/images/arrow-collapsed-ltr.png [new file with mode: 0644]
skins/Vector/images/arrow-collapsed-ltr.svg [new file with mode: 0644]
skins/Vector/images/arrow-collapsed-rtl.png [new file with mode: 0644]
skins/Vector/images/arrow-collapsed-rtl.svg [new file with mode: 0644]
skins/Vector/images/arrow-down-focus-icon.png [new file with mode: 0644]
skins/Vector/images/arrow-down-focus-icon.svg [new file with mode: 0644]
skins/Vector/images/arrow-down-icon.png [new file with mode: 0644]
skins/Vector/images/arrow-down-icon.svg [new file with mode: 0644]
skins/Vector/images/arrow-expanded.png [new file with mode: 0644]
skins/Vector/images/arrow-expanded.svg [new file with mode: 0644]
skins/Vector/images/bullet-icon.png [new file with mode: 0644]
skins/Vector/images/external-link-ltr-icon.png [new file with mode: 0644]
skins/Vector/images/external-link-ltr-icon.svg [new file with mode: 0644]
skins/Vector/images/external-link-rtl-icon.png [new file with mode: 0644]
skins/Vector/images/external-link-rtl-icon.svg [new file with mode: 0644]
skins/Vector/images/link-icon.png [new file with mode: 0644]
skins/Vector/images/magnify-clip.png [new file with mode: 0644]
skins/Vector/images/page-fade.png [new file with mode: 0644]
skins/Vector/images/portal-break-ltr.png [new file with mode: 0644]
skins/Vector/images/portal-break-rtl.png [new file with mode: 0644]
skins/Vector/images/portal-break.png [new file with mode: 0644]
skins/Vector/images/preferences/break.png [new file with mode: 0644]
skins/Vector/images/preferences/fade.png [new file with mode: 0644]
skins/Vector/images/search-fade.png [new file with mode: 0644]
skins/Vector/images/search-ltr.png [new file with mode: 0644]
skins/Vector/images/search-ltr.svg [new file with mode: 0644]
skins/Vector/images/search-rtl.png [new file with mode: 0644]
skins/Vector/images/search-rtl.svg [new file with mode: 0644]
skins/Vector/images/tab-break.png [new file with mode: 0644]
skins/Vector/images/tab-current-fade.png [new file with mode: 0644]
skins/Vector/images/tab-normal-fade.png [new file with mode: 0644]
skins/Vector/images/unwatch-icon-hl.png [new file with mode: 0644]
skins/Vector/images/unwatch-icon-hl.svg [new file with mode: 0644]
skins/Vector/images/unwatch-icon.png [new file with mode: 0644]
skins/Vector/images/unwatch-icon.svg [new file with mode: 0644]
skins/Vector/images/user-icon.png [new file with mode: 0644]
skins/Vector/images/user-icon.svg [new file with mode: 0644]
skins/Vector/images/watch-icon-hl.png [new file with mode: 0644]
skins/Vector/images/watch-icon-hl.svg [new file with mode: 0644]
skins/Vector/images/watch-icon-loading.png [new file with mode: 0644]
skins/Vector/images/watch-icon-loading.svg [new file with mode: 0644]
skins/Vector/images/watch-icon.png [new file with mode: 0644]
skins/Vector/images/watch-icon.svg [new file with mode: 0644]
skins/Vector/screen-hd.less [new file with mode: 0644]
skins/Vector/screen.less [new file with mode: 0644]
skins/Vector/special.less [new file with mode: 0644]
skins/Vector/special.preferences.less [new file with mode: 0644]
skins/Vector/variables.less [new file with mode: 0644]
skins/Vector/vector.js [new file with mode: 0644]
skins/common/images/icons/fileicon-xcf.png [new file with mode: 0644]
skins/monobook/IE60Fixes.css [deleted file]
skins/monobook/IE70Fixes.css [deleted file]
skins/monobook/MonoBook.php [deleted file]
skins/monobook/audio.png [deleted file]
skins/monobook/bullet.gif [deleted file]
skins/monobook/discussionitem_icon.gif [deleted file]
skins/monobook/document.png [deleted file]
skins/monobook/external-ltr.png [deleted file]
skins/monobook/external-rtl.png [deleted file]
skins/monobook/file_icon.gif [deleted file]
skins/monobook/headbg.jpg [deleted file]
skins/monobook/link_icon.gif [deleted file]
skins/monobook/lock_icon.gif [deleted file]
skins/monobook/magnify-clip.png [deleted file]
skins/monobook/mail_icon.gif [deleted file]
skins/monobook/main.css [deleted file]
skins/monobook/news_icon.png [deleted file]
skins/monobook/required.gif [deleted file]
skins/monobook/user.gif [deleted file]
skins/monobook/video.png [deleted file]
skins/monobook/wiki-indexed.png [deleted file]
skins/monobook/wiki.png [deleted file]
skins/vector/Vector.php [deleted file]
skins/vector/collapsibleTabs.js [deleted file]
skins/vector/components/animations.less [deleted file]
skins/vector/components/common.less [deleted file]
skins/vector/components/externalLinks.less [deleted file]
skins/vector/components/footer.less [deleted file]
skins/vector/components/navigation.less [deleted file]
skins/vector/components/notifications.less [deleted file]
skins/vector/components/personalMenu.less [deleted file]
skins/vector/components/search.less [deleted file]
skins/vector/components/tabs.less [deleted file]
skins/vector/components/watchstar.less [deleted file]
skins/vector/csshover.htc [deleted file]
skins/vector/csshover.min.htc [deleted file]
skins/vector/images/arrow-collapsed-ltr.png [deleted file]
skins/vector/images/arrow-collapsed-ltr.svg [deleted file]
skins/vector/images/arrow-collapsed-rtl.png [deleted file]
skins/vector/images/arrow-collapsed-rtl.svg [deleted file]
skins/vector/images/arrow-down-focus-icon.png [deleted file]
skins/vector/images/arrow-down-focus-icon.svg [deleted file]
skins/vector/images/arrow-down-icon.png [deleted file]
skins/vector/images/arrow-down-icon.svg [deleted file]
skins/vector/images/arrow-expanded.png [deleted file]
skins/vector/images/arrow-expanded.svg [deleted file]
skins/vector/images/bullet-icon.png [deleted file]
skins/vector/images/external-link-ltr-icon.png [deleted file]
skins/vector/images/external-link-ltr-icon.svg [deleted file]
skins/vector/images/external-link-rtl-icon.png [deleted file]
skins/vector/images/external-link-rtl-icon.svg [deleted file]
skins/vector/images/link-icon.png [deleted file]
skins/vector/images/magnify-clip.png [deleted file]
skins/vector/images/page-fade.png [deleted file]
skins/vector/images/portal-break-ltr.png [deleted file]
skins/vector/images/portal-break-rtl.png [deleted file]
skins/vector/images/portal-break.png [deleted file]
skins/vector/images/preferences/break.png [deleted file]
skins/vector/images/preferences/fade.png [deleted file]
skins/vector/images/search-fade.png [deleted file]
skins/vector/images/search-ltr.png [deleted file]
skins/vector/images/search-ltr.svg [deleted file]
skins/vector/images/search-rtl.png [deleted file]
skins/vector/images/search-rtl.svg [deleted file]
skins/vector/images/tab-break.png [deleted file]
skins/vector/images/tab-current-fade.png [deleted file]
skins/vector/images/tab-normal-fade.png [deleted file]
skins/vector/images/unwatch-icon-hl.png [deleted file]
skins/vector/images/unwatch-icon-hl.svg [deleted file]
skins/vector/images/unwatch-icon.png [deleted file]
skins/vector/images/unwatch-icon.svg [deleted file]
skins/vector/images/user-icon.png [deleted file]
skins/vector/images/user-icon.svg [deleted file]
skins/vector/images/watch-icon-hl.png [deleted file]
skins/vector/images/watch-icon-hl.svg [deleted file]
skins/vector/images/watch-icon-loading.png [deleted file]
skins/vector/images/watch-icon-loading.svg [deleted file]
skins/vector/images/watch-icon.png [deleted file]
skins/vector/images/watch-icon.svg [deleted file]
skins/vector/screen-hd.less [deleted file]
skins/vector/screen.less [deleted file]
skins/vector/special.less [deleted file]
skins/vector/special.preferences.less [deleted file]
skins/vector/variables.less [deleted file]
skins/vector/vector.js [deleted file]
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/file.feature [new file with mode: 0644]
tests/browser/features/login.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/file_steps.rb [new file with mode: 0644]
tests/browser/features/step_definitions/login_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/file_does_not_exist_page.rb [new file with mode: 0644]
tests/browser/features/support/pages/login_error_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/ResourceLoaderTestCase.php
tests/phpunit/data/media/README
tests/phpunit/data/media/say-test.ogg [new file with mode: 0644]
tests/phpunit/includes/ArticleTest.php
tests/phpunit/includes/GitInfoTest.php
tests/phpunit/includes/GlobalFunctions/wfParseUrlTest.php
tests/phpunit/includes/GlobalFunctions/wfTimestampTest.php
tests/phpunit/includes/ImagePage404Test.php [new file with mode: 0644]
tests/phpunit/includes/ImagePageTest.php [new file with mode: 0644]
tests/phpunit/includes/LinkerTest.php
tests/phpunit/includes/LinksUpdateTest.php
tests/phpunit/includes/MimeMagicTest.php [new file with mode: 0644]
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/RequestContextTest.php
tests/phpunit/includes/SampleTest.php
tests/phpunit/includes/TimeAdjustTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/api/ApiOptionsTest.php
tests/phpunit/includes/api/query/ApiQueryTest.php
tests/phpunit/includes/content/TextContentTest.php
tests/phpunit/includes/debug/MWDebugTest.php
tests/phpunit/includes/filerepo/RepoGroupTest.php [new file with mode: 0644]
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/media/MediaWikiMediaTestCase.php
tests/phpunit/includes/media/XCFTest.php [new file with mode: 0644]
tests/phpunit/includes/normal/CleanUpTest.php
tests/phpunit/includes/parser/MagicVariableTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/site/MediaWikiSiteTest.php
tests/phpunit/includes/specials/SpecialMIMESearchTest.php [new file with mode: 0644]
tests/phpunit/includes/specials/SpecialPreferencesTest.php
tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
tests/phpunit/languages/LanguageRuTest.php
tests/phpunit/languages/LanguageTest.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.client.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
tests/testHelpers.inc
thumb.php

index e0a45a1..dedb4e1 100644 (file)
@@ -9,18 +9,7 @@
 language: php
 
 php:
-  - hhvm
-  - 5.3
-  - 5.4
-  - 5.5
-  - 5.6
-
-matrix:
-  allow_failures:
-    - php: 5.3
-    - php: 5.4
-    - php: 5.5
-    - php: 5.6
+  - hhvm-nightly
 
 services:
   - mysql
@@ -33,16 +22,12 @@ branches:
 
 before_install:
   - sudo apt-get install -qq djvulibre-bin tidy
+  - composer self-update --quiet --no-interaction
 
 before_script:
-  # Initialise submodules, in case we're testing a Wikimedia production branch.
-  - git submodule update --init --recursive
-  # Travis CI's HHVM environment provides PHPUnit as a phar file, but
-  # MediaWiki's test suite only works if individual PHPUnit files are
-  # actual files on disk (bug 58881).
-  - composer require 'phpunit/phpunit=3.7.*' --prefer-source
+  - composer install --prefer-source --quiet --no-interaction
   - >
-      php maintenance/install.php testwiki admin
+      php maintenance/install.php traviswiki admin
       --pass travis
       --dbname traviswiki
       --dbuser travis
@@ -50,14 +35,13 @@ before_script:
       --scriptpath "/w"
 
 script:
-  - >
-      if [ "$TRAVIS_PHP_VERSION" = "hhvm" ];
-      then
-        hhvm --php \
-        -d include_path=".$(printf ':%s' vendor/phpunit/*)" \
-        -d date.timezone="Etc/UTC" \
-        tests/phpunit/phpunit.php
-      else
-        php tests/phpunit/phpunit.php \
-        --with-phpunitdir ./vendor/phpunit/phpunit
-      fi
+  - php tests/phpunit/phpunit.php
+
+notifications:
+  email: false
+  irc:
+    channels:
+      - "chat.freenode.net#mediawiki-core"
+    on_success: change
+    on_failure: change
+    skip_join: true
index 72edd76..f23e13a 100644 (file)
@@ -1,5 +1,5 @@
-Security reminder: MediaWiki does not require PHP's register_globals. If you
-have it on, turn it '''off''' if you can.
+Security reminder: If you have PHP's register_globals option set, you must
+turn it off. MediaWiki will no longer work with it enabled.
 
 == MediaWiki 1.24 ==
 
@@ -9,6 +9,9 @@ MediaWiki 1.24 is an alpha-quality branch and is not recommended for use in
 production.
 
 === Configuration changes in 1.24 ===
+* MediaWiki will no longer run if register_globals is enabled. It has been
+  deprecated for 5 years now, and was removed in PHP 5.4. For more information
+  about why, see <https://www.mediawiki.org/wiki/register_globals>.
 * The server's canonical hostname is available as $wgServerName, which is
   exposed in both mw.config and ApiQuerySiteInfo.
 * Introduced $wgPagePropsHaveSortkey as a backwards-compatibility switch,
@@ -21,6 +24,14 @@ production.
 * $wgDBClusterTimeout has been removed.
 * $wgProxyKey has been removed. It is no longer used by MediaWiki core.
   Ensure $wgSecretKey is set in LocalSettings.php.
+* $wgExtraInterlanguageLinkPrefixes is a new configuration variable that
+  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.
+* $wgCountTotalSearchHits has been removed. If you're concerned about efficiency
+  of search, you should use something like CirrusSearch instead of built in
+  search.
 
 === New features in 1.24 ===
 * Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
@@ -78,6 +89,25 @@ 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 67042) Added support for the HTML5 <rtc> tag for East Asian typography.
 
 === Bug fixes in 1.24 ===
 * (bug 49116) Footer copyright notice is now always displayed in user language
@@ -99,6 +129,11 @@ production.
 * (bug 52587) Maintenance script deleteBatch.php no longer follows redirects
   in the file namespace and delete the file on the target page. It will still
   however delete the redirect page.
+* (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
@@ -119,6 +154,12 @@ production.
   The old format is still used if prop isn't provided, but this is deprecated.
 * meta=userinfo can now return the count of unread pages on the watchlist.
 * list=watchlist can now filter by unread status.
+* The deprecated action=parse&prop=languageshtml has been removed.
+* (bug 48071) action=setnotificationtimestamp no longer throws PHP or database
+  errors when no pages are given.
+* (bug 60734) Actions that use ApiPageSet (e.g. purge, watch,
+  setnotificationtimestamp) will now include continuation information when
+  using a generator.
 
 === Languages updated in 1.24 ===
 
@@ -159,6 +200,29 @@ changes to languages because of Bugzilla reports.
   for migration guide for creators and users of custom skins that relied on it.
 * ResourceLoaderFileModule#getAllStyleFiles now returns all style files and all
   skin style files used by the module.
+* 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.
+* (bug 65781) Removed block warning on included {{Special:Contributions}}
+* Removed Skin::makeGlobalVariablesScript. (deprecated since 1.19)
+* Removed MWNamespace::isMain(). (deprecated since 1.19)
+* Removed Preferences::loadOldSearchNs(). (deprecated since 1.19)
+* Removed OutputPage::getStatusMessage(). (deprecated since 1.18)
+* Removed OutputPage::isUserJsAllowed(). (deprecated since 1.18)
+* Removed Title::updateTitleProtection(). (deprecated since 1.19)
 
 ==== Renamed classes ====
 * CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
@@ -167,6 +231,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
@@ -200,6 +265,7 @@ changes to languages because of Bugzilla reports.
 ==== Removed classes ====
 * IPBlockForm - Use SpecialBlock directly
 * WatchlistEditor - Use SpecialEditWatchlist directly
+* FormatExif - Use FormatMetadata directly
 
 == Compatibility ==
 
index db5e0ff..d9b5288 100644 (file)
@@ -2,13 +2,22 @@
 
 /**
  * To use a profiler, copy this file to StartProfiler.php,
- * and add something like this:
+ * and add either:
  *
- *   $wgProfiler['class'] = 'Profiler';
+ *   // Does not support the debugging toolbar
+ *   // Stores profiling information in the database
+ *   // Requires running maintenance/archives/patch-profiling.sql
+ *   $wgProfiler['class'] = 'ProfilerSimpleDB'
+ *
+ * or:
+ *
+ *   // Supports the debugging toolbar
+ *   // Does not store profiling information in the database
+ *   $wgProfiler['class'] = 'ProfilerStandard';
  *
  * Or for a sampling profiler:
  *   if ( !mt_rand( 0, 100 ) ) {
- *       $wgProfiler['class'] = 'Profiler';
+ *       $wgProfiler['class'] = 'ProfilerSimpleDB';
  *   } else {
  *       $wgProfiler['class'] = 'ProfilerStub';
  *   }
index 4c2fd89..eb4d435 100644 (file)
@@ -326,6 +326,13 @@ $revCount: Number of revisions in the XML file
 $sRevCount: Number of successfully imported revisions
 $pageInfo: associative array of page information
 
+'AfterParserFetchFileAndTitle': After an image gallery is formed by Parser,
+just before adding its HTML to parser output.
+$parser: Parser object that called the hook
+$ig: Gallery, an object of one of the gallery classes (inheriting from
+ImageGalleryBase)
+$html: HTML generated by the gallery
+
 'AjaxAddScript': Called in output page just before the initialisation
 of the javascript ajax engine. The hook is only called when ajax
 is enabled ( $wgUseAjax = true; ).
@@ -1041,11 +1048,11 @@ yourself. Alternatively, modifying $error and returning true will cause the
 contents of $error to be echoed at the top of the edit form as wikitext.
 Return true without altering $error to allow the edit to proceed.
 
-'EditPage::showReadOnlyForm:initial: similar to EditPage::showEditForm:initial
-but for the readonly 'view source' variant of the edit form.
+'EditPage::showReadOnlyForm:initial': similar to EditPage::showEditForm:initial
+but for the read-only 'view source' variant of the edit form.
 $editor: EditPage instance (object)
 &$out: an OutputPage instance to write to
-return value is ignored (should alway return true)
+return value is ignored (should always return true)
 
 'EditPage::showStandardInputs:options': allows injection of form fields into
 the editOptions area
@@ -1496,7 +1503,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
@@ -1705,8 +1712,8 @@ $refreshLinks: RefreshLinks object
 'MagicWordwgVariableIDs': When defining new magic words IDs.
 $variableIDs: array of strings
 
-'MakeGlobalVariablesScript': Called right before Skin::makeVariablesScript is
-executed. Ideally, this hook should only be used to add variables that depend on
+'MakeGlobalVariablesScript': Called at end of OutputPage::getJSVars.
+Ideally, this hook should only be used to add variables that depend on
 the current page/request; static configuration should be added through
 ResourceLoaderGetConfigVars instead.
 &$vars: variable (or multiple variables) to be added into the output of
@@ -2095,7 +2102,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 +2189,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 +2361,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
index 4f16709..c6fa674 100644 (file)
@@ -40,7 +40,7 @@ Primary scripts:
 
     To enable the profileinfo.php itself, you'll need to set $wgDBadminuser
     and $wgDBadminpassword in your LocalSettings.php, as well as $wgEnableProfileInfo 
-    See also https://www.mediawiki.org/wiki/How_to_debug#Profiling.
+    See also https://www.mediawiki.org/wiki/Manual:Profiling .
 
   thumb.php
     Script used to resize images if it is configured to be done when the web
diff --git a/includes/Article.php b/includes/Article.php
deleted file mode 100644 (file)
index 2d3240b..0000000
+++ /dev/null
@@ -1,2134 +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 ) )
-                       ) {
-                               $po = $this->mContentObject->getParserOutput( $this->getTitle() );
-                               $outputPage->addHTML( $po->getText() );
-                       }
-               }
-       }
-
-       /**
-        * 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 d547cb1..67f9a1c 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',
@@ -750,7 +738,6 @@ $wgAutoloadLocalClasses = array(
        'DjVuImage' => 'includes/media/DjVuImage.php',
        'Exif' => 'includes/media/Exif.php',
        'ExifBitmapHandler' => 'includes/media/ExifBitmap.php',
-       'FormatExif' => 'includes/media/FormatMetadata.php',
        'FormatMetadata' => 'includes/media/FormatMetadata.php',
        'GIFHandler' => 'includes/media/GIF.php',
        'GIFMetadataExtractor' => 'includes/media/GIFMetadataExtractor.php',
@@ -796,6 +783,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 +826,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',
@@ -909,7 +907,6 @@ $wgAutoloadLocalClasses = array(
        'SearchPostgres' => 'includes/search/SearchPostgres.php',
        'SearchResult' => 'includes/search/SearchResult.php',
        'SearchResultSet' => 'includes/search/SearchResultSet.php',
-       'SearchResultTooMany' => 'includes/search/SearchEngine.php',
        'SearchSqlite' => 'includes/search/SearchSqlite.php',
        'SqlSearchResultSet' => 'includes/search/SearchResultSet.php',
 
@@ -926,13 +923,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',
@@ -1016,6 +1017,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',
@@ -1178,12 +1180,6 @@ $wgAutoloadLocalClasses = array(
        # mw-config
        'InstallerOverrides' => 'mw-config/overrides.php',
        'MyLocalSettingsGenerator' => 'mw-config/overrides.php',
-
-       # skins
-       'MonoBookTemplate' => 'skins/monobook/MonoBook.php',
-       'SkinMonoBook' => 'skins/monobook/MonoBook.php',
-       'SkinVector' => 'skins/vector/Vector.php',
-       'VectorTemplate' => 'skins/vector/Vector.php',
 );
 
 class AutoLoader {
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 28db8a1..f51a5a8 100644 (file)
@@ -77,9 +77,9 @@ class ChangeTags {
         * Add tags to a change given its rc_id, rev_id and/or log_id
         *
         * @param string|array $tags Tags to add to the change
-        * @param int $rc_id rc_id of the change to add the tags to
-        * @param int $rev_id rev_id of the change to add the tags to
-        * @param int $log_id Log_id of the change to add the tags to
+        * @param int|null $rc_id rc_id of the change to add the tags to
+        * @param int|null $rev_id rev_id of the change to add the tags to
+        * @param int|null $log_id Log_id of the change to add the tags to
         * @param string $params params to put in the ct_params field of table 'change_tag'
         *
         * @throws MWException
@@ -143,7 +143,7 @@ class ChangeTags {
                        'ts_log_id' => $log_id )
                );
 
-               ## Update the summary row.
+               // Update the summary row.
                // $prevTags can be out of date on slaves, especially when addTags is called consecutively,
                // causing loss of tags added recently in tag_summary table.
                $prevTags = $dbw->selectField( 'tag_summary', 'ts_tags', $tsConds, __METHOD__ );
index 5b42750..918abb7 100644 (file)
@@ -1281,7 +1281,7 @@ $wgDjvuTxt = null;
  * Path of the djvutoxml executable
  * This works like djvudump except much, much slower as of version 3.5.
  *
- * For now we  recommend you use djvudump instead. The djvuxml output is
+ * For now we recommend you use djvudump instead. The djvuxml output is
  * probably more stable, so we'll switch back to it as soon as they fix
  * the efficiency problem.
  * http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583
@@ -1295,7 +1295,7 @@ $wgDjvuToXML = null;
 
 /**
  * Shell command for the DJVU post processor
- * Default: pnmtopng, since ddjvu generates ppm output
+ * Default: pnmtojpeg, since ddjvu generates ppm output
  * Set this to false to output the ppm file directly.
  */
 $wgDjvuPostProcessor = 'pnmtojpeg';
@@ -1514,7 +1514,7 @@ $wgUsersNotifiedOnAllChanges = array();
 $wgDBserver = 'localhost';
 
 /**
- * Database port number (for PostgreSQL)
+ * Database port number (for PostgreSQL and Microsoft SQL Server).
  */
 $wgDBport = 5432;
 
@@ -1540,11 +1540,21 @@ $wgDBtype = 'mysql';
 
 /**
  * Whether to use SSL in DB connection.
+ *
+ * This setting is only used $wgLBFactoryConf['class'] is set to
+ * 'LBFactorySimple' and $wgDBservers is an empty array; otherwise
+ * the DBO_SSL flag must be set in the 'flags' option of the database
+ * connection to achieve the same functionality.
  */
 $wgDBssl = false;
 
 /**
  * Whether to use compression in DB connection.
+ *
+ * This setting is only used $wgLBFactoryConf['class'] is set to
+ * 'LBFactorySimple' and $wgDBservers is an empty array; otherwise
+ * the DBO_COMPRESS flag must be set in the 'flags' option of the database
+ * connection to achieve the same functionality.
  */
 $wgDBcompress = false;
 
@@ -1652,7 +1662,7 @@ $wgSharedTables = array( 'user', 'user_properties' );
  *   - dbname:      Default database name
  *   - user:        DB user
  *   - password:    DB password
- *   - type:        "mysql" or "postgres"
+ *   - type:        DB type
  *
  *   - load:        Ratio of DB_SLAVE load, must be >=0, the sum of all loads must be >0.
  *                  If this is zero for any given server, no normal query traffic will be
@@ -2153,6 +2163,12 @@ $wgCachePages = true;
  */
 $wgCacheEpoch = '20030516000000';
 
+/**
+ * Directory where GitInfo will look for pre-computed cache files. If false,
+ * $wgCacheDirectory/gitinfo will be used.
+ */
+$wgGitInfoCacheDirectory = false;
+
 /**
  * Bump this number when changing the global style sheets and JavaScript.
  *
@@ -2504,6 +2520,21 @@ $wgInterwikiMagic = true;
  */
 $wgHideInterlanguageLinks = false;
 
+/**
+ * List of additional interwiki prefixes that should be treated as
+ * interlanguage links (i.e. placed in the sidebar).
+ * Notes:
+ * - This will not do anything unless the prefixes are defined in the interwiki
+ *   map.
+ * - The display text for these custom interlanguage links will be fetched from
+ *   the system message "interlanguage-link-xyz" where xyz is the prefix in
+ *   this array.
+ * - A friendly name for each site, used for tooltip text, may optionally be
+ *   placed in the system message "interlanguage-link-sitename-xyz" where xyz is
+ *   the prefix in this array.
+ */
+$wgExtraInterlanguageLinkPrefixes = array();
+
 /**
  * List of language names or overrides for default names in Names.php
  */
@@ -4337,6 +4368,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;
 
@@ -4955,7 +4987,12 @@ $wgDebugComments = false;
 $wgDebugDBTransactions = false;
 
 /**
- * Write SQL queries to the debug log
+ * Write SQL queries to the debug log.
+ *
+ * This setting is only used $wgLBFactoryConf['class'] is set to
+ * 'LBFactorySimple' and $wgDBservers is an empty array; otherwise
+ * the DBO_DEBUG flag must be set in the 'flags' option of the database
+ * connection to achieve the same functionality.
  */
 $wgDebugDumpSql = false;
 
@@ -5184,21 +5221,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).
  */
@@ -5262,18 +5284,6 @@ $wgAdvancedSearchHighlighting = false;
  */
 $wgSearchHighlightBoundaries = '[\p{Z}\p{P}\p{C}]';
 
-/**
- * Set to true to have the search engine count total
- * search matches to present in the Special:Search UI.
- * Not supported by every search engine shipped with MW.
- *
- * This could however be slow on larger wikis, and is pretty flaky
- * with the current title vs content split. Recommend avoiding until
- * that's been worked out cleanly; but this may aid in testing the
- * search UI and API to confirm that the result count works.
- */
-$wgCountTotalSearchHits = false;
-
 /**
  * Template for OpenSearch suggestions, defaults to API action=opensearch
  *
@@ -5585,9 +5595,11 @@ $wgRC2UDPOmitBots = false;
  * Destinations to which notifications about recent changes
  * should be sent.
  *
- * As of MediaWiki 1.22, the only supported 'engine' parameter option in core
- * is 'UDPRCFeedEngine', which is used to send recent changes over UDP to the
- * specified server.
+ * As of MediaWiki 1.22, there are 2 supported 'engine' parameter option in core:
+ *   * 'UDPRCFeedEngine', which is used to send recent changes over UDP to the
+ *      specified server.
+ *   * 'RedisPubSubFeedEngine', which is used to send recent changes to Redis.
+ *
  * The common options are:
  *   * 'uri' -- the address to which the notices are to be sent.
  *   * 'formatter' -- the class name (implementing RCFeedFormatter) which will
@@ -5597,10 +5609,12 @@ $wgRC2UDPOmitBots = false;
  *   * 'omit_user' -- whether edits by registered users should be in the feed
  *   * 'omit_minor' -- whether minor edits should be in the feed
  *   * 'omit_patrolled' -- whether patrolled edits should be in the feed
+ *
  *  The IRC-specific options are:
  *   * 'add_interwiki_prefix' -- whether the titles should be prefixed with
  *     the first entry in the $wgLocalInterwikis array (or the value of
  *     $wgLocalInterwiki, if set)
+ *
  *  The JSON-specific options are:
  *   * 'channel' -- if set, the 'channel' parameter is also set in JSON values.
  *
@@ -5632,13 +5646,6 @@ $wgRCEngines = array(
        'udp' => 'UDPRCFeedEngine',
 );
 
-/**
- * Enable user search in Special:Newpages
- * This is really a temporary hack around an index install bug on some Wikipedias.
- * Kill it once fixed.
- */
-$wgEnableNewpagesUserFilter = true;
-
 /**
  * Use RC Patrolling to check for vandalism
  */
@@ -6075,6 +6082,7 @@ $wgAutoloadAttemptLowercase = true;
  * $wgExtensionCredits[$type][] = array(
  *     'path' => __FILE__,
  *     'name' => 'Example extension',
+ *     'namemsg' => 'exampleextension-name',
  *     'author' => array(
  *         'Foo Barstein',
  *     ),
@@ -6094,15 +6102,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
@@ -7095,6 +7112,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 304c1bc..acf1bf6 100644 (file)
@@ -57,6 +57,9 @@ class GitInfo {
         */
        public function __construct( $repoDir, $usePrecomputed = true ) {
                $this->cacheFile = self::getCacheFilePath( $repoDir );
+               wfDebugLog( 'gitinfo',
+                       "Computed cacheFile={$this->cacheFile} for {$repoDir}"
+               );
                if ( $usePrecomputed &&
                        $this->cacheFile !== null &&
                        is_readable( $this->cacheFile )
@@ -65,9 +68,11 @@ class GitInfo {
                                file_get_contents( $this->cacheFile ),
                                true
                        );
+                       wfDebugLog( 'gitinfo', "Loaded git data from cache for {$repoDir}" );
                }
 
                if ( !$this->cacheIsComplete() ) {
+                       wfDebugLog( 'gitinfo', "Cache incomplete for {$repoDir}" );
                        $this->basedir = $repoDir . DIRECTORY_SEPARATOR . '.git';
                        if ( is_readable( $this->basedir ) && !is_dir( $this->basedir ) ) {
                                $GITfile = file_get_contents( $this->basedir );
@@ -90,24 +95,31 @@ class GitInfo {
         * Compute the path to the cache file for a given directory.
         *
         * @param string $repoDir The root directory of the repo where .git can be found
-        * @return string Path to GitInfo cache file in $wgCacheDirectory or null if
-        * $wgCacheDirectory is false (cache disabled).
+        * @return string Path to GitInfo cache file in $wgGitInfoCacheDirectory or
+        * null if $wgGitInfoCacheDirectory is false (cache disabled).
+        * @since 1.24
         */
        protected static function getCacheFilePath( $repoDir ) {
-               global $IP, $wgCacheDirectory;
-               if ( $wgCacheDirectory ) {
-                       // Transform path to git repo to something we can safely embed in a filename
-                       $repoName = $repoDir;
-                       if ( strpos( $repoName, $IP ) === 0 ) {
+               global $IP, $wgGitInfoCacheDirectory;
+
+               if ( $wgGitInfoCacheDirectory ) {
+                       // Convert both $IP and $repoDir to canonical paths to protect against
+                       // $IP having changed between the settings files and runtime.
+                       $realIP = realpath( $IP );
+                       $repoName = realpath( $repoDir );
+                       if ( $repoName === false ) {
+                               // Unit tests use fake path names
+                               $repoName = $repoDir;
+                       }
+                       if ( strpos( $repoName, $realIP ) === 0 ) {
                                // Strip $IP from path
-                               $repoName = substr( $repoName, strlen( $IP ) );
+                               $repoName = substr( $repoName, strlen( $realIP ) );
                        }
+                       // Transform path to git repo to something we can safely embed in
+                       // a filename
                        $repoName = strtr( $repoName, DIRECTORY_SEPARATOR, '-' );
                        $fileName = 'info' . $repoName . '.json';
-                       return implode(
-                               DIRECTORY_SEPARATOR,
-                               array( $wgCacheDirectory, 'gitinfo', $fileName )
-                       );
+                       return "{$wgGitInfoCacheDirectory}/{$fileName}";
                }
                return null;
        }
@@ -330,7 +342,9 @@ class GitInfo {
                        $this->getRemoteUrl();
 
                        if ( !$this->cacheIsComplete() ) {
-                               wfDebugLog( "Failed to compute GitInfo for \"{$this->basedir}\"" );
+                               wfDebugLog( 'gitinfo',
+                                       "Failed to compute GitInfo for \"{$this->basedir}\""
+                               );
                                return;
                        }
 
index c95c380..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() ) {
@@ -4221,5 +4205,5 @@ function wfIsTrustedProxy( $ip ) {
  * @since 1.23 Supports CIDR ranges in $wgSquidServersNoPurge
  */
 function wfIsConfiguredProxy( $ip ) {
-       return IP::isTrustedProxy( $ip );
+       return IP::isConfiguredProxy( $ip );
 }
index 89457e8..77486b2 100644 (file)
@@ -48,7 +48,7 @@ class Hooks {
         * Attach an event handler to a given hook.
         *
         * @param string $name Name of hook
-        * @param mixed $callback Callback function to attach
+        * @param callable $callback Callback function to attach
         *
         * @since 1.18
         */
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 447dde3..ad3228d 100644 (file)
@@ -268,7 +268,7 @@ class MWTimestamp {
                // first value.
                if ( $data[0] == 'System' ) {
                        // First value is System, so use the system offset.
-                       if ( isset( $wgLocalTZoffset ) ) {
+                       if ( $wgLocalTZoffset !== null ) {
                                $diff = $wgLocalTZoffset;
                        }
                } elseif ( $data[0] == 'Offset' ) {
index 3e327c3..7decbee 100644 (file)
@@ -96,6 +96,7 @@ class MagicWord {
 
        static public $mVariableIDsInitialised = false;
        static public $mVariableIDs = array(
+               '!',
                'currentmonth',
                'currentmonth1',
                'currentmonthname',
index 826d55b..950bcd5 100644 (file)
@@ -995,7 +995,7 @@ class Message {
         * @throws MWException If message key array is empty.
         */
        protected function fetchMessage() {
-               if ( !isset( $this->message ) ) {
+               if ( $this->message === null ) {
                        $cache = MessageCache::singleton();
                        if ( is_array( $this->key ) ) {
                                if ( !count( $this->key ) ) {
@@ -1054,7 +1054,7 @@ class RawMessage extends Message {
         */
        public function fetchMessage() {
                // Just in case the message is unset somewhere.
-               if ( !isset( $this->message ) ) {
+               if ( $this->message === null ) {
                        $this->message = $this->key;
                }
                return $this->message;
index f4d4697..59f850c 100644 (file)
@@ -485,14 +485,6 @@ class MimeMagic {
         * by looking at the file extension. Typically, this method would be called on the
         * result of guessMimeType().
         *
-        * Currently, this method does the following:
-        *
-        * If $mime is "unknown/unknown" and isRecognizableExtension( $ext ) returns false,
-        * return the result of guessTypesForExtension($ext).
-        *
-        * If $mime is "application/x-opc+zip" and isMatchingExtension( $ext, $mime )
-        * gives true, return the result of guessTypesForExtension($ext).
-        *
         * @param string $mime The mime type, typically guessed from a file's content.
         * @param string $ext The file extension, as taken from the file name
         *
@@ -518,6 +510,12 @@ class MimeMagic {
                                        ".$ext is not a known OPC extension.\n" );
                                $mime = 'application/zip';
                        }
+               } elseif ( $mime === 'text/plain' && $this->findMediaType( ".$ext" ) === MEDIATYPE_TEXT ) {
+                       // Textual types are sometimes not recognized properly.
+                       // If detected as text/plain, and has an extension which is textual
+                       // improve to the extension's type. For example, csv and json are often
+                       // misdetected as text/plain.
+                       $mime = $this->guessTypesForExtension( $ext );
                }
 
                if ( isset( $this->mMimeTypeAliases[$mime] ) ) {
@@ -994,7 +992,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 4edddbc..392f558 100644 (file)
@@ -88,16 +88,6 @@ class MWNamespace {
                return !self::isTalk( $index );
        }
 
-       /**
-        * @see self::isSubject
-        * @deprecated since 1.19 Please use the more consistently named isSubject
-        * @return bool
-        */
-       public static function isMain( $index ) {
-               wfDeprecated( __METHOD__, '1.19' );
-               return self::isSubject( $index );
-       }
-
        /**
         * Is the given namespace a talk namespace?
         *
index 8fd7812..8967938 100644 (file)
@@ -885,10 +885,7 @@ class OutputPage extends ContextSource {
         * @return string
         */
        public function getPageTitleActionText() {
-               if ( isset( $this->mPageTitleActionText ) ) {
-                       return $this->mPageTitleActionText;
-               }
-               return '';
+               return $this->mPageTitleActionText;
        }
 
        /**
@@ -1345,18 +1342,6 @@ class OutputPage extends ContextSource {
                );
        }
 
-       /**
-        * Return whether user JavaScript is allowed for this page
-        * @deprecated since 1.18 Load modules with ResourceLoader, and origin and
-        *     trustworthiness is identified and enforced automagically.
-        * @return bool
-        */
-       public function isUserJsAllowed() {
-               wfDeprecated( __METHOD__, '1.18' );
-               return $this->getAllowedModules( ResourceLoaderModule::TYPE_SCRIPTS ) >=
-                       ResourceLoaderModule::ORIGIN_USER_INDIVIDUAL;
-       }
-
        /**
         * Show what level of JavaScript / CSS untrustworthiness is allowed on this page
         * @see ResourceLoaderModule::$origin
@@ -1608,7 +1593,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
                );
@@ -1621,11 +1606,24 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Add a ParserOutput object, but without Html
+        * Add a ParserOutput object, but without Html.
         *
+        * @deprecated since 1.24, use addParserOutputMetadata() instead.
         * @param ParserOutput $parserOutput
         */
        public function addParserOutputNoText( &$parserOutput ) {
+               $this->addParserOutputMetadata( $parserOutput );
+       }
+
+       /**
+        * Add all metadata associated with a ParserOutput object, but without the actual HTML. This
+        * includes categories, language links, ResourceLoader modules, effects of certain magic words,
+        * and so on.
+        *
+        * @since 1.24
+        * @param ParserOutput $parserOutput
+        */
+       public function addParserOutputMetadata( &$parserOutput ) {
                $this->mLanguageLinks += $parserOutput->getLanguageLinks();
                $this->addCategoryLinks( $parserOutput->getCategories() );
                $this->mNewSectionLink = $parserOutput->getNewSection();
@@ -1673,21 +1671,50 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Add a ParserOutput object
+        * Add the HTML and enhancements for it (like ResourceLoader modules) associated with a
+        * ParserOutput object, without any other metadata.
+        *
+        * @since 1.24
+        * @param ParserOutput $parserOutput
+        */
+       public function addParserOutputContent( &$parserOutput ) {
+               $this->addParserOutputText( $parserOutput );
+
+               $this->addModules( $parserOutput->getModules() );
+               $this->addModuleScripts( $parserOutput->getModuleScripts() );
+               $this->addModuleStyles( $parserOutput->getModuleStyles() );
+               $this->addModuleMessages( $parserOutput->getModuleMessages() );
+
+               $this->addJsConfigVars( $parserOutput->getJsConfigVars() );
+       }
+
+       /**
+        * Add the HTML associated with a ParserOutput object, without any metadata.
+        *
+        * @since 1.24
+        * @param ParserOutput $parserOutput
+        */
+       public function addParserOutputText( &$parserOutput ) {
+               $text = $parserOutput->getText();
+               wfRunHooks( 'OutputPageBeforeHTML', array( &$this, &$text ) );
+               $this->addHTML( $text );
+       }
+
+       /**
+        * Add everything from a ParserOutput object.
         *
         * @param ParserOutput $parserOutput
         */
        function addParserOutput( &$parserOutput ) {
-               $this->addParserOutputNoText( $parserOutput );
+               $this->addParserOutputMetadata( $parserOutput );
                $parserOutput->setTOCEnabled( $this->mEnableTOC );
 
                // Touch section edit links only if not previously disabled
                if ( $parserOutput->getEditSectionTokens() ) {
                        $parserOutput->setEditSectionTokens( $this->mEnableSectionEditLinks );
                }
-               $text = $parserOutput->getText();
-               wfRunHooks( 'OutputPageBeforeHTML', array( &$this, &$text ) );
-               $this->addHTML( $text );
+
+               $this->addParserOutputText( $parserOutput );
        }
 
        /**
@@ -1726,7 +1753,7 @@ class OutputPage extends ContextSource {
                        $oldLang = $popts->setTargetLanguage( $language );
                }
 
-               $parserOutput = $wgParser->parse(
+               $parserOutput = $wgParser->getFreshParser()->parse(
                        $text, $this->getTitle(), $popts,
                        $linestart, true, $this->mRevisionId
                );
@@ -2027,19 +2054,6 @@ class OutputPage extends ContextSource {
                }
        }
 
-       /**
-        * Get the message associated with the HTTP response code $code
-        *
-        * @param int $code Status code
-        * @return string|null Message or null if $code is not in the list of messages
-        *
-        * @deprecated since 1.18 Use HttpStatus::getMessage() instead.
-        */
-       public static function getStatusMessage( $code ) {
-               wfDeprecated( __METHOD__, '1.18' );
-               return HttpStatus::getMessage( $code );
-       }
-
        /**
         * Finally, all the text has been munged and accumulated into
         * the object, let's actually output it:
@@ -3070,16 +3084,13 @@ $templates
        /**
         * Get an array containing the variables to be set in mw.config in JavaScript.
         *
-        * DO NOT CALL THIS FROM OUTSIDE OF THIS CLASS OR Skin::makeGlobalVariablesScript().
-        * This is only public until that function is removed. You have been warned.
-        *
         * Do not add things here which can be evaluated in ResourceLoaderStartUpModule
         * - in other words, page-independent/site-wide variables (without state).
         * You will only be adding bloat to the html page and causing page caches to
         * have to be purged on configuration changes.
         * @return array
         */
-       public function getJSVars() {
+       private function getJSVars() {
                global $wgContLang;
 
                $curRevisionId = 0;
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 081315e..f884ec3 100644 (file)
@@ -1463,27 +1463,6 @@ class Preferences {
                        return array( $result, 'mailerror' );
                }
        }
-
-       /**
-        * @deprecated since 1.19
-        * @param User $user
-        * @return array
-        */
-       public static function loadOldSearchNs( $user ) {
-               wfDeprecated( __METHOD__, '1.19' );
-
-               $searchableNamespaces = SearchEngine::searchableNamespaces();
-               // Back compat with old format
-               $arr = array();
-
-               foreach ( $searchableNamespaces as $ns => $name ) {
-                       if ( $user->getOption( 'searchNs' . $ns ) ) {
-                               $arr[] = $ns;
-                       }
-               }
-
-               return $arr;
-       }
 }
 
 /** Some tweaks to allow js prefs to work */
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 06f5bd0..de69827 100644 (file)
@@ -41,6 +41,11 @@ class Revision implements IDBAccessObject {
        protected $mParentId;
        protected $mComment;
        protected $mText;
+       protected $mTextId;
+
+       /**
+        * @var stdClass|null
+        */
        protected $mTextRow;
 
        /**
@@ -299,7 +304,7 @@ class Revision implements IDBAccessObject {
        private static function newFromConds( $conditions, $flags = 0 ) {
                $db = wfGetDB( ( $flags & self::READ_LATEST ) ? DB_MASTER : DB_SLAVE );
                $rev = self::loadFromConds( $db, $conditions, $flags );
-               if ( is_null( $rev ) && wfGetLB()->getServerCount() > 1 ) {
+               if ( $rev === null && wfGetLB()->getServerCount() > 1 ) {
                        if ( !( $flags & self::READ_LATEST ) ) {
                                $dbw = wfGetDB( DB_MASTER );
                                $rev = self::loadFromConds( $dbw, $conditions, $flags );
@@ -566,13 +571,13 @@ class Revision implements IDBAccessObject {
                                $this->mTitle = null;
                        }
 
-                       if ( !isset( $row->rev_content_model ) || is_null( $row->rev_content_model ) ) {
+                       if ( !isset( $row->rev_content_model ) ) {
                                $this->mContentModel = null; # determine on demand if needed
                        } else {
                                $this->mContentModel = strval( $row->rev_content_model );
                        }
 
-                       if ( !isset( $row->rev_content_format ) || is_null( $row->rev_content_format ) ) {
+                       if ( !isset( $row->rev_content_format ) ) {
                                $this->mContentFormat = null; # determine on demand if needed
                        } else {
                                $this->mContentFormat = strval( $row->rev_content_format );
@@ -652,7 +657,7 @@ class Revision implements IDBAccessObject {
                                $this->mContentHandler = null;
 
                                $this->mText = $handler->serializeContent( $row['content'], $this->getContentFormat() );
-                       } elseif ( !is_null( $this->mText ) ) {
+                       } elseif ( $this->mText !== null ) {
                                $handler = $this->getContentHandler();
                                $this->mContent = $handler->unserializeContent( $this->mText );
                        }
@@ -674,7 +679,7 @@ class Revision implements IDBAccessObject {
 
                        // If we still have no length, see it we have the text to figure it out
                        if ( !$this->mSize ) {
-                               if ( !is_null( $this->mContent ) ) {
+                               if ( $this->mContent !== null ) {
                                        $this->mSize = $this->mContent->getSize();
                                } else {
                                        #NOTE: this should never happen if we have either text or content object!
@@ -684,7 +689,7 @@ class Revision implements IDBAccessObject {
 
                        // Same for sha1
                        if ( $this->mSha1 === null ) {
-                               $this->mSha1 = is_null( $this->mText ) ? null : self::base36Sha1( $this->mText );
+                               $this->mSha1 = $this->mText === null ? null : self::base36Sha1( $this->mText );
                        }
 
                        // force lazy init
@@ -759,11 +764,11 @@ class Revision implements IDBAccessObject {
         * @return Title|null
         */
        public function getTitle() {
-               if ( isset( $this->mTitle ) ) {
+               if ( $this->mTitle !== null ) {
                        return $this->mTitle;
                }
                //rev_id is defined as NOT NULL, but this revision may not yet have been inserted.
-               if ( !is_null( $this->mId ) ) {
+               if ( $this->mId !== null ) {
                        $dbr = wfGetDB( DB_SLAVE );
                        $row = $dbr->selectRow(
                                array( 'page', 'revision' ),
@@ -776,7 +781,7 @@ class Revision implements IDBAccessObject {
                        }
                }
 
-               if ( !$this->mTitle && !is_null( $this->mPage ) && $this->mPage > 0 ) {
+               if ( !$this->mTitle && $this->mPage !== null && $this->mPage > 0 ) {
                        $this->mTitle = Title::newFromID( $this->mPage );
                }
 
@@ -1031,7 +1036,7 @@ class Revision implements IDBAccessObject {
         * @return string
         */
        public function getSerializedData() {
-               if ( is_null( $this->mText ) ) {
+               if ( $this->mText === null ) {
                        $this->mText = $this->loadText();
                }
 
@@ -1048,9 +1053,9 @@ class Revision implements IDBAccessObject {
         * @return Content|null The Revision's content, or null on failure.
         */
        protected function getContentInternal() {
-               if ( is_null( $this->mContent ) ) {
+               if ( $this->mContent === null ) {
                        // Revision is immutable. Load on demand:
-                       if ( is_null( $this->mText ) ) {
+                       if ( $this->mText === null ) {
                                $this->mText = $this->loadText();
                        }
 
@@ -1184,7 +1189,7 @@ class Revision implements IDBAccessObject {
         * @return int
         */
        private function getPreviousRevisionId( $db ) {
-               if ( is_null( $this->mPage ) ) {
+               if ( $this->mPage === null ) {
                        return 0;
                }
                # Use page_latest if ID is not given
@@ -1355,7 +1360,7 @@ class Revision implements IDBAccessObject {
                }
 
                # Record the text (or external storage URL) to the text table
-               if ( !isset( $this->mTextId ) ) {
+               if ( $this->mTextId === null ) {
                        $old_id = $dbw->nextSequenceValue( 'text_old_id_seq' );
                        $dbw->insert( 'text',
                                array(
@@ -1372,7 +1377,7 @@ class Revision implements IDBAccessObject {
                }
 
                # Record the edit in revisions
-               $rev_id = isset( $this->mId )
+               $rev_id = $this->mId !== null
                        ? $this->mId
                        : $dbw->nextSequenceValue( 'revision_rev_id_seq' );
                $row = array(
@@ -1386,10 +1391,10 @@ class Revision implements IDBAccessObject {
                        'rev_timestamp'  => $dbw->timestamp( $this->mTimestamp ),
                        'rev_deleted'    => $this->mDeleted,
                        'rev_len'        => $this->mSize,
-                       'rev_parent_id'  => is_null( $this->mParentId )
+                       'rev_parent_id'  => $this->mParentId === null
                                ? $this->getPreviousRevisionId( $dbw )
                                : $this->mParentId,
-                       'rev_sha1'       => is_null( $this->mSha1 )
+                       'rev_sha1'       => $this->mSha1 === null
                                ? Revision::base36Sha1( $this->mText )
                                : $this->mSha1,
                );
@@ -1419,7 +1424,7 @@ class Revision implements IDBAccessObject {
 
                $dbw->insert( 'revision', $row, __METHOD__ );
 
-               $this->mId = !is_null( $rev_id ) ? $rev_id : $dbw->insertId();
+               $this->mId = $rev_id !== null ? $rev_id : $dbw->insertId();
 
                wfRunHooks( 'RevisionInsertComplete', array( &$this, $data, $flags ) );
 
@@ -1508,7 +1513,7 @@ class Revision implements IDBAccessObject {
                }
 
                // If we kept data for lazy extraction, use it now...
-               if ( isset( $this->mTextRow ) ) {
+               if ( $this->mTextRow !== null ) {
                        $row = $this->mTextRow;
                        $this->mTextRow = null;
                } else {
index 6a568c2..ec17a08 100644 (file)
@@ -383,7 +383,7 @@ class Sanitizer {
                                'h2', 'h3', 'h4', 'h5', 'h6', 'cite', 'code', 'em', 's',
                                'strike', 'strong', 'tt', 'var', 'div', 'center',
                                'blockquote', 'ol', 'ul', 'dl', 'table', 'caption', 'pre',
-                               'ruby', 'rt', 'rb', 'rp', 'p', 'span', 'abbr', 'dfn',
+                               'ruby', 'rb', 'rp', 'rt', 'rtc', 'p', 'span', 'abbr', 'dfn',
                                'kbd', 'samp', 'data', 'time', 'mark'
                        );
                        $htmlsingle = array(
@@ -1685,10 +1685,10 @@ class Sanitizer {
                        # http://www.whatwg.org/html/text-level-semantics.html#the-ruby-element
                        'ruby'       => $common,
                        # rbc
-                       # rtc
                        'rb'         => $common,
-                       'rt'         => $common, #array_merge( $common, array( 'rbspan' ) ),
                        'rp'         => $common,
+                       'rt'         => $common, #array_merge( $common, array( 'rbspan' ) ),
+                       'rtc'         => $common,
 
                        # MathML root element, where used for extensions
                        # 'title' may not be 100% valid here; it's XHTML
index 51368b1..78655a4 100644 (file)
@@ -78,6 +78,14 @@ if ( $wgExtensionAssetsPath === false ) {
        $wgExtensionAssetsPath = "$wgScriptPath/extensions";
 }
 
+// Enable default skins. Temporary, to be removed before 1.24 release.
+// This is hacky and bad, the require_once calls should eventually be generated by the installer
+// and placed in LocalSettings.php.
+// While this is in Setup.php, it needs to be done as soon as possible, as some of the setup code
+// depends on all extensions and skins being already required (bug 67318).
+require_once "$wgStyleDirectory/MonoBook/MonoBook.php";
+require_once "$wgStyleDirectory/Vector/Vector.php";
+
 if ( $wgLogo === false ) {
        $wgLogo = "$wgStylePath/common/images/wiki.png";
 }
@@ -98,6 +106,10 @@ if ( $wgDeletedDirectory === false ) {
        $wgDeletedDirectory = "{$wgUploadDirectory}/deleted";
 }
 
+if ( $wgGitInfoCacheDirectory === false && $wgCacheDirectory !== false ) {
+       $wgGitInfoCacheDirectory = "{$wgCacheDirectory}/gitinfo";
+}
+
 if ( isset( $wgFileStore['deleted']['directory'] ) ) {
        $wgDeletedDirectory = $wgFileStore['deleted']['directory'];
 }
@@ -106,7 +118,7 @@ if ( isset( $wgFooterIcons['copyright'] )
        && isset( $wgFooterIcons['copyright']['copyright'] )
        && $wgFooterIcons['copyright']['copyright'] === array()
 ) {
-       if ( isset( $wgCopyrightIcon ) && $wgCopyrightIcon ) {
+       if ( $wgCopyrightIcon ) {
                $wgFooterIcons['copyright']['copyright'] = $wgCopyrightIcon;
        } elseif ( $wgRightsIcon || $wgRightsText ) {
                $wgFooterIcons['copyright']['copyright'] = array(
@@ -388,6 +400,11 @@ if ( $wgNewUserLog ) {
        $wgLogActionsHandlers['newusers/autocreate'] = 'NewUsersLogFormatter';
 }
 
+if ( $wgPageLanguageUseDB ) {
+       $wgLogTypes[] = 'pagelang';
+       $wgLogActionsHandlers['pagelang/pagelang'] = 'PageLangLogFormatter';
+}
+
 if ( $wgCookieSecure === 'detect' ) {
        $wgCookieSecure = ( WebRequest::detectProtocol() === 'https' );
 }
@@ -568,26 +585,33 @@ if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode &&
 wfProfileOut( $fname . '-session' );
 wfProfileIn( $fname . '-globals' );
 
+/**
+ * @var Language $wgContLang
+ */
 $wgContLang = Language::factory( $wgLanguageCode );
 $wgContLang->initEncoding();
 $wgContLang->initContLang();
 
 // Now that variant lists may be available...
 $wgRequest->interpolateTitle();
+
+/**
+ * @var User $wgUser
+ */
 $wgUser = RequestContext::getMain()->getUser(); // BackCompat
 
 /**
- * @var $wgLang Language
+ * @var Language $wgLang
  */
 $wgLang = new StubUserLang;
 
 /**
- * @var OutputPage
+ * @var OutputPage $wgOut
  */
 $wgOut = RequestContext::getMain()->getOutput(); // BackCompat
 
 /**
- * @var $wgParser Parser
+ * @var Parser $wgParser
  */
 $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array( $wgParserConf ) );
 
@@ -596,18 +620,13 @@ if ( !is_object( $wgAuth ) ) {
        wfRunHooks( 'AuthPluginSetup', array( &$wgAuth ) );
 }
 
-# Placeholders in case of DB error
+/**
+ * @var Title $wgTitle
+ */
 $wgTitle = null;
 
 $wgDeferredUpdateList = array();
 
-// Enable default skins.
-// This is hacky and bad, but it will go away before 1.24 release (or so I hope).
-// These lines should eventually be placed in skins' meta definition files, and loaded by a
-// require_once for each skin file generated by the installer and placed in LocalSettings.php.
-$wgValidSkinNames['monobook'] = 'MonoBook';
-$wgValidSkinNames['vector'] = 'Vector';
-
 wfProfileOut( $fname . '-globals' );
 wfProfileIn( $fname . '-extensions' );
 
index b99840f..b877544 100644 (file)
@@ -191,7 +191,7 @@ class SiteConfiguration {
         * @param array $params Array of parameters.
         * @return mixed The value of the setting requested.
         */
-       protected function getSetting( $settingName, $wiki, /*array*/ $params ) {
+       protected function getSetting( $settingName, $wiki, array $params ) {
                $retval = null;
                if ( array_key_exists( $settingName, $this->settings ) ) {
                        $thisSetting =& $this->settings[$settingName];
@@ -207,14 +207,14 @@ class SiteConfiguration {
                                // Do tag settings
                                foreach ( $params['tags'] as $tag ) {
                                        if ( array_key_exists( $tag, $thisSetting ) ) {
-                                               if ( isset( $retval ) && is_array( $retval ) && is_array( $thisSetting[$tag] ) ) {
+                                               if ( is_array( $retval ) && is_array( $thisSetting[$tag] ) ) {
                                                        $retval = self::arrayMerge( $retval, $thisSetting[$tag] );
                                                } else {
                                                        $retval = $thisSetting[$tag];
                                                }
                                                break 2;
                                        } elseif ( array_key_exists( "+$tag", $thisSetting ) && is_array( $thisSetting["+$tag"] ) ) {
-                                               if ( !isset( $retval ) ) {
+                                               if ( $retval === null ) {
                                                        $retval = array();
                                                }
                                                $retval = self::arrayMerge( $retval, $thisSetting["+$tag"] );
@@ -224,7 +224,7 @@ class SiteConfiguration {
                                $suffix = $params['suffix'];
                                if ( !is_null( $suffix ) ) {
                                        if ( array_key_exists( $suffix, $thisSetting ) ) {
-                                               if ( isset( $retval ) && is_array( $retval ) && is_array( $thisSetting[$suffix] ) ) {
+                                               if ( is_array( $retval ) && is_array( $thisSetting[$suffix] ) ) {
                                                        $retval = self::arrayMerge( $retval, $thisSetting[$suffix] );
                                                } else {
                                                        $retval = $thisSetting[$suffix];
@@ -233,7 +233,7 @@ class SiteConfiguration {
                                        } elseif ( array_key_exists( "+$suffix", $thisSetting )
                                                && is_array( $thisSetting["+$suffix"] )
                                        ) {
-                                               if ( !isset( $retval ) ) {
+                                               if ( $retval === null ) {
                                                        $retval = array();
                                                }
                                                $retval = self::arrayMerge( $retval, $thisSetting["+$suffix"] );
@@ -450,7 +450,7 @@ class SiteConfiguration {
         * @param array $wikiTags The tags assigned to the wiki.
         * @return array
         */
-       protected function mergeParams( $wiki, $suffix, /*array*/ $params, /*array*/ $wikiTags ) {
+       protected function mergeParams( $wiki, $suffix, array $params, array $wikiTags ) {
                $ret = $this->getWikiParams( $wiki );
 
                if ( is_null( $ret['suffix'] ) ) {
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 0d165fe..bc30eff 100644 (file)
@@ -36,6 +36,12 @@ abstract class Skin extends ContextSource {
        protected $mRelevantTitle = null;
        protected $mRelevantUser = null;
 
+       /**
+        * @var string Stylesheets set to use. Subdirectory in skins/ where various stylesheets are
+        *   located. Only needs to be set if you intend to use the getSkinStylePath() method.
+        */
+       public $stylename = null;
+
        /**
         * Fetch the set of available skins.
         * @return array Associative array of strings
@@ -104,7 +110,6 @@ abstract class Skin extends ContextSource {
        static function getSkinNameMessages() {
                $messages = array();
                foreach ( self::getSkinNames() as $skinKey => $skinName ) {
-                       // Messages: skinname-vector, skinname-monobook
                        $messages[] = "skinname-$skinKey";
                }
                return $messages;
@@ -416,21 +421,6 @@ abstract class Skin extends ContextSource {
                }
        }
 
-       /**
-        * Make a "<script>" tag containing global variables
-        *
-        * @deprecated since 1.19
-        * @param mixed $unused
-        * @return string HTML fragment
-        */
-       public static function makeGlobalVariablesScript( $unused ) {
-               global $wgOut;
-
-               wfDeprecated( __METHOD__, '1.19' );
-
-               return self::makeVariablesScript( $wgOut->getJSVars() );
-       }
-
        /**
         * Get the query to generate a dynamic stylesheet
         *
@@ -870,7 +860,7 @@ abstract class Skin extends ContextSource {
 
                $out = '';
 
-               if ( isset( $wgCopyrightIcon ) && $wgCopyrightIcon ) {
+               if ( $wgCopyrightIcon ) {
                        $out = $wgCopyrightIcon;
                } elseif ( $wgRightsIcon ) {
                        $icon = htmlspecialchars( $wgRightsIcon );
@@ -1092,11 +1082,20 @@ abstract class Skin extends ContextSource {
         * Return a fully resolved style path url to images or styles stored in the current skins's folder.
         * This method returns a url resolved using the configured skin style path
         * and includes the style version inside of the url.
+        *
+        * Requires $stylename to be set, otherwise throws MWException.
+        *
         * @param string $name The name or path of a skin resource file
         * @return string The fully resolved style path url including styleversion
         */
        function getSkinStylePath( $name ) {
                global $wgStylePath, $wgStyleVersion;
+
+               if ( $this->stylename === null ) {
+                       $class = get_class( $this );
+                       throw new MWException( "$class::\$stylename must be set to use getSkinStylePath()" );
+               }
+
                return "$wgStylePath/{$this->stylename}/$name?$wgStyleVersion";
        }
 
index 86bd979..97c0ec4 100644 (file)
@@ -74,12 +74,6 @@ class SkinTemplate extends Skin {
         */
        public $skinname = 'monobook';
 
-       /**
-        * @var string Stylesheets set to use. Subdirectory in skins/ where various
-        *   stylesheets are located.  Child classes should override the default.
-        */
-       public $stylename = 'monobook';
-
        /**
         * @var string For QuickTemplate, the name of the subclass which will
         *   actually fill the template.  Child classes should override the default.
@@ -118,7 +112,6 @@ class SkinTemplate extends Skin {
         * Generates array of language links for the current page
         *
         * @return array
-        * @public
         */
        public function getLanguages() {
                global $wgHideInterlanguageLinks;
@@ -140,8 +133,16 @@ class SkinTemplate extends Skin {
                                $ilLangName = Language::fetchLanguageName( $ilInterwikiCode );
 
                                if ( strval( $ilLangName ) === '' ) {
-                                       $ilLangName = $languageLinkText;
+                                       $ilDisplayTextMsg = wfMessage( "interlanguage-link-$ilInterwikiCode" );
+                                       if ( !$ilDisplayTextMsg->isDisabled() ) {
+                                               // Use custom MW message for the display text
+                                               $ilLangName = $ilDisplayTextMsg->text();
+                                       } else {
+                                               // Last resort: fallback to the language link target
+                                               $ilLangName = $languageLinkText;
+                                       }
                                } else {
+                                       // Use the language autonym as display text
                                        $ilLangName = $this->formatLanguageName( $ilLangName );
                                }
 
@@ -153,7 +154,29 @@ class SkinTemplate extends Skin {
                                );
 
                                $languageLinkTitleText = $languageLinkTitle->getText();
-                               if ( $languageLinkTitleText === '' ) {
+                               if ( $ilLangLocalName === '' ) {
+                                       $ilFriendlySiteName = wfMessage( "interlanguage-link-sitename-$ilInterwikiCode" );
+                                       if ( !$ilFriendlySiteName->isDisabled() ) {
+                                               if ( $languageLinkTitleText === '' ) {
+                                                       $ilTitle = wfMessage(
+                                                               'interlanguage-link-title-nonlangonly',
+                                                               $ilFriendlySiteName->text()
+                                                       )->text();
+                                               } else {
+                                                       $ilTitle = wfMessage(
+                                                               'interlanguage-link-title-nonlang',
+                                                               $languageLinkTitleText,
+                                                               $ilFriendlySiteName->text()
+                                                       )->text();
+                                               }
+                                       } else {
+                                               // we have nothing friendly to put in the title, so fall back to
+                                               // displaying the interlanguage link itself in the title text
+                                               // (similar to what is done in page content)
+                                               $ilTitle = $languageLinkTitle->getInterwiki() .
+                                                       ":$languageLinkTitleText";
+                                       }
+                               } elseif ( $languageLinkTitleText === '' ) {
                                        $ilTitle = wfMessage(
                                                'interlanguage-link-title-langonly',
                                                $ilLangLocalName
@@ -1074,7 +1097,7 @@ class SkinTemplate extends Skin {
                                        /**
                                         * The following actions use messages which, if made particular to
                                         * the any specific skins, would break the Ajax code which makes this
-                                        * action happen entirely inline. Skin::makeGlobalVariablesScript
+                                        * action happen entirely inline. OutputPage::getJSVars
                                         * defines a set of messages in a javascript object - and these
                                         * messages are assumed to be global for all skins. Without making
                                         * a change to that procedure these messages will have to remain as
index 6508bce..fb9b3e4 100644 (file)
@@ -83,9 +83,9 @@ class StubObject {
         * @param object $obj Object to check.
         * @return void
         */
-       static function unstub( $obj ) {
+       static function unstub( &$obj ) {
                if ( $obj instanceof StubObject ) {
-                       $obj->_unstub( 'unstub', 3 );
+                       $obj = $obj->_unstub( 'unstub', 3 );
                }
        }
 
@@ -134,6 +134,7 @@ class StubObject {
         * @param string $name Name of the method called in this object.
         * @param int $level Level to go in the stack trace to get the function
         *   who called this function.
+        * @return The unstubbed version of itself
         * @throws MWException
         */
        function _unstub( $name = '_unstub', $level = 2 ) {
@@ -157,6 +158,7 @@ class StubObject {
                        $GLOBALS[$this->global] = $this->_newObject();
                        --$recursionLevel;
                        wfProfileOut( $fname );
+                       return $GLOBALS[$this->global];
                }
        }
 }
index 9d8614d..3c5b80f 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;
@@ -1365,7 +1371,6 @@ class Title {
         *
         * @param string $name The text
         * @return string The prefixed text
-        * @private
         */
        private function prefix( $name ) {
                $p = '';
@@ -2563,7 +2568,7 @@ class Title {
                        return false;
                }
 
-               if ( !isset( $this->mTitleProtection ) ) {
+               if ( $this->mTitleProtection === null ) {
                        $dbr = wfGetDB( DB_SLAVE );
                        $res = $dbr->select(
                                'protected_titles',
@@ -2578,30 +2583,6 @@ class Title {
                return $this->mTitleProtection;
        }
 
-       /**
-        * Update the title protection status
-        *
-        * @deprecated since 1.19; use WikiPage::doUpdateRestrictions() instead.
-        * @param string $create_perm Permission required for creation
-        * @param string $reason Reason for protection
-        * @param string $expiry Expiry timestamp
-        * @return bool
-        */
-       public function updateTitleProtection( $create_perm, $reason, $expiry ) {
-               wfDeprecated( __METHOD__, '1.19' );
-
-               global $wgUser;
-
-               $limit = array( 'create' => $create_perm );
-               $expiry = array( 'create' => $expiry );
-
-               $page = WikiPage::factory( $this );
-               $cascade = false;
-               $status = $page->doUpdateRestrictions( $limit, $expiry, $cascade, $reason, $wgUser );
-
-               return $status->isOK();
-       }
-
        /**
         * Remove any title protection due to page existing
         */
@@ -2716,7 +2697,7 @@ class Title {
         * @since 1.23
         */
        public function areCascadeProtectionSourcesLoaded( $getPages = true ) {
-               return $getPages ? isset( $this->mCascadeSources ) : isset( $this->mHasCascadingRestrictions );
+               return $getPages ? $this->mCascadeSources !== null : $this->mHasCascadingRestrictions !== null;
        }
 
        /**
@@ -2736,9 +2717,9 @@ class Title {
                global $wgContLang;
                $pagerestrictions = array();
 
-               if ( isset( $this->mCascadeSources ) && $getPages ) {
+               if ( $this->mCascadeSources !== null && $getPages ) {
                        return array( $this->mCascadeSources, $this->mCascadingRestrictions );
-               } elseif ( isset( $this->mHasCascadingRestrictions ) && !$getPages ) {
+               } elseif ( $this->mHasCascadingRestrictions !== null && !$getPages ) {
                        return array( $this->mHasCascadingRestrictions, $pagerestrictions );
                }
 
@@ -3084,7 +3065,7 @@ class Title {
                # alone to cache the result.  There's no point in having it hanging
                # around uninitialized in every Title object; therefore we only add it
                # if needed and don't declare it statically.
-               if ( !isset( $this->mHasSubpages ) ) {
+               if ( $this->mHasSubpages === null ) {
                        $this->mHasSubpages = false;
                        $subpages = $this->getSubpages( 1 );
                        if ( $subpages instanceof TitleArray ) {
@@ -3320,6 +3301,7 @@ class Title {
                $this->mContentModel = false;
                $this->mEstimateRevisions = null;
                $this->mPageLanguage = false;
+               $this->mDbPageLanguage = null;
        }
 
        /**
@@ -4772,7 +4754,9 @@ class Title {
         * @return string Last-touched timestamp
         */
        public function getTouched( $db = null ) {
-               $db = isset( $db ) ? $db : wfGetDB( DB_SLAVE );
+               if ( $db === null ) {
+                       $db = wfGetDB( DB_SLAVE );
+               }
                $touched = $db->selectField( 'page', 'page_touched', $this->pageCond(), __METHOD__ );
                return $touched;
        }
@@ -4977,6 +4961,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 +4980,7 @@ class Title {
                } else {
                        $langObj = wfGetLangObj( $this->mPageLanguage[0] );
                }
+
                wfProfileOut( __METHOD__ );
                return $langObj;
        }
index f2d3d9b..5a117bd 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 ) );
@@ -2941,7 +2946,7 @@ class User {
                        return null;
                }
 
-               if ( !isset( $this->mEditCount ) ) {
+               if ( $this->mEditCount === null ) {
                        /* Populate the count, if it has not been populated yet */
                        wfProfileIn( __METHOD__ );
                        $dbr = wfGetDB( DB_SLAVE );
@@ -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 );
                                        }
                                );
                        }
index a703b64..ce9fecd 100644 (file)
@@ -754,17 +754,6 @@ class WebRequest {
                return $this->appendQueryArray( wfCgiToArray( $query ) );
        }
 
-       /**
-        * HTML-safe version of appendQuery().
-        * @deprecated: Deprecated in 1.20, warnings in 1.21, remove in 1.22.
-        *
-        * @param string $query Query string fragment; do not include initial '?'
-        * @return string
-        */
-       public function escapeAppendQuery( $query ) {
-               return htmlspecialchars( $this->appendQuery( $query ) );
-       }
-
        /**
         * @param string $key
         * @param string $value
index 09f01c0..71454f0 100644 (file)
  * @file
  */
 
-# Protect against register_globals
+# Die if register_globals is enabled (PHP <=5.3)
 # This must be done before any globals are set by the code
 if ( ini_get( 'register_globals' ) ) {
-       if ( isset( $_REQUEST['GLOBALS'] ) || isset( $_FILES['GLOBALS'] ) ) {
-               die( '<a href="http://www.hardened-php.net/globals-problem">'
-                       . '$GLOBALS overwrite vulnerability</a>' );
-       }
-
-       $verboten = array(
-               'GLOBALS',
-               '_SERVER',
-               'HTTP_SERVER_VARS',
-               '_GET',
-               'HTTP_GET_VARS',
-               '_POST',
-               'HTTP_POST_VARS',
-               '_COOKIE',
-               'HTTP_COOKIE_VARS',
-               '_FILES',
-               'HTTP_POST_FILES',
-               '_ENV',
-               'HTTP_ENV_VARS',
-               '_REQUEST',
-               '_SESSION',
-               'HTTP_SESSION_VARS'
-       );
-
-       foreach ( $_REQUEST as $name => $value ) {
-               if ( in_array( $name, $verboten ) ) {
-                       header( "HTTP/1.1 500 Internal Server Error" );
-                       echo "register_globals security paranoia: trying to overwrite superglobals, aborting.";
-                       die( -1 );
-               }
-               unset( $GLOBALS[$name] );
-       }
+       die( 'MediaWiki does not support installations where register_globals is enabled. '
+               . 'Please see <a href="https://www.mediawiki.org/wiki/register_globals">mediawiki.org</a> '
+               . 'for help on how to disable it.' );
 }
 
 # bug 15461: Make IE8 turn off content sniffing. Everybody else should ignore this
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 cedbcf9..0000000
+++ /dev/null
@@ -1,3754 +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|null|bool $section Null/false, a section number (0, 1, 2, T1, T2, ...) or "new".
-        * @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( $section, $text, $sectionTitle = '',
-               $edittime = null
-       ) {
-               ContentHandler::deprecated( __METHOD__, '1.21' );
-
-               //NOTE: keep condition in sync with condition in replaceSectionContent!
-               if ( strval( $section ) == '' ) {
-                       // 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( $section, $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|null|bool $section Null/false, a section number (0, 1, 2, T1, T2, ...) or "new".
-        * @param Content $sectionContent New content of the section.
-        * @param string $sectionTitle New section's subject, only if $section is "new".
-        * @param string $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( $section, Content $sectionContent, $sectionTitle = '',
-               $edittime = null ) {
-               wfProfileIn( __METHOD__ );
-
-               $baseRevId = null;
-               if ( $edittime && $section !== 'new' ) {
-                       $dbw = wfGetDB( DB_MASTER );
-                       $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
-                       if ( $rev ) {
-                               $baseRevId = $rev->getId();
-                       }
-               }
-
-               wfProfileOut( __METHOD__ );
-               return $this->replaceSectionAtRev( $section, $sectionContent, $sectionTitle, $baseRevId );
-       }
-
-       /**
-        * @param string|null|bool $section Null/false, a section number (0, 1, 2, T1, T2, ...) or "new".
-        * @param Content $sectionContent New content of the section.
-        * @param string $sectionTitle New section's subject, only if $section is "new".
-        * @param string $baseRevId integer|null
-        *
-        * @throws MWException
-        * @return Content New complete article content, or null if error.
-        *
-        * @since 1.24
-        */
-       public function replaceSectionAtRev( $section, Content $sectionContent,
-               $sectionTitle = '', $baseRevId = null
-       ) {
-               wfProfileIn( __METHOD__ );
-
-               if ( strval( $section ) == '' ) {
-                       // Whole-page edit; let the whole text through
-                       $newContent = $sectionContent;
-               } 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 ) || $section == '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: $section)\n" );
-                                       wfProfileOut( __METHOD__ );
-                                       return null;
-                               }
-
-                               $oldContent = $rev->getContent();
-                       }
-
-                       if ( ! $oldContent ) {
-                               wfDebug( __METHOD__ . ": no page text\n" );
-                               wfProfileOut( __METHOD__ );
-                               return null;
-                       }
-
-                       $newContent = $oldContent->replaceSection( $section, $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 8fb104d..d4b08b2 100644 (file)
@@ -222,17 +222,6 @@ abstract class Action {
                return $this->getContext()->getLanguage();
        }
 
-       /**
-        * Shortcut to get the user Language being used for this instance
-        *
-        * @deprecated since 1.19 Use getLanguage instead
-        * @return Language
-        */
-       final public function getLang() {
-               wfDeprecated( __METHOD__, '1.19' );
-               return $this->getLanguage();
-       }
-
        /**
         * Shortcut to get the Title object from the page
         * @return Title
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 f1e3c26..c946184 100644 (file)
@@ -782,7 +782,7 @@ class HistoryPager extends ReverseChronologicalPager {
         */
        function lastLink( $prevRev, $next ) {
                $last = $this->historyPage->message['last'];
-               # $next may either be a Row, null, or "unkown"
+               # $next may either be a Row, null, or "unknown"
                $nextRev = is_object( $next ) ? new Revision( $next ) : $next;
                if ( is_null( $next ) ) {
                        # Probably no next row
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 cdd139e..92428cf 100644 (file)
@@ -86,6 +86,7 @@ class RevertFileAction extends FormAction {
                $form->setWrapperLegendMsg( 'filerevert-legend' );
                $form->setSubmitTextMsg( 'filerevert-submit' );
                $form->addHiddenField( 'oldimage', $this->getRequest()->getText( 'oldimage' ) );
+               $form->setTokenSalt( array( 'revert', $this->getTitle()->getPrefixedDBkey() ) );
        }
 
        protected function getFormFields() {
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 eb3f87c..82d303f 100644 (file)
@@ -89,6 +89,7 @@ class ApiExpandTemplates extends ApiBase {
                // if they didn't want any output except (probably) the parse tree,
                // then don't bother actually fully expanding it
                if ( $prop || $params['prop'] === null ) {
+                       $wgParser->startExternalParse( $title_obj, $options, OT_PREPROCESS );
                        $frame = $wgParser->getPreprocessor()->newFrame();
                        $wikitext = $wgParser->preprocess( $params['text'], $title_obj, $options, null, $frame );
                        if ( $params['prop'] === null ) {
index b8e16ab..c932a74 100644 (file)
@@ -52,6 +52,8 @@ class ApiImageRotate extends ApiBase {
                $params = $this->extractRequestParams();
                $rotation = $params['rotation'];
 
+               $this->getResult()->beginContinuation( $params['continue'], array(), array() );
+
                $pageSet = $this->getPageSet();
                $pageSet->execute();
 
@@ -131,6 +133,7 @@ class ApiImageRotate extends ApiBase {
                $apiResult = $this->getResult();
                $apiResult->setIndexedTagName( $result, 'page' );
                $apiResult->addValue( null, $this->getModuleName(), $result );
+               $apiResult->endContinuation();
        }
 
        /**
@@ -185,6 +188,7 @@ class ApiImageRotate extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
                        ),
+                       'continue' => '',
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -199,6 +203,7 @@ class ApiImageRotate extends ApiBase {
                return $pageSet->getFinalParamDescription() + array(
                        'rotation' => 'Degrees to rotate image clockwise',
                        'token' => 'Edit token. You can get one of these through action=tokens',
+                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
index a276117..b906b59 100644 (file)
@@ -270,7 +270,7 @@ class ApiParse extends ApiBase {
                        );
                }
 
-               if ( isset( $prop['langlinks'] ) || isset( $prop['languageshtml'] ) ) {
+               if ( isset( $prop['langlinks'] ) ) {
                        $langlinks = $p_result->getLanguageLinks();
 
                        if ( $params['effectivelanglinks'] ) {
@@ -286,12 +286,6 @@ class ApiParse extends ApiBase {
                if ( isset( $prop['langlinks'] ) ) {
                        $result_array['langlinks'] = $this->formatLangLinks( $langlinks );
                }
-               if ( isset( $prop['languageshtml'] ) ) {
-                       $languagesHtml = $this->languagesHtml( $langlinks );
-
-                       $result_array['languageshtml'] = array();
-                       ApiResult::setContent( $result_array['languageshtml'], $languagesHtml );
-               }
                if ( isset( $prop['categories'] ) ) {
                        $result_array['categories'] = $this->formatCategoryLinks( $p_result->getCategories() );
                }
@@ -325,7 +319,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 +430,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__ );
 
@@ -562,46 +557,6 @@ class ApiParse extends ApiBase {
                return $context->getSkin()->getCategories();
        }
 
-       /**
-        * @deprecated since 1.18 No modern skin generates language links this way,
-        * please use language links data to generate your own HTML.
-        * @param array $languages
-        * @return string
-        */
-       private function languagesHtml( $languages ) {
-               wfDeprecated( __METHOD__, '1.18' );
-               $this->setWarning( '"action=parse&prop=languageshtml" is deprecated ' .
-                       'and will be removed in MediaWiki 1.24. Use "prop=langlinks" ' .
-                       'to generate your own HTML.' );
-
-               global $wgContLang;
-
-               if ( $this->getConfig()->get( 'HideInterlanguageLinks' ) || count( $languages ) == 0 ) {
-                       return '';
-               }
-
-               $s = htmlspecialchars( wfMessage( 'otherlanguages' )->text() .
-                       wfMessage( 'colon-separator' )->text() );
-
-               $langs = array();
-               foreach ( $languages as $l ) {
-                       $nt = Title::newFromText( $l );
-                       $text = Language::fetchLanguageName( $nt->getInterwiki() );
-
-                       $langs[] = Html::element( 'a',
-                               array( 'href' => $nt->getFullURL(), 'title' => $nt->getText(), 'class' => 'external' ),
-                               $text == '' ? $l : $text );
-               }
-
-               $s .= implode( wfMessage( 'pipe-separator' )->escaped(), $langs );
-
-               if ( $wgContLang->isRTL() ) {
-                       $s = Html::rawElement( 'span', array( 'dir' => 'LTR' ), $s );
-               }
-
-               return $s;
-       }
-
        private function formatLinks( $links ) {
                $result = array();
                foreach ( $links as $ns => $nslinks ) {
@@ -722,7 +677,6 @@ class ApiParse extends ApiBase {
                                ApiBase::PARAM_TYPE => array(
                                        'text',
                                        'langlinks',
-                                       'languageshtml',
                                        'categories',
                                        'categorieshtml',
                                        'links',
@@ -748,6 +702,7 @@ class ApiParse extends ApiBase {
                        'uselang' => null,
                        'section' => null,
                        'disablepp' => false,
+                       'disableeditsection' => false,
                        'generatexml' => false,
                        'preview' => false,
                        'sectionpreview' => false,
@@ -780,8 +735,6 @@ class ApiParse extends ApiBase {
                                ' langlinks      - Gives the language links in the parsed wikitext',
                                ' categories     - Gives the categories in the parsed wikitext',
                                ' categorieshtml - Gives the HTML version of the categories',
-                               ' languageshtml  - DEPRECATED. Will be removed in MediaWiki 1.24.',
-                               '                  Gives the HTML version of the language links',
                                ' links          - Gives the internal links in the parsed wikitext',
                                ' templates      - Gives the templates in the parsed wikitext',
                                ' images         - Gives the images in the parsed wikitext',
@@ -802,7 +755,7 @@ class ApiParse extends ApiBase {
                        ),
                        'effectivelanglinks' => array(
                                'Includes language links supplied by extensions',
-                               '(for use with prop=langlinks|languageshtml)',
+                               '(for use with prop=langlinks)',
                        ),
                        'pst' => array(
                                'Do a pre-save transform on the input before parsing it',
@@ -816,6 +769,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 981dc18..3399843 100644 (file)
@@ -38,6 +38,8 @@ class ApiPurge extends ApiBase {
        public function execute() {
                $params = $this->extractRequestParams();
 
+               $this->getResult()->beginContinuation( $params['continue'], array(), array() );
+
                $forceLinkUpdate = $params['forcelinkupdate'];
                $forceRecursiveLinkUpdate = $params['forcerecursivelinkupdate'];
                $pageSet = $this->getPageSet();
@@ -102,6 +104,8 @@ class ApiPurge extends ApiBase {
                if ( $values ) {
                        $apiResult->addValue( null, 'redirects', $values );
                }
+
+               $apiResult->endContinuation();
        }
 
        /**
@@ -128,7 +132,8 @@ class ApiPurge extends ApiBase {
        public function getAllowedParams( $flags = 0 ) {
                $result = array(
                        'forcelinkupdate' => false,
-                       'forcerecursivelinkupdate' => false
+                       'forcerecursivelinkupdate' => false,
+                       'continue' => '',
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -143,6 +148,7 @@ class ApiPurge extends ApiBase {
                                'forcelinkupdate' => 'Update the links tables',
                                'forcerecursivelinkupdate' => 'Update the links table, and update ' .
                                        'the links tables for any page that uses this page as a template',
+                               'continue' => 'When more results are available, use this to continue',
                        );
        }
 
index a2f4121..cd6a840 100644 (file)
@@ -118,8 +118,6 @@ class ApiQuery extends ApiBase {
        private $mParams;
        private $mNamedDB = array();
        private $mModuleMgr;
-       private $mGeneratorContinue;
-       private $mUseLegacyContinue;
 
        /**
         * @param ApiMain $main
@@ -245,23 +243,24 @@ class ApiQuery extends ApiBase {
        public function execute() {
                $this->mParams = $this->extractRequestParams();
 
-               // $pagesetParams is a array of parameter names used by the pageset generator
-               //   or null if pageset has already finished and is no longer needed
-               // $completeModules is a set of complete modules with the name as key
-               $this->initContinue( $pagesetParams, $completeModules );
-
                // Instantiate requested modules
                $allModules = array();
                $this->instantiateModules( $allModules, 'prop' );
-               $propModules = $allModules; // Keep a copy
+               $propModules = array_keys( $allModules );
                $this->instantiateModules( $allModules, 'list' );
                $this->instantiateModules( $allModules, 'meta' );
 
                // Filter modules based on continue parameter
-               $modules = $this->initModules( $allModules, $completeModules, $pagesetParams !== null );
+               list( $generatorDone, $modules ) = $this->getResult()->beginContinuation(
+                       $this->mParams['continue'], $allModules, $propModules
+               );
 
-               // Execute pageset if in legacy mode or if pageset is not done
-               if ( $completeModules === null || $pagesetParams !== null ) {
+               if ( !$generatorDone ) {
+                       // Query modules may optimize data requests through the $this->getPageSet()
+                       // object by adding extra fields from the page table.
+                       foreach ( $modules as $module ) {
+                               $module->requestExtraData( $this->mPageSet );
+                       }
                        // Populate page/revision information
                        $this->mPageSet->execute();
                        // Record page information (title, namespace, if exists, etc)
@@ -287,135 +286,10 @@ class ApiQuery extends ApiBase {
                // Set the cache mode
                $this->getMain()->setCacheMode( $cacheMode );
 
-               if ( $completeModules === null ) {
-                       return; // Legacy continue, we are done
-               }
-
-               // Reformat query-continue result section
-               $result = $this->getResult();
-               $qc = $result->getData();
-               if ( isset( $qc['query-continue'] ) ) {
-                       $qc = $qc['query-continue'];
-                       $result->unsetValue( null, 'query-continue' );
-               } elseif ( $this->mGeneratorContinue !== null ) {
-                       $qc = array();
-               } else {
-                       // no more "continue"s, we are done!
-                       return;
-               }
-
-               // we are done with all the modules that do not have result in query-continue
-               $completeModules = array_merge( $completeModules, array_diff_key( $modules, $qc ) );
-               if ( $pagesetParams !== null ) {
-                       // The pageset is still in use, check if all props have finished
-                       $incompleteProps = array_intersect_key( $propModules, $qc );
-                       if ( count( $incompleteProps ) > 0 ) {
-                               // Properties are not done, continue with the same pageset state - copy current parameters
-                               $main = $this->getMain();
-                               $contValues = array();
-                               foreach ( $pagesetParams as $param ) {
-                                       // The param name is already prefix-encoded
-                                       $contValues[$param] = $main->getVal( $param );
-                               }
-                       } elseif ( $this->mGeneratorContinue !== null ) {
-                               // Move to the next set of pages produced by pageset, properties need to be restarted
-                               $contValues = $this->mGeneratorContinue;
-                               $pagesetParams = array_keys( $contValues );
-                               $completeModules = array_diff_key( $completeModules, $propModules );
-                       } else {
-                               // Done with the pageset, finish up with the the lists and meta modules
-                               $pagesetParams = null;
-                       }
-               }
-
-               $continue = '||' . implode( '|', array_keys( $completeModules ) );
-               if ( $pagesetParams !== null ) {
-                       // list of all pageset parameters to use in the next request
-                       $continue = implode( '|', $pagesetParams ) . $continue;
-               } else {
-                       // we are done with the pageset
-                       $contValues = array();
-                       $continue = '-' . $continue;
-               }
-               $contValues['continue'] = $continue;
-               foreach ( $qc as $qcModule ) {
-                       foreach ( $qcModule as $qcKey => $qcValue ) {
-                               $contValues[$qcKey] = $qcValue;
-                       }
-               }
-               $this->getResult()->addValue( null, 'continue', $contValues );
-       }
-
-       /**
-        * Parse 'continue' parameter into the list of complete modules and a list of generator parameters
-        * @param array|null $pagesetParams Returns list of generator params or null if pageset is done
-        * @param array|null $completeModules Returns list of finished modules (as keys), or null if legacy
-        */
-       private function initContinue( &$pagesetParams, &$completeModules ) {
-               $pagesetParams = array();
-               $continue = $this->mParams['continue'];
-               if ( $continue !== null ) {
-                       $this->mUseLegacyContinue = false;
-                       if ( $continue !== '' ) {
-                               // Format: ' pagesetParam1 | pagesetParam2 || module1 | module2 | module3 | ...
-                               // If pageset is done, use '-'
-                               $continue = explode( '||', $continue );
-                               $this->dieContinueUsageIf( count( $continue ) !== 2 );
-                               if ( $continue[0] === '-' ) {
-                                       $pagesetParams = null; // No need to execute pageset
-                               } elseif ( $continue[0] !== '' ) {
-                                       // list of pageset params that might need to be repeated
-                                       $pagesetParams = explode( '|', $continue[0] );
-                               }
-                               $continue = $continue[1];
-                       }
-                       if ( $continue !== '' ) {
-                               $completeModules = array_flip( explode( '|', $continue ) );
-                       } else {
-                               $completeModules = array();
-                       }
-               } else {
-                       $this->mUseLegacyContinue = true;
-                       $completeModules = null;
-               }
-       }
-
-       /**
-        * Validate sub-modules, filter out completed ones, and do requestExtraData()
-        * @param array $allModules An dict of name=>instance of all modules requested by the client
-        * @param array|null $completeModules List of finished modules, or null if legacy continue
-        * @param bool $usePageset True if pageset will be executed
-        * @return array Array of modules to be processed during this execution
-        */
-       private function initModules( $allModules, $completeModules, $usePageset ) {
-               $modules = $allModules;
-               $tmp = $completeModules;
-               $wasPosted = $this->getRequest()->wasPosted();
-
-               /** @var $module ApiQueryBase */
-               foreach ( $allModules as $moduleName => $module ) {
-                       if ( !$wasPosted && $module->mustBePosted() ) {
-                               $this->dieUsageMsgOrDebug( array( 'mustbeposted', $moduleName ) );
-                       }
-                       if ( $completeModules !== null && array_key_exists( $moduleName, $completeModules ) ) {
-                               // If this module is done, mark all its params as used
-                               $module->extractRequestParams();
-                               // Make sure this module is not used during execution
-                               unset( $modules[$moduleName] );
-                               unset( $tmp[$moduleName] );
-                       } elseif ( $completeModules === null || $usePageset ) {
-                               // Query modules may optimize data requests through the $this->getPageSet()
-                               // object by adding extra fields from the page table.
-                               // This function will gather all the extra request fields from the modules.
-                               $module->requestExtraData( $this->mPageSet );
-                       } else {
-                               // Error - this prop module must have finished before generator is done
-                               $this->dieContinueUsageIf( $this->mModuleMgr->getModuleGroup( $moduleName ) === 'prop' );
-                       }
-               }
-               $this->dieContinueUsageIf( $completeModules !== null && count( $tmp ) !== 0 );
-
-               return $modules;
+               // Write the continuation data into the result
+               $this->getResult()->endContinuation(
+                       $this->mParams['continue'] === null ? 'raw' : 'standard'
+               );
        }
 
        /**
@@ -447,12 +321,16 @@ class ApiQuery extends ApiBase {
         * @param string $param Parameter name to read modules from
         */
        private function instantiateModules( &$modules, $param ) {
+               $wasPosted = $this->getRequest()->wasPosted();
                if ( isset( $this->mParams[$param] ) ) {
                        foreach ( $this->mParams[$param] as $moduleName ) {
                                $instance = $this->mModuleMgr->getModule( $moduleName, $param );
                                if ( $instance === null ) {
                                        ApiBase::dieDebug( __METHOD__, 'Error instantiating module' );
                                }
+                               if ( !$wasPosted && $instance->mustBePosted() ) {
+                                       $this->dieUsageMsgOrDebug( array( 'mustbeposted', $moduleName ) );
+                               }
                                // Ignore duplicates. TODO 2.0: die()?
                                if ( !array_key_exists( $moduleName, $modules ) ) {
                                        $modules[$moduleName] = $instance;
@@ -563,22 +441,16 @@ class ApiQuery extends ApiBase {
         * This method is called by the generator base when generator in the smart-continue
         * mode tries to set 'query-continue' value. ApiQuery stores those values separately
         * until the post-processing when it is known if the generation should continue or repeat.
+        * @deprecated @since 1.24
         * @param ApiQueryGeneratorBase $module Generator module
         * @param string $paramName
         * @param mixed $paramValue
         * @return bool True if processed, false if this is a legacy continue
         */
        public function setGeneratorContinue( $module, $paramName, $paramValue ) {
-               if ( $this->mUseLegacyContinue ) {
-                       return false;
-               }
-               $paramName = $module->encodeParamName( $paramName );
-               if ( $this->mGeneratorContinue === null ) {
-                       $this->mGeneratorContinue = array();
-               }
-               $this->mGeneratorContinue[$paramName] = $paramValue;
-
-               return true;
+               wfDeprecated( __METHOD__, '1.24' );
+               $this->getResult()->setGeneratorContinueParam( $module, $paramName, $paramValue );
+               return $this->getParameter( 'continue' ) !== null;
        }
 
        /**
index e32104f..d0980e6 100644 (file)
@@ -45,9 +45,15 @@ class ApiQueryAllUsers extends ApiQueryBase {
        }
 
        public function execute() {
-               $db = $this->getDB();
                $params = $this->extractRequestParams();
 
+               if ( $params['activeusers'] ) {
+                       // Update active user cache
+                       SpecialActiveUsers::mergeActiveUsers( 600 );
+               }
+
+               $db = $this->getDB();
+
                $prop = $params['prop'];
                if ( !is_null( $prop ) ) {
                        $prop = array_flip( $prop );
@@ -71,9 +77,9 @@ class ApiQueryAllUsers extends ApiQueryBase {
                $from = is_null( $params['from'] ) ? null : $this->getCanonicalUserName( $params['from'] );
                $to = is_null( $params['to'] ) ? null : $this->getCanonicalUserName( $params['to'] );
 
-               # MySQL doesn't seem to use 'equality propagation' here, so like the
-               # ActiveUsers special page, we have to use rc_user_text for some cases.
-               $userFieldToSort = $params['activeusers'] ? 'rc_user_text' : 'user_name';
+               # MySQL can't figure out that 'user_name' and 'qcc_title' are the same
+               # despite the JOIN condition, so manually sort on the correct one.
+               $userFieldToSort = $params['activeusers'] ? 'qcc_title' : 'user_name';
 
                $this->addWhereRange( $userFieldToSort, $dir, $from, $to );
 
@@ -155,19 +161,32 @@ class ApiQueryAllUsers extends ApiQueryBase {
                }
 
                if ( $params['activeusers'] ) {
-                       $this->addTables( 'recentchanges' );
-
-                       $this->addJoinConds( array( 'recentchanges' => array(
-                               'INNER JOIN', 'rc_user_text=user_name'
+                       $activeUserSeconds = $this->getConfig()->get( 'ActiveUserDays' ) * 86400;
+
+                       // Filter query to only include users in the active users cache
+                       $this->addTables( 'querycachetwo' );
+                       $this->addJoinConds( array( 'querycachetwo' => array(
+                               'INNER JOIN', array(
+                                       'qcc_type' => 'activeusers',
+                                       'qcc_namespace' => NS_USER,
+                                       'qcc_title=user_name',
+                               ),
                        ) ) );
 
-                       $this->addFields( array( 'recentedits' => 'COUNT(*)' ) );
-
-                       $this->addWhere( 'rc_log_type IS NULL OR rc_log_type != ' . $db->addQuotes( 'newusers' ) );
-                       $timestamp = $db->timestamp( wfTimestamp( TS_UNIX ) - $this->getConfig()->get( 'ActiveUserDays' ) * 24 * 3600 );
-                       $this->addWhere( 'rc_timestamp >= ' . $db->addQuotes( $timestamp ) );
-
-                       $this->addOption( 'GROUP BY', $userFieldToSort );
+                       // Actually count the actions using a subquery (bug 64505 and bug 64507)
+                       $timestamp = $db->timestamp( wfTimestamp( TS_UNIX ) - $activeUserSeconds );
+                       $this->addFields( array(
+                               'recentactions' => '(' . $db->selectSQLText(
+                                       'recentchanges',
+                                       'COUNT(*)',
+                                       array(
+                                               'rc_user_text = user_name',
+                                               'rc_type != ' . $db->addQuotes( RC_EXTERNAL ), // no wikidata
+                                               'rc_log_type IS NULL OR rc_log_type != ' . $db->addQuotes( 'newusers' ),
+                                               'rc_timestamp >= ' . $db->addQuotes( $timestamp ),
+                                       )
+                               ) . ')'
+                       ) );
                }
 
                $this->addOption( 'LIMIT', $sqlLimit );
@@ -203,8 +222,13 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        if ( $lastUser !== $row->user_name ) {
                                // Save the last pass's user data
                                if ( is_array( $lastUserData ) ) {
-                                       $fit = $result->addValue( array( 'query', $this->getModuleName() ),
-                                               null, $lastUserData );
+                                       if ( $params['activeusers'] && $lastUserData['recentactions'] === 0 ) {
+                                               // activeusers cache was out of date
+                                               $fit = true;
+                                       } else {
+                                               $fit = $result->addValue( array( 'query', $this->getModuleName() ),
+                                                       null, $lastUserData );
+                                       }
 
                                        $lastUserData = null;
 
@@ -241,7 +265,9 @@ class ApiQueryAllUsers extends ApiQueryBase {
                                        $lastUserData['editcount'] = intval( $row->user_editcount );
                                }
                                if ( $params['activeusers'] ) {
-                                       $lastUserData['recenteditcount'] = intval( $row->recentedits );
+                                       $lastUserData['recentactions'] = intval( $row->recentactions );
+                                       // @todo 'recenteditcount' is set for BC, remove in 1.25
+                                       $lastUserData['recenteditcount'] = $lastUserData['recentactions'];
                                }
                                if ( $fld_registration ) {
                                        $lastUserData['registration'] = $row->user_registration ?
@@ -302,7 +328,9 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        }
                }
 
-               if ( is_array( $lastUserData ) ) {
+               if ( is_array( $lastUserData ) &&
+                       !( $params['activeusers'] && $lastUserData['recentactions'] === 0 )
+               ) {
                        $fit = $result->addValue( array( 'query', $this->getModuleName() ),
                                null, $lastUserData );
                        if ( !$fit ) {
@@ -397,7 +425,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        '' => array(
                                'userid' => 'integer',
                                'name' => 'string',
-                               'recenteditcount' => array(
+                               'recentactions' => array(
                                        ApiBase::PROP_TYPE => 'integer',
                                        ApiBase::PROP_NULLABLE => true
                                )
index 8e014df..2fd8597 100644 (file)
@@ -398,15 +398,10 @@ abstract class ApiQueryBase extends ApiBase {
        /**
         * Set a query-continue value
         * @param string $paramName Parameter name
-        * @param string $paramValue Parameter value
+        * @param string|array $paramValue Parameter value
         */
        protected function setContinueEnumParameter( $paramName, $paramValue ) {
-               $paramName = $this->encodeParamName( $paramName );
-               $msg = array( $paramName => $paramValue );
-               $result = $this->getResult();
-               $result->disableSizeCheck();
-               $result->addValue( 'query-continue', $this->getModuleName(), $msg, ApiResult::ADD_ON_TOP );
-               $result->enableSizeCheck();
+               $this->getResult()->setContinueParam( $this, $paramName, $paramValue );
        }
 
        /**
@@ -667,16 +662,14 @@ abstract class ApiQueryGeneratorBase extends ApiQueryBase {
        }
 
        /**
-        * Overrides base in case of generator & smart continue to
-        * notify ApiQueryMain instead of adding them to the result right away.
+        * Overridden to set the generator param if in generator mode
         * @param string $paramName Parameter name
-        * @param string $paramValue Parameter value
+        * @param string|array $paramValue Parameter value
         */
        protected function setContinueEnumParameter( $paramName, $paramValue ) {
-               // If this is a generator and query->setGeneratorContinue() returns false, treat as before
-               if ( $this->mGeneratorPageSet === null
-                       || !$this->getQuery()->setGeneratorContinue( $this, $paramName, $paramValue )
-               ) {
+               if ( $this->mGeneratorPageSet !== null ) {
+                       $this->getResult()->setGeneratorContinueParam( $this, $paramName, $paramValue );
+               } else {
                        parent::setContinueEnumParameter( $paramName, $paramValue );
                }
        }
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 ca7cc21..aacf091 100644 (file)
@@ -384,6 +384,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $langNames = Language::fetchLanguageNames( $langCode );
 
                $getPrefixes = Interwiki::getAllPrefixes( $local );
+               $extraLangPrefixes = $this->getConfig()->get( 'ExtraInterlanguageLinkPrefixes' );
+               $localInterwikis = $this->getConfig()->get( 'LocalInterwikis' );
                $data = array();
 
                foreach ( $getPrefixes as $row ) {
@@ -396,12 +398,30 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        if ( $row['iw_trans'] == '1' ) {
                                $val['trans'] = '';
                        }
+
                        if ( isset( $langNames[$prefix] ) ) {
                                $val['language'] = $langNames[$prefix];
                        }
+                       if ( in_array( $prefix, $localInterwikis ) ) {
+                               $val['localinterwiki'] = '';
+                       }
+                       if ( in_array( $prefix, $extraLangPrefixes ) ) {
+                               $val['extralanglink'] = '';
+
+                               $linktext = wfMessage( "interlanguage-link-$prefix" );
+                               if ( !$linktext->isDisabled() ) {
+                                       $val['linktext'] = $linktext->text();
+                               }
+
+                               $sitename = wfMessage( "interlanguage-link-sitename-$prefix" );
+                               if ( !$sitename->isDisabled() ) {
+                                       $val['sitename'] = $sitename->text();
+                               }
+                       }
+
                        $val['url'] = wfExpandUrl( $row['iw_url'], PROTO_CURRENT );
                        if (substr( $row['iw_url'], 0, 2) == '//') {
-                               $val['protorel'] = true;
+                               $val['protorel'] = '';
                        }
                        if ( isset( $row['iw_wikiid'] ) ) {
                                $val['wikiid'] = $row['iw_wikiid'];
@@ -536,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'];
                                }
@@ -743,6 +766,15 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        public function getCacheMode( $params ) {
+               // Messages for $wgExtraInterlanguageLinkPrefixes depend on user language
+               if (
+                       count( $this->getConfig()->get( 'ExtraInterlanguageLinkPrefixes' ) ) &&
+                       !is_null( $params['prop'] ) &&
+                       in_array( 'interwikimap', $params['prop'] )
+               ) {
+                       return 'anon-public-user-private';
+               }
+
                return 'public';
        }
 
index 7d0a15a..b30d9dd 100644 (file)
@@ -60,6 +60,13 @@ class ApiResult extends ApiBase {
 
        private $mData, $mIsRawMode, $mSize, $mCheckingSize;
 
+       private $continueAllModules = array();
+       private $continueGeneratedModules = array();
+       private $continuationData = array();
+       private $generatorContinuationData = array();
+       private $generatorParams = array();
+       private $generatorDone = false;
+
        /**
         * @param ApiMain $main
         */
@@ -437,4 +444,181 @@ class ApiResult extends ApiBase {
        public function execute() {
                ApiBase::dieDebug( __METHOD__, 'execute() is not supported on Result object' );
        }
+
+       /**
+        * Parse a 'continue' parameter and return status information.
+        *
+        * This must be balanced by a call to endContinuation().
+        *
+        * @since 1.24
+        * @param string|null $continue The "continue" parameter, if any
+        * @param array $allModules Contains ApiBase instances that will be executed
+        * @param array $generatedModules Names of modules that depend on the generator
+        * @return array Two elements: a boolean indicating if the generator is done,
+        *   and an array of modules to actually execute.
+        */
+       public function beginContinuation(
+               $continue, array $allModules = array(), array $generatedModules = array()
+       ) {
+               $this->continueGeneratedModules = $generatedModules
+                       ? array_combine( $generatedModules, $generatedModules )
+                       : array();
+               $this->continuationData = array();
+               $this->generatorContinuationData = array();
+               $this->generatorParams = array();
+
+               $skip = array();
+               if ( is_string( $continue ) && $continue !== '' ) {
+                       $continue = explode( '||', $continue );
+                       $this->dieContinueUsageIf( count( $continue ) !== 2 );
+                       $this->generatorDone = ( $continue[0] === '-' );
+                       if ( !$this->generatorDone ) {
+                               $this->generatorParams = explode( '|', $continue[0] );
+                       }
+                       $skip = explode( '|', $continue[1] );
+               }
+
+               $this->continueAllModules = array();
+               $runModules = array();
+               foreach ( $allModules as $module ) {
+                       $name = $module->getModuleName();
+                       if ( in_array( $name, $skip ) ) {
+                               $this->continueAllModules[$name] = false;
+                               // Prevent spurious "unused parameter" warnings
+                               $module->extractRequestParams();
+                       } else {
+                               $this->continueAllModules[$name] = true;
+                               $runModules[] = $module;
+                       }
+               }
+
+               return array(
+                       $this->generatorDone,
+                       $runModules,
+               );
+       }
+
+       /**
+        * Set the continuation parameter for a module
+        *
+        * @since 1.24
+        * @param ApiBase $module
+        * @param string $paramName
+        * @param string|array $paramValue
+        */
+       public function setContinueParam( ApiBase $module, $paramName, $paramValue ) {
+               $name = $module->getModuleName();
+               if ( !isset( $this->continueAllModules[$name] ) ) {
+                       throw new MWException(
+                               "Module '$name' called ApiResult::setContinueParam but was not " .
+                               'passed to ApiResult::beginContinuation'
+                       );
+               }
+               if ( !$this->continueAllModules[$name] ) {
+                       throw new MWException(
+                               "Module '$name' was not supposed to have been executed, but " .
+                               'it was executed anyway'
+                       );
+               }
+               $paramName = $module->encodeParamName( $paramName );
+               if ( is_array( $paramValue ) ) {
+                       $paramValue = join( '|', $paramValue );
+               }
+               $this->continuationData[$name][$paramName] = $paramValue;
+       }
+
+       /**
+        * Set the continuation parameter for the generator module
+        *
+        * @since 1.24
+        * @param ApiBase $module
+        * @param string $paramName
+        * @param string|array $paramValue
+        */
+       public function setGeneratorContinueParam( ApiBase $module, $paramName, $paramValue ) {
+               $name = $module->getModuleName();
+               $paramName = $module->encodeParamName( $paramName );
+               if ( is_array( $paramValue ) ) {
+                       $paramValue = join( '|', $paramValue );
+               }
+               $this->generatorContinuationData[$name][$paramName] = $paramValue;
+       }
+
+       /**
+        * Close continuation, writing the data into the result
+        *
+        * @since 1.24
+        * @param string $style 'standard' for the new style since 1.21, 'raw' for
+        *   the style used in 1.20 and earlier.
+        */
+       public function endContinuation( $style = 'standard' ) {
+               if ( $style === 'raw' ) {
+                       $key = 'query-continue';
+                       $data = array_merge_recursive(
+                               $this->continuationData, $this->generatorContinuationData
+                       );
+               } else {
+                       $key = 'continue';
+                       $data = array();
+
+                       $finishedModules = array_diff(
+                               array_keys( $this->continueAllModules ),
+                               array_keys( $this->continuationData )
+                       );
+
+                       // First, grab the non-generator-using continuation data
+                       $continuationData = array_diff_key(
+                               $this->continuationData, $this->continueGeneratedModules
+                       );
+                       foreach ( $continuationData as $module => $kvp ) {
+                               $data += $kvp;
+                       }
+
+                       // Next, handle the generator-using continuation data
+                       $continuationData = array_intersect_key(
+                               $this->continuationData, $this->continueGeneratedModules
+                       );
+                       if ( $continuationData ) {
+                               // Some modules are unfinished: include those params, and copy
+                               // the generator params.
+                               foreach ( $continuationData as $module => $kvp ) {
+                                       $data += $kvp;
+                               }
+                               $data += array_intersect_key(
+                                       $this->getMain()->getRequest()->getValues(),
+                                       array_flip( $this->generatorParams )
+                               );
+                       } else if ( $this->generatorContinuationData ) {
+                               // All the generator-using modules are complete, but the
+                               // generator isn't. Continue the generator and restart the
+                               // generator-using modules
+                               $this->generatorParams = array();
+                               foreach ( $this->generatorContinuationData as $kvp ) {
+                                       $this->generatorParams = array_merge(
+                                               $this->generatorParams, array_keys( $kvp )
+                                       );
+                                       $data += $kvp;
+                               }
+                               $finishedModules = array_diff(
+                                       $finishedModules, $this->continueGeneratedModules
+                               );
+                       } else {
+                               // Generator and prop modules are all done. Mark it so.
+                               $this->generatorDone = true;
+                       }
+
+                       // Set 'continue' if any continuation data is set or if the generator
+                       // still needs to run
+                       if ( $data || !$this->generatorDone ) {
+                               $data['continue'] =
+                                       ( $this->generatorDone ? '-' : join( '|', $this->generatorParams ) ) .
+                                       '||' . join( '|', $finishedModules );
+                       }
+               }
+               if ( $data ) {
+                       $this->disableSizeCheck();
+                       $this->addValue( null, $key, $data, ApiResult::ADD_ON_TOP );
+                       $this->enableSizeCheck();
+               }
+       }
 }
index dc593e5..04be450 100644 (file)
@@ -46,6 +46,8 @@ class ApiSetNotificationTimestamp extends ApiBase {
                $params = $this->extractRequestParams();
                $this->requireMaxOneParameter( $params, 'timestamp', 'torevid', 'newerthanrevid' );
 
+               $this->getResult()->beginContinuation( $params['continue'], array(), array() );
+
                $pageSet = $this->getPageSet();
                if ( $params['entirewatchlist'] && $pageSet->getDataSource() !== null ) {
                        $this->dieUsage(
@@ -70,22 +72,26 @@ class ApiSetNotificationTimestamp extends ApiBase {
                                $this->dieUsage( 'torevid may only be used with a single page', 'multpages' );
                        }
                        $title = reset( $pageSet->getGoodTitles() );
-                       $timestamp = Revision::getTimestampFromId( $title, $params['torevid'] );
-                       if ( $timestamp ) {
-                               $timestamp = $dbw->timestamp( $timestamp );
-                       } else {
-                               $timestamp = null;
+                       if ( $title ) {
+                               $timestamp = Revision::getTimestampFromId( $title, $params['torevid'] );
+                               if ( $timestamp ) {
+                                       $timestamp = $dbw->timestamp( $timestamp );
+                               } else {
+                                       $timestamp = null;
+                               }
                        }
                } elseif ( isset( $params['newerthanrevid'] ) ) {
                        if ( $params['entirewatchlist'] || $pageSet->getGoodTitleCount() > 1 ) {
                                $this->dieUsage( 'newerthanrevid may only be used with a single page', 'multpages' );
                        }
                        $title = reset( $pageSet->getGoodTitles() );
-                       $revid = $title->getNextRevisionID( $params['newerthanrevid'] );
-                       if ( $revid ) {
-                               $timestamp = $dbw->timestamp( Revision::getTimestampFromId( $title, $revid ) );
-                       } else {
-                               $timestamp = null;
+                       if ( $title ) {
+                               $revid = $title->getNextRevisionID( $params['newerthanrevid'] );
+                               if ( $revid ) {
+                                       $timestamp = $dbw->timestamp( Revision::getTimestampFromId( $title, $revid ) );
+                               } else {
+                                       $timestamp = null;
+                               }
                        }
                }
 
@@ -124,51 +130,55 @@ class ApiSetNotificationTimestamp extends ApiBase {
                                $result[] = $rev;
                        }
 
-                       // Now process the valid titles
-                       $lb = new LinkBatch( $pageSet->getTitles() );
-                       $dbw->update( 'watchlist', array( 'wl_notificationtimestamp' => $timestamp ),
-                               array( 'wl_user' => $user->getID(), $lb->constructSet( 'wl', $dbw ) ),
-                               __METHOD__
-                       );
-
-                       // Query the results of our update
-                       $timestamps = array();
-                       $res = $dbw->select(
-                               'watchlist',
-                               array( 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ),
-                               array( 'wl_user' => $user->getID(), $lb->constructSet( 'wl', $dbw ) ),
-                               __METHOD__
-                       );
-                       foreach ( $res as $row ) {
-                               $timestamps[$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp;
-                       }
+                       if ( $pageSet->getTitles() ) {
+                               // Now process the valid titles
+                               $lb = new LinkBatch( $pageSet->getTitles() );
+                               $dbw->update( 'watchlist', array( 'wl_notificationtimestamp' => $timestamp ),
+                                       array( 'wl_user' => $user->getID(), $lb->constructSet( 'wl', $dbw ) ),
+                                       __METHOD__
+                               );
 
-                       // Now, put the valid titles into the result
-                       /** @var $title Title */
-                       foreach ( $pageSet->getTitles() as $title ) {
-                               $ns = $title->getNamespace();
-                               $dbkey = $title->getDBkey();
-                               $r = array(
-                                       'ns' => intval( $ns ),
-                                       'title' => $title->getPrefixedText(),
+                               // Query the results of our update
+                               $timestamps = array();
+                               $res = $dbw->select(
+                                       'watchlist',
+                                       array( 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ),
+                                       array( 'wl_user' => $user->getID(), $lb->constructSet( 'wl', $dbw ) ),
+                                       __METHOD__
                                );
-                               if ( !$title->exists() ) {
-                                       $r['missing'] = '';
+                               foreach ( $res as $row ) {
+                                       $timestamps[$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp;
                                }
-                               if ( isset( $timestamps[$ns] ) && array_key_exists( $dbkey, $timestamps[$ns] ) ) {
-                                       $r['notificationtimestamp'] = '';
-                                       if ( $timestamps[$ns][$dbkey] !== null ) {
-                                               $r['notificationtimestamp'] = wfTimestamp( TS_ISO_8601, $timestamps[$ns][$dbkey] );
+
+                               // Now, put the valid titles into the result
+                               /** @var $title Title */
+                               foreach ( $pageSet->getTitles() as $title ) {
+                                       $ns = $title->getNamespace();
+                                       $dbkey = $title->getDBkey();
+                                       $r = array(
+                                               'ns' => intval( $ns ),
+                                               'title' => $title->getPrefixedText(),
+                                       );
+                                       if ( !$title->exists() ) {
+                                               $r['missing'] = '';
                                        }
-                               } else {
-                                       $r['notwatched'] = '';
+                                       if ( isset( $timestamps[$ns] ) && array_key_exists( $dbkey, $timestamps[$ns] ) ) {
+                                               $r['notificationtimestamp'] = '';
+                                               if ( $timestamps[$ns][$dbkey] !== null ) {
+                                                       $r['notificationtimestamp'] = wfTimestamp( TS_ISO_8601, $timestamps[$ns][$dbkey] );
+                                               }
+                                       } else {
+                                               $r['notwatched'] = '';
+                                       }
+                                       $result[] = $r;
                                }
-                               $result[] = $r;
                        }
 
                        $apiResult->setIndexedTagName( $result, 'page' );
                }
                $apiResult->addValue( null, $this->getModuleName(), $result );
+
+               $apiResult->endContinuation();
        }
 
        /**
@@ -214,6 +224,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
                        'newerthanrevid' => array(
                                ApiBase::PARAM_TYPE => 'integer'
                        ),
+                       'continue' => '',
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -229,6 +240,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
                        'torevid' => 'Revision to set the notification timestamp to (one page only)',
                        'newerthanrevid' => 'Revision to set the notification timestamp newer than (one page only)',
                        'token' => 'A token previously acquired via prop=info',
+                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
index 6dfb1b4..c5aa90e 100644 (file)
@@ -43,6 +43,9 @@ class ApiWatch extends ApiBase {
                }
 
                $params = $this->extractRequestParams();
+
+               $this->getResult()->beginContinuation( $params['continue'], array(), array() );
+
                $pageSet = $this->getPageSet();
                // by default we use pageset to extract the page to work on.
                // title is still supported for backward compatibility
@@ -88,6 +91,7 @@ class ApiWatch extends ApiBase {
                        $res = $this->watchTitle( $title, $user, $params, true );
                }
                $this->getResult()->addValue( null, $this->getModuleName(), $res );
+               $this->getResult()->endContinuation();
        }
 
        private function watchTitle( Title $title, User $user, array $params,
@@ -180,6 +184,7 @@ class ApiWatch extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
                        ),
+                       'continue' => '',
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -196,6 +201,7 @@ class ApiWatch extends ApiBase {
                        'unwatch' => 'If set the page will be unwatched rather than watched',
                        'uselang' => 'Language to show the message in',
                        'token' => 'A token previously acquired via prop=info',
+                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
index 7b83990..15d7c89 100644 (file)
@@ -101,7 +101,7 @@ class DependencyWrapper {
         * @param BagOStuff $cache A cache object such as $wgMemc
         * @param string $key The cache key
         * @param int $expiry The expiry timestamp or interval in seconds
-        * @param bool|array $callback The callback for generating the value, or false
+        * @param bool|callable $callback The callback for generating the value, or false
         * @param array $callbackParams The function parameters for the callback
         * @param array $deps The dependencies to store on a cache miss. Note: these
         *    are not the dependencies used on a cache hit! Cache hits use the stored
index 1153fd2..ec36cfb 100644 (file)
@@ -1155,11 +1155,11 @@ class LCStoreDB implements LCStore {
        private $currentLang;
        private $writesDone = false;
 
-       /**
-        * @var DatabaseBase
-        */
+       /** @var DatabaseBase */
        private $dbw;
-       private $batch;
+       /** @var Array */
+       private $batch = array();
+
        private $readOnly = false;
 
        public function get( $code, $key ) {
@@ -1180,26 +1180,11 @@ class LCStoreDB implements LCStore {
        public function startWrite( $code ) {
                if ( $this->readOnly ) {
                        return;
-               }
-
-               if ( !$code ) {
+               } elseif ( !$code ) {
                        throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
                }
 
                $this->dbw = wfGetDB( DB_MASTER );
-               try {
-                       $this->dbw->begin( __METHOD__ );
-                       $this->dbw->delete( 'l10n_cache', array( 'lc_lang' => $code ), __METHOD__ );
-               } catch ( DBQueryError $e ) {
-                       if ( $this->dbw->wasReadOnlyError() ) {
-                               $this->readOnly = true;
-                               $this->dbw->rollback( __METHOD__ );
-
-                               return;
-                       } else {
-                               throw $e;
-                       }
-               }
 
                $this->currentLang = $code;
                $this->batch = array();
@@ -1208,37 +1193,42 @@ class LCStoreDB implements LCStore {
        public function finishWrite() {
                if ( $this->readOnly ) {
                        return;
+               } elseif ( is_null( $this->currentLang ) ) {
+                       throw new MWException( __CLASS__ . ': must call startWrite() before finishWrite()' );
                }
 
-               if ( $this->batch ) {
-                       $this->dbw->insert( 'l10n_cache', $this->batch, __METHOD__ );
+               $this->dbw->begin( __METHOD__ );
+               try {
+                       $this->dbw->delete( 'l10n_cache',
+                               array( 'lc_lang' => $this->currentLang ), __METHOD__ );
+                       foreach ( array_chunk( $this->batch, 500 ) as $rows ) {
+                               $this->dbw->insert( 'l10n_cache', $rows, __METHOD__ );
+                       }
+                       $this->writesDone = true;
+               } catch ( DBQueryError $e ) {
+                       if ( $this->dbw->wasReadOnlyError() ) {
+                               $this->readOnly = true; // just avoid site down time
+                       } else {
+                               throw $e;
+                       }
                }
-
                $this->dbw->commit( __METHOD__ );
+
                $this->currentLang = null;
-               $this->dbw = null;
                $this->batch = array();
-               $this->writesDone = true;
        }
 
        public function set( $key, $value ) {
                if ( $this->readOnly ) {
                        return;
-               }
-
-               if ( is_null( $this->currentLang ) ) {
-                       throw new MWException( __CLASS__ . ': must call startWrite() before calling set()' );
+               } elseif ( is_null( $this->currentLang ) ) {
+                       throw new MWException( __CLASS__ . ': must call startWrite() before set()' );
                }
 
                $this->batch[] = array(
                        'lc_lang' => $this->currentLang,
                        'lc_key' => $key,
                        'lc_value' => $this->dbw->encodeBlob( serialize( $value ) ) );
-
-               if ( count( $this->batch ) >= 100 ) {
-                       $this->dbw->insert( 'l10n_cache', $this->batch, __METHOD__ );
-                       $this->batch = array();
-               }
        }
 }
 
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 36d2731..d2c504a 100644 (file)
@@ -101,7 +101,7 @@ class RedisConnectionPool {
                        $options['connectTimeout'] = 1;
                }
                if ( !isset( $options['readTimeout'] ) ) {
-                       $options['readTimeout'] = 31; // handles up to 30 second blocking commands
+                       $options['readTimeout'] = 1;
                }
                if ( !isset( $options['persistent'] ) ) {
                        $options['persistent'] = false;
@@ -120,7 +120,7 @@ class RedisConnectionPool {
         *                      Optional, default is 1 second.
         *   - readTimeout    : The timeout for operation reads, in seconds.
         *                      Commands like BLPOP can fail if told to wait longer than this.
-        *                      Optional, default is 60 seconds.
+        *                      Optional, default is 1 second.
         *   - persistent     : Set this to true to allow connections to persist across
         *                      multiple web requests. False by default.
         *   - password       : The authentication password, will be sent to Redis in clear text.
@@ -342,6 +342,16 @@ class RedisConnectionPool {
                return true;
        }
 
+       /**
+        * Adjust or reset the connection handle read timeout value
+        *
+        * @param Redis $conn
+        * @param integer $timeout Optional
+        */
+       public function resetTimeout( Redis $conn, $timeout = null ) {
+               $conn->setOption( Redis::OPT_READ_TIMEOUT, $timeout ?: $this->readTimeout );
+       }
+
        /**
         * Make sure connections are closed for sanity
         */
@@ -401,17 +411,34 @@ class RedisConnRef {
        public function __call( $name, $arguments ) {
                $conn = $this->conn; // convenience
 
+               // Work around https://github.com/nicolasff/phpredis/issues/70
+               $lname = strtolower( $name );
+               if ( ( $lname === 'blpop' || $lname == 'brpop' )
+                       && is_array( $arguments[0] ) && isset( $arguments[1] )
+               ) {
+                       $this->pool->resetTimeout( $conn, $arguments[1] + 1 );
+               } elseif ( $lname === 'brpoplpush' && isset( $arguments[2] ) ) {
+                       $this->pool->resetTimeout( $conn, $arguments[2] + 1 );
+               }
+
                $conn->clearLastError();
-               $res = call_user_func_array( array( $conn, $name ), $arguments );
-               if ( preg_match( '/^ERR operation not permitted\b/', $conn->getLastError() ) ) {
-                       $this->pool->reauthenticateConnection( $this->server, $conn );
-                       $conn->clearLastError();
+               try {
                        $res = call_user_func_array( array( $conn, $name ), $arguments );
-                       wfDebugLog( 'redis', "Used automatic re-authentication for method '$name'." );
+                       if ( preg_match( '/^ERR operation not permitted\b/', $conn->getLastError() ) ) {
+                               $this->pool->reauthenticateConnection( $this->server, $conn );
+                               $conn->clearLastError();
+                               $res = call_user_func_array( array( $conn, $name ), $arguments );
+                               wfDebugLog( 'redis', "Used automatic re-authentication for method '$name'." );
+                       }
+               } catch ( RedisException $e ) {
+                       $this->pool->resetTimeout( $conn ); // restore
+                       throw $e;
                }
 
                $this->lastError = $conn->getLastError() ?: $this->lastError;
 
+               $this->pool->resetTimeout( $conn ); // restore
+
                return $res;
        }
 
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 8ba43f6..e09be56 100644 (file)
@@ -342,7 +342,7 @@ abstract class AbstractContent implements Content {
         *
         * @see Content::replaceSection
         */
-       public function replaceSection( $section, Content $with, $sectionTitle = '' ) {
+       public function replaceSection( $sectionId, Content $with, $sectionTitle = '' ) {
                return null;
        }
 
index 3286c0a..61b9254 100644 (file)
@@ -378,10 +378,9 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param string $sectionId The section's ID, given as a numeric string.
-        *    The ID "0" retrieves the section before the first heading, "1" the
-        *    text between the first heading (included) and the second heading
-        *    (excluded), etc.
+        * @param string|number $sectionId Section identifier as a number or string
+        * (e.g. 0, 1 or 'T-1'). The ID "0" retrieves the section before the first heading, "1" the
+        * text between the first heading (included) and the second heading (excluded), etc.
         *
         * @return Content|bool|null The section, or false if no such section
         *    exist, or null if sections are not supported.
@@ -394,13 +393,15 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param mixed $section Null/false or a section number (0, 1, 2, T1, T2...), or "new"
+        * @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 $with New content of the section
         * @param string $sectionTitle New section's subject, only if $section is 'new'
         *
         * @return string|null Complete article text, or null if error
         */
-       public function replaceSection( $section, Content $with, $sectionTitle = '' );
+       public function replaceSection( $sectionId, Content $with, $sectionTitle = '' );
 
        /**
         * Returns a Content object with pre-save transformations applied (or this
index b5b4d13..e077c77 100644 (file)
@@ -460,7 +460,7 @@ abstract class ContentHandler {
         * Apply import transformation (per default, returns $blob unchanged).
         * This gives subclasses an opportunity to transform data blobs on import.
         *
-        * @singe 1.24
+        * @since 1.24
         *
         * @param string $blob
         * @param string|null $format
index ccea916..cdf5962 100644 (file)
@@ -37,17 +37,17 @@ class WikitextContent extends TextContent {
        }
 
        /**
-        * @param string $section
+        * @param string|number $sectionId
         *
         * @return Content|bool|null
         *
         * @see Content::getSection()
         */
-       public function getSection( $section ) {
+       public function getSection( $sectionId ) {
                global $wgParser;
 
                $text = $this->getNativeData();
-               $sect = $wgParser->getSection( $text, $section, false );
+               $sect = $wgParser->getSection( $text, $sectionId, false );
 
                if ( $sect === false ) {
                        return false;
@@ -57,7 +57,7 @@ class WikitextContent extends TextContent {
        }
 
        /**
-        * @param string $section
+        * @param string|number|null|bool $sectionId
         * @param Content $with
         * @param string $sectionTitle
         *
@@ -66,7 +66,7 @@ class WikitextContent extends TextContent {
         *
         * @see Content::replaceSection()
         */
-       public function replaceSection( $section, Content $with, $sectionTitle = '' ) {
+       public function replaceSection( $sectionId, Content $with, $sectionTitle = '' ) {
                wfProfileIn( __METHOD__ );
 
                $myModelId = $this->getModel();
@@ -82,13 +82,13 @@ class WikitextContent extends TextContent {
                $oldtext = $this->getNativeData();
                $text = $with->getNativeData();
 
-               if ( $section === '' ) {
+               if ( strval( $sectionId ) === '' ) {
                        wfProfileOut( __METHOD__ );
 
                        return $with; # XXX: copy first?
                }
 
-               if ( $section == 'new' ) {
+               if ( $sectionId === 'new' ) {
                        # Inserting a new section
                        $subject = $sectionTitle ? wfMessage( 'newsectionheaderdefaultlevel' )
                                        ->rawParams( $sectionTitle )->inContentLanguage()->text() . "\n\n" : '';
@@ -101,7 +101,7 @@ class WikitextContent extends TextContent {
                        # Replacing an existing section; roll out the big guns
                        global $wgParser;
 
-                       $text = $wgParser->replaceSection( $oldtext, $section, $text );
+                       $text = $wgParser->replaceSection( $oldtext, $sectionId, $text );
                }
 
                $newContent = new WikitextContent( $text );
index 4a3c2cb..d0c0bdc 100644 (file)
@@ -134,18 +134,6 @@ abstract class ContextSource implements IContextSource {
                return $this->getContext()->getUser();
        }
 
-       /**
-        * Get the Language object
-        *
-        * @deprecated since 1.19 Use getLanguage instead
-        * @return Language
-        */
-       public function getLang() {
-               wfDeprecated( __METHOD__, '1.19' );
-
-               return $this->getLanguage();
-       }
-
        /**
         * Get the Language object
         *
index 4a7b466..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
         *
@@ -267,15 +256,6 @@ class DerivativeContext extends ContextSource {
                }
        }
 
-       /**
-        * @deprecated since 1.19 Use getLanguage instead
-        * @return Language
-        */
-       public function getLang() {
-               wfDeprecated( __METHOD__, '1.19' );
-               $this->getLanguage();
-       }
-
        /**
         * Get the Language object
         *
index 5534ee3..f718103 100644 (file)
@@ -76,14 +76,6 @@ interface IContextSource {
         */
        public function getUser();
 
-       /**
-        * Get the Language object
-        *
-        * @deprecated since 1.19 Use getLanguage instead
-        * @return Language
-        */
-       public function getLang();
-
        /**
         * Get the Language object
         *
index c87bfc0..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
         *
@@ -298,16 +292,6 @@ class RequestContext implements IContextSource {
                }
        }
 
-       /**
-        * @deprecated since 1.19 Use getLanguage instead
-        * @return Language
-        */
-       public function getLang() {
-               wfDeprecated( __METHOD__, '1.19' );
-
-               return $this->getLanguage();
-       }
-
        /**
         * Get the Language object.
         * Initialization of user or request objects can depend on this.
@@ -329,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;
@@ -426,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 536d721..9eb3e2f 100644 (file)
@@ -71,7 +71,13 @@ class CloneDatabase {
         * Clone the table structure
         */
        public function cloneTableStructure() {
+               global $wgSharedTables, $wgSharedDB;
                foreach ( $this->tablesToClone as $tbl ) {
+                       if ( $wgSharedDB && in_array( $tbl, $wgSharedTables, true ) ) {
+                               // Shared tables don't work properly when cloning due to
+                               // how prefixes are handled (bug 65654)
+                               throw new MWException( "Cannot clone shared table $tbl." );
+                       }
                        # Clean up from previous aborted run.  So that table escaping
                        # works correctly across DB engines, we need to change the pre-
                        # fix back and forth so tableName() works right.
@@ -85,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 16e1ef2..7d8fbe9 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.
@@ -1015,7 +1022,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                $this->mLastQuery = $sql;
                if ( !$this->mDoneWrites && $this->isWriteQuery( $sql ) ) {
                        # Set a flag indicating that writes have been done
-                       wfDebug( __METHOD__ . ": Writes done: $sql\n" );
+                       wfDebug( __METHOD__ . ': Writes done: ' . DatabaseBase::generalizeSQL( $sql ) . "\n" );
                        $this->mDoneWrites = true;
                }
 
@@ -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 );
                }
@@ -2539,11 +2550,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @return string
         */
        protected function escapeLikeInternal( $s ) {
-               $s = str_replace( '\\', '\\\\', $s );
-               $s = $this->strencode( $s );
-               $s = str_replace( array( '%', '_' ), array( '\%', '\_' ), $s );
-
-               return $s;
+               return addcslashes( $s, '\%_' );
        }
 
        /**
@@ -2579,7 +2586,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        }
                }
 
-               return " LIKE '" . $s . "' ";
+               return " LIKE {$this->addQuotes( $s )} ";
        }
 
        /**
@@ -3416,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();
                }
@@ -3435,6 +3442,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                $this->mTrxAtomicLevels = new SplStack;
                $this->mTrxIdleCallbacks = array();
                $this->mTrxPreCommitCallbacks = array();
+               $this->mTrxShortId = wfRandomString( 12 );
        }
 
        /**
@@ -3471,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!" );
                        }
                }
 
@@ -3493,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();
        }
@@ -3529,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!" );
                        }
@@ -3550,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 1d05bf6..be01f1a 100644 (file)
@@ -1004,6 +1004,11 @@ class DatabaseMssql extends DatabaseBase {
                        return false;
                }
 
+               if ( $schema === false ) {
+                       global $wgDBmwschema;
+                       $schema = $wgDBmwschema;
+               }
+
                $res = $this->query( "SELECT 1 FROM INFORMATION_SCHEMA.TABLES
                        WHERE TABLE_TYPE = 'BASE TABLE'
                        AND TABLE_SCHEMA = '$schema' AND TABLE_NAME = '$table'" );
@@ -1295,9 +1300,6 @@ class DatabaseMssql extends DatabaseBase {
                        : array();
        }
 
-       /**
-        * @void
-        */
        private function populateColumnCaches() {
                $res = $this->select( 'INFORMATION_SCHEMA.COLUMNS', '*',
                        array(
@@ -1344,7 +1346,7 @@ class DatabaseMssql extends DatabaseBase {
                        // Used internally, we want the schema split off from the table name and returned
                        // as a list with 3 elements (database, schema, table)
                        $table = explode( '.', $table );
-                       if ( count( $table ) == 2 ) {
+                       while ( count( $table ) < 3 ) {
                                array_unshift( $table, false );
                        }
                }
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 8c9b06c..b8d5d79 100644 (file)
@@ -87,17 +87,12 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                } else {
                        $mysqli->options( MYSQLI_SET_CHARSET_NAME, 'binary' );
                }
+               $mysqli->options( MYSQLI_OPT_CONNECT_TIMEOUT, 3 );
 
-               $numAttempts = 2;
-               for ( $i = 0; $i < $numAttempts; $i++ ) {
-                       if ( $i > 1 ) {
-                               usleep( 1000 );
-                       }
-                       if ( $mysqli->real_connect( $realServer, $this->mUser,
-                               $this->mPassword, $this->mDBname, $port, null, $connFlags )
-                       ) {
-                               return $mysqli;
-                       }
+               if ( $mysqli->real_connect( $realServer, $this->mUser,
+                       $this->mPassword, $this->mDBname, $port, null, $connFlags )
+               ) {
+                       return $mysqli;
                }
 
                return false;
index 3d7267a..fe5fa1f 100644 (file)
@@ -827,6 +827,8 @@ __INDEXATTR__;
         * In Postgres when using FOR UPDATE, only the main table and tables that are inner joined
         * can be locked. That means tables in an outer join cannot be FOR UPDATE locked. Trying to do
         * so causes a DB error. This wrapper checks which tables can be locked and adjusts it accordingly.
+        * 
+        * MySQL uses "ORDER BY NULL" as an optimization hint, but that syntax is illegal in PostgreSQL.
         */
        function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__,
                $options = array(), $join_conds = array()
@@ -842,6 +844,10 @@ __INDEXATTR__;
                                        }
                                }
                        }
+
+                       if ( isset( $options['ORDER BY'] ) && $options['ORDER BY'] == 'NULL' ) {
+                               unset( $options['ORDER BY'] );
+                       }
                }
 
                return parent::selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
index 6219573..3a4d829 100644 (file)
@@ -71,7 +71,7 @@ class LBFactorySingle extends LBFactory {
        }
 
        /**
-        * @param string|array $callback
+        * @param string|callable $callback
         * @param array $params
         */
        function forEachLB( $callback, $params = array() ) {
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 dd3f351..3aad389 100644 (file)
@@ -554,7 +554,7 @@ class DifferenceEngine extends ContextSource {
 
                        // NOTE: only needed for B/C: custom rendering of JS/CSS via hook
                        if ( $this->mNewPage->isCssJsSubpage() || $this->mNewPage->isCssOrJsPage() ) {
-                               // Stolen from Article::view --AG 2007-10-11
+                               // This needs to be synchronised with Article::showCssOrJsPage(), which sucks
                                // Give hooks a chance to customise the output
                                // @todo standardize this crap into one function
                                if ( ContentHandler::runLegacyHooks( 'ShowRawCssJs', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
@@ -562,8 +562,9 @@ class DifferenceEngine extends ContextSource {
                                        // use the content object's own rendering
                                        $cnt = $this->mNewRev->getContent();
                                        $po = $cnt ? $cnt->getParserOutput( $this->mNewRev->getTitle(), $this->mNewRev->getId() ) : null;
-                                       $txt = $po ? $po->getText() : '';
-                                       $out->addHTML( $txt );
+                                       if ( $po ) {
+                                               $out->addParserOutputContent( $po );
+                                       }
                                }
                        } elseif ( !wfRunHooks( 'ArticleContentViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
                                // Handled by extension
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 3f81a94..e7c1f6f 100644 (file)
@@ -792,7 +792,7 @@ class FSFileOpHandle extends FileBackendStoreOpHandle {
        /**
         * @param FSFileBackend $backend
         * @param array $params
-        * @param callback $call
+        * @param callable $call
         * @param string $cmd
         * @param int|null $chmodPath
         */
index 340c315..ee9a49d 100644 (file)
@@ -1147,6 +1147,7 @@ abstract class FileBackendStore extends FileBackend {
                $this->clearCache();
 
                $supportedOps = array( 'create', 'store', 'copy', 'move', 'delete', 'describe', 'null' );
+               // Parallel ops may be disabled in config due to dependencies (e.g. needing popen())
                $async = ( $this->parallelize === 'implicit' && count( $ops ) > 1 );
                $maxConcurrency = $this->concurrency; // throttle
 
index 56d7000..b0d83e0 100644 (file)
@@ -167,7 +167,11 @@ class FileOpBatch {
                        // or the backend does not support async ops and did it synchronously.
                        foreach ( $performOpsBatch as $i => $fileOp ) {
                                if ( !isset( $status->success[$i] ) ) { // didn't already fail in precheck()
-                                       $subStatus = $fileOp->attemptAsync();
+                                       // Parallel ops may be disabled in config due to missing dependencies,
+                                       // (e.g. needing popen()). When they are, $performOpsBatch has size 1.
+                                       $subStatus = ( count( $performOpsBatch ) > 1 )
+                                               ? $fileOp->attemptAsync()
+                                               : $fileOp->attempt();
                                        if ( $subStatus->value instanceof FileBackendStoreOpHandle ) {
                                                $opHandles[$i] = $subStatus->value; // deferred
                                        } else {
index 4c250ba..8598005 100644 (file)
@@ -1583,7 +1583,7 @@ class FileRepo {
         * This only acts on the current version of files, not any old versions.
         * May use either the database or the filesystem.
         *
-        * @param array|string $callback
+        * @param callable $callback
         * @return void
         */
        public function enumFiles( $callback ) {
@@ -1594,7 +1594,7 @@ class FileRepo {
         * Call a callback function for every public file in the repository.
         * May use either the database or the filesystem.
         *
-        * @param array|string $callback
+        * @param callable $callback
         * @return void
         */
        protected function enumFilesInStorage( $callback ) {
index 7f25a00..6924f0a 100644 (file)
@@ -575,7 +575,7 @@ class ForeignAPIRepo extends FileRepo {
        }
 
        /**
-        * @param array|string $callback
+        * @param callable $callback
         * @throws MWException
         */
        function enumFiles( $callback ) {
index 103e78e..65637df 100644 (file)
@@ -367,6 +367,9 @@ class RepoGroup {
         * @return bool
         */
        function forEachForeignRepo( $callback, $params = array() ) {
+               if ( !$this->reposInitialised ) {
+                       $this->initialiseRepos();
+               }
                foreach ( $this->foreignRepos as $repo ) {
                        $args = array_merge( array( $repo ), $params );
                        if ( call_user_func_array( $callback, $args ) ) {
@@ -382,6 +385,9 @@ class RepoGroup {
         * @return bool
         */
        function hasForeignRepos() {
+               if ( !$this->reposInitialised ) {
+                       $this->initialiseRepos();
+               }
                return (bool)$this->foreignRepos;
        }
 
index 39da597..837a731 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.
         *
@@ -269,6 +258,14 @@ abstract class ImageGalleryBase extends ContextSource {
                array_unshift( $this->mImages, array( &$title, $html, $alt, $link, $handlerOpts ) );
        }
 
+       /**
+        * Returns the list of images this gallery contains
+        * @return array
+        */
+       public function getImages() {
+               return $this->mImages;
+       }
+
        /**
         * isEmpty() returns true if the gallery contains no images
         * @return bool
old mode 100755 (executable)
new mode 100644 (file)
index 01f3ab7..3334694 100644 (file)
@@ -171,6 +171,12 @@ class HTMLForm extends ContextSource {
 
        protected $mWrapperLegend = false;
 
+       /**
+        * Salt for the edit token.
+        * @var string|array
+        */
+       protected $mTokenSalt = '';
+
        /**
         * If true, sections that contain both fields and subsections will
         * render their subsections before their fields.
@@ -304,15 +310,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.
         *
@@ -406,7 +403,7 @@ class HTMLForm extends ContextSource {
                                // Session tokens for logged-out users have no security value.
                                // However, if the user gave one, check it in order to give a nice
                                // "session expired" error instead of "permission denied" or such.
-                               $submit = $this->getUser()->matchEditToken( $editToken );
+                               $submit = $this->getUser()->matchEditToken( $editToken, $this->mTokenSalt );
                        } else {
                                $submit = true;
                        }
@@ -443,9 +440,12 @@ class HTMLForm extends ContextSource {
         * Validate all the fields, and call the submission callback
         * function if everything is kosher.
         * @throws MWException
-        * @return mixed Bool true == Successful submission, Bool false
-        *     == No submission attempted, anything else == Error to
-        *     display.
+        * @return bool|string|array|Status
+        *     - Bool true or a good Status object indicates success,
+        *     - Bool false indicates no submission was attempted,
+        *     - Anything else indicates failure. The value may be a fatal Status
+        *       object, an HTML string, or an array of arrays (message keys and
+        *       params) or strings (message keys)
         */
        function trySubmit() {
                $this->mWasSubmitted = true;
@@ -512,10 +512,9 @@ class HTMLForm extends ContextSource {
         * Set a callback to a function to do something with the form
         * once it's been successfully validated.
         *
-        * @param string $cb Function name.  The function will be passed
-        *     the output from HTMLForm::filterDataForSubmit, and must
-        *     return Bool true on success, Bool false if no submission
-        *     was attempted, or String HTML output to display on error.
+        * @param callable $cb The function will be passed the output from
+        *   HTMLForm::filterDataForSubmit and this HTMLForm object, and must
+        *   return as documented for HTMLForm::trySubmit
         *
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
@@ -583,7 +582,7 @@ class HTMLForm extends ContextSource {
         * Add header text, inside the form.
         *
         * @param string $msg Complete text of message to display
-        * @param string $section The section to add the header to
+        * @param string|null $section The section to add the header to
         *
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
@@ -605,7 +604,7 @@ class HTMLForm extends ContextSource {
         * @since 1.19
         *
         * @param string $msg Complete text of message to display
-        * @param string $section The section to add the header to
+        * @param string|null $section The section to add the header to
         *
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
@@ -623,7 +622,7 @@ class HTMLForm extends ContextSource {
         * Add footer text, inside the form.
         *
         * @param string $msg complete text of message to display
-        * @param string $section The section to add the footer text to
+        * @param string|null $section The section to add the footer text to
         *
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
@@ -645,7 +644,7 @@ class HTMLForm extends ContextSource {
         * @since 1.19
         *
         * @param string $msg Complete text of message to display
-        * @param string $section The section to add the footer text to
+        * @param string|null $section The section to add the footer text to
         *
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
@@ -735,6 +734,21 @@ class HTMLForm extends ContextSource {
                return $this;
        }
 
+       /**
+        * Set the salt for the edit token.
+        *
+        * Only useful when the method is "post".
+        *
+        * @since 1.24
+        * @param string|array Salt to use
+        * @return HTMLForm $this for chaining calls
+        */
+       public function setTokenSalt( $salt ) {
+               $this->mTokenSalt = $salt;
+
+               return $this;
+       }
+
        /**
         * Display the form (sending to the context's OutputPage object), with an
         * appropriate error message or stack of messages, and any validation errors, etc.
@@ -743,7 +757,7 @@ class HTMLForm extends ContextSource {
         * Moreover, when doing method chaining this should be the very last method
         * call just after prepareForm().
         *
-        * @param mixed $submitResult Mixed output from HTMLForm::trySubmit()
+        * @param bool|string|array|Status $submitResult Output from HTMLForm::trySubmit()
         *
         * @return Nothing, should be last call
         */
@@ -754,7 +768,7 @@ class HTMLForm extends ContextSource {
        /**
         * Returns the raw HTML generated by the form
         *
-        * @param mixed $submitResult Mixed output from HTMLForm::trySubmit()
+        * @param bool|string|array|Status $submitResult Output from HTMLForm::trySubmit()
         *
         * @return string
         */
@@ -830,7 +844,7 @@ class HTMLForm extends ContextSource {
                if ( $this->getMethod() == 'post' ) {
                        $html .= Html::hidden(
                                'wpEditToken',
-                               $this->getUser()->getEditToken(),
+                               $this->getUser()->getEditToken( $this->mTokenSalt ),
                                array( 'id' => 'wpEditToken' )
                        ) . "\n";
                        $html .= Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . "\n";
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 c32b445..2bf9f8b 100644 (file)
@@ -27,8 +27,10 @@ class HTMLSelectField extends HTMLFormField {
                        $select->setAttribute( 'disabled', 'disabled' );
                }
 
-               if ( isset( $this->mParams['tabindex'] ) ) {
-                       $select->setAttribute( 'tabindex', $this->mParams['tabindex'] );
+               $allowedParams = array( 'tabindex', 'size' );
+               $customParams = $this->getAttributes( $allowedParams );
+               foreach( $customParams as $name => $value ) {
+                       $select->setAttribute( $name, $value );
                }
 
                if ( $this->mClass !== '' ) {
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 88478f4..f014032 100644 (file)
@@ -380,26 +380,15 @@ abstract class Installer {
                        $this->settings[$var] = $GLOBALS[$var];
                }
 
-               $compiledDBs = array();
+               $this->compiledDBs = array();
                foreach ( self::getDBTypes() as $type ) {
                        $installer = $this->getDBInstaller( $type );
 
                        if ( !$installer->isCompiled() ) {
                                continue;
                        }
-                       $compiledDBs[] = $type;
-
-                       $defaults = $installer->getGlobalDefaults();
-
-                       foreach ( $installer->getGlobalNames() as $var ) {
-                               if ( isset( $defaults[$var] ) ) {
-                                       $this->settings[$var] = $defaults[$var];
-                               } else {
-                                       $this->settings[$var] = $GLOBALS[$var];
-                               }
-                       }
+                       $this->compiledDBs[] = $type;
                }
-               $this->compiledDBs = $compiledDBs;
 
                $this->parserTitle = Title::newFromText( 'Installer' );
                $this->parserOptions = new ParserOptions; // language will be wrong :(
@@ -726,11 +715,15 @@ abstract class Installer {
 
        /**
         * Environment check for register_globals.
+        * Prevent installation if enabled
         */
        protected function envCheckRegisterGlobals() {
                if ( wfIniGetBool( 'register_globals' ) ) {
-                       $this->showMessage( 'config-register-globals' );
+                       $this->showMessage( 'config-register-globals-error' );
+                       return false;
                }
+
+               return true;
        }
 
        /**
@@ -1531,8 +1524,8 @@ abstract class Installer {
        /**
         * Actually perform the installation.
         *
-        * @param array $startCB A callback array for the beginning of each step
-        * @param array $endCB A callback array for the end of each step
+        * @param callable $startCB A callback array for the beginning of each step
+        * @param callable $endCB A callback array for the end of each step
         *
         * @return array Array of Status objects
         */
@@ -1747,7 +1740,7 @@ abstract class Installer {
        /**
         * Add an installation step following the given step.
         *
-        * @param array $callback A valid installation callback array, in this form:
+        * @param callable $callback A valid installation callback array, in this form:
         *    array( 'name' => 'some-unique-name', 'callback' => array( $obj, 'function' ) );
         * @param string $findStep The step to find. Omit to put the step at the beginning
         */
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 51db148..83681b6 100644 (file)
@@ -218,6 +218,7 @@ class MssqlInstaller extends DatabaseInstaller {
                                'password' => $password,
                                'dbname' => false,
                                'flags' => 0,
+                               'schema' => $this->getVar( 'wgDBmwschema' ),
                                'tablePrefix' => $this->getVar( 'wgDBprefix' ) ) );
                        $db->prepareStatements( false );
                        $db->scrollableCursor( false );
@@ -648,6 +649,14 @@ class MssqlInstaller extends DatabaseInstaller {
                return $status;
        }
 
+       public function getGlobalDefaults() {
+               // The default $wgDBmwschema is null, which breaks Postgres and other DBMSes that require
+               // the use of a schema, so we need to set it here
+               return array(
+                       'wgDBmwschema' => 'mediawiki',
+               );
+       }
+
        /**
         * Try to see if the login exists
         * @param string $user Username to check
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 9e25f47..89a6978 100644 (file)
@@ -152,17 +152,18 @@ class PostgresInstaller extends DatabaseInstaller {
         * @param string $user User name
         * @param string $password Password
         * @param string $dbName Database name
+        * @param string $schema Database schema
         * @return Status
         */
-       protected function openConnectionWithParams( $user, $password, $dbName ) {
+       protected function openConnectionWithParams( $user, $password, $dbName, $schema ) {
                $status = Status::newGood();
                try {
-                       $db = new DatabasePostgres(
-                               $this->getVar( 'wgDBserver' ),
-                               $user,
-                               $password,
-                               $dbName
-                       );
+                       $db = Database::factory( 'postgres', array(
+                               'host' => $this->getVar( 'wgDBserver' ),
+                               'user' => $user,
+                               'password' => $password,
+                               'dbname' => $dbName,
+                               'schema' => $schema ) );
                        $status->value = $db;
                } catch ( DBConnectionError $e ) {
                        $status->fatal( 'config-connection-error', $e->getMessage() );
@@ -230,7 +231,8 @@ class PostgresInstaller extends DatabaseInstaller {
                                return $this->openConnectionWithParams(
                                        $this->getVar( '_InstallUser' ),
                                        $this->getVar( '_InstallPassword' ),
-                                       $this->getVar( 'wgDBname' ) );
+                                       $this->getVar( 'wgDBname' ),
+                                       $this->getVar( 'wgDBmwschema' ) );
                        case 'create-tables':
                                $status = $this->openPgConnection( 'create-schema' );
                                if ( $status->isOK() ) {
@@ -260,11 +262,11 @@ class PostgresInstaller extends DatabaseInstaller {
                $status = Status::newGood();
                foreach ( $dbs as $db ) {
                        try {
-                               $conn = new DatabasePostgres(
-                                       $this->getVar( 'wgDBserver' ),
+                               $conn = $this->openConnectionWithParams(
                                        $user,
                                        $password,
-                                       $db );
+                                       $db,
+                                       $this->getVar( 'wgDBmwschema' ) );
                        } catch ( DBConnectionError $error ) {
                                $conn = false;
                                $status->fatal( 'config-pg-test-error', $db,
@@ -622,6 +624,14 @@ class PostgresInstaller extends DatabaseInstaller {
                return $status;
        }
 
+       public function getGlobalDefaults() {
+               // The default $wgDBmwschema is null, which breaks Postgres and other DBMSes that require
+               // the use of a schema, so we need to set it here
+               return array(
+                       'wgDBmwschema' => 'mediawiki',
+               );
+       }
+
        public function setupPLpgSQL() {
                // Connect as the install user, since it owns the database and so is
                // the user that needs to run "CREATE LANGAUGE"
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 d81111b..97f4830 100644 (file)
@@ -124,6 +124,12 @@ class WebInstallerOutput {
         * @return string
         */
        public function getCSS() {
+               // Horrible, horrible hack: the installer is currently hardcoded to use the Vector skin, so load
+               // it here. Include instead of require, as this will work without it, it will just look bad.
+               global $wgResourceModules;
+               global $wgStyleDirectory;
+               include_once "$wgStyleDirectory/Vector/Vector.php";
+
                $moduleNames = array(
                        // See SkinTemplate::setupSkinUserCss
                        'mediawiki.legacy.shared',
@@ -146,6 +152,10 @@ class WebInstallerOutput {
                foreach ( $moduleNames as $moduleName ) {
                        /** @var ResourceLoaderFileModule $module */
                        $module = $resourceLoader->getModule( $moduleName );
+                       // One of the modules will be missing if Vector is unavailable
+                       if ( !$module ) {
+                               continue;
+                       }
 
                        // Based on: ResourceLoaderFileModule::getStyles (without the DB query)
                        $styles = ResourceLoader::makeCombinedStyles( $module->readStyleFiles(
index 06b561b..677af4f 100644 (file)
@@ -1230,6 +1230,8 @@ class WebInstallerOptions extends WebInstallerPage {
                        'wgEmailAuthentication', 'wgMainCacheType', '_MemCachedServers',
                        'wgUseInstantCommons' ) );
 
+               $retVal = true;
+
                if ( !array_key_exists( $this->getVar( '_RightsProfile' ), $this->parent->rightsProfiles )
                ) {
                        reset( $this->parent->rightsProfiles );
@@ -1240,8 +1242,7 @@ class WebInstallerOptions extends WebInstallerPage {
                if ( $code == 'cc-choose' ) {
                        if ( !$this->getVar( '_CCDone' ) ) {
                                $this->parent->showError( 'config-cc-not-chosen' );
-
-                               return false;
+                               $retVal = false;
                        }
                } elseif ( array_key_exists( $code, $this->parent->licenses ) ) {
                        // Messages:
@@ -1265,7 +1266,8 @@ class WebInstallerOptions extends WebInstallerPage {
                $extsAvailable = $this->parent->findExtensions();
                $extsToInstall = array();
                foreach ( $extsAvailable as $ext ) {
-                       if ( $this->parent->request->getCheck( 'config_ext-' . $ext ) ) {
+                       $this->parent->setVarsFromRequest( array( "ext-$ext" ) );
+                       if ( $this->getVar( "ext-$ext" ) ) {
                                $extsToInstall[] = $ext;
                        }
                }
@@ -1275,8 +1277,7 @@ class WebInstallerOptions extends WebInstallerPage {
                        $memcServers = explode( "\n", $this->getVar( '_MemCachedServers' ) );
                        if ( !$memcServers ) {
                                $this->parent->showError( 'config-memcache-needservers' );
-
-                               return false;
+                               $retVal = false;
                        }
 
                        foreach ( $memcServers as $server ) {
@@ -1286,21 +1287,18 @@ class WebInstallerOptions extends WebInstallerPage {
                                                && ( gethostbyname( $memcParts[0] ) == $memcParts[0] ) )
                                ) {
                                        $this->parent->showError( 'config-memcache-badip', $memcParts[0] );
-
-                                       return false;
+                                       $retVal = false;
                                } elseif ( !isset( $memcParts[1] ) ) {
                                        $this->parent->showError( 'config-memcache-noport', $memcParts[0] );
-
-                                       return false;
+                                       $retVal = false;
                                } elseif ( $memcParts[1] < 1 || $memcParts[1] > 65535 ) {
                                        $this->parent->showError( 'config-memcache-badport', 1, 65535 );
-
-                                       return false;
+                                       $retVal = false;
                                }
                        }
                }
 
-               return true;
+               return $retVal;
        }
 
 }
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 072514c..1192e2c 100644 (file)
@@ -47,6 +47,7 @@
        "config-db-charset": "ডেটাবেজের অক্ষর সেট",
        "config-db-port": "ডেটাবেজ পোর্ট:",
        "config-db-schema": "মিডিয়াউইকির স্কিমা",
+       "config-pg-test-error": "উপাত্তশালা $1-এর সাথে সংযোগ দেয়া সম্ভব হয়নি। কারন:$2",
        "config-sqlite-dir": "এসকিউলাইট ডেটা ডিরেক্টরি:",
        "config-oracle-def-ts": "পূর্বনির্ধারিত টেবিলস্পেস",
        "config-oracle-temp-ts": "সাময়কি টেবিলস্পেস:",
@@ -58,6 +59,7 @@
        "config-missing-db-name": "আপনাকে অবশ্যই \"ডেটাবেজ নাম\"-এর জন্য একটি মান প্রবেশ করাতে হবে",
        "config-missing-db-host": "আপনাকে অবশ্যই \"ডেটাবেজ হোস্ট\"-এর জন্য একটি মান প্রবেশ করাতে হবে",
        "config-missing-db-server-oracle": "আপনাকে অবশ্যই \"ডেটাবেজ টিএনএস\"-এর জন্য একটি মান প্রবেশ করাতে হবে",
+       "config-connection-error": "$1।\n\n\nদয়া করে প্রস্তাবকারী, ব্যবহারকারী নাম ও শব্দচাবি দেখুন এবং পুনরায় চেষ্টা করুন।",
        "config-mysql-engine": "সংরক্ষণ ইঞ্জিন:",
        "config-mysql-innodb": "ইনোডিবি",
        "config-mysql-myisam": "মাইআইএসএএম",
index ca6b37d..f4b75db 100644 (file)
        "config-ns-invalid": "Direizh eo an esaouenn anv \"<nowiki>$1</nowiki>\" spisaet.\nMerkit un esaouenn anv disheñvel evit ar raktres.",
        "config-ns-conflict": "Tabut zo etre an esaouenn anv spisaet \"<nowiki>$1</nowiki>\" hag un esaouenn anv dre ziouer eus MediaWiki.\nSpisait un anv raktres esaouenn anv all.",
        "config-admin-box": "Kont merour",
-       "config-admin-name": "Hoc'h anv-implijer :",
+       "config-admin-name": "Hoc'h anv implijer :",
        "config-admin-password": "Ger-tremen :",
        "config-admin-password-confirm": "Adskrivañ ar ger-tremen :",
        "config-admin-help": "Merkit hoc'h anv implijer amañ, da skouer \"Yann Vlog\".\nHemañ eo an anv a implijot evit kevreañ d'ar wiki-mañ.",
index 72b6f73..56b2732 100644 (file)
@@ -12,6 +12,7 @@
        "config-localsettings-key": "Карлаяккхаран догӀа:",
        "config-localsettings-badkey": "Ахьа яздина нийса доцу догӀа",
        "config-your-language": "Хьан мотт:",
+       "config-wiki-language": "Вики чохь лелор болу мотт",
        "config-back": "← Юха",
        "config-continue": "Кхин дӀа →",
        "config-page-language": "Мотт",
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 b19bdc0..0d1f90e 100644 (file)
@@ -52,7 +52,7 @@
        "config-no-db": "Could not find a suitable database driver! You need to install a database driver for PHP.\nThe following database types are supported: $1.\n\nIf you compiled PHP yourself, reconfigure it with a database client enabled, for example, using <code>./configure --with-mysqli</code>.\nIf you installed PHP from a Debian or Ubuntu package, then you also need to install, for example, the <code>php5-mysql</code> package.",
        "config-outdated-sqlite": "<strong>Warning:</strong> you have SQLite $1, which is lower than minimum required version $2. SQLite will be unavailable.",
        "config-no-fts3": "<strong>Warning:</strong> SQLite is compiled without the [//sqlite.org/fts3.html FTS3 module], search features will be unavailable on this backend.",
-       "config-register-globals": "<strong>Warning: PHP's <code>[http://php.net/register_globals register_globals]</code> option is enabled.\nDisable it if you can.</strong>\nMediaWiki will work, but your server is exposed to potential security vulnerabilities.",
+       "config-register-globals-error": "<strong>Error: PHP's <code>[http://php.net/register_globals register_globals]</code> option is enabled.\nIt must be disabled to continue with installation.</strong>\nSee [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] for help on how to do so.",
        "config-magic-quotes-runtime": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is active!'</strong>\nThis option corrupts data input unpredictably.\nYou cannot install or use MediaWiki unless this option is disabled.",
        "config-magic-quotes-sybase": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] is active!</strong>\nThis option corrupts data input unpredictably.\nYou cannot install or use MediaWiki unless this option is disabled.",
        "config-mbstring": "<strong>Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is active!</strong>\nThis option causes errors and may corrupt data unpredictably.\nYou cannot install or use MediaWiki unless this option is disabled.",
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 a4cb9eb..5a7d148 100644 (file)
@@ -7,8 +7,11 @@
        "config-desc": "Ka polokalamu hoʻonoho no MekiaWiki",
        "config-title": "Ka hoʻonoho MekiaWiki $1",
        "config-information": "ʻIke",
+       "config-localsettings-upgrade": "Ua hōʻike ʻia kekahi waihona <code>LocalSettings.php</code>.\nNo ka hoʻopuka hou ʻana o kēia hoʻonohona, e ʻoluʻolu, e kikokiko i ka helu o <code>$wgUpgradeKey</code> i loko o ka pahu i lalo.\nAia ia ma <code>LocalSettings.php</code>.",
+       "config-localsettings-cli-upgrade": "Ua hōʻike ʻia kekahi waihona <code>LocalSettings.php</code>.\nNo ka hoʻopuka hou ʻana o kēia hoʻonohona, e hana iā <code>update.php</code> ke ʻoluʻolu.",
        "config-localsettings-key": "Pihi hoʻopuka hou:",
        "config-localsettings-badkey": "Hewa ka pihi.",
+       "config-upgrade-key-missing": "Loaʻa he hoʻonohona mai mua o MīkiaWiki mai mua.\nNo ka hoʻopuka hou ʻana o kēia hoʻonohona, e ʻoluʻolu, e kau i kēia laina lalo ma lalo o kāu <code>LocalSettings.php</code>:\n\n$1",
        "config-your-language": "Kāu ʻōlelo:",
        "config-your-language-help": "E koho i kekahi ʻōlelo no ka hoʻohana ʻana ma loko o ka hana hoʻonohona.",
        "config-wiki-language": "ʻŌlelo Wiki:",
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 e236af5..7a6787b 100644 (file)
        "config-db-account-lock": "Користи го истото корисничко име и лозинка за редовна работа",
        "config-db-wiki-account": "Корисничко име за редовна работа",
        "config-db-wiki-help": "Внесете корисничко име и лозинка што ќе се користат за поврзување со базата на податоци во текот на редовната работа со викито.\nАко сметката не постои, а инсталационата сметка има доволно привилегии, тогаш оваа корисничка сметка ќе биде создадена со минималните привилегии потребни за работа со викито.",
-       "config-db-prefix": "Ð\9fÑ\80еÑ\84икÑ\81 на табелата на базата:",
-       "config-db-prefix-help": "Ð\90ко Ñ\82Ñ\80еба Ð´Ð° Ð´ÐµÐ»Ð¸Ñ\82е ÐµÐ´Ð½Ð° Ð±Ð°Ð·Ð° Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ñ\81о Ð¿Ð¾Ð²ÐµÑ\9cе Ð²Ð¸ÐºÐ¸Ñ\98а, Ð¸Ð»Ð¸ Ñ\81о Ð\9cедиÑ\98аÐ\92ики Ð¸ Ð´Ñ\80Ñ\83г Ð¼Ñ\80ежен Ð¿Ñ\80огÑ\80ам, Ñ\82огаÑ\88 Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð´Ð¾Ð´Ð°Ð´ÐµÑ\82е Ð¿Ñ\80еÑ\84икÑ\81 на сите називи на табелите за да спречите проблематични ситуации.\nНе користете празни простори.\n\nОва поле обично се остава празно.",
+       "config-db-prefix": "Ð\9fÑ\80еÑ\82Ñ\81Ñ\82авка на табелата на базата:",
+       "config-db-prefix-help": "Ð\90ко Ñ\82Ñ\80еба Ð´Ð° Ð´ÐµÐ»Ð¸Ñ\82е ÐµÐ´Ð½Ð° Ð±Ð°Ð·Ð° Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ñ\81о Ð¿Ð¾Ð²ÐµÑ\9cе Ð²Ð¸ÐºÐ¸Ñ\98а, Ð¸Ð»Ð¸ Ñ\81о Ð\9cедиÑ\98аÐ\92ики Ð¸ Ð´Ñ\80Ñ\83г Ð¼Ñ\80ежен Ð¿Ñ\80огÑ\80ам, Ñ\82огаÑ\88 Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð´Ð¾Ð´Ð°Ð´ÐµÑ\82е Ð¿Ñ\80еÑ\82Ñ\81Ñ\82авка на сите називи на табелите за да спречите проблематични ситуации.\nНе користете празни простори.\n\nОва поле обично се остава празно.",
        "config-db-charset": "Збир знаци за базата",
        "config-charset-mysql5-binary": "Бинарен за MySQL 4.1/5.0",
        "config-charset-mysql5": "UTF-8 за MySQL 4.1/5.0",
        "config-missing-db-server-oracle": "Мора да внесете вредност за „{{int:config-db-host-oracle}}“.",
        "config-invalid-db-server-oracle": "Неважечки TNS „$1“.\nКористете или „TNS Name“ или низата „Easy Connect“ ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методи на именување за Oracle])",
        "config-invalid-db-name": "Неважечко име на базата „$1“.\nКористете само ASCII-букви (a-z, A-Z), бројки (0-9), долни црти (_) и цртички (-).",
-       "config-invalid-db-prefix": "Ð\9dеважеÑ\87ки Ð¿Ñ\80еÑ\84икÑ\81 за базата „$1“.\nКористете само ASCII-букви (a-z, A-Z), бројки (0-9), долни црти (_) и цртички (-).",
+       "config-invalid-db-prefix": "Ð\9dеважеÑ\87ка Ð¿Ñ\80еÑ\82Ñ\81Ñ\82авка за базата „$1“.\nКористете само ASCII-букви (a-z, A-Z), бројки (0-9), долни црти (_) и цртички (-).",
        "config-connection-error": "$1.\n\nПроверете го долунаведениот домаќин, корисничко име и лозинка и обидете се повторно.",
        "config-invalid-schema": "Неважечка шема за МедијаВики „$1“.\nКористете само букви, бројки и долни црти.",
        "config-db-sys-create-oracle": "Воспоставувачот поддржува само употреба на SYSDBA-сметка за создавање на нова сметка.",
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 dda3d41..14321ff 100644 (file)
        "config-header-sqlite": "SQLite-instellingen",
        "config-header-oracle": "Oracle-instellingen",
        "config-header-mssql": "Instellingen voor Microsoft SQL Server",
-       "config-invalid-db-type": "Ongeldig databasetype",
+       "config-invalid-db-type": "Ongeldig databasetype.",
        "config-missing-db-name": "U moet een waarde opgeven voor \"{{int:config-db-name}}\".",
        "config-missing-db-host": "U moet een waarde invoeren voor \"{{int:config-db-host}}\".",
        "config-missing-db-server-oracle": "U moet een waarde opgeven voor \"{{int:config-db-host-oracle}}\".",
        "config-admin-email": "E-mailadres:",
        "config-admin-email-help": "Voer hier een e-mailadres in om e-mail te kunnen ontvangen van andere gebruikers op de wiki, uw wachtwoord opnieuw in te kunnen stellen en op de hoogte te worden gehouden van wijzigingen van pagina's op uw volglijst. U kunt het veld leeg laten.",
        "config-admin-error-user": "Interne fout bij het aanmaken van een beheerder met de naam \"<nowiki>$1</nowiki>\".",
-       "config-admin-error-password": "Interne fout bij het instellen van een wachtwoord voor de bejeerder \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
-       "config-admin-error-bademail": "U hebt een ongeldig e-mailadres opgegeven",
+       "config-admin-error-password": "Interne fout bij het instellen van een wachtwoord voor de beheerder \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+       "config-admin-error-bademail": "U hebt een ongeldig e-mailadres opgegeven.",
        "config-subscribe": "Abonneren op de [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailinglijst releaseaankondigen].",
        "config-subscribe-help": "Dit is een mailinglijst met een laag volume voor aankondigingen van nieuwe versies, inclusief belangrijke aankondigingen met betrekking tot beveiliging.\nAbonneer uzelf erop en werk uw MediaWiki-installatie bij als er nieuwe versies uitkomen.",
        "config-subscribe-noemail": "U hebt geprobeerd zich te abonneren op de mailinglijst voor release-aankondigingen zonder een e-mailadres op te geven.\nGeef een e-mailadres op als u zich wilt abonneren op de mailinglijst.",
        "config-email-watchlist": "Volglijstmeldingen inschakelen",
        "config-email-watchlist-help": "Gebruikers toestaan meldingen te ontvangen bij wijzigingen van pagina's op hun volglijst, als dit in de voorkeuren is ingesteld.",
        "config-email-auth": "E-mailbevestiging inschakelen",
-       "config-email-auth-help": "Als deze instelling actief is, moeten gebruikers hun e-mailadres bevestigen via een verwijziging die ze per e-mail wordt toegezonden.\nAlleen bevestigde e-mailadressen kunnen e-mail ontvangen van andere gebruikers of wijzigingsnotificaties ontvangen.\nHet inschakelen van deze instelling wordt '''aangeraden''' voor openbare wiki's vanwege de mogelijkheden voor misbruik van e-mailmogelijkheden.",
+       "config-email-auth-help": "Als deze instelling actief is, moeten gebruikers hun e-mailadres bevestigen via een verwijziging die zij per e-mail wordt toegezonden.\nAlleen bevestigde e-mailadressen kunnen e-mail ontvangen van andere gebruikers of wijzigingsnotificaties ontvangen.\nHet inschakelen van deze instelling wordt '''aangeraden''' voor openbare wiki's vanwege de mogelijkheden voor misbruik van e-mailmogelijkheden.",
        "config-email-sender": "E-mailadres voor antwoorden:",
        "config-email-sender-help": "Voer het e-mailadres in dat u wilt gebruiken als antwoordadres voor uitgaande e-mail.\nAls een e-mail niet bezorgd kan worden, wordt dat op dit e-mailadres gemeld.\nVeel mailservers vereisen dat tenminste het domein bestaat.",
        "config-upload-settings": "Afbeeldingen en bestanden uploaden",
index d5a2d8f..20f0b3e 100644 (file)
        "config-git": "Foi encontrado o software de controle de versão Git: <code>$1</code>.",
        "config-git-bad": "Não foi encontrado o software de controle de versão Git.",
        "config-imagemagick": "ImageMagick encontrado: <code>$1</code> .\nRedimensionamento de imagem será ativado se você permitir uploads.",
+       "config-gd": "Encontrada biblioteca gráfica GD embutida\nO redimensionamento de imagens será habilitado se você permitir uploads.",
+       "config-no-scaling": "Não foi possível encontrar biblioteca GD ou ImageMagick. \nO redimensionamento de imagens será desabilitado.",
        "config-no-uri": "<strong>Erro:</strong> Não foi possível determinar a URI atual. A instalação foi abortada.",
+       "config-no-cli-uri": "<strong>Aviso:</strong> Nenhum <code>--scriptpath</code> foi especificado, usando o padrão: <code>$1</code>.",
        "config-using-server": "Utilizando o nome do servidor \"<nowiki>$1</nowiki>\".",
        "config-using-uri": "Usando URL do servidor \"<nowiki>$1$2</nowiki>\".",
        "config-db-type": "Tipo de base de dados:",
        "config-db-install-username": "Digite o nome de usuário que será utilizado para conectar com o banco de dados durante o processo de instalação.\nEste não é a conta de usuário do MediaWiki; este é o nome de usuário para sua base de dados.",
        "config-db-install-password": "Digite a senha que será utilizada para conectar com o banco de dados durante o processo de instalação.\nEsta não é a senha de usuário da conta do MediaWiki; esta será a senha para seu banco de dados.",
        "config-db-install-help": "Digite o nome de usuário e a senha que serão utilizados para conectar com o banco de dados durante o processo de instalação.",
+       "config-db-wiki-account": "Conta de usuário para operação normal",
+       "config-db-wiki-help": "Digite o nome de usuário e senha que será usada para se conectar ao banco de dados durante a operação normal wiki.\nSe a conta não existir, e a conta de instalação tiver privilégios suficientes, a conta do usuário será criada com os privilégios mínimos necessários para o funcionamento do wiki.",
        "config-db-prefix": "Prefixo da tabela de banco de dados:",
        "config-db-prefix-help": "Se você precisar compartilhar a base de dados entre várias wikis, ou entre o MediaWiki e uma outra aplicação web, você pode deve escolher adicionar um prefixo ao nome de todas as tabelas para evitar conflitos.\nNão utilize espaços.\n\nEste campo é habitualmente deixado em branco.",
        "config-db-charset": "Conjunto de caracteres do banco de dados",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 binary",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+       "config-charset-mysql4": "MySQL 4.0 compatível com versões anteriores UTF-8",
        "config-mysql-old": "MySQL $1 ou posterior é necessário. Você tem $2.",
        "config-db-port": "Porta da base de dados:",
        "config-db-schema": "Esquema para MediaWiki",
        "config-sqlite-connection-error": "$1\n\nVerifique o diretório de dados e nome da base de dados abaixo e tente novamente.",
        "config-sqlite-readonly": "Não é possível escrever no arquivo <code>$1</code>.",
        "config-sqlite-cant-create-db": "Não foi possível criar o arquivo da base de dados <code>$1</code>.",
+       "config-regenerate": "Regenerar arquivo LocalSettings.php →",
+       "config-show-table-status": "Consulta <code>SHOW TABLE STATUS</code> falhou!",
+       "config-unknown-collation": "<strong>Aviso:</strong> O banco de dados está usando agrupamento não reconhecido.",
        "config-db-web-account": "Conta da base de dados para acesso web",
        "config-db-web-help": "Escolha um nome de usuário e uma senha que o servidor web irá utilizar para se conectar ao servidor da base de dados durante o funcionamento normal da wiki.",
        "config-db-web-account-same": "Use a mesma conta usada na instalação",
index 3a16079..b57ebf9 100644 (file)
@@ -70,7 +70,7 @@
        "config-no-db": "{{doc-important|Do not translate \"<code>./configure --with-mysqli</code>\" and \"<code>php5-mysql</code>\".}}\nParameters:\n* $1 is comma separated list of database types supported by MediaWiki.",
        "config-outdated-sqlite": "Used as warning. Parameters:\n* $1 - the version of SQLite that has been installed\n* $2 - minimum version",
        "config-no-fts3": "A \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.",
-       "config-register-globals": "Status message in the MediaWiki installer environment checks.",
+       "config-register-globals-error": "Error message in the MediaWiki installer environment checks.",
        "config-magic-quotes-runtime": "{{Related|Config-fatal}}",
        "config-magic-quotes-sybase": "{{Related|Config-fatal}}",
        "config-mbstring": "{{Related|Config-fatal}}",
index b53706d..53010fb 100644 (file)
@@ -65,6 +65,7 @@
        "config-mbstring": "'''Kritiskt: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] är aktiv!'''\nDetta alternativ orsakar fel och kan korrumpera data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.",
        "config-safe-mode": "''' Varning:''' PHP:s [http://www.php.net/features.safe-mode felsäkra läge] är aktivt.\nDet kan orsaka problem, särskilt om du använder filuppladdningar och <code>math</code>-stöd.",
        "config-xml-bad": "PHP:s XML-modul saknas.\nMediaWiki kräver funktioner i denna modul och kommer inte att fungera i den här konfigurationen.\nOm du kör Mandrake, installera php-xml-paketet.",
+       "config-pcre-old": "'''Kritiskt:''' PCRE $1 eller senare krävs.\nDin PHP-binär är länkad till PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mer information].",
        "config-pcre-no-utf8": "'''Kritiskt:''' PHP:s PCRE-modul verkar vara kompilerat utan PCRE_UTF8-stöd.\nMediaWiki kräver stöd för UTF-8 för att fungera korrekt.",
        "config-memory-raised": "PHPs <code>memory_limit</code> är $1, ökad till $2.",
        "config-memory-bad": "''' Varning:''' PHP:s <code>memory_limit</code> är $1.\nDetta är förmodligen för lågt.\nInstallationen kan misslyckas!",
@@ -98,6 +99,7 @@
        "config-db-name": "Databasnamn:",
        "config-db-name-help": "Välj ett namn som identifierar din wiki.\nDet bör inte innehålla mellanslag.\n\nOm du använder ett delat webbhotell kan de antingen ge dig ett särskilt databasnamn att använda eller så kan de låta dig skapa en databas via kontrollpanelen.",
        "config-db-name-oracle": "Databasschema:",
+       "config-db-account-oracle-warn": "Det finns tre stödda scenarier för installationen av Oracle som en backend-databas:\n\nOm du vill skapa ett databaskonto som en del av installationen, ange ett konto med SYSDBA-roll som databaskonto under installationen och ange de önskade autentiseringsuppgifterna för kontot med webb-åtkomst, annars kan du antingen skapa ett konto med webb-åtkomst manuellt och ange enbart detta konto (om den har behörighet att skapa schema-objekt) eller ange två olika konton, en med create-behörighet och en begränsad för webb-åtkomst.\n\nSkript för att skapa ett konto med de korrekta behörigheterna kan hittas i \"maintenance/oracle/\"-katalogen för denna installation. Tänk på att användningen av ett begränsat konto inaktiverar all underhållsmöjlighet med standardkontot.",
        "config-db-install-account": "Användarkonto för installation",
        "config-db-username": "Databas-användarnamn:",
        "config-db-password": "Databas-lösenord:",
        "config-db-schema-help": "Det här schemat blir oftast bra.\nÄndra det endast om du vet att du behöver.",
        "config-pg-test-error": "Kan inte ansluta till databas '''$1''': $2",
        "config-sqlite-dir": "SQLite data-katalog:",
+       "config-sqlite-dir-help": "SQLite lagrar all data i en enda fil.\n\nDen katalog du anger måste vara skrivbar av webbservern under installationen.\n\nDet bör <strong>inte</strong> vara tillgänglig via webben; Det är därför vi inte lägger den där dina PHP-filer är.\n\nInstallationsprogrammet kommer att skriva en <code>.htaccess</code>-fil tillsammans med den, men om det misslyckas kan någon få tillgång till den råa databasen.\nVlken innehåller rå användardata (e-postadresser, hashade lösenord) samt borttagna revideringar och annan begränsad data på wiki.\n\nÖverväga att lägga databasen någon helt annanstans, till exempel i <code>/var/lib/mediawiki/yourwiki</code>.",
+       "config-oracle-def-ts": "Standardtabellutrymme (tablespace):",
+       "config-oracle-temp-ts": "Tillfälligt tabellutrymme (tablespace):",
        "config-type-mysql": "MySQL (eller kompatibelt)",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki stöder följande databassystem:\n\n$1\n\nOm du inte ser det databassystem som du försöker använda nedanstående, följ då instruktionerna länkade ovan för aktivera stöd för det.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] är det primära målet för MediaWiki och det stöds bäst. MediaWiki fungerar även med [{{int:version-db-mariadb-url}} MariaDB] och [{{int:version-db-percona-url}} Percona Server], som är kompatibla med MySQL. ([http://www.php.net/manual/en/mysqli.installation.php Hur man kompilerar PHP med stöd för MySQL])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] är ett populärt databassystem med öppen källkod som ett alternativ till MySQL. Det kan finnas några mindre kvarvarande buggar, och den rekommenderas inte för användning i en produktionsmiljö. ([http://www.php.net/manual/en/pgsql.installation.php Hur man kompilerar PHP med PostgreSQL stöd])",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] är en lättviktsdatabassystem med väldigt bra stöd. ([http://www.php.net/manual/en/pdo.installation.php Hur man kompilerar PHP med SQLite stöd], använder PDO)",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] är en kommersiellt databas för företag. ([http://www.php.net/manual/en/oci8.installation.php Hur man kompilerar PHP med OCI8 stöd])",
+       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] är en kommersiellt databas för företag för Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Hur man kompilerar PHP med SQLSRV stöd])",
        "config-header-mysql": "MySQL-inställningar",
        "config-header-postgres": "PostgreSQL-inställningar",
        "config-header-sqlite": "SQLite-inställningar",
        "config-header-oracle": "Oracle-inställningar",
+       "config-header-mssql": "Inställningar för Microsoft SQL Server",
        "config-invalid-db-type": "Ogiltig databastyp",
        "config-missing-db-name": "Du måste ange ett värde för \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Du måste ange ett värde för \"{{int:config-db-host}}\".",
        "config-missing-db-server-oracle": "Du måste ange ett värde för \"{{int:config-db-host-oracle}}\".",
+       "config-invalid-db-server-oracle": "Ogiltig databas-TNS \"$1\".\nAnvända antingen \"TNS Name\" eller en \"Easy Connect\"-sträng ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracles namngivningsmetoder]).",
        "config-invalid-db-name": "\"$1\" är ett ogiltigt databasnamn.\nAnvänd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).",
        "config-invalid-db-prefix": "\"$1\" är ett ogiltigt databasprefix.\nAnvänd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).",
        "config-connection-error": "$1.\n\nKontrollera värd, användarnamn och lösenord och försök igen.",
        "config-postgres-old": "PostgreSQL $1 eller senare krävs, du har $2.",
        "config-mssql-old": "Microsoft SQL-server $1 eller senare krävs. Du har $2.",
        "config-sqlite-name-help": "Välja ett namn som identifierar din wiki.\nAnvänd inte mellanslag eller bindestreck.\nDetta kommer att användas för SQLite-data filnamnet.",
+       "config-sqlite-parent-unwritable-group": "Kan inte skapa datakatalogen <code><nowiki>$1</nowiki></code>, då den överordnade katalogen <code><nowiki>$2</nowiki></code> inte är skrivbar för webbservern.\n\nInstallationen har avgjort vilken användare din webbserver körs som.\nGör <code><nowiki>$3</nowiki></code>-katalogen skrivbar för den för att fortsätta.\nPå ett Unix/Linux system gör:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+       "config-sqlite-parent-unwritable-nogroup": "Kan inte skapa datakatalogen <code><nowiki>$1</nowiki></code>, då den överordnade katalogen <code><nowiki>$2</nowiki></code> inte är skrivbar för webbservern.\n\nInstallationen kunde inte avgöra vilken användare din webbserver körs som.\nGör <code><nowiki>$3</nowiki></code>-katalogen skrivbar för den (och andra!) för att fortsätta.\nPå ett Unix/Linux system gör:\n\n<pre>cd $2\nmkdir $3\nchmod g+w $3</pre>",
        "config-sqlite-mkdir-error": "Fel uppstod när datakatalogen \"$1\" skulle skapas.\nKontrollera platsen och försök igen.",
+       "config-sqlite-dir-unwritable": "Kunde inte skriva till katalogen \"$1\".\nÄndra dess behörighet så att webbservern kan skriva till den och försök igen.",
+       "config-sqlite-connection-error": "$1.\n\nKontrollera datakatalogen och databasnamnet nedan och försök igen.",
        "config-sqlite-readonly": "Filen <code>$1</code> är inte skrivbar.",
        "config-sqlite-cant-create-db": "Kunde inte skapa databasfilen <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "PHP saknar stöd för FTS3, nedgraderar tabeller",
        "config-upgrade-done": "Uppgraderingen slutfördes.\n\nDu kan nu [$1 börja använda din wiki].\n\nOm du vill förnya din <code>LocalSettings.php</code>-fil, klicka på knappen nedan.\nDetta '''rekommenderas inte''' om du har problem med din wiki.",
        "config-upgrade-done-no-regenerate": "Uppgraderingen slutfördes.\n\nDu kan nu [$1 börja använda din wiki].",
        "config-regenerate": "Återskapa LocalSettings.php →",
+       "config-show-table-status": "<code>SHOW TABLE STATUS</code>-förfrågan misslyckades!",
        "config-unknown-collation": "'''Varning:''' Databasen använder en okänd sortering.",
        "config-db-web-account": "Databaskonto för webbaccess",
        "config-db-web-help": "Välj det användarnamn och lösenord som webbservern använder för att ansluta till databasservern, under ordinarie drift av wikin.",
        "config-mysql-utf8": "UTF-8",
        "config-mysql-charset-help": "I '''binärt läge''' lagrar MediaWiki UTF-8 text till databasen i binära fält.\nDetta är mer effektivt än MySQLs UTF-8-läge, och den tillåter dig att använda den fulla uppsättningen av Unicode-tecken.\n\nI '''UTF-8-läge''' vet MySQL vilket teckenuppsättning din data är i och kan presentera och konvertera den på ett lämpligt sätt, men den tillåter dig inte att lagra tecken över [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
        "config-mssql-auth": "Autentiseringstyp:",
+       "config-mssql-install-auth": "Välj autentiseringstypen som kommer att användas för att ansluta till databasen under installationsprocessen.\nOm du väljer \"{{int:config-mssql-windowsauth}}\", kommer autentiseringsuppgifterna för den användare webbservern körs som att användas.",
+       "config-mssql-web-auth": "Välj autentiseringstypen som kommer att användas för att ansluta till databasen under ordinarie drift av wikin.\nOm du väljer \"{{int:config-mssql-windowsauth}}\", kommer autentiseringsuppgifterna för den användare webbservern körs som att användas.",
        "config-mssql-sqlauth": "SQL Server-autentisering",
        "config-mssql-windowsauth": "Windows-autentisering",
        "config-site-name": "Namnet på wikin:",
        "config-ns-generic": "Projekt",
        "config-ns-site-name": "Samma som wikinamnet: $1",
        "config-ns-other": "Annan (specificera)",
+       "config-ns-other-default": "MinWiki",
+       "config-project-namespace-help": "Per Wikipedias exempel håller många wikis sina policy-sidor separata från innehållssidorna i en \"'''projektnamnrymd'''\".\nAlla sidtitlar i denna namnrymd startar med ett visst prefix vilket du specificerar här.\nVanligtvis kan detta namn härledas från namnet på wikin, men den får inte innehålla interpunktionstecken som exempelvis \"#\" eller \":\".",
        "config-ns-invalid": "Den angivna namnrymden \"<nowiki>$1</nowiki>\" är ogiltig.\nAnge en annan namnrymd för projektet.",
        "config-ns-conflict": "Den angivna namnrymden \"<nowiki>$1</nowiki>\" står i konflikt med en standardnamnrymd för MediaWiki.\nAnge en annan namnrymd för projektet.",
        "config-admin-box": "Administratörskonto",
        "config-admin-error-password": "Internt fel lösenordet för administratören \"<nowiki>$1</nowiki>\" ställdes in: <pre>$2</pre>",
        "config-admin-error-bademail": "Du har angivit en ogiltig e-postadress.",
        "config-subscribe": "Prenumerera på [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce e-postlistan för kungörelser av nya versioner].",
+       "config-subscribe-help": "Detta är en e-postlista med låg volym vilken används för meddelanden om nya versionssläpp, inklusive viktiga säkerhetsmeddelanden.\nDu bör prenumerera på den och uppdatera din MediaWiki-installation när nya versioner kommer ut.",
+       "config-subscribe-noemail": "Du försökte att prenumerera på e-postlistan för versionssläppsmeddelanden utan att tillhandahålla en e-postadress.\nAnge en e-postadress om du vill prenumerera på e-postlistan.",
        "config-almost-done": "Du är nästan färdig!\nDu kan nu hoppa över återstående konfigurationer och installera wikin direkt.",
        "config-optional-continue": "Ställ fler frågor till mig.",
        "config-optional-skip": "Jag är redan uttråkad, bara installera wiki.",
+       "config-profile": "Profil för användarrättigheter:",
        "config-profile-wiki": "Öppen wiki",
        "config-profile-no-anon": "Kontoskapande krävs",
        "config-profile-fishbowl": "Endast auktoriserade redigerare",
        "config-profile-private": "Privat wiki",
+       "config-profile-help": "Wikis fungerar bäst när du låter som många människor som möjligt redigera dem.\nI MediaWiki, är det lätt att granska de senaste ändringarna och återställa alla skador som utförs av naiva eller illvilliga användare.\n\nMen många har funnit MediaWiki användbart i en mängd olika roller, och ibland är det inte lätt att övertyga alla fördelarna med wiki-sättet.\nSå valet är ditt.\n\nModellen <strong>{{int:config-profil-wiki}}</strong> tillåter vem som helst att redigera, utan att ens behöva logga in.\nEn wiki med <strong>{{int:config-profil-ingen-anon}}</strong> ger extra ansvarskänsla, men kan avskräcka tillfälliga bidragsgivare.\n\nScenariot <strong>{{int:config-profil-fishbowl}}</strong> tillåter godkända användare att redigera, men allmänheten kan se sidorna, inklusive historik.\nA <strong>{{int:config-profil-privat}}</strong> tillåter endast godkända användare att se sidor, samma grupp får även redigera.\n\nMer komplexa användarrättighetskonfigurationer finns tillgängliga efter installationen, se [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights avsnittet i manualen].",
        "config-license": "Upphovsrätt och licens:",
        "config-license-none": "Ingen licenssidfot",
        "config-license-cc-by-sa": "Creative Commons Erkännande-DelaLika",
        "config-license-gfdl": "GNU Free Documentation License 1.3 eller senare",
        "config-license-pd": "Public Domain",
        "config-license-cc-choose": "Välj en anpassad Creative Commons-licens",
+       "config-license-help": "Många publika wikis släpper alla bidrag under en  [http://freedomdefined.org/Definition fri licens].\nDetta bidrar till en känsla av gemensamt ägandeskap och uppmuntrar till långsiktiga bidrag.\nDet är i allmänhet inte nödvändigt för en privat eller företagswiki.\n\nOm du vill kunna använda text från Wikipedia, och du vill att Wikipedia ska kunna acceptera text kopierad ifrån din wiki bör du välja <strong>Creative Commons Erkännande-DelaLika</strong>.\n\nWikipedia använde tidigare  GNU Free Documentation License.\nGFDL är en giltig licens, men svår att förstå.\nDet är även svårt att återanvända innehåll som licensierats under GFDL.",
        "config-email-settings": "E-postinställningar",
        "config-enable-email": "Aktivera utgående e-post",
+       "config-enable-email-help": "Om du vill att e-post ska fungera behöver,[http://www.php.net/manual/en/mail.configuration.php PHPs e-postinställningar] vara konfigurerad på rätt sätt.\nOm du inte vill ha några e-postfunktioner, kan du inaktivera dem här.",
        "config-email-user": "Aktivera e-post mellan användare",
        "config-email-user-help": "Tillåta alla användare att skicka e-post till varandra om de har aktiverat det i sina inställningar.",
        "config-email-usertalk": "Aktivera meddelanden för användardiskussionssidor",
+       "config-email-usertalk-help": "Tillåt användare att få meddelanden när användardiskussionssidor ändras, om de har aktiverat detta i sina inställningar.",
        "config-email-watchlist": "Aktivera meddelanden för bevakningslistan",
+       "config-email-watchlist-help": "Tillåt användare att få meddelanden när deras bevakade sidor ändras, om de har aktiverat detta i sina inställningar.",
        "config-email-auth": "Aktivera autentisering via e-post",
+       "config-email-auth-help": "Om detta alternativ är aktiverat, måste användare bekräfta sin e-postadress via en länk som skickas till dem när de ställer in eller ändra den.\nEndast autentiserade e-postadresser kan ta emot e-post från andra användare eller ändra aviserings-e-post.\nDet här alternativet är <strong>rekommenderat</strong> för offentliga wikis på grund av potentiellt missbruk av e-postfunktionerna.",
+       "config-email-sender": "Returadress för e-post:",
+       "config-email-sender-help": "Ange den e-postadressen som ska användas som returadress på utgående e-post.\nDetta är dit studsar skickas.\nMånga mailservrar kräver att minst domännamndelen är giltigt.",
        "config-upload-settings": "Bild- och filuppladdningar",
        "config-upload-enable": "Aktivera filuppladdningar",
+       "config-upload-help": "Filuppladdning utsätter potentiellt din server för säkerhetsrisker.\nFör mer information, Läs  [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security säkerhetsavsnittet] i manualen.\n\nFör att aktivera filuppladdning, ändra läget för <code>images</code>-underkatalogen under rotkatalogen för MediaWiki så att webbservern kan skriva till den.\nAktivera sedan detta alternativ.",
        "config-upload-deleted": "Katalog för raderade filer:",
+       "config-upload-deleted-help": "Välja en katalog i vilken raderade filer arkiveras.\nHelst bör denna inte vara tillgängliga från webben.",
        "config-logo": "Logotyp-URL:",
        "config-logo-help": "MediaWikis standardutseende innehåller ett mellanrum för en 135x160 bildpunkter stor logotyp ovanför sidofältsmenyn.\nLadda upp en bild med lämplig storlek och ange webbadressen här.\n\nDu kan använda <code>$wgStylePath</code> eller <code>$wgScriptPath</code> om din logotyp är relativ till dessa sökvägar.\n\nOm du inte vill ha en logotyp kan du lämna detta fält tomt.",
        "config-instantcommons": "Aktivera Instant Commons",
+       "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] är en funktion som gör det möjligt för wikis att använda bilder, ljud och andra media som finns på [//commons.wikimedia.org/ Wikimedia Commons]-webbplatsen.\nFör att göra detta, kräver MediaWiki tillgång till Internet.\n\nFör mer information om denna funktion, inklusive instruktioner om hur man ställer in den för andra wikis än Wikimedia Commons, se [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos manualen].",
        "config-cc-error": "Creative Commons-licens-väljaren gav inget resultat.\nAnge licensnamnet manuellt.",
        "config-cc-again": "Välj igen...",
        "config-cc-not-chosen": "Välj vilken Creative Commons-licens du vill ha och klicka på \"gå vidare\".",
        "config-advanced-settings": "Avancerad konfiguration",
+       "config-cache-options": "Inställningar för cachelagring av objekt:",
+       "config-cache-help": "Cachelagring av objekt används för att förbättra hastigheten på MediaWiki genom att cachelagra data som används ofta.\nMedelstora till stora webbplatser är starkt uppmuntrade att aktivera detta, och små webbplatser kommer även att se fördelar.",
+       "config-cache-none": "Ingen cachelagring (ingen funktionalitet tas bort, men hastighet kan påverkas på större wiki-webbplatser)",
+       "config-cache-accel": "Cachelagring av PHP-objekt (APC, XCache eller WinCache)",
+       "config-cache-memcached": "Använda Memcached (kräver ytterligare inställningar och konfiguration)",
+       "config-memcached-servers": "Memcached-servrar:",
+       "config-memcached-help": "Lista över IP-adresser som ska användas för Memcached.\nBör ange en per rad och specificera den port som ska användas. Till exempel:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+       "config-memcache-needservers": "Du valde Memcached som din cachelagringstyp men angav inte några servrar.",
+       "config-memcache-badip": "Du har angett en ogiltig IP-adress för Memcached: $1.",
+       "config-memcache-noport": "Du angav inte en port som ska användas för Memcached-server: $1.\nOm du inte vet porten, är standard 11211.",
+       "config-memcache-badport": "Memcached-portnummer bör vara mellan $1 och $2.",
        "config-extensions": "Tillägg",
+       "config-extensions-help": "Tilläggen ovan upptäcktes i din <code>./extensions</code>-katalog.\n\nDe kan kräva ytterligare konfiguration, men du kan aktivera dem nu.",
        "config-install-alreadydone": "''' Varning:''' Du verkar redan ha installerat MediaWiki och försöker installera det igen.\nVänligen fortsätt till nästa sida.",
        "config-install-begin": "Genom att trycka på \"{{int:config-continue}}\", påbörjar du installationen av MediaWiki.\nOm du fortfarande vill göra ändringar tryck på \"{{int:config-back}}\".",
        "config-install-step-done": "klar",
        "config-install-pg-plpgsql": "Kontroll för språket PL/pgSQL",
        "config-pg-no-plpgsql": "Du måste installera språket PL/pgSQL i databasen $1",
        "config-pg-no-create-privs": "Det konto som du har angett för installationen har inte tillräcklig behörighet för att skapa ett konto.",
+       "config-pg-not-in-role": "Det konto du angav för webbanvändaren finns redan.\nKontot du angav för installationen är inte en superanvändare (superuser) och är inte en medlem av webbanvändarens roll, därför kan den inte skapa objekt som ägs av webbanvändaren.\n\nMediaWiki kräver för närvarande att tabellerna ägs av webbanvändaren. Vänligen ange ett annat webbkontonamn, eller klicka \"tillbaka\" och ange en installationsanvändare med passande behörigheter.",
        "config-install-user": "Skapar databasanvändare",
        "config-install-user-alreadyexists": "Användaren \"$1\" finns redan",
        "config-install-user-create-failed": "Misslyckades att skapa användare \"$1\": $2",
        "config-install-tables-failed": "'''Fel:''' Skapandet av tabell misslyckades med följande fel: $1",
        "config-install-interwiki": "Lägger till standardtabell för interwiki",
        "config-install-interwiki-list": "Kunde inte läsa filen <code>interwiki.list</code>.",
+       "config-install-interwiki-exists": "<strong>Varning:</strong> Interwiki-tabellen verkar redan innehålla poster.\nHoppar över standardlistan.",
        "config-install-stats": "Initierar statistik",
        "config-install-keys": "Genererar hemliga nycklar",
        "config-insecure-keys": "'''Varning:''' {{PLURAL:$2|En säkerhetsnyckel|Säkerhetsnycklar}} ($1) som generades under installationen är inte helt {{PLURAL:$2|säker|säkra}} . Överväg att ändra {{PLURAL:$2|den|dem}} manuellt.",
index 5d795e7..9a894c2 100644 (file)
        "config-db-install-account": "Account ng tagagamit para sa pagluluklok",
        "config-db-username": "Pangalang pangtagagamit ng kalipunan ng dato:",
        "config-db-password": "Password sa kalipunan ng dato:",
-       "config-db-password-empty": "Paki magpasok ng isang hudyat para sa bagong tagagamit ng kalipunan ng dato: $1.\nHabang maging maaari na makalikha ng mga tagagamit na walang mga hudyat, hindi ito ligtas.",
+       "config-db-password-empty": "Paki magpasok ng isang password para sa bagong tagagamit ng databas: $1.\nHabang maging maaari na makalikha ng mga tagagamit na walang mga passwrod, hindi ito ligtas.",
        "config-db-install-username": "Ipasok ang pangalan ng tagagamit na gagamitin upang kumabit sa database habang isinasagawa ang pag-install.\nHindi ito ang pangalan ng tagagamit ng account ng MediaWiki; ito ang pangalan ng tagagamit para sa iyong database.",
        "config-db-install-password": "Ipasok ang password na gagamitin upang maka-connect sa database habang isinasagawa ang pag-install.\nHindi ito ang password para sa account ng MediaWiki; ito ang password para sa iyong database.",
-       "config-db-install-help": "Ipasok ang pangalan ng tagagamit at hudyat na gagamitin upang umugnay sa kalipunan ng dato habang isinasagawa ang pagluluklok.",
+       "config-db-install-help": "Ipasok ang pangalan ng tagagamit at password na gagamitin upang umugnay sa databasehabang isinasagawa ang pag-install.",
        "config-db-account-lock": "Gamitin ang kaparehong pangalan at password habang nasa normal na operasyon",
        "config-db-wiki-account": "Account ng tagagamit para sa pangkaraniwang pagpapaandar",
        "config-db-wiki-help": "Ipasok ang pangalan ng tagagamit at password na gagamitin upang kumabit sa database habang nasa karaniwang pagtakbo ng wiki.\nKung hindi umiiral ang account, at ang pag-install ng account ay mayroong sapat na mga pribilehiyo, ang account na ito ng tagagamit ay lilikhain na mayroong pinaka mababang mga pribilehiyo na kailangan upang mapatakbo ang wiki.",
        "config-db-schema-help": "Ang nasa itaas na panukala ay pangkaraniwang magiging maayos.\nBaguhin lamang ito kung alam mong kinakailangan.",
        "config-pg-test-error": "Hindi makakabit sa kalipunan ng dato na '''$1''': $2",
        "config-sqlite-dir": "Direktoryo ng dato ng SQLite:",
-       "config-sqlite-dir-help": "Iniimbak ng SQLite ang lahat ng dato sa loob ng isang nag-iisang talaksan.\n\nAng ibibigay mong direktoryo ay dapat na maging masusulatan ng tagapaghain ng kasaputan habang nagluluklok.\n\n'''Hindi''' ito dapat na mapuntahan sa pamamagitan ng kasaputan, ito ang dahilan kung bakit hindi namin ito inilalagay sa kung nasaan ang iyong mga talaksan ng PHP.\n\nAng tagapagluklok ay magsusulat ng isang talaksang <code>.htaccess</code> na kasama ito, subalit kapag nabigo iyon mayroong isang tao na maaaring makakuha ng pagka nakakapunta sa iyong hilaw na kalipunan ng dato.\nKasama riyan ang hilaw na dato ng tagagamit (mga tirahan ng e-liham, pinaghalong mga hudyat) pati na ang nabura nang mga pagbabago at iba pang may pagbabawal na dato sa ibabaw ng wiki.\n\nIsaalang-alang ang paglalagay na magkakasama ang kalipunan ng dato sa ibang lugar, halimbawa na ang sa loob ng <code>/var/lib/mediawiki/yourwiki</code>.",
+       "config-sqlite-dir-help": "Iniimbak ng SQLite ang lahat ng dato sa loob ng isang nag-iisang file.\n\nAng ibibigay mong directory ay dapat na maging masusulatan ng tagapaghain ng kasaputan habang nag-i-install.\n\n'''Hindi''' ito dapat na mapuntahan sa pamamagitan ng web server, ito ang dahilan kung bakit hindi namin ito inilalagay sa kung nasaan ang iyong mga file ng PHP.\n\nAng installer ay magsusulat ng isang file na <code>.htaccess</code> na kasama ito, subalit kapag nabigo iyon mayroong isang tao na maaaring makakuha ng pagka nakakapunta sa iyong hilaw na database.\nKasama riyan ang hilaw na dato ng tagagamit (mga email address, pinaghalong mga password) pati na ang nabura nang mga pagbabago at iba pang may pagbabawal na dato ng wiki.\n\nIsaalang-alang ang paglalagay na magkakasama ang database sa ibang lugar, halimbawa na ang sa loob ng <code>/var/lib/mediawiki/yourwiki</code>.",
        "config-oracle-def-ts": "Likas na nakatakdang puwang ng talahanayan:",
        "config-oracle-temp-ts": "Pansamantalang puwang ng talahanayan:",
        "config-type-mysql": "MySQL",
        "config-show-table-status": "Nabigo ang pagtatanong na IPAKITA ANG KALAGAYAN NG TALAHANAYAN!",
        "config-unknown-collation": "'''Babala:''' Ang kalipunan ng dato ay gumagagamit ng hindi nakikilalang pag-iipon.",
        "config-db-web-account": "Account ng kalipunan ng dato para sa pagpunta sa web",
-       "config-db-web-help": "Piliin ang pangalan ng tagagamit at hudyat na gagamitin ng tagapaghain ng web upang umugnay sa tagapaghain ng kalipunan ng dato, habang nasa pangkaraniwang pagtakbo ng wiki.",
+       "config-db-web-help": "Piliin ang pangalan ng tagagamit at password na gagamitin ng tagapaghain ng web upang umugnay sa tagapaghain ng database, habang nasa pangkaraniwang pagtakbo ng wiki.",
        "config-db-web-account-same": "Gamitin ang gayun din account katulad ng sa pag-install",
        "config-db-web-create": "Likhain ang account kung hindi pa ito umiiral",
        "config-db-web-no-create-privs": "Ang tinukoy mong account na iluluklok ay walang sapat na mga pribilehiyo upang makalikha ng isang account.\nAng account na tutukuyin mo rito ay umiiral na dapat.",
        "config-admin-password-blank": "Magpasok ng isang password para sa account ng tagapangasiwa.",
        "config-admin-password-mismatch": "Hindi magkatugma ang ipinasok mong dalawang mga password.",
        "config-admin-email": "Tirahan ng e-liham:",
-       "config-admin-email-help": "Magpasok dito ng isang tirahan ng e-liham upang mapahintulutan kang makatanggap ng e-liham mula sa iba pang mga tagagamit sa ibabaw ng wiki, itakdang muli ang hudyat mo, at mapabatiran ng mga pagbabago sa mga pahinang nasa ibabaw ng iyong tala ng mga binabantayan. Maiiwanan mo na walang laman ang hanay na ito.",
+       "config-admin-email-help": "Magpasok dito ng isang email address upang mapahintulutan kang makatanggap ng email mula sa iba pang mga tagagamit ng wiki, itakdang muli ang password mo, at mabatid ang mga pagbabago sa mga pahinang nasa ibabaw ng iyong tala ng mga binabantayan. Maiiwanan mo na walang laman ang field na ito.",
        "config-admin-error-user": "Panloob na kamalian kapag nililikha ang isang tagapangasiwa na may pangalang \"<nowiki>$1</nowiki>\".",
-       "config-admin-error-password": "Panloob na kamalian kapag nagtatakda ng isang hudyat na para sa tagapangasiwang \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+       "config-admin-error-password": "Panloob na kamalian kapag nagtatakda ng isang password na para sa tagapangasiwang \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
        "config-admin-error-bademail": "Nagpasok ka ng isang hindi katanggap-tanggap na tirahan ng e-liham.",
        "config-subscribe": "Tumanggap mula sa [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce talaan ng mga pinadadalhan ng mga nilalabas na mga pabatid].",
        "config-subscribe-help": "Isang itong tala ng pagliliham na mababa ang dami na ginagamit para sa pagpapakawala ng mga pahayag, kabilang na ang mahahalagang mga pahayag na pangkatiwasayan. Dapat kang magpasipi nito at isapanahon ang iyong nakaluklok na MediaWiki kapag lumalabas ang bagong mga bersiyon.",
index d4f7e18..6ec8860 100644 (file)
@@ -5,7 +5,8 @@
                        "Joseph",
                        "Rhinestorm",
                        "SiLveRLeaD",
-                       "Trncmvsr"
+                       "Trncmvsr",
+                       "Sayginer"
                ]
        },
        "config-desc": "MediaWiki yükleyicisi",
@@ -71,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-admin-name": "Kullanıcı adınız:",
        "config-admin-password": "Şifre:",
        "config-admin-password-confirm": "Şifre tekrar:",
+       "config-admin-help": "Buraya tercih ettiğiniz kullanıcı adını girin; örneğin \"Joe Bloggs\". Bu vikide oturum açmak için kullanacağınız addır.",
        "config-admin-name-blank": "Bir yönetici kullanıcı adını giriniz.",
        "config-admin-name-invalid": "Belirtilen ad \"<nowiki> $1 </nowiki>\" geçersiz.\nFarklı bir kullanıcı adı belirtin.",
        "config-admin-password-blank": "Yönetici hesabı için bir parola girin.",
        "config-optional-skip": "Şimdiden sıkıldım, sadece wikiyi yükle.",
        "config-profile": "Kullanıcı hakları profili:",
        "config-profile-wiki": "Açık wiki",
+       "config-profile-no-anon": "Hesap oluşturmak gerekli",
        "config-profile-fishbowl": "Yalnızca yetkili editörler",
        "config-profile-private": "Özel wiki",
+       "config-profile-help": "Vikiler, mümkün olan en fazla kişiye değişiklik imkânı verdiğinizde, en iyi şekilde çalışır.\nMediaWiki'de son değişiklikleri incelemek ve tecrübesiz veya kötü niyetli kullanıcıların verdiği zararları geri almak kolaydır.\n\nAncak birçok kişi MediaWiki'yi farklı şekillerde kullanışlı bulmaktadır ve bazen herkesi viki yolunun faydalarına ikna etmek zordur.\nYani seçim sizin.\n\n<strong>{{int:config-profile-wiki}}</strong> modeli, giriş yapmamış olsa bile herkese değişiklik izni verir.\n\n<strong>{{int:config-profile-no-anon}}</strong> kullanan bir viki ise daha izlenebilirdir ancak sıradan, basit, gündelik katkı yapan kullanıcıları caydırabilir.\n\n<strong>{{int:config-profile-fishbowl}}</strong> onaylanmış kullanıcıların değişikliklerine izin verir ama herkes sayfaları ve sayfa geçmişlerini görebilir.\n\n<strong>{{int:config-profile-private}}</strong> sadece onaylanmış kullanıcıları değişiklik yapma ve sayfaları görme imkânı tanır.\n\nDaha karmaşık kullanıcı hakkı ayarları, yüklemeden sonra görülebilir; [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights ilgili kılavuza] bakınız.",
        "config-license": "Telif Hakkı ve Lisans",
        "config-license-gfdl": "GNU Free Documentation License 1.3 veya üstü",
        "config-license-pd": "Kamu Malı",
        "config-email-settings": "E-posta ayarları",
        "config-enable-email": "Giden e-posta etkinleştirme",
        "config-email-user": "Kullanıcıdan kullanıcıya e-posta gönderimini etkinleştir",
+       "config-email-user-help": "Eğer tercihlerinde etkinleştirmişlerse, kullanıcıların birbirlerine e-posta göndermesine izin ver.",
+       "config-email-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 f04fd5d..47749b7 100644 (file)
@@ -8,6 +8,7 @@
        "config-desc": "דער אינסטאלירער פאר מעדיעוויקי",
        "config-title": "מעדיעוויקי $1 אינסטאלירונג",
        "config-information": "אינפֿארמאציע",
+       "config-localsettings-badkey": "דעם שליסל וואס איר האט אײַנגעגעבן איז פאלש.",
        "config-session-error": "פֿעלער ביים אנהייבן סעסיע:$1",
        "config-your-language": "אײַער שפראך:",
        "config-your-language-help": "קלויבט א שפראך צו ניצן ביים אינסטאלירונג פראצעס.",
@@ -29,6 +30,9 @@
        "config-page-releasenotes": "ווערסיע־הערות",
        "config-page-copying": "קאפיע",
        "config-page-upgradedoc": "ראנג־העכערן",
+       "config-page-existingwiki": "עקזיסטירנדע וויקי",
+       "config-help-restart": "צי ווילט איר אפראמען די גארע געשפייכלערטע דאטן וואס איר האט אײַנגעגעבן און ווידער אנהייבן דעם אינסטאלאציע־פראצעס?",
+       "config-restart": "יא, ווידעראמאל אנהייבן",
        "config-env-php": "PHP $1 איז אינצטאלירט.",
        "config-apc": "[http://www.php.net/apc APC] איז אינסטאלירט",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] איז אינסטאלירט",
index fcb7a3e..e39477b 100644 (file)
@@ -19,7 +19,8 @@
                        "Qiyue2001",
                        "Kuailong",
                        "Zjzengdongyang",
-                       "Mywood"
+                       "Mywood",
+                       "Impersonator 1"
                ]
        },
        "config-desc": "MediaWiki安装程序",
        "config-license-gfdl": "GNU自由文档许可证1.3或更高版本",
        "config-license-pd": "公有领域",
        "config-license-cc-choose": "选择自定义的知识共享许可证",
-       "config-license-help": "许多公共wiki会以[http://freedomdefined.org/Definition 自由许可证]的方式释放出编者的所有贡献。这有助于构建社区的主人翁意识,并能鼓励长期贡献。对于非公共wiki或公司wiki,这并非必要条件。\n\n如果您希望使用来自维基百科的内容,并希望维基百科能接受复制自您的wiki的内容,请选择'''知识共享署名-相同方式共享'''。\n\nGNU自由文档许可证是维基百科曾经使用过的许可证,并迄今有效。然而,该许可证难以理解,并会增加重用内容的难度。",
+       "config-license-help": "许多公共wiki会以[http://freedomdefined.org/Definition 自由许可证]的方式释放出编者的所有贡献。这有助于构建社区的主人翁意识,并能鼓励长期贡献。对于非公共wiki或公司wiki,这并非必要条件。\n\n如果您希望使用来自维基百科的内容,并希望维基百科能接受复制自您的wiki的内容,您应当选择<strong>知识共享-署名-相同方式共享</strong>。\n\nGNU自由文档许可证是维基百科曾经使用过的许可证,并迄今有效。然而,该许可证难以理解,并会增加重用内容的难度。",
        "config-email-settings": "电子邮件设置",
        "config-enable-email": "启用出站电子邮件",
        "config-enable-email-help": "如果您希望使用电子邮件功能,请正确配置[http://www.php.net/manual/en/mail.configuration.php PHP的邮件设定]。如果您不需要任何电子邮件功能,请在此处禁用它。",
index 6739a84..088f447 100644 (file)
@@ -313,7 +313,7 @@ LUA;
                                } else {
                                        $blob = $this->popAndDeleteBlob( $conn );
                                }
-                               if ( $blob === false ) {
+                               if ( !is_string( $blob ) ) {
                                        break; // no jobs; nothing to do
                                }
 
@@ -703,6 +703,7 @@ LUA;
                                $count += $released + $pruned + $undelayed;
                                JobQueue::incrStats( 'job-recycle', $this->type, $released, $this->wiki );
                                JobQueue::incrStats( 'job-abandon', $this->type, $abandoned, $this->wiki );
+                               JobQueue::incrStats( 'job-undelay', $this->type, $undelayed, $this->wiki );
                        }
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $conn, $e );
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 df99098..2022b22 100644 (file)
@@ -198,7 +198,7 @@ class HashRing {
                        }
                }
                if ( !$this->liveRing ) {
-                       throw UnexpectedValueException( "The live ring is currently empty." );
+                       throw new UnexpectedValueException( "The live ring is currently empty." );
                }
 
                return $this->liveRing;
index d72ffca..809bfdf 100644 (file)
@@ -28,8 +28,6 @@ class HttpStatus {
        /**
         * Get the message associated with HTTP response code $code
         *
-        * Replace OutputPage::getStatusMessage( $code )
-        *
         * @param $code Integer: status code
         * @return String or null: message or null if $code is not in the list of
         *         messages
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 bcef433..4f2a565 100644 (file)
@@ -30,7 +30,7 @@ class PatrolLog {
        /**
         * Record a log event for a change being patrolled
         *
-        * @param mixed $rc Change identifier or RecentChange object
+        * @param int|RecentChange $rc Change identifier or RecentChange object
         * @param bool $auto Was this patrol event automatic?
         * @param User $user User performing the action or null to use $wgUser
         *
index 44be178..bf50f2d 100644 (file)
@@ -354,7 +354,30 @@ class BitmapHandler extends ImageHandler {
                                }
                        }
                } elseif ( $params['mimeType'] == 'image/x-xcf' ) {
-                       $animation_post = array( '-layers', 'merge' );
+                       // Before merging layers, we need to set the background
+                       // to be transparent to preserve alpha, as -layers merge
+                       // merges all layers on to a canvas filled with the
+                       // background colour. After merging we reset the background
+                       // to be white for the default background colour setting
+                       // in the PNG image (which is used in old IE)
+                       $animation_post = array(
+                               '-background', 'transparent',
+                               '-layers', 'merge',
+                               '-background', 'white',
+                       );
+                       wfSuppressWarnings();
+                       $xcfMeta = unserialize( $image->getMetadata() );
+                       wfRestoreWarnings();
+                       if ( $xcfMeta
+                               && isset( $xcfMeta['colorType'] )
+                               && $xcfMeta['colorType'] === 'greyscale-alpha'
+                               && version_compare( $this->getMagickVersion(), "6.8.9-3" ) < 0
+                       ) {
+                               // bug 66323 - Greyscale images not rendered properly.
+                               // So only take the "red" channel.
+                               $channelOnly = array( '-channel', 'R', '-separate' );
+                               $animation_post = array_merge( $animation_post, $channelOnly );
+                       }
                }
 
                // Use one thread only, to avoid deadlock bugs on OOM
index fca1c6d..4200541 100644 (file)
@@ -1302,7 +1302,6 @@ class FormatMetadata extends ContextSource {
         * @param int $a Numerator
         * @param int $b Denominator
         * @return int
-        * @private
         */
        private function gcd( $a, $b ) {
                /*
@@ -1871,29 +1870,3 @@ class FormatMetadata extends ContextSource {
                return $priorityLanguages;
        }
 }
-
-/** For compatability with old FormatExif class
- * which some extensions use.
- *
- * @deprecated since 1.18
- *
- */
-class FormatExif {
-       /** @var array */
-       private $meta;
-
-       /**
-        * @param array $meta
-        */
-       function __construct( $meta ) {
-               wfDeprecated( __METHOD__, '1.18' );
-               $this->meta = $meta;
-       }
-
-       /**
-        * @return array
-        */
-       function getFormattedData() {
-               return FormatMetadata::getFormattedData( $this->meta );
-       }
-}
index efc02fe..f6717cd 100644 (file)
@@ -108,10 +108,20 @@ abstract class MediaHandler {
         * Get an image size array like that returned by getimagesize(), or false if it
         * can't be determined.
         *
+        * This function is used for determining the width, height and bitdepth directly
+        * from an image. The results are stored in the database in the img_width,
+        * img_height, img_bits fields.
+        *
+        * @note If this is a multipage file, return the width and height of the
+        *  first page.
+        *
         * @param File $image The image object, or false if there isn't one
         * @param string $path the filename
         * @return array Follow the format of PHP getimagesize() internal function.
-        *   See http://www.php.net/getimagesize
+        *   See http://www.php.net/getimagesize. MediaWiki will only ever use the
+        *   first two array keys (the width and height), and the 'bits' associative
+        *   key. All other array keys are ignored. Returning a 'bits' key is optional
+        *   as not all formats have a notion of "bitdepth".
         */
        abstract function getImageSize( $image, $path );
 
@@ -121,7 +131,7 @@ abstract class MediaHandler {
         * @param File $image The image object, or false if there isn't one.
         *   Warning, FSFile::getPropsFromPath might pass an (object)array() instead (!)
         * @param string $path The filename
-        * @return string
+        * @return string A string of metadata in php serialized form (Run through serialize())
         */
        function getMetadata( $image, $path ) {
                return '';
@@ -132,7 +142,7 @@ abstract class MediaHandler {
         *
         * This is not used for validating metadata, this is used for the api when returning
         * metadata, since api content formats should stay the same over time, and so things
-        * using ForiegnApiRepo can keep backwards compatibility
+        * using ForeignApiRepo can keep backwards compatibility
         *
         * All core media handlers share a common version number, and extensions can
         * use the GetMetadataVersion hook to append to the array (they should append a unique
@@ -175,6 +185,8 @@ abstract class MediaHandler {
 
        /**
         * Get a string describing the type of metadata, for display purposes.
+        *
+        * @note This method is currently unused.
         * @param File $image
         * @return string
         */
@@ -187,10 +199,15 @@ abstract class MediaHandler {
         * If it returns MediaHandler::METADATA_BAD (or false), Image
         * will reload the metadata from the file and update the database.
         * MediaHandler::METADATA_GOOD for if the metadata is a-ok,
-        * MediaHanlder::METADATA_COMPATIBLE if metadata is old but backwards
+        * MediaHandler::METADATA_COMPATIBLE if metadata is old but backwards
         * compatible (which may or may not trigger a metadata reload).
+        *
+        * @note Returning self::METADATA_BAD will trigger a metadata reload from
+        *  file on page view. Always returning this from a broken file, or suddenly
+        *  triggering as bad metadata for a large number of files can cause
+        *  performance problems.
         * @param File $image
-        * @param array $metadata
+        * @param string $metadata The metadata in serialized form
         * @return bool
         */
        function isMetadataValid( $image, $metadata ) {
index 41e6f03..b303a01 100644 (file)
@@ -61,7 +61,28 @@ class XCFHandler extends BitmapHandler {
         * @return array
         */
        function getImageSize( $image, $filename ) {
-               return self::getXCFMetaData( $filename );
+               $header = self::getXCFMetaData( $filename );
+               if ( !$header ) {
+                       return false;
+               }
+
+               # Forge a return array containing metadata information just like getimagesize()
+               # See PHP documentation at: http://www.php.net/getimagesize
+               $metadata = array();
+               $metadata[0] = $header['width'];
+               $metadata[1] = $header['height'];
+               $metadata[2] = null; # IMAGETYPE constant, none exist for XCF.
+               $metadata[3] = sprintf(
+                       'height="%s" width="%s"', $header['height'], $header['width']
+               );
+               $metadata['mime'] = 'image/x-xcf';
+               $metadata['channels'] = null;
+               $metadata['bits'] = 8; # Always 8-bits per color
+
+               assert( '7 == count($metadata); ' .
+                       '# return array must contains 7 elements just like getimagesize() return' );
+
+               return $metadata;
        }
 
        /**
@@ -124,23 +145,61 @@ class XCFHandler extends BitmapHandler {
                wfDebug( __METHOD__ .
                        ": canvas size of '$filename' is {$header['width']} x {$header['height']} px\n" );
 
-               # Forge a return array containing metadata information just like getimagesize()
-               # See PHP documentation at: http://www.php.net/getimagesize
+               return $header;
+       }
+
+       /**
+        * Store the channel type
+        *
+        * Greyscale files need different command line options.
+        *
+        * @param File $file The image object, or false if there isn't one.
+        *   Warning, FSFile::getPropsFromPath might pass an (object)array() instead (!)
+        * @param string $path The filename
+        * @return string
+        */
+       public function getMetadata( $file, $filename ) {
+               $header = self::getXCFMetadata( $filename );
                $metadata = array();
-               $metadata[0] = $header['width'];
-               $metadata[1] = $header['height'];
-               $metadata[2] = null; # IMAGETYPE constant, none exist for XCF.
-               $metadata[3] = sprintf(
-                       'height="%s" width="%s"', $header['height'], $header['width']
-               );
-               $metadata['mime'] = 'image/x-xcf';
-               $metadata['channels'] = null;
-               $metadata['bits'] = 8; # Always 8-bits per color
+               if ( $header ) {
+                       // Try to be consistent with the names used by PNG files.
+                       // Unclear from base media type if it has an alpha layer,
+                       // so just assume that it does since it "potentially" could.
+                       switch( $header['base_type'] ) {
+                       case 0:
+                               $metadata['colorType'] = 'truecolour-alpha';
+                               break;
+                       case 1:
+                               $metadata['colorType'] = 'greyscale-alpha';
+                               break;
+                       case 2:
+                               $metadata['colorType'] = 'index-coloured';
+                               break;
+                       default:
+                               $metadata['colorType'] = 'unknown';
 
-               assert( '7 == count($metadata); ' .
-                       '# return array must contains 7 elements just like getimagesize() return' );
+                       }
+               } else {
+                       // Marker to prevent repeated attempted extraction
+                       $metadata['error'] = true;
+               }
+               return serialize( $metadata );
+       }
 
-               return $metadata;
+       /**
+        * Should we refresh the metadata
+        *
+        * @param File $file The file object for the file in question
+        * @param string $metadata Serialized metadata
+        * @return bool One of the self::METADATA_(BAD|GOOD|COMPATIBLE) constants
+        */
+       public function isMetadataValid( $file, $metadata ) {
+               if ( !$metadata ) {
+                       // Old metadata when we just put an empty string in there
+                       return self::METADATA_BAD;
+               } else {
+                       return self::METADATA_GOOD;
+               }
        }
 
        /**
@@ -153,4 +212,20 @@ class XCFHandler extends BitmapHandler {
        protected static function getScalerType( $dstPath, $checkDstPath = true ) {
                return "im";
        }
+
+       /**
+        * Can we render this file?
+        *
+        * Image magick doesn't support indexed xcf files as of current
+        * writing (as of 6.8.9-3)
+        */
+       public function canRender( $file ) {
+               wfSuppressWarnings();
+               $xcfMeta = unserialize( $file->getMetadata() );
+               wfRestoreWarnings();
+               if ( isset( $xcfMeta['colorType'] ) && $xcfMeta['colorType'] === 'index-coloured' ) {
+                       return false;
+               }
+               return parent::canRender( $file );
+       }
 }
index 55d5319..a74b701 100644 (file)
@@ -23,7 +23,7 @@
 
 /**
  * Class for reading xmp data containing properties relevant to
- * images, and spitting out an array that FormatExif accepts.
+ * images, and spitting out an array that FormatMetadata accepts.
  *
  * Note, this is not meant to recognize every possible thing you can
  * encode in XMP. It should recognize all the properties we want.
index c798187..7a4de3b 100644 (file)
@@ -65,6 +65,9 @@ text/plain    [TEXT]
 text/html application/xhtml+xml        [TEXT]
 application/xml text/xml       [TEXT]
 text   [TEXT]
+application/json       [TEXT]
+text/csv       [TEXT]
+text/tab-separated-values      [TEXT]
 
 application/zip application/x-zip      [ARCHIVE]
 application/x-gzip     [ARCHIVE]
@@ -108,3 +111,8 @@ application/vnd.ms-excel.template.macroEnabled.12                           [OFFICE]
 application/vnd.ms-excel.addin.macroEnabled.12                                 [OFFICE]
 application/vnd.ms-excel.sheet.binary.macroEnabled.12                          [OFFICE]
 application/acad application/x-acad application/autocad_dwg image/x-dwg application/dwg application/x-dwg application/x-autocad image/vnd.dwg drawing/dwg [DRAWING]
+chemical/x-mdl-molfile     [DRAWING]
+chemical/x-mdl-sdfile      [DRAWING]
+chemical/x-mdl-rxnfile     [DRAWING]
+chemical/x-mdl-rdfile      [DRAWING]
+chemical/x-mdl-rgfile      [DRAWING]
index 61f7ff5..ae6ca4d 100644 (file)
@@ -35,6 +35,7 @@ application/x-gzip gz
 application/x-hdf hdf
 application/x-jar jar
 application/x-javascript js
+application/json json
 application/x-koan skp skd skt skm
 application/x-latex latex
 application/x-netcdf nc cdf
@@ -109,6 +110,7 @@ model/mesh msh mesh silo
 model/vrml wrl vrml
 text/calendar ics ifb
 text/css css
+text/csv csv
 text/html html htm
 text/plain txt
 text/richtext rtx
@@ -169,3 +171,8 @@ application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb
 model/vnd.dwfx+xps dwfx
 application/vnd.ms-xpsdocument xps
 application/x-opc+zip docx dotx docm dotm potx ppsx pptx ppam pptm potm ppsm xlsx xltx xlsm xltm xlam xlsb dwfx xps
+chemical/x-mdl-molfile mol
+chemical/x-mdl-sdfile sdf
+chemical/x-mdl-rxnfile rxn
+chemical/x-mdl-rdfile rd
+chemical/x-mdl-rgfile rg
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..89ca241
--- /dev/null
@@ -0,0 +1,1611 @@
+<?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 $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 || $this->displayImg->isVectorized() ) {
+                                       list( $width, $height ) = $this->getDisplayWidthHeight(
+                                               $maxWidth, $maxHeight, $width, $height
+                                       );
+                                       $linktext = wfMessage( 'show-big-image' )->escaped();
+
+                                       $thumbSizes = $this->getThumbSizes( $width, $height, $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.
+                                               // Vectorized images are "infinitely" big, so all thumb
+                                               // sizes are shown.
+                                               if ( ( ($size[0] <= $width_orig && $size[1] <= $height_orig)
+                                                               || $this->displayImg->isVectorized() )
+                                                       && $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 = '';
+                               } 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;
+       }
+
+       /**
+        * Get the width and height to display image at.
+        *
+        * @note This method assumes that it is only called if one
+        *  of the dimensions are bigger than the max, or if the
+        *  image is vectorized.
+        *
+        * @param $maxWidth integer Max width to display at
+        * @param $maxHeight integer Max height to display at
+        * @param $width integer Actual width of the image
+        * @param $height integer Actual height of the image
+        * @throws MWException
+        * @return Array (width, height)
+        */
+       protected function getDisplayWidthHeight( $maxWidth, $maxHeight, $width, $height ) {
+               if ( !$maxWidth || !$maxHeight ) {
+                       // should never happen
+                       throw new MWException( 'Using a choice from $wgImageLimits that is 0x0' );
+               }
+
+               if ( !$width || !$height ) {
+                       return array( 0, 0 );
+               }
+
+               # Calculate the thumbnail size.
+               if ( $width <= $maxWidth && $height <= $maxHeight ) {
+                       // Vectorized image, do nothing.
+               } elseif ( $width / $height >= $maxWidth / $maxHeight ) {
+                       # The limiting factor is the width, not the height.
+                       $height = round( $height * $maxWidth / $width );
+                       $width = $maxWidth;
+                       # Note that $height <= $maxHeight now.
+               } else {
+                       $newwidth = floor( $width * $maxHeight / $height );
+                       $height = round( $height * $newwidth / $width );
+                       $width = $newwidth;
+                       # Note that $height <= $maxHeight now, but might not be identical
+                       # because of rounding.
+               }
+               return array( $width, $height );
+       }
+
+       /**
+        * Get alternative thumbnail sizes.
+        *
+        * @note This will only list several alternatives if thumbnails are rendered on 404
+        * @param $origWidth Actual width of image
+        * @param $origHeight Actual height of image
+        * @return Array An array of [width, height] pairs.
+        */
+       protected function getThumbSizes( $origWidth, $origHeight ) {
+               global $wgImageLimits;
+               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( $origWidth, $origHeight );
+               } else {
+                       # Creating thumb links triggers thumbnail generation.
+                       # Just generate the thumb for the current users prefs.
+                       $thumbSizes = array( $this->getImageLimitsFromOption( $this->getContext()->getUser(), 'thumbsize' ) );
+                       if ( !$this->displayImg->mustRender() ) {
+                               // We can safely include a link to the "full-size" preview,
+                               // without actually rendering.
+                               $thumbSizes[] = array( $origWidth, $origHeight );
+                       }
+               }
+               return $thumbSizes;
+       }
+
+}
+
+/**
+ * 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..79c8ade 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 ) {
@@ -373,7 +378,7 @@ class CoreParserFunctions {
                // list of disallowed tags for DISPLAYTITLE
                // these will be escaped even though they are allowed in normal wiki text
                $bad = array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'blockquote', 'ol', 'ul', 'li', 'hr',
-                       'table', 'tr', 'th', 'td', 'dl', 'dd', 'caption', 'p', 'ruby', 'rb', 'rt', 'rp', 'br' );
+                       'table', 'tr', 'th', 'td', 'dl', 'dd', 'caption', 'p', 'ruby', 'rb', 'rt', 'rtc', 'rp', 'br' );
 
                // disallow some styles that could be used to bypass $wgRestrictDisplayTitle
                if ( $wgRestrictDisplayTitle ) {
index 8546348..648667b 100644 (file)
 class LinkHolderArray {
        var $internals = array(), $interwikis = array();
        var $size = 0;
+
+       /**
+        * @var Parser
+        */
        var $parent;
        protected $tempIdOffset;
 
+       /**
+        * @param Parser $parent
+        */
        function __construct( $parent ) {
                $this->parent = $parent;
        }
@@ -144,6 +151,10 @@ class LinkHolderArray {
                return $texts;
        }
 
+       /**
+        * @param array $m
+        * @return string
+        */
        protected function mergeForeignCallback( $m ) {
                return $m[1] . ( $m[2] + $this->tempIdOffset ) . $m[3];
        }
@@ -297,6 +308,7 @@ class LinkHolderArray {
                $queries = array();
                foreach ( $this->internals as $ns => $entries ) {
                        foreach ( $entries as $entry ) {
+                               /** @var Title $title */
                                $title = $entry['title'];
                                $pdbk = $entry['pdbk'];
 
@@ -329,7 +341,7 @@ class LinkHolderArray {
                                $where[] = $dbr->makeList(
                                        array(
                                                'page_namespace' => $ns,
-                                               'page_title' => $pages,
+                                               'page_title' => array_unique( $pages ),
                                        ),
                                        LIST_AND
                                );
@@ -490,6 +502,7 @@ class LinkHolderArray {
                // Then add variants of links to link batch
                $parentTitle = $this->parent->getTitle();
                foreach ( $titlesAttrs as $i => $attrs ) {
+                       /** @var Title $title */
                        list( $index, $title ) = $attrs;
                        $ns = $title->getNamespace();
                        $text = $title->getText();
index 66cfd55..e5917b8 100644 (file)
@@ -1876,6 +1876,7 @@ class Parser {
         * @private
         */
        function replaceInternalLinks2( &$s ) {
+               global $wgExtraInterlanguageLinkPrefixes;
                wfProfileIn( __METHOD__ );
 
                wfProfileIn( __METHOD__ . '-setup' );
@@ -2096,11 +2097,12 @@ class Parser {
                        if ( $noforce ) {
                                # Interwikis
                                wfProfileIn( __METHOD__ . "-interwiki" );
-                               if ( $iw && $this->mOptions->getInterwikiMagic()
-                                       && $nottalk && Language::fetchLanguageName( $iw, null, 'mw' )
+                               if (
+                                       $iw && $this->mOptions->getInterwikiMagic() && $nottalk && (
+                                               Language::fetchLanguageName( $iw, null, 'mw' ) ||
+                                               in_array( $iw, $wgExtraInterlanguageLinkPrefixes )
+                                       )
                                ) {
-                                       // XXX: the above check prevents links to sites with identifiers that are not language codes
-
                                        # Bug 24502: filter duplicates
                                        if ( !isset( $this->mLangLinkLanguages[$iw] ) ) {
                                                $this->mLangLinkLanguages[$iw] = true;
@@ -2818,6 +2820,9 @@ class Parser {
                $pageLang = $this->getFunctionLang();
 
                switch ( $index ) {
+                       case '!':
+                               $value = '|';
+                               break;
                        case 'currentmonth':
                                $value = $pageLang->formatNum( MWTimestamp::getInstance( $ts )->format( 'm' ) );
                                break;
@@ -5008,9 +5013,9 @@ class Parser {
         * private variables.**
         *
         * @param string $tag The tag to use, e.g. 'hook' for "<hook>"
-        * @param mixed $callback The callback function (and object) to use for the tag
+        * @param callable $callback The callback function (and object) to use for the tag
         * @throws MWException
-        * @return mixed|null The old value of the mTagHooks array associated with the hook
+        * @return callable|null The old value of the mTagHooks array associated with the hook
         */
        public function setHook( $tag, $callback ) {
                $tag = strtolower( $tag );
@@ -5039,9 +5044,9 @@ class Parser {
         * @todo better document or deprecate this
         *
         * @param string $tag The tag to use, e.g. 'hook' for "<hook>"
-        * @param mixed $callback The callback function (and object) to use for the tag
+        * @param callable $callback The callback function (and object) to use for the tag
         * @throws MWException
-        * @return mixed|null The old value of the mTagHooks array associated with the hook
+        * @return callable|null The old value of the mTagHooks array associated with the hook
         */
        function setTransparentTagHook( $tag, $callback ) {
                $tag = strtolower( $tag );
@@ -5080,7 +5085,7 @@ class Parser {
         *   isHTML                    The returned text is HTML, armour it against wikitext transformation
         *
         * @param string $id The magic word ID
-        * @param mixed $callback The callback function (and object) to use
+        * @param callable $callback The callback function (and object) to use
         * @param int $flags A combination of the following flags:
         *     SFH_NO_HASH   No leading hash, i.e. {{plural:...}} instead of {{#if:...}}
         *
@@ -5337,7 +5342,7 @@ class Parser {
                                                        } else {
                                                                $localLinkTitle = Title::newFromText( $linkValue );
                                                                if ( $localLinkTitle !== null ) {
-                                                                       $link = $localLinkTitle->getLocalURL();
+                                                                       $link = $localLinkTitle->getLinkURL();
                                                                }
                                                        }
                                                        break;
@@ -5364,6 +5369,7 @@ class Parser {
                        $ig->add( $title, $label, $alt, $link, $handlerOptions );
                }
                $html = $ig->toHTML();
+               wfRunHooks( 'AfterParserFetchFileAndTitle', array( $this, $ig, &$html ) );
                wfProfileOut( __METHOD__ );
                return $html;
        }
@@ -5735,7 +5741,7 @@ class Parser {
         * External callers should use the getSection and replaceSection methods.
         *
         * @param string $text Page wikitext
-        * @param string $section A section identifier string of the form:
+        * @param string|number $sectionId A section identifier string of the form:
         *   "<flag1> - <flag2> - ... - <section number>"
         *
         * Currently the only recognised flag is "T", which means the target section number
@@ -5757,7 +5763,7 @@ class Parser {
         * @return string For "get", the extracted section text.
         *   for "replace", the whole page with the section replaced.
         */
-       private function extractSections( $text, $section, $mode, $newText = '' ) {
+       private function extractSections( $text, $sectionId, $mode, $newText = '' ) {
                global $wgTitle; # not generally used but removes an ugly failure mode
 
                $magicScopeVariable = $this->lock();
@@ -5767,7 +5773,7 @@ class Parser {
 
                # Process section extraction flags
                $flags = 0;
-               $sectionParts = explode( '-', $section );
+               $sectionParts = explode( '-', $sectionId );
                $sectionIndex = array_pop( $sectionParts );
                foreach ( $sectionParts as $part ) {
                        if ( $part === 'T' ) {
@@ -5876,12 +5882,14 @@ class Parser {
         * If a section contains subsections, these are also returned.
         *
         * @param string $text Text to look in
-        * @param string $section Section identifier
-        * @param string $deftext Default to return if section is not found
+        * @param string|number $sectionId Section identifier as a number or string
+        * (e.g. 0, 1 or 'T-1').
+        * @param string $defaultText Default to return if section is not found
+        *
         * @return string Text of the requested section
         */
-       public function getSection( $text, $section, $deftext = '' ) {
-               return $this->extractSections( $text, $section, "get", $deftext );
+       public function getSection( $text, $sectionId, $defaultText = '' ) {
+               return $this->extractSections( $text, $sectionId, 'get', $defaultText );
        }
 
        /**
@@ -5889,13 +5897,15 @@ class Parser {
         * specified by $section has been replaced with $text. If the target
         * section does not exist, $oldtext is returned unchanged.
         *
-        * @param string $oldtext Former text of the article
-        * @param int $section Section identifier
-        * @param string $text Replacing text
+        * @param string $oldText Former text of the article
+        * @param string|number $sectionId Section identifier as a number or string
+        * (e.g. 0, 1 or 'T-1').
+        * @param string $newText Replacing text
+        *
         * @return string Modified text
         */
-       public function replaceSection( $oldtext, $section, $text ) {
-               return $this->extractSections( $oldtext, $section, "replace", $text );
+       public function replaceSection( $oldText, $sectionId, $newText ) {
+               return $this->extractSections( $oldText, $sectionId, 'replace', $newText );
        }
 
        /**
@@ -6329,4 +6339,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;
-       }
-}
index dd5fc4f..335bd61 100644 (file)
@@ -77,8 +77,9 @@ interface PPFrame {
        const STRIP_COMMENTS = 4;
        const NO_IGNORE = 8;
        const RECOVER_COMMENTS = 16;
+       const NO_TAGS = 32;
 
-       const RECOVER_ORIG = 27; // = 1|2|8|16 no constant expression support in PHP yet
+       const RECOVER_ORIG = 59; // = 1|2|8|16|32 no constant expression support in PHP yet
 
        /** This constant exists when $indexOffset is supported in newChild() */
        const SUPPORTS_INDEX_OFFSET = 1;
index 90af670..f5fc3ec 100644 (file)
@@ -1234,13 +1234,29 @@ class PPFrame_DOM implements PPFrame {
                                        $attrs = $xpath->query( 'attr', $contextNode );
                                        $inners = $xpath->query( 'inner', $contextNode );
                                        $closes = $xpath->query( 'close', $contextNode );
-                                       $params = array(
-                                               'name' => new PPNode_DOM( $names->item( 0 ) ),
-                                               'attr' => $attrs->length > 0 ? new PPNode_DOM( $attrs->item( 0 ) ) : null,
-                                               'inner' => $inners->length > 0 ? new PPNode_DOM( $inners->item( 0 ) ) : null,
-                                               'close' => $closes->length > 0 ? new PPNode_DOM( $closes->item( 0 ) ) : null,
-                                       );
-                                       $out .= $this->parser->extensionSubstitution( $params, $this );
+                                       if ( $flags & PPFrame::NO_TAGS ) {
+                                               $s = '<' . $this->expand( $names->item( 0 ), $flags );
+                                               if ( $attrs->length > 0 ) {
+                                                       $s .= $this->expand( $attrs->item( 0 ), $flags );
+                                               }
+                                               if ( $inners->length > 0 ) {
+                                                       $s .= '>' . $this->expand( $inners->item( 0 ), $flags );
+                                                       if ( $closes->length > 0 ) {
+                                                               $s .= $this->expand( $closes->item( 0 ), $flags );
+                                                       }
+                                               } else {
+                                                       $s .= '/>';
+                                               }
+                                               $out .= $s;
+                                       } else {
+                                               $params = array(
+                                                       'name' => new PPNode_DOM( $names->item( 0 ) ),
+                                                       'attr' => $attrs->length > 0 ? new PPNode_DOM( $attrs->item( 0 ) ) : null,
+                                                       'inner' => $inners->length > 0 ? new PPNode_DOM( $inners->item( 0 ) ) : null,
+                                                       'close' => $closes->length > 0 ? new PPNode_DOM( $closes->item( 0 ) ) : null,
+                                               );
+                                               $out .= $this->parser->extensionSubstitution( $params, $this );
+                                       }
                                } elseif ( $contextNode->nodeName == 'h' ) {
                                        # Heading
                                        $s = $this->expand( $contextNode->childNodes, $flags );
index bc2b686..bf2bf61 100644 (file)
@@ -1138,7 +1138,23 @@ class PPFrame_Hash implements PPFrame {
                                } elseif ( $contextNode->name == 'ext' ) {
                                        # Extension tag
                                        $bits = $contextNode->splitExt() + array( 'attr' => null, 'inner' => null, 'close' => null );
-                                       $out .= $this->parser->extensionSubstitution( $bits, $this );
+                                       if ( $flags & PPFrame::NO_TAGS ) {
+                                               $s = '<' . $bits['name']->firstChild->value;
+                                               if ( $bits['attr'] ) {
+                                                       $s .= $bits['attr']->firstChild->value;
+                                               }
+                                               if ( $bits['inner'] ) {
+                                                       $s .= '>' . $bits['inner']->firstChild->value;
+                                                       if ( $bits['close'] ) {
+                                                               $s .= $bits['close']->firstChild->value;
+                                                       }
+                                               } else {
+                                                       $s .= '/>';
+                                               }
+                                               $out .= $s;
+                                       } else {
+                                               $out .= $this->parser->extensionSubstitution( $bits, $this );
+                                       }
                                } elseif ( $contextNode->name == 'h' ) {
                                        # Heading
                                        if ( $this->parser->ot['html'] ) {
index 093fe49..2b37b0b 100644 (file)
@@ -154,8 +154,12 @@ class PoolCounterRedis extends PoolCounter {
                if rSlot ~= 'w' and redis.call('exists',kSlotsNextRelease) == 1 then
                        if 1*redis.call('zScore',kSlotsNextRelease,rSlot) ~= (rSlotTime + rExpiry) then
                                -- Slot lock expired and was released already
-                       elseif redis.call('lLen',kSlots) >= (1*rMaxWorkers - 1) then
-                               -- Clear list to save space; it will re-init as needed
+                       elseif redis.call('lLen',kSlots) >= 1*rMaxWorkers then
+                               -- Slots somehow got out of sync; reset the list for sanity
+                               redis.call('del',kSlots,kSlotsNextRelease)
+                       elseif redis.call('lLen',kSlots) == (1*rMaxWorkers - 1) and redis.call('zCard',kWaiting) == 0 then
+                               -- Slot list will be made full; clear it to save space (it re-inits as needed)
+                               -- since nothing is waiting on being unblocked by a push to the list
                                redis.call('del',kSlots,kSlotsNextRelease)
                        else
                                -- Add slot back to pool and update the "next release" time
index 523e9e0..1bc1a8b 100644 (file)
@@ -112,6 +112,10 @@ abstract class PoolCounterWork {
                }
 
                switch ( $status->value ) {
+                       case PoolCounter::LOCK_HELD:
+                               // Better to ignore nesting pool counter limits than to fail.
+                               // Assume that the outer pool limiting is reasonable enough.
+                               /* no break */
                        case PoolCounter::LOCKED:
                                $result = $this->doWork();
                                $this->poolCounter->release();
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 4663ab8..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.
@@ -555,13 +541,6 @@ class SearchEngine {
        }
 }
 
-/**
- * @ingroup Search
- */
-class SearchResultTooMany {
-       # # Some search engines may bail out if too many matches are found
-}
-
 /**
  * Dummy class to be used when non-supported Database engine is present.
  * @todo FIXME: Dummy class should probably try something at least mildly useful,
index 8ff2640..581d8bc 100644 (file)
@@ -174,8 +174,6 @@ class SearchMySQL extends SearchDatabase {
        }
 
        protected function searchInternal( $term, $fulltext ) {
-               global $wgCountTotalSearchHits;
-
                // This seems out of place, why is this called with empty term?
                if ( trim( $term ) === '' ) {
                        return null;
@@ -189,19 +187,17 @@ class SearchMySQL extends SearchDatabase {
                );
 
                $total = null;
-               if ( $wgCountTotalSearchHits ) {
-                       $query = $this->getCountQuery( $filteredTerm, $fulltext );
-                       $totalResult = $this->db->select(
-                               $query['tables'], $query['fields'], $query['conds'],
-                               __METHOD__, $query['options'], $query['joins']
-                       );
-
-                       $row = $totalResult->fetchObject();
-                       if ( $row ) {
-                               $total = intval( $row->c );
-                       }
-                       $totalResult->free();
+               $query = $this->getCountQuery( $filteredTerm, $fulltext );
+               $totalResult = $this->db->select(
+                       $query['tables'], $query['fields'], $query['conds'],
+                       __METHOD__, $query['options'], $query['joins']
+               );
+
+               $row = $totalResult->fetchObject();
+               if ( $row ) {
+                       $total = intval( $row->c );
                }
+               $totalResult->free();
 
                return new SqlSearchResultSet( $resultSet, $this->searchTerms, $total );
        }
index 42b67f3..43fb016 100644 (file)
@@ -42,10 +42,6 @@ class SearchPostgres extends SearchDatabase {
                $olderror = error_reporting( E_ERROR );
                $resultSet = $this->db->resultObject( $this->db->query( $q, 'SearchPostgres', true ) );
                error_reporting( $olderror );
-               if ( !$resultSet ) {
-                       // Needed for "Query requires full scan, GIN doesn't support it"
-                       return new SearchResultTooMany();
-               }
                return new PostgresSearchResultSet( $resultSet, $this->searchTerms );
        }
 
@@ -54,9 +50,6 @@ class SearchPostgres extends SearchDatabase {
                $olderror = error_reporting( E_ERROR );
                $resultSet = $this->db->resultObject( $this->db->query( $q, 'SearchPostgres', true ) );
                error_reporting( $olderror );
-               if ( !$resultSet ) {
-                       return new SearchResultTooMany();
-               }
                return new PostgresSearchResultSet( $resultSet, $this->searchTerms );
        }
 
index f753e3d..698f93c 100644 (file)
@@ -40,16 +40,6 @@ class SearchResultSet {
                return 0;
        }
 
-       /**
-        * Return true if results are included in this result set.
-        * STUB
-        *
-        * @return bool
-        */
-       function hasResults() {
-               return false;
-       }
-
        /**
         * Some search modes return a total hit count for the query
         * in the entire article database. This may include pages
@@ -183,7 +173,12 @@ class SqlSearchResultSet extends SearchResultSet {
        }
 
        function getTotalHits() {
-               return $this->totalHits;
+               if ( !is_null( $this->totalHits ) ) {
+                       return $this->totalHits;
+               } else {
+                       // Special:Search expects a number here.
+                       return $this->numRows();
+               }
        }
 }
 
@@ -200,12 +195,8 @@ class SearchNearMatchResultSet extends SearchResultSet {
                $this->result = $match;
        }
 
-       public function hasResult() {
-               return (bool)$this->result;
-       }
-
        public function numRows() {
-               return $this->hasResults() ? 1 : 0;
+               return $this->result ? 1 : 0;
        }
 
        public function next() {
index 8e820f3..05d5ca0 100644 (file)
@@ -164,7 +164,7 @@ class SearchSqlite extends SearchDatabase {
        }
 
        protected function searchInternal( $term, $fulltext ) {
-               global $wgCountTotalSearchHits, $wgContLang;
+               global $wgContLang;
 
                if ( !$this->fulltextSearchSupported() ) {
                        return null;
@@ -174,14 +174,12 @@ class SearchSqlite extends SearchDatabase {
                $resultSet = $this->db->query( $this->getQuery( $filteredTerm, $fulltext ) );
 
                $total = null;
-               if ( $wgCountTotalSearchHits ) {
-                       $totalResult = $this->db->query( $this->getCountQuery( $filteredTerm, $fulltext ) );
-                       $row = $totalResult->fetchObject();
-                       if ( $row ) {
-                               $total = intval( $row->c );
-                       }
-                       $totalResult->free();
+               $totalResult = $this->db->query( $this->getCountQuery( $filteredTerm, $fulltext ) );
+               $row = $totalResult->fetchObject();
+               if ( $row ) {
+                       $total = intval( $row->c );
                }
+               $totalResult->free();
 
                return new SqlSearchResultSet( $resultSet, $this->searchTerms, $total );
        }
index 6020396..bf86ab2 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;
        }
@@ -114,9 +114,10 @@ abstract class FormSpecialPage extends SpecialPage {
        /**
         * Process the form on POST submission.
         * @param array $data
-        * @return bool|array True for success, false for didn't-try, array of errors on failure
+        * @param HTMLForm $form
+        * @return bool|string|array|Status As documented for HTMLForm::trySubmit.
         */
-       abstract public function onSubmit( array $data );
+       abstract public function onSubmit( array $data /* $form = null */ );
 
        /**
         * Do something exciting on successful processing of the form, most likely to show a
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 da51a33..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!
         */
@@ -551,19 +553,6 @@ class SpecialPage {
                return $this->getContext()->getSkin();
        }
 
-       /**
-        * Shortcut to get user's language
-        *
-        * @deprecated since 1.19 Use getLanguage instead
-        * @return Language
-        * @since 1.18
-        */
-       public function getLang() {
-               wfDeprecated( __METHOD__, '1.19' );
-
-               return $this->getLanguage();
-       }
-
        /**
         * Shortcut to get user's language
         *
index 53cef7f..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 ) ) {
-                               // @deprecated, officially since 1.18, unofficially since forever
-                               wfDebug( "Array syntax for \$wgSpecialPages is deprecated, " .
-                                       "define a subclass of SpecialPage instead." );
                                $className = array_shift( $rec );
+                               // @deprecated, officially since 1.18, unofficially since forever
+                               wfDeprecated( "Array syntax for \$wgSpecialPages is deprecated ($className), " .
+                                       "define a subclass of SpecialPage instead.", '1.18' );
                                self::getList()->$realName = MWFunction::newObj( $className, $rec );
                        }
 
@@ -364,8 +369,8 @@ class SpecialPageFactory {
         * Return categorised listable special pages which are available
         * for the current user, and everyone.
         *
-        * @param User $user User object to check permissions, $wgUser will be used if
-        *   if not provided
+        * @param User $user User object to check permissions, $wgUser will be used
+        *        if not provided
         * @return array ( string => Specialpage )
         */
        public static function getUsablePages( User $user = null ) {
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 c42c089..8dc4b3c 100644 (file)
@@ -92,12 +92,16 @@ class ActiveUsersPager extends UsersPager {
        function getQueryInfo() {
                $dbr = $this->getDatabase();
 
+               $activeUserSeconds = $this->getConfig()->get( 'ActiveUserDays' ) * 86400;
+               $timestamp = $dbr->timestamp( wfTimestamp( TS_UNIX ) - $activeUserSeconds );
                $conds = array(
                        'qcc_type' => 'activeusers',
                        'qcc_namespace' => NS_USER,
                        'user_name = qcc_title',
                        'rc_user_text = qcc_title',
-                       'rc_type != ' . $dbr->addQuotes( RC_EXTERNAL ) // Don't count wikidata.
+                       'rc_type != ' . $dbr->addQuotes( RC_EXTERNAL ), // Don't count wikidata.
+                       'rc_log_type IS NULL OR rc_log_type != ' . $dbr->addQuotes( 'newusers' ),
+                       'rc_timestamp >= ' . $dbr->addQuotes( $timestamp ),
                );
                if ( $this->requestedUser != '' ) {
                        $conds[] = 'qcc_title >= ' . $dbr->addQuotes( $this->requestedUser );
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..05bbb5a 100644 (file)
@@ -270,25 +270,32 @@ 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 ) {
-                               $out = $this->getOutput(); // showLogExtract() wants first parameter by reference
-                               LogEventsList::showLogExtract(
-                                       $out,
-                                       'block',
-                                       $nt,
-                                       '',
-                                       array(
-                                               'lim' => 1,
-                                               'showIfEmpty' => false,
-                                               'msgKey' => array(
-                                                       $userObj->isAnon() ?
-                                                               'sp-contributions-blocked-notice-anon' :
-                                                               'sp-contributions-blocked-notice',
-                                                       $userObj->getName() # Support GENDER in 'sp-contributions-blocked-notice'
-                                               ),
-                                               'offset' => '' # don't use WebRequest parameter offset
-                                       )
-                               );
+                       if ( !$this->including() ) {
+                               $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,
+                                               'block',
+                                               $nt,
+                                               '',
+                                               array(
+                                                       'lim' => 1,
+                                                       'showIfEmpty' => false,
+                                                       'msgKey' => array(
+                                                               $userObj->isAnon() ?
+                                                                       'sp-contributions-blocked-notice-anon' :
+                                                                       'sp-contributions-blocked-notice',
+                                                               $userObj->getName() # Support GENDER in 'sp-contributions-blocked-notice'
+                                                       ),
+                                                       'offset' => '' # don't use WebRequest parameter offset
+                                               )
+                                       );
+                               }
                        }
                }
 
index 448637e..30e3833 100644 (file)
@@ -42,6 +42,14 @@ class SpecialCreateAccount extends SpecialRedirectToSpecial {
                return true;
        }
 
+       public function isRestricted() {
+               return !User::groupHasPermission( '*', 'createaccount' );
+       }
+
+       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 b88e196..aec1257 100644 (file)
@@ -132,7 +132,11 @@ class LinkSearchPage extends QueryPage {
                                'target',
                                'target',
                                50,
-                               $target
+                               $target,
+                               array(
+                                       // URLs are always ltr
+                                       'dir' => 'ltr',
+                               )
                        ) . "\n";
 
                if ( !$wgMiserMode ) {
index 3715b8b..1faa013 100644 (file)
@@ -460,6 +460,19 @@ class ImageListPager extends TablePager {
                                        );
                                        $download = $this->msg( 'parentheses' )->rawParams( $download )->escaped();
 
+                                       // Add delete links if allowed
+                                       // From https://github.com/Wikia/app/pull/3859
+                                       if ( $filePage->userCan( 'delete', $this->getUser() ) ) {
+                                               $deleteMsg = $this->msg( 'listfiles-delete' )->escaped();
+
+                                               $delete = Linker::linkKnown(
+                                                       $filePage, $deleteMsg, array(), array( 'action' => 'delete' )
+                                               );
+                                               $delete = $this->msg( 'parentheses' )->rawParams( $delete )->escaped();
+
+                                               return "$link $download $delete";
+                                       }
+
                                        return "$link $download";
                                } else {
                                        return htmlspecialchars( $value );
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 013fc26..4d9e7da 100644 (file)
@@ -51,6 +51,11 @@ class MIMEsearchPage extends QueryPage {
        }
 
        public function getQueryInfo() {
+               $minorType = array();
+               if ( $this->minor !== '*' ) {
+                       // Allow wildcard searching
+                       $minorType['img_minor_mime'] = $this->minor;
+               }
                $qi = array(
                        'tables' => array( 'image' ),
                        'fields' => array(
@@ -67,7 +72,6 @@ class MIMEsearchPage extends QueryPage {
                        ),
                        'conds' => array(
                                'img_major_mime' => $this->major,
-                               'img_minor_mime' => $this->minor,
                                // This is in order to trigger using
                                // the img_media_mime index in "range" mode.
                                'img_media_type' => array(
@@ -82,7 +86,7 @@ class MIMEsearchPage extends QueryPage {
                                        MEDIATYPE_EXECUTABLE,
                                        MEDIATYPE_ARCHIVE,
                                ),
-                       ),
+                       ) + $minorType,
                );
 
                return $qi;
@@ -104,6 +108,7 @@ class MIMEsearchPage extends QueryPage {
                global $wgScript;
 
                $mime = $par ? $par : $this->getRequest()->getText( 'mime' );
+               $mime = trim( $mime );
 
                $this->setHeaders();
                $this->outputHeader();
index 097f1b6..a27cf4c 100644 (file)
@@ -283,7 +283,7 @@ class SpecialMergeHistory extends SpecialPage {
                $last = $this->message['last'];
 
                $ts = wfTimestamp( TS_MW, $row->rev_timestamp );
-               $checkBox = Xml::radio( 'mergepoint', $ts, false );
+               $checkBox = Xml::radio( 'mergepoint', $ts, ( $this->mTimestamp === $ts ) );
 
                $user = $this->getUser();
 
@@ -325,6 +325,18 @@ class SpecialMergeHistory extends SpecialPage {
                                ->rawParams( $checkBox, $last, $pageLink, $userLink, $stxt, $comment )->escaped() );
        }
 
+       /**
+        * Actually attempt the history move
+        *
+        * @todo: if all versions of page A are moved to B and then a user
+        * tries to do a reverse-merge via the "unmerge" log link, then page
+        * A will still be a redirect (as it was after the original merge),
+        * though it will have the old revisions back from before (as expected).
+        * The user may have to "undo" the redirect manually to finish the "unmerge".
+        * Maybe this should delete redirects at the target page of merges?
+        *
+        * @return boolean Success
+        */
        function merge() {
                # Get the titles directly from the IDs, in case the target page params
                # were spoofed. The queries are done based on the IDs, so it's best to
@@ -368,7 +380,7 @@ class SpecialMergeHistory extends SpecialPage {
 
                        return false;
                }
-               # Update the revisions
+               # Get the timestamp pivot condition
                if ( $this->mTimestamp ) {
                        $timewhere = "rev_timestamp <= {$this->mTimestamp}";
                        $timestampLimit = wfTimestamp( TS_MW, $this->mTimestamp );
@@ -376,6 +388,18 @@ class SpecialMergeHistory extends SpecialPage {
                        $timewhere = "rev_timestamp <= {$maxtimestamp}";
                        $timestampLimit = wfTimestamp( TS_MW, $lasttimestamp );
                }
+               # Check that there are not too many revisions to move
+               $limit = 5000; // avoid too much slave lag
+               $count = $dbw->select( 'revision', '1',
+                       array( 'rev_page' => $this->mTargetID, $timewhere ),
+                       __METHOD__,
+                       array( 'LIMIT' => $limit + 1 )
+               )->numRows();
+               if ( $count > $limit ) {
+                       $this->getOutput()->addWikiMsg( 'mergehistory-fail-toobig' );
+
+                       return false;
+               }
                # Do the moving...
                $dbw->update(
                        'revision',
@@ -452,6 +476,7 @@ class SpecialMergeHistory extends SpecialPage {
                        array( $destTitle->getPrefixedText(), $timestampLimit ), $this->getUser()
                );
 
+               # @TODO: message should use redirect=no
                $this->getOutput()->addWikiMsg( 'mergehistory-success',
                        $targetTitle->getPrefixedText(), $destTitle->getPrefixedText(), $count );
 
index dce5ad9..7223efd 100644 (file)
@@ -567,10 +567,14 @@ class MovePageForm extends UnlistedSpecialPage {
                $oldLink = Linker::link(
                        $ot,
                        null,
-                       array(),
+                       array( 'id' => 'movepage-oldlink' ),
                        array( 'redirect' => 'no' )
                );
-               $newLink = Linker::linkKnown( $nt );
+               $newLink = Linker::linkKnown(
+                       $nt,
+                       null,
+                       array( 'id' => 'movepage-newlink' )
+               );
                $oldText = $ot->getPrefixedText();
                $newText = $nt->getPrefixedText();
 
index 505a1ec..1ec7006 100644 (file)
@@ -40,8 +40,6 @@ class SpecialNewpages extends IncludableSpecialPage {
        }
 
        protected function setup( $par ) {
-               global $wgEnableNewpagesUserFilter;
-
                // Options
                $opts = new FormOptions();
                $this->opts = $opts; // bind
@@ -71,9 +69,6 @@ class SpecialNewpages extends IncludableSpecialPage {
 
                // Validate
                $opts->validateIntBounds( 'limit', 0, 5000 );
-               if ( !$wgEnableNewpagesUserFilter ) {
-                       $opts->setValue( 'username', '' );
-               }
        }
 
        protected function parseParams( $par ) {
@@ -204,7 +199,7 @@ class SpecialNewpages extends IncludableSpecialPage {
        }
 
        protected function form() {
-               global $wgEnableNewpagesUserFilter, $wgScript;
+               global $wgScript;
 
                // Consume values
                $this->opts->consumeValue( 'offset' ); // don't carry offset, DWIW
@@ -265,15 +260,14 @@ class SpecialNewpages extends IncludableSpecialPage {
                                $tagFilterSelector .
                                '</td>
                        </tr>' ) : '' ) .
-                       ( $wgEnableNewpagesUserFilter ?
-                               '<tr>
+                       '<tr>
                                <td class="mw-label">' .
                                        Xml::label( $this->msg( 'newpages-username' )->text(), 'mw-np-username' ) .
                                        '</td>
                                <td class="mw-input">' .
                                        Xml::input( 'username', 30, $userText, array( 'id' => 'mw-np-username' ) ) .
                                        '</td>
-                       </tr>' : '' ) .
+                       </tr>' .
                        '<tr> <td></td>
                                <td class="mw-submit">' .
                        Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) .
@@ -512,7 +506,6 @@ class NewPagesPager extends ReverseChronologicalPager {
        }
 
        function getQueryInfo() {
-               global $wgEnableNewpagesUserFilter;
                $conds = array();
                $conds['rc_new'] = 1;
 
@@ -532,8 +525,7 @@ class NewPagesPager extends ReverseChronologicalPager {
                        }
                }
 
-               # $wgEnableNewpagesUserFilter - temp WMF hack
-               if ( $wgEnableNewpagesUserFilter && $user ) {
+               if ( $user ) {
                        $conds['rc_user_text'] = $user->getText();
                        $rcIndexes = 'rc_user_text';
                } elseif ( User::groupHasPermission( '*', 'createpage' ) &&
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 e22b42a..05f0b2b 100644 (file)
@@ -30,6 +30,7 @@
  */
 class SpecialPagesWithProp extends QueryPage {
        private $propName = null;
+       private $existingPropNames = null;
 
        function __construct( $name = 'PagesWithProp' ) {
                parent::__construct( $name );
@@ -47,18 +48,7 @@ class SpecialPagesWithProp extends QueryPage {
                $request = $this->getRequest();
                $propname = $request->getVal( 'propname', $par );
 
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select(
-                       'page_props',
-                       'pp_propname',
-                       '',
-                       __METHOD__,
-                       array( 'DISTINCT', 'ORDER BY' => 'pp_propname' )
-               );
-               $propnames = array();
-               foreach ( $res as $row ) {
-                       $propnames[$row->pp_propname] = $row->pp_propname;
-               }
+               $propnames = $this->getExistingPropNames();
 
                $form = new HTMLForm( array(
                        'propname' => array(
@@ -88,6 +78,18 @@ class SpecialPagesWithProp extends QueryPage {
                parent::execute( $data['propname'] );
        }
 
+       /**
+        * 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 ) {
+               $subpages = array_keys( $this->getExistingPropNames() );
+               return self::prefixSearchArray( $search, $limit, $subpages );
+       }
+
        /**
         * Disable RSS/Atom feeds
         * @return bool
@@ -150,6 +152,25 @@ class SpecialPagesWithProp extends QueryPage {
                return $ret;
        }
 
+       public function getExistingPropNames() {
+               if ( $this->existingPropNames === null ) {
+                       $dbr = wfGetDB( DB_SLAVE );
+                       $res = $dbr->select(
+                               'page_props',
+                               'pp_propname',
+                               '',
+                               __METHOD__,
+                               array( 'DISTINCT', 'ORDER BY' => 'pp_propname' )
+                       );
+                       $propnames = array();
+                       foreach ( $res as $row ) {
+                               $propnames[$row->pp_propname] = $row->pp_propname;
+                       }
+                       $this->existingPropNames = $propnames;
+               }
+               return $this->existingPropNames;
+       }
+
        protected function getGroupName() {
                return 'pages';
        }
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 d3b168b..b90026a 100644 (file)
@@ -417,7 +417,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                                Xml::listDropDown( 'wpRevDeleteReasonList',
                                                        $this->msg( 'revdelete-reason-dropdown' )->inContentLanguage()->text(),
                                                        $this->msg( 'revdelete-reasonotherlist' )->inContentLanguage()->text(),
-                                                       $this->getRequest()->getText( 'wpRevDeleteReasonList', 'other' ), 'wpReasonDropDown', 1
+                                                       $this->getRequest()->getText( 'wpRevDeleteReasonList', 'other' ), 'wpReasonDropDown'
                                                ) .
                                        '</td>' .
                                "</tr><tr>\n" .
index 1cc5930..970b617 100644 (file)
@@ -114,7 +114,7 @@ class SpecialSearch extends SpecialPage {
         */
        public function load() {
                $request = $this->getRequest();
-               list( $this->limit, $this->offset ) = $request->getLimitOffset( 20 );
+               list( $this->limit, $this->offset ) = $request->getLimitOffset( 20, '' );
                $this->mPrefix = $request->getVal( 'prefix', '' );
 
                $user = $this->getUser();
@@ -207,8 +207,7 @@ class SpecialSearch extends SpecialPage {
 
                $profile = new ProfileSection( __METHOD__ );
                $search = $this->getSearchEngine();
-               // Request an extra result to determine whether a "next page" link is useful
-               $search->setLimitOffset( $this->limit + 1, $this->offset );
+               $search->setLimitOffset( $this->limit, $this->offset );
                $search->setNamespaces( $this->namespaces );
                $this->saveNamespaces();
                $search->prefix = $this->mPrefix;
@@ -253,9 +252,7 @@ class SpecialSearch extends SpecialPage {
                $rewritten = $search->replacePrefixes( $term );
 
                $titleMatches = $search->searchTitle( $rewritten );
-               if ( !( $titleMatches instanceof SearchResultTooMany ) ) {
-                       $textMatches = $search->searchText( $rewritten );
-               }
+               $textMatches = $search->searchText( $rewritten );
 
                $textStatus = null;
                if ( $textMatches instanceof Status ) {
@@ -310,58 +307,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' )
                );
 
-               // Sometimes the search engine knows there are too many hits
-               if ( $titleMatches instanceof SearchResultTooMany ) {
-                       $out->wrapWikiMsg( "==$1==\n", 'toomanymatches' );
-
-                       return;
-               }
-
                $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
@@ -375,7 +351,7 @@ class SpecialSearch extends SpecialPage {
                                        $this->offset,
                                        $this->limit,
                                        $this->powerSearchOptions() + array( 'search' => $term ),
-                                       max( $titleMatchesNum, $textMatchesNum ) <= $this->limit
+                                       $this->limit + $this->offset >= $totalRes
                                );
                        }
                        wfRunHooks( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) );
@@ -449,7 +425,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';
@@ -535,7 +511,11 @@ class SpecialSearch extends SpecialPage {
 
                if ( $user->isLoggedIn() &&
                        !is_null( $request->getVal( 'nsRemember' ) ) &&
-                       $user->matchEditToken( $request->getVal( 'nsToken' ) )
+                       $user->matchEditToken(
+                               $request->getVal( 'nsToken' ),
+                               'searchnamespace',
+                               $request
+                       )
                ) {
                        // Reset namespace preferences: namespaces are not searched
                        // when they're not mentioned in the URL parameters.
@@ -570,11 +550,9 @@ class SpecialSearch extends SpecialPage {
 
                $out = "<ul class='mw-search-results'>\n";
                $result = $matches->next();
-               $count = 0;
-               while ( $result && $count < $this->limit ) {
+               while ( $result ) {
                        $out .= $this->showHit( $result, $terms );
                        $result = $matches->next();
-                       $count++;
                }
                $out .= "</ul>\n";
 
@@ -736,7 +714,7 @@ class SpecialSearch extends SpecialPage {
                                                $thumb->toHtml( array( 'desc-link' => true ) ) .
                                                '</td>' .
                                                '<td style="vertical-align: top;">' .
-                                               "{$link} {$fileMatch}" .
+                                               "{$link} {$redirect} {$section} {$fileMatch}" .
                                                $extract .
                                                "<div class='mw-search-result-data'>{$score}{$desc} - {$date}{$related}</div>" .
                                                '</td>' .
@@ -891,26 +869,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]]
         *
@@ -935,9 +893,7 @@ class SpecialSearch extends SpecialPage {
                        }
 
                        $rows[$subject] .=
-                               Xml::openElement(
-                                       'td', array( 'style' => 'white-space: nowrap' )
-                               ) .
+                               Xml::openElement( 'td' ) .
                                Xml::checkLabel(
                                        $name,
                                        "ns{$namespace}",
@@ -979,7 +935,13 @@ class SpecialSearch extends SpecialPage {
                $remember = '';
                $user = $this->getUser();
                if ( $user->isLoggedIn() ) {
-                       $remember .= Html::hidden( 'nsToken', $user->getEditToken() ) .
+                       $remember .= Html::hidden(
+                               'nsToken',
+                               $user->getEditToken(
+                                       'searchnamespace',
+                                       $this->getRequest()
+                               )
+                       ) .
                        Xml::checkLabel(
                                wfMessage( 'powersearch-remember' )->text(),
                                'nsRemember',
@@ -989,10 +951,7 @@ class SpecialSearch extends SpecialPage {
                }
 
                // Return final output
-               return Xml::openElement(
-                       'fieldset',
-                       array( 'id' => 'mw-searchoptions', 'style' => 'margin:0em;' )
-               ) .
+               return Xml::openElement( 'fieldset', array( 'id' => 'mw-searchoptions' ) ) .
                        Xml::element( 'legend', null, $this->msg( 'powersearch-legend' )->text() ) .
                        Xml::tags( 'h4', null, $this->msg( 'powersearch-ns' )->parse() ) .
                        Html::element( 'div', array( 'id' => 'mw-search-togglebox' ) ) .
@@ -1051,11 +1010,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;
@@ -1094,32 +1051,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;
        }
 
@@ -1127,7 +1073,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
@@ -1143,6 +1089,17 @@ 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 ) .
+                               Xml::element( 'div', array( 'style' => 'clear:both' ) );
+               }
+
                return $out . $this->didYouMeanHtml;
        }
 
index 8a32ba9..bea65ba 100644 (file)
@@ -69,18 +69,42 @@ class SpecialTrackingCategories extends SpecialPage {
                        $allMsgs = array();
                        $catDesc = $catMsg . '-desc';
                        $catMsgTitle = Title::makeTitleSafe( NS_MEDIAWIKI, $catMsg );
+                       if ( !$catMsgTitle ) {
+                               continue;
+                       }
                        $catMsgTitleText = Linker::link(
                                $catMsgTitle,
                                htmlspecialchars( $catMsg )
                        );
 
-                       if ( strpos( $msgObj->plain(), '{{NAMESPACE}}' ) !== false ) {
+                       // Match things like {{NAMESPACE}} and {{NAMESPACENUMBER}}.
+                       // False positives are ok, this is just an efficiency shortcut
+                       if ( strpos( $msgObj->plain(), '{{' ) !== false ) {
                                $ns = MWNamespace::getValidNamespaces();
                                foreach ( $ns as $namesp ) {
                                        $tempTitle = Title::makeTitleSafe( $namesp, $catMsg );
+                                       if ( !$tempTitle ) {
+                                               continue;
+                                       }
                                        $catName = $msgObj->title( $tempTitle )->text();
-                                       if ( !$msgObj->isDisabled() ) {
+                                       # Allow tracking categories to be disabled by setting them to "-"
+                                       if ( $catName !== '-' ) {
                                                $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
+                                               if ( $catTitle ) {
+                                                       $catTitleText = Linker::link(
+                                                               $catTitle,
+                                                               htmlspecialchars( $catName )
+                                                       );
+                                                       $allMsgs[] = $catTitleText;
+                                               }
+                                       }
+                               }
+                       } else {
+                               $catName = $msgObj->text();
+                               # Allow tracking categories to be disabled by setting them to "-"
+                               if ( $catName !== '-' ) {
+                                       $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
+                                       if ( $catTitle ) {
                                                $catTitleText = Linker::link(
                                                        $catTitle,
                                                        htmlspecialchars( $catName )
@@ -88,18 +112,11 @@ class SpecialTrackingCategories extends SpecialPage {
                                                $allMsgs[] = $catTitleText;
                                        }
                                }
-                       } else {
-                               $catName = $msgObj->text();
-                               if ( !$msgObj->isDisabled() ) {
-                                       $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
-                                       $catTitleText = Linker::link(
-                                               $catTitle,
-                                               htmlspecialchars( $catName )
-                                       );
-                               } else {
-                                       $catTitleText = $this->msg( 'trackingcategories-disabled' )->parse();
-                               }
-                               $allMsgs[] = $catTitleText;
+                       }
+
+                       # Extra message, when no category was found
+                       if ( !count( $allMsgs ) ) {
+                               $allMsgs[] = $this->msg( 'trackingcategories-disabled' )->parse();
                        }
 
                        /*
index 01c0aaf..976294b 100644 (file)
@@ -827,7 +827,7 @@ class UploadForm extends HTMLForm {
                }
 
                $canUploadByUrl = UploadFromUrl::isEnabled()
-                       && UploadFromUrl::isAllowed( $this->getUser() )
+                       && ( UploadFromUrl::isAllowed( $this->getUser() ) === true )
                        && $wgCopyUploadsFromSpecialUpload;
                $radio = $canUploadByUrl;
                $selectedSourceType = strtolower( $this->getRequest()->getText( 'wpSourceType', 'File' ) );
index 657999c..576b625 100644 (file)
@@ -129,6 +129,7 @@ class SpecialVersion extends SpecialPage {
                                        $this->getEntryPointInfo()
                                );
                                $out->addHtml(
+                                       $this->getSkinCredits() .
                                        $this->getExtensionCredits() .
                                        $this->getParserTags() .
                                        $this->getParserFunctionHooks()
@@ -210,7 +211,9 @@ class SpecialVersion extends SpecialPage {
                // wikimarkup can be used.
                $software = array();
                $software['[https://www.mediawiki.org/ MediaWiki]'] = self::getVersionLinked();
-               $software['[http://www.php.net/ PHP]'] = phpversion() . " (" . PHP_SAPI . ")";
+               $phpKey = wfIsHHVM() ? '[http://hhvm.com/ HHVM]' :
+                       '[http://www.php.net/ PHP]';
+               $software[$phpKey] = PHP_VERSION . " (" . PHP_SAPI . ")";
                $software[$dbr->getSoftwareLink()] = $dbr->getServerInfo();
 
                // Allow a hook to add/remove items.
@@ -418,7 +421,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 +453,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 +470,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 +613,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 +821,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 +837,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 fa68504..7d439fa 100644 (file)
@@ -74,17 +74,39 @@ class WantedFilesPage extends WantedQueryPage {
 
        function getQueryInfo() {
                return array(
-                       'tables' => array( 'imagelinks', 'image' ),
+                       'tables' => array(
+                               'imagelinks',
+                               'page',
+                               'redirect',
+                               'img1' => 'image',
+                               'img2' => 'image',
+                       ),
                        'fields' => array(
                                'namespace' => NS_FILE,
                                'title' => 'il_to',
                                'value' => 'COUNT(*)'
                        ),
-                       'conds' => array( 'img_name IS NULL' ),
+                       'conds' => array(
+                               'img1.img_name' => null,
+                               // We also need to exclude file redirects
+                               'img2.img_name' => null,
+                        ),
                        'options' => array( 'GROUP BY' => 'il_to' ),
-                       'join_conds' => array( 'image' =>
-                               array( 'LEFT JOIN',
-                                       array( 'il_to = img_name' )
+                       'join_conds' => array(
+                               'img1' => array( 'LEFT JOIN',
+                                       'il_to = img1.img_name'
+                               ),
+                               'page' => array( 'LEFT JOIN', array(
+                                       'il_to = page_title',
+                                       'page_namespace' => NS_FILE,
+                               ) ),
+                               'redirect' => array( 'LEFT JOIN', array(
+                                       'page_id = rd_from',
+                                       'rd_namespace' => NS_FILE,
+                                       'rd_interwiki' => ''
+                               ) ),
+                               'img2' => array( 'LEFT JOIN',
+                                       'rd_title = img2.img_name'
                                )
                        )
                );
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 d6c666a..8798de5 100644 (file)
@@ -277,8 +277,16 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                                        foreach ( $this->localInterwikis as $localIW ) {
                                                if ( 0 == strcasecmp( $parts['interwiki'], $localIW ) ) {
                                                        if ( $dbkey == '' ) {
-                                                               # Can't have an empty self-link
-                                                               throw new MalformedTitleException( 'Local interwiki with empty title: ' . $text );
+                                                               # Empty self-links should point to the Main Page, to ensure
+                                                               # compatibility with cross-wiki transclusions and the like.
+                                                               $mainPage = Title::newMainPage();
+                                                               return array(
+                                                                       'interwiki' => $mainPage->getInterwiki(),
+                                                                       'fragment' => $mainPage->getFragment(),
+                                                                       'namespace' => $mainPage->getNamespace(),
+                                                                       'dbkey' => $mainPage->getDBkey(),
+                                                                       'user_case_dbkey' => $mainPage->getUserCaseDBKey()
+                                                               );
                                                        }
                                                        $parts['interwiki'] = '';
 
index b8ca434..5defd45 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 ) {
@@ -435,7 +435,7 @@ abstract class UploadBase {
                }
 
                $this->mFileProps = FSFile::getPropsFromPath( $this->mTempPath, $this->mFinalExtension );
-               $mime = $this->mFileProps['file-mime'];
+               $mime = $this->mFileProps['mime'];
 
                if ( $wgVerifyMimeType ) {
                        # XXX: Missing extension will be caught by validateName() via getTitle()
@@ -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 9d3f5e9..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;
        }
 
@@ -1880,7 +2003,7 @@ class Language {
        /**
         * Used by date() and time() to adjust the time output.
         *
-        * @param int $ts The time in date('YmdHis') format
+        * @param string $ts The time in date('YmdHis') format
         * @param mixed $tz Adjust the time by this amount (default false, mean we
         *   get user timecorrection setting)
         * @return int
@@ -2020,7 +2143,7 @@ class Language {
        }
 
        /**
-        * @param mixed $ts The time format which needs to be turned into a
+        * @param string $ts The time format which needs to be turned into a
         *   date('YmdHis') format with wfTimestamp(TS_MW,$ts)
         * @param bool $adj Whether to adjust the time output according to the
         *   user configured offset ($timecorrection)
@@ -2039,7 +2162,7 @@ class Language {
        }
 
        /**
-        * @param mixed $ts The time format which needs to be turned into a
+        * @param string $ts The time format which needs to be turned into a
         *   date('YmdHis') format with wfTimestamp(TS_MW,$ts)
         * @param bool $adj Whether to adjust the time output according to the
         *   user configured offset ($timecorrection)
@@ -2058,7 +2181,7 @@ class Language {
        }
 
        /**
-        * @param mixed $ts The time format which needs to be turned into a
+        * @param string $ts The time format which needs to be turned into a
         *   date('YmdHis') format with wfTimestamp(TS_MW,$ts)
         * @param bool $adj Whether to adjust the time output according to the
         *   user configured offset ($timecorrection)
@@ -2149,7 +2272,7 @@ class Language {
         * Internal helper function for userDate(), userTime() and userTimeAndDate()
         *
         * @param string $type Can be 'date', 'time' or 'both'
-        * @param mixed $ts The time format which needs to be turned into a
+        * @param string $ts The time format which needs to be turned into a
         *   date('YmdHis') format with wfTimestamp(TS_MW,$ts)
         * @param User $user User object used to get preferences for timezone and format
         * @param array $options Array, can contain the following keys:
index 65d74e9..b3a4c1a 100644 (file)
@@ -1062,8 +1062,8 @@ class LanguageConverter {
         * @param Content $content New page content
         * @param string $summary Edit summary of the edit
         * @param bool $isMinor Was the edit marked as minor?
-        * @param bool $isWatch Did the user watch this page or not?
-        * @param string|int $section
+        * @param null $isWatch Unused.
+        * @param null $section Unused.
         * @param int $flags Bitfield
         * @param Revision|null $revision New Revision object or null
         * @return bool True
index 9c46ab1..c9e75e0 100644 (file)
        'tt-latn' => 'tatarça',        # Tatar (Latin script)
        'tum' => 'chiTumbuka',  # Tumbuka
        'tw' => 'Twi',                  # Twi, (FIXME!)
-       'ty' => 'Reo Mā`ohi',  # Tahitian
+       'ty' => 'reo tahiti',   # Tahitian
        'tyv' => 'тыва дыл',     # Tyvan
        'udm' => 'удмурт',        # Udmurt
        'ug' => 'ئۇيغۇرچە / Uyghurche', # Uyghur (multiple scripts - defaults to Arabic)
index 740663f..226e313 100644 (file)
@@ -65,6 +65,8 @@ class LanguageRu extends Language {
                                                $word = join( '', array_slice( $chars[0], 0, -2 ) ) . 'тей';
                                        } elseif ( join( '', array_slice( $chars[0], -2 ) ) === 'ды' ) {
                                                $word = join( '', array_slice( $chars[0], 0, -2 ) ) . 'дов';
+                                       } elseif ( join( '', array_slice( $chars[0], -1 ) ) === 'д' ) {
+                                               $word = join( '', array_slice( $chars[0], 0, -1 ) ) . 'да';
                                        } elseif ( join( '', array_slice( $chars[0], -3 ) ) === 'ник' ) {
                                                $word = join( '', array_slice( $chars[0], 0, -3 ) ) . 'ника';
                                        } elseif ( join( '', array_slice( $chars[0], -3 ) ) === 'ные' ) {
@@ -91,6 +93,8 @@ class LanguageRu extends Language {
                                                $word = join( '', array_slice( $chars[0], 0, -2 ) ) . 'тях';
                                        } elseif ( join( '', array_slice( $chars[0], -2 ) ) === 'ды' ) {
                                                $word = join( '', array_slice( $chars[0], 0, -2 ) ) . 'дах';
+                                       } elseif ( join( '', array_slice( $chars[0], -1 ) ) === 'д' ) {
+                                               $word = join( '', array_slice( $chars[0], 0, -1 ) ) . 'де';
                                        } elseif ( join( '', array_slice( $chars[0], -3 ) ) === 'ник' ) {
                                                $word = join( '', array_slice( $chars[0], 0, -3 ) ) . 'нике';
                                        } elseif ( join( '', array_slice( $chars[0], -3 ) ) === 'ные' ) {
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 d17d38c..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",
        "difference-missing-revision": "{{PLURAL:$2|'n Weergawe|$2 weergawes}} van die verskil ($1) {{PLURAL:$2|is|is}} nie gevind nie.\n\nDit word meestal veroorsaak deur die volg van 'n verouderde verwysing na 'n bladsy wat verwyder is.\nDetails kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] gevind word.",
        "searchresults": "Soekresultate",
        "searchresults-title": "Soekresultate vir \"$1\"",
-       "toomanymatches": "Te veel resultate. Probeer asseblief 'n ander soektog.",
        "titlematches": "Artikeltitel resultate",
        "textmatches": "Artikelteks resultate",
        "notextmatches": "Geen artikelteks resultate nie",
        "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 57e359a..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": "ስህተት",
        "edit-gone-missing": "ገጹን ማሳደስ አልተቻለም።  እንደ ጠፋ ይመስላል።",
        "edit-conflict": "ተቃራኒ ለውጥ።",
        "edit-no-change": "በጽሕፈቱ አንዳችም አልተለወጠምና ለውጥዎ ቸል ተብሏል።",
+       "postedit-confirmation-saved": "እርማትዎ ተቆጥቧል",
        "edit-already-exists": "አዲስ ገጽ ለመፍጠር አልተቻለም፤\nገና ይኖራልና።",
        "defaultmessagetext": "የቆየው ጽሕፈት",
        "content-model-javascript": "ጃቫ ስክሪፕት",
        "editundo": "ለውጡ ይገልበጥ",
        "searchresults": "የፍለጋ ውጤቶች",
        "searchresults-title": "ለ\"$1\" የፍለጋ ውጤቶች",
-       "toomanymatches": "ከመጠን በላይ ያሉ ስምምነቶች ተመለሱ፤ እባክዎ ሌላ ጥያቄ ይሞክሩ።",
        "titlematches": "የሚስማሙ አርዕስቶች",
        "textmatches": "ጽሕፈት የሚስማማባቸው ገጾች",
        "notextmatches": "ጽሕፈት የሚስማማባቸው ገጾች የሉም",
        "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 7e11835..627d283 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": "قائمة التصفح",
        "viewsourcetext": "تمكنك مطالعة و نسخ مصدر هذه الصفحة:",
        "viewyourtext": "يمكنك استعراض و نسخ مصدر ''' تعديلاتك ''' في هذه الصفحة:",
        "protectedinterface": "توفر هذه الصفحة نص الواجهة للبرنامج على هذا الويكي، وهي محمية لمنع سوء أستخدامها.\nلإضافة أو تغيير الترجمات لجميع مشاريع الويكي، رجاءً أستخدم [//translatewiki.net/ translatewiki.net]، مشروع الترجمة الخاص بميدياويكي.",
-       "editinginterface": "'''تحذير:''' أنت تقوم بتحرير صفحة تستخدم في الواجهة النصية للبرنامج.\nسوف تؤثر التغييرات في هذه الصفحة على مظهر واجهة المستخدم للمستخدمين الآخرين على هذا الويكي.\nلإضافة أو تغيير الترجمات في جميع مشاريع الويكي، رجاءً استخدم [//translatewiki.net/ translatewiki.net]، مشروع الترجمة الخاص بميدياويكي.",
+       "editinginterface": "<strong>تنبيه:</strong> تعديل هذه الصفحة سيحفظ في هذا الويكي فقط. لتعميم التعديل على جميع مشاريع ميدياويكي، عدلها في [//translatewiki.net/ مشروع ترجمة الويكي].",
        "cascadeprotected": "تمت حماية هذه الصفحة من التعديل لأنها مدمجة في {{PLURAL:$1||الصفحة التالية، والتي|الصفحتين التاليتين، واللتين|الصفحات التالية، والتي}} تم استعمال خاصية \"حماية الصفحات المدمجة\" {{PLURAL:$1||بها|بهما|بها}}:\n$2",
        "namespaceprotected": "لا تمتلك الصلاحية لتعديل الصفحات في نطاق '''$1'''.",
        "customcssprotected": "أنت لا تمتلك السماح لتعديل صفحة الCSS هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.",
        "node-count-exceeded-category": "تجاوزات تعداد العقد",
        "node-count-exceeded-warning": "تجاوزت هذه الصفحة تعداد العقد",
        "expansion-depth-exceeded-category": "تجاوزات عمق التوسيع",
+       "expansion-depth-exceeded-category-desc": "هذا تصنيف للصفحات التي تتجاوز عمق التوسيع.",
        "expansion-depth-exceeded-warning": "الصفحة تجاوزت عمق التوسيع",
        "parser-unstrip-loop-warning": "حلقة معراة تم الكشف عنها",
        "parser-unstrip-recursion-limit": "تعدى حد العودية Unstrip  ($1)",
        "revdelete-show-file-confirm": "هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف \"<nowiki>$1</nowiki>\" بتاريخ $2 الساعة $3؟",
        "revdelete-show-file-submit": "نعم",
        "logdelete-selected": "{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:",
+       "revdelete-text-others": "سيتمكن الإداريون الآخرون على {{SITENAME}} من الوصول إلى المحتوى المخفي وإلغاء حذفه مجددا من خلال ذات الواجهة ما لم تطبق قيود إضافية.",
        "revdelete-confirm": "الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.\nمن فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].",
        "revdelete-suppress-text": "ينبغي للإخفاء أن يستخدم '''فقط''' في الحالات التالية:\n* معلومات يحتمل أن تكون تشهيرية\n* معلومات شخصية غير ملائمة\n*: ''عناوين المنازل وأرقام الهواتف وأرقام الهويات الوطنية إلى آخره.''",
        "revdelete-legend": "وضع ضوابط رؤية",
        "difference-missing-revision": "{{PLURAL:$2|مراجعة واحدة|$2 مراجعات}} لهذا الفرق ($1) {{PLURAL:$2|لم|لم}} يتم إيجادها.\n\nهذا يحدث عادة عن طريق اتباع وصلة فرق قديمة لصفحة تم حذفها.\nالتفاصيل يمكن إيجادها في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
        "searchresults": "نتائج البحث",
        "searchresults-title": "نتائج البحث عن \"$1\"",
-       "toomanymatches": "وجدت مطابقات كثيرة، من فضلك جرب استعلاما مختلفا",
        "titlematches": "عنوان الصفحة يطابق",
        "textmatches": "نص الصفحة يطابق",
        "notextmatches": "لم يتم إيجاد أي نص مطابق",
        "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": "بحث متقدم",
        "pageswithprop-prophidden-binary": "قيمة الخاصية الثنائية المخفية ($1)",
        "doubleredirects": "تحويلات مزدوجة",
        "doubleredirectstext": "هذه الصفحة تعرض الصفحات التي تحول إلى صفحات تحويل أخرى.\nكل سطر يحتوي على وصلات للتحويلة الأولى والثانية وهدف التحويلة الثانية، والذي عادة ما يشير إلى صفحة الهدف \"الحقيقية\"، التي من المفترض أن تحول إليها التحويلة الأولى.\nالمدخلات <del>المشطوبة</del> صححت.",
-       "double-redirect-fixed-move": "[[$1]] تم نقلها، هي الآن تحويلة إلى [[$2]]",
-       "double-redirect-fixed-maintenance": "تصليح تحويلة مزدوجة من [[$1]] إلى [[$2]].",
+       "double-redirect-fixed-move": "نُقلت [[$1]].\nحُدّثت تلقائيا وهي الآن تحويلة إلى [[$2]].",
+       "double-redirect-fixed-maintenance": "تصحيح تلقائي لتحويلة مزدوجة من [[$1]] إلى [[$2]] في مهمة صيانة.",
        "double-redirect-fixer": "مصلح التحويل",
        "brokenredirects": "تحويلات مكسورة",
        "brokenredirectstext": "التحويلات التالية تصل لصفحات غير موجودة:",
        "wantedtemplates": "قوالب مطلوبة",
        "mostlinked": "أكثر الصفحات وصلا",
        "mostlinkedcategories": "أكثر التصنيفات ارتباطا",
-       "mostlinkedtemplates": "أكثر القوالب وصلا",
+       "mostlinkedtemplates": "أكثر الصفحات تضمينا",
        "mostcategories": "أكثر الصفحات تصنيفا",
        "mostimages": "أكثر الملفات ارتباطا",
        "mostinterwikis": "الصفحات التي تحتوي على أغلب وصلات الإنترويكي",
        "listgrouprights-removegroup-self": "يمكنه إزالة {{PLURAL:$2|المجموعة|المجموعات}} من حسابه الخاص: $1",
        "listgrouprights-addgroup-self-all": "يمكنه إضافة كل المجموعات إلى حسابه الخاص",
        "listgrouprights-removegroup-self-all": "يمكنه إزالة كل المجموعات من حسابه الخاص",
+       "listgrouprights-namespaceprotection-header": "قيود النطاق",
        "listgrouprights-namespaceprotection-namespace": "النطاق",
+       "trackingcategories": "تصانيف التتبع",
+       "trackingcategories-summary": "تسرد هذه الصفحة تصانيف التتبع التي ينشئها برنامج ميدياويكي. يمكن تغيير أسمائها بتغيير رسائل النظام في نطاق {{ns:8}}.",
+       "trackingcategories-msg": "تصانيف التتبع",
        "trackingcategories-name": "اسم الرسالة",
        "trackingcategories-desc": "معايير إدراج تصنيف",
+       "noindex-category-desc": "هذه الصفحة لا تفهرسها الروبوتات لأن فيها الكلمة السحرية <code><nowiki>__NOINDEX__</nowiki></code> ولأنها في نطاق يسمح بهذا العلم.",
+       "index-category-desc": "الصفحة فيها <code><nowiki>__INDEX__</nowiki></code> (وهي في نطاق يسمح بهذا العلم) ولذا فالروبوتات تفهرسها بينما الأصل ألا تفعل.",
+       "post-expand-template-inclusion-category-desc": "بعد توسيع جميع القوالب حجم الصفحة أكبر من <code><nowiki>__INDEX__</nowiki></code> ولذا فبعض القوالب لا تُوسّع.",
+       "post-expand-template-argument-category-desc": "بعد توسيع معطى قالب (الموجود بين أقواس معقوفة ثلاثة مثل <code>{{{شيء}}}</code>) الصفحة أكبر من <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "دوال المعالجة المكلفة (مثل <code>#ifexist</code>) كثيرة جدا. راجع [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "يضاف التصنيف إذا كانت الصفحة تحتوي وصلة معطوبة (وصلة لتضمين ملف والملف غير موجود)",
+       "hidden-category-category-desc": "التصنيف الذي فيه <code><nowiki>__HIDDENCAT__</nowiki></code> والذي يمنع مبدئيا عرضه في صندوق وصلات التصانيف في الصفحات.",
        "trackingcategories-nodesc": "لا يتوفر وصف.",
        "trackingcategories-disabled": "التصنيف غير مفعل",
        "mailnologin": "لا يوجد عنوان للإرسال",
        "exbeforeblank": "المحتوى قبل الإفراغ كان: '$1'",
        "delete-confirm": "حذف \"$1\"",
        "delete-legend": "حذف",
-       "historywarning": "'''تحذير:''' الصفحة التي توشك على حذفها لها تاريخ فيه {{PLURAL:$1||مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}} تقريبا:",
+       "historywarning": "'''تنبيه:''' الصفحة التي تريد حذفها بها {{PLURAL:$1|نسخة|نسخة واحدة|نسختان|$1 نسخ|$1 نسخة}}. انظر",
        "confirmdeletetext": "أنت على وشك أن تقوم بحذف صفحة بالإضافة إلى كل تاريخها.\nمن فضلك التأكد من عزمك على الحذف، وبأنك مدرك للعواقب، وبأنك تقوم بهذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].",
        "actioncomplete": "انتهاء العملية",
        "actionfailed": "الفعل فشل",
        "delete-edit-reasonlist": "عدل أسباب الحذف",
        "delete-toobig": "لهذه الصفحة تاريخ تعديل طويل، أكثر من {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}}.\nقُيّد محذف مثل هذه الصفحات لمنع الاضطراب المفاجئة في {{SITENAME}}.",
        "delete-warning-toobig": "لهذه الصفحة تاريخ تعديل طويل، أكثر من {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}}.\nقد يؤدي حذفها إلى اضطراب عمليات قاعدة البيانات في {{SITENAME}}؛\nاستمر مع الحذر.",
-       "deleting-backlinks-warning": "'''تحذير:''' ترتبط [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحات أخرى]] بالصفحة التي أنت على وشك حذفها.",
+       "deleting-backlinks-warning": "[[Special:WhatLinksHere/{{FULLPAGENAME}}|تتصل صفحات أخرى]] بالصفحة التي تريد حذفها.",
        "rollback": "استرجاع التعديلات",
        "rollback_short": "استرجع",
        "rollbacklink": "استرجع",
        "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 232683c..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": "المتغيرات",
        "diff-multi-manyusers": "({{PLURAL:$1|نسخه واحده متوسطه|$1 نسخ متوسطه}} by {{PLURAL:$2|يوزر واحد |$2 يوزرات}}  مش معروضه)",
        "searchresults": "نتايج التدوير",
        "searchresults-title": "نتايج التدوير على \"$1\"",
-       "toomanymatches": "لقينا حاجات كتيرة متطابقة، لو سمحت تجرب استعلام مختلف",
        "titlematches": "عنوان الصفحة زى",
        "textmatches": "نص الصفحة بيطابق",
        "notextmatches": "ما لقيناش أى نص مطابق",
        "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 2b7fe74..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": "কাৰ্যসমূহ",
        "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 queue) পূৰ্ণ",
        "pool-errorunknown": "অপৰিচিত ত্ৰুটি",
        "resetpass-abort-generic": "এটা এক্সটেন্‌ছনৰদ্বাৰা গুপ্তশব্দ সলনি কাৰ্য বাতিল কৰা হৈছে।",
        "resetpass-expired": "আপোনাৰ গুপ্তশব্দৰ ম্যাদ উকলি গৈছে। অনুগ্ৰহ কৰি প্ৰৱেশৰ বাবে এটা নতুন গুপ্তশব্দ নিৰ্ধাৰণ কৰক।",
        "resetpass-expired-soft": "আপোনাৰ গুপ্তশব্দৰ ম্যাদ উকলি গৈছে আৰু নতুন এটা নিৰ্ধাৰণ কৰাৰ প্ৰয়োজন। অনুগ্ৰহ কৰি এতিয়া এটা নতুন গুপ্তশব্দ বাছনি কৰক বা পিছত নিৰ্ধাৰণ কৰিবলৈ \"{{int:resetpass-submit-cancel}}\" বুটামত ক্লিক কৰক।",
+       "resetpass-validity-soft": "আপোনাৰ গুপ্তশব্দ বৈধ নহয়: $1\n\nঅনুগ্ৰহ কৰি এটা নতুন গুপ্তশব্দ বাছনি কৰক, বা ইয়াক পাছত সলাবলৈ \"{{int:resetpass-submit-cancel}}\" ক্লিক কৰক।",
        "passwordreset": "গুপ্তশব্দ ন-কৈ বহুৱাওক",
        "passwordreset-text-one": "আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ এই প্ৰপত্ৰ পূৰণ কৰক।",
        "passwordreset-text-many": "{{PLURAL:$1|ইমেইলত এটা অস্থায়ী গুপ্তশব্দ পাবলৈ এই তথ্যসমূহৰ যিকোনো এটা দিয়ক।}}",
        "edit-gone-missing": "পৃষ্ঠাটো নবীকৰণ কৰিব পৰা নগ’ল।\nসম্ভৱতঃ পৃষ্ঠাখন বিলোপ কৰা হৈছে।",
        "edit-conflict": "সম্পাদনা দ্বন্দ্ব।",
        "edit-no-change": "আপোনাৰ সম্পাদনা আওকাণ কৰা হৈছে, কাৰণ লেখাত কোনো তফাৎ নাই।",
+       "postedit-confirmation-created": "পৃষ্ঠাটো সৃষ্টি কৰা হৈছে।",
+       "postedit-confirmation-restored": "পৃষ্ঠাটো পুনৰুদ্ধাৰ কৰা হৈছে।",
        "postedit-confirmation-saved": "আপোনাৰ সম্পাদনা সাঁচি থোৱা হ'ল।",
        "edit-already-exists": "নতুন পৃষ্ঠা সৃষ্টি কৰা নহ'ল।\nপৃষ্ঠাটো ইতিমধ্যে আছেই।",
        "defaultmessagetext": "সাধাৰণ বাৰ্তা পাঠ্য",
        "content-failed-to-parse": "$1 মডেলৰ বাবে $2ৰ তথ্য নিকা কৰিব পৰা নগ’ল: $3",
        "invalid-content-data": "অবৈধ সমল তথ্য",
        "content-not-allowed-here": "[[$2]] পৃষ্ঠাত \"$1\" সমল অনুমোদিত নহয়",
-       "editwarning-warning": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦\8fৰিলà§\87 à¦\86পà§\81নি à¦\95ৰা à¦ªà§°à¦¿à¦¬à§°à§\8dতনসমà§\82হ à¦¹à§\87ৰাব à¦ªà¦¾à§°à§\87। à¦¯à¦¦à¦¿ à¦\86পà§\81নি à¦ªà§\8dৰৱà§\87শ à¦\95ৰা à¦\85ৱসà§\8dথাত à¦\86à¦\9bà§\87, à¦\86পà§\81নি à¦\8fà¦\87 à¦¸à¦¤à§°à§\8dà¦\95বাৰà§\8dতাà¦\95 à¦\86পà§\8bনাৰ à¦ªà¦\9bনà§\8dদসমà§\82হৰ \"সমà§\8dপাদনা\" à¦\85à¦\82শত à¦\85সামৰà§\8dথবান কৰিব পাৰিব।",
+       "editwarning-warning": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦\8fৰিলà§\87 à¦\86পà§\81নি à¦\95ৰা à¦ªà§°à¦¿à§±à¦¤à¦¨à¦¸à¦®à§\82হ à¦¹à§\87ৰাà¦\87 à¦¯à¦¾à¦¬ à¦ªà¦¾à§°à§\87।\nযদি à¦\86পà§\81নি à¦²à¦\97à§\8dâ\80\8c à¦\87ন à¦\95ৰি à¦\86à¦\9bà§\87, à¦\86পà§\81নি à¦\8fà¦\87 à¦¸à¦¤à§°à§\8dà¦\95বাণà§\80à¦\95 à¦\86পà§\8bনাৰ à¦ªà¦\9bনà§\8dদসমà§\82হৰ \"{{int:prefs-editing}}\" à¦\85à¦\82শত à¦¨à¦¿à¦·à§\8dà¦\95à§\8dৰিয় কৰিব পাৰিব।",
        "editpage-notsupportedcontentformat-title": "সমলৰ ফৰ্মেট সমৰ্থিত নহয়।",
        "editpage-notsupportedcontentformat-text": "সমল মডেল $2ৱে সমল ফৰ্মেট $1 সমৰ্থন নকৰে।",
        "content-model-wikitext": "ৱিকিপাঠ্য",
        "undo-success": "এই সম্পাদনা পূৰ্ববৎ কৰিব পাৰি ।\nঅনুগ্ৰহ কৰি তলৰ তুলনাটি পৰীক্ষা কৰি ঠাৱৰ কৰক যে আপুনি এনে কৰিব বিচাৰিছে, আৰু তলত সালসলনিসমূহ সাঁচি এই কাৰ্য্য সম্পন্ন কৰক ।",
        "undo-failure": "এই সম্পাদনা মধ্যৱৰ্তী সম্পাদনাসমূহৰ দ্বন্দৰ কাৰণে পূৰ্ববৎ কৰা নহ'ব ।",
        "undo-norev": "এই সম্পাদনাটি ৰদ কৰিব নোৱাৰি, কাৰণ ই আৰু নাই বা ইয়াক বাতিল কৰা হ'ল ।",
+       "undo-nochange": "সম্পাদনাটো ইতিমধ্যেই বাতিল কৰা হৈছে।",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|আলোচনা]]) সম্পাদিত $1 সংশোধনটি বাতিল কৰক",
        "undo-summary-username-hidden": "এজন গোপন ব্যৱহাৰকাৰীয়ে কৰা $1 সংশোধন বাতিল কৰক",
        "cantcreateaccounttitle": "একাউণ্ট সৃষ্টি কৰিব নোৱাৰি",
        "currentrev": "শেহতীয়া সংস্কৰণ",
        "currentrev-asof": "$1 অনুযায়ী বৰ্তমান সংস্কৰণ",
        "revisionasof": "$1ৰ সংস্কৰণ",
-       "revision-info": "$1-লà§\88 $2à¦\87 à¦\95ৰা à¦¸à¦\82শà§\8bধন",
+       "revision-info": "$1-ত {{GENDER:$6|$2}} à¦¸à¦¦à¦¸à§\8dযâ\80\8cà¦\87 à¦\95ৰা à¦¸à¦\82শà§\8bধন$7",
        "previousrevision": "← আগৰ সংশোধন",
        "nextrevision": "নতুন সংশোধন→",
        "currentrevisionlink": "শেহতীয়া সংশোধন",
        "difference-missing-revision": "{{PLURAL:$2|এটা সংস্কৰণ|$2 সংস্কৰণসমূহৰ}} সংশোধনৰ পাৰ্থক্য  ($1) {{PLURAL:$2| পোৱা নগ’ল}}।\n\n\nসাধাৰণতে বিলোপ কৰা এখন পৃষ্ঠাৰ পুৰণা ইতিহাস লিংক অনুসৰণ কৰিলে এনে হয়।\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} বিলোপন অভিলেখ] চালে অধিক তথ্য পাব।",
        "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": "শক্তিশালী সন্ধান",
        "powersearch-togglelabel": "পৰীক্ষা কৰক:",
        "powersearch-toggleall": "সকলো",
        "powersearch-togglenone": "একো নাই",
+       "powersearch-remember": "ভৱিষ্যতৰ সন্ধানৰ বাবে বাছনি মনত ৰাখক।",
        "search-external": "বাহ্যিক সন্ধান",
        "searchdisabled": "{{SITENAME}} ত অনুসন্ধান কৰা সাময়িক ভাবে নিষ্ক্ৰিয় কৰা হৈছে।\nতেতিয়ালৈকে গুগলত অনুসন্ধান কৰক।\nমনত ৰাখিব যে তেঁওলোকৰ {{SITENAME}}ৰ ইণ্ডেক্স পুৰণি হব পাৰে।",
        "search-error": "অনুসন্ধানৰ সময়ত এটা ত্ৰুটি হৈছে: $1",
        "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": "বৰ্তমান থকা ফাইলৰ ওপৰত লিখক",
        "protectedpages-cascade": "কেৱল প্ৰপাতাকাৰ সুৰক্ষা",
        "protectedpages-noredirect": "পুনঃনিৰ্দেশ লুকুৱাওক",
        "protectedpagesempty": "এই পাৰামিটাৰবোৰেৰে কোনো পৃষ্ঠা এতিয়া সুৰক্ষিত কৰা হোৱা নাই ।",
+       "protectedpages-timestamp": "সময়-মোহৰ",
        "protectedpages-page": "পৃষ্ঠা",
        "protectedpages-expiry": "ম্যাদ উকলিব",
+       "protectedpages-params": "সুৰক্ষা পাৰামিটাৰসমূহ",
+       "protectedpages-reason": "কাৰণ",
+       "protectedpages-unknown-timestamp": "অজ্ঞাত",
+       "protectedpages-unknown-performer": "অজ্ঞাত ব্যৱহাৰকাৰী",
        "protectedtitles": "সুৰক্ষিত শিৰোনামাসমূহ",
        "protectedtitlesempty": "এই পাৰামিটাৰবোৰেৰে কোনো শিৰোনামা এতিয়া সুৰক্ষিত কৰা হোৱা নাই ।",
        "listusers": "সদস্য তালিকা",
        "listgrouprights-removegroup-self": "{{PLURAL:$2|গোট|গোটসমূহ}} নিজৰ একাউণ্টৰপৰা আঁতৰাওক: $1",
        "listgrouprights-addgroup-self-all": "সকলো গোট নিজৰ একাউণ্টত যোগ কৰক",
        "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": "চকু দিয়া হৈছে.....",
        "watchlistedit-raw-done": "আপোনাৰ লক্ষ্য-তালিকা নবীকৰণ কৰা হ'ল",
        "watchlistedit-raw-added": "{{PLURAL:$1|এটা শিৰোনামা|$1-টা শিৰোনামা}} যোগ কৰা হ'ল:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|এটা শিৰোনামা|$1-টা শিৰোনামা}} আঁতৰোৱা হ'ল:",
+       "watchlistedit-clear-title": "লক্ষ্য-তালিকা পৰিষ্কাৰ কৰা হ'ল",
+       "watchlistedit-clear-legend": "লক্ষ্য-তালিকা পৰিষ্কাৰ কৰক",
+       "watchlistedit-clear-explain": "সকলো শিৰোনামা আপোনাৰ লক্ষ্য-তালিকাৰ পৰা আঁতৰোৱা হ'ব",
+       "watchlistedit-clear-titles": "শিৰোনামাসমূহ:",
+       "watchlistedit-clear-submit": "লক্ষ্য-তালিকা পৰিষ্কাৰ কৰক (এইটো স্থায়ী!)",
+       "watchlistedit-clear-done": "আপোনাৰ লক্ষ্য-তালিকা পৰিষ্কাৰ কৰা হ'ল।",
        "watchlisttools-view": "সংগতি থকা সাল-সলনিবোৰ চাওক",
        "watchlisttools-edit": "লক্ষ্য-তালিকা চাওক আৰু সম্পাদনা কৰক",
        "watchlisttools-raw": "অশোধিত লক্ষ্য-তালিকা সম্পাদনা কৰক",
        "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": "হুকসমূহ",
        "htmlform-no": "নহয়",
        "htmlform-yes": "হয়",
        "htmlform-chosen-placeholder": "এটা বিকল্প বাছনি কৰক",
+       "htmlform-cloner-create": "আৰু যোগ কৰক",
+       "htmlform-cloner-delete": "আঁতৰাওক",
        "sqlite-has-fts": "$1 সম্পূৰ্ণ-পাঠ অনুসন্ধান সমৰ্থন সহ",
        "sqlite-no-fts": "$1 সম্পূৰ্ণ-পাঠ অনুসন্ধান সমৰ্থন অবিহনে",
        "logentry-delete-delete": "$3 পৃষ্ঠাটো $1ৰদ্বাৰা {{GENDER:$2|বিলোপ কৰা হ'ল}}",
index caa9810..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",
        "difference-missing-revision": "{{PLURAL:$2|Nun s'alcontró|Nun s'alcontraron}} {{PLURAL:$2|una revisión|$2 revisiones}} d'esta diferencia ($1).\n\nDe vezu la causa d'esto ye siguir un enllaz de diferencia antiguu a una páxina que se desanició.\nSe puen alcontrar más detalles nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistru de desanicios].",
        "searchresults": "Resultaos de la busca",
        "searchresults-title": "Resultaos de buscar \"$1\"",
-       "toomanymatches": "Atopáronse demasiaes coincidencies, por favor fai una consulta diferente",
        "titlematches": "Coincidencies de los títulos de la páxina",
        "textmatches": "Coincidencies del testu de la páxina",
        "notextmatches": "Nun hai coincidencies nel testu de la páxina",
        "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 a04b01c..c7d66d8 100644 (file)
@@ -23,7 +23,8 @@
                        "Wertuose",
                        "לערי ריינהארט",
                        "아라",
-                       "Arystanbek"
+                       "Arystanbek",
+                       "Dağlı95"
                ]
        },
        "tog-underline": "Keçidlərin altını xətlə:",
        "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",
        "showhideselectedversions": "Seçilən versiyaları göstər/gizlə",
        "editundo": "əvvəlki halına qaytar",
        "diff-multi-manyusers": "({{PLURAL:$2|Bir istifadəçi|$2 istifadəçi}} tərəfindən edilən {{PLURAL:$1|bir ara redaktə|$1 ara redaktə}} göstərilmir)",
+       "difference-missing-revision": "Səhifənin  {{PLURAL:$2|bu versiyasının|$2 versiyalarının}} müqayisəsi ($1) tapılmadı.\nBu xəta adətən, köhnəlmiş səhifələrin müqayisə versiyalarından keçid edildikdə baş verir.\nDaha ətraflı məlumat üçün [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silmə qeydlərinə] baxın.",
        "searchresults": "Axtarış nəticələri",
        "searchresults-title": "''$1'' üçün axtarış nəticələri",
-       "toomanymatches": "Üst-üstə düşən çoxlu hal tapılıb, lütfən yeni sorğu göndərin",
        "titlematches": "Səhifə adı eynidir",
        "textmatches": "Mətn eynidir",
        "notextmatches": "Məqalələrdə uyğun məzmun tapılmadı",
        "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ış",
        "recentchanges-label-minor": "Bu kiçik redaktədir",
        "recentchanges-label-bot": "Bu redaktə bot tərəfindən edilmişdir",
        "recentchanges-label-unpatrolled": "Bu redaktə hələ nəzərdən keçirilməmişdir",
+       "recentchanges-label-plusminus": "Səhifənin ölçüsü bayt miqdarı ilə təyin edilir",
        "recentchanges-legend-newpage": "$1 - yeni səhifə",
        "rcnotefrom": "Aşağıda <strong>$2</strong>-dən bu yana olan dəyişikliklər göstərilib (<strong>$1</strong>-dən çox olmayaraq).",
        "rclistfrom": "$3 $2 vaxtından başlayaraq yeni dəyişiklikləri göstər",
        "badfilename": "Faylın adı dəyişildi. Yeni adı: \"$1\".",
        "filetype-mime-mismatch": "\".$1\" fayl uzantısı faylın MIME tipinə ($2) uyğun gəlmir.",
        "filetype-badmime": "\"$1\" MIME tipindəki faylların yüklənməsinə icazə verilmir.",
+       "filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|icazə verilən fayl formatı deyil}}. İcazə verilən {{PLURAL:$3|fayl formatı|fayl formatı bunlardır:}} $2.",
        "filetype-missing": "Faylın heç bir uzantısı yoxdur (məsələn, \".jpg\").",
        "empty-file": "Göndərdiyiniz fayl boşdur.",
        "file-too-large": "Göndərdiyiniz fayl çox böyükdür.",
        "largefileserver": "Faylın ölçüsü yol verilən həddi aşır.",
        "emptyfile": "Yüklədiyiniz fayl boşdur. Bu faylın adında olan hərf səhvi ilə bağlı ola bilər. Xahiş olunur ki, doğurdan da bu faylı yükləmək istədiyinizi yoxlayasınız.",
        "fileexists": "Yükləmək istədiyiniz adda fayl mövcuddur.\nLütfən <strong>[[:$1]]</strong> keçidini yoxlayın və bu faylı yükləmək istədiyinizdən əmin olun.\n[[$1|thumb]]",
+       "fileexists-extension": "Bu adda başqa bir fayl mövcuddur: [[$2|thumb]]\n* Yüklənilən faylın adı: <strong>[[:$1]]</strong>\n* Mövcud faylın adı: <strong>[[:$2]]</strong>\nXahiş edirik, başqa ad seçin.",
        "uploadwarning": "Yükləmə xəbərdarlığı",
        "savefile": "Faylı qeyd et",
        "uploadedimage": "\"[[$1]]\" yükləndi",
        "upload-description": "Faylın izahı",
        "upload-options": "Yükləmə parametrləri",
        "watchthisupload": "Bu faylı izlə",
+       "filename-bad-prefix": "Yüklədiyiniz faylın adı, çox güman ki, rəqəmsal kameralar tərəfindən avtomatik olaraq əlavə edilən və heç bir açıqlaması olmayan '''\"$1\"''' ilə başlayır.\nXahiş edirik faylın adını daha düzgün seçin.",
        "filename-prefix-blacklist": " #<!-- Bu sətrə toxunmayın --> <pre>\n# Sintaksis aşağıdakı kimi görünür:\n#   * \"#\" simvolundan sətrin sonuna kimi yazılar şərhdir\n#   * Tipik fayl adları üçün olan prefiksdəki hər bir boş olmayan sətir rəqəmli kamera trəfindən avtomatik qeydə alınır\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # digər mobil telefonlar\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- Bu sətrə toxunmayın -->",
        "upload-success-subj": "Yükləmə tamamlandı",
        "upload-failure-subj": "Yükləmə problemi",
        "linkstoimage-redirect": "$1 (fayl istiqamətləndirilir) $2",
        "sharedupload": "Bu fayl $1-dandır və ola bilsin ki, başqa layihələrdə də istifadə edilir.",
        "sharedupload-desc-here": "Bu fayl $1dandır və başqa layihələrdə də istifadə edilə bilər.\nFaylın [$2 təsvir səhifəsindəki] məlumat aşağıda göstərilib.",
+       "filepage-nofile": "Bu adda fayl mövcud deyil.",
+       "filepage-nofile-link": "Bu adda fayl mövcud deyil, amma bu faylı siz [$1 yükləyə bilərsiz]",
        "uploadnewversion-linktext": "Bu faylın yeni versiyasını yüklə",
        "shared-repo-from": "$1-dən",
        "shared-repo": "ümumi fayl anbarı",
        "filedelete": "$1 adlı faylı sil",
        "filedelete-legend": "Faylı sil",
        "filedelete-intro": "'''[[Media:$1|$1]]''' faylını və onunla bağlı bütün tarixçəni silmək ərəfəsindəsiniz.",
+       "filedelete-intro-old": "'''[[Media:$1|$1]]''' faylının [$4 $3, $2] tarixli versiyasını silirsiz.",
        "filedelete-comment": "Səbəb:",
        "filedelete-submit": "Sil",
        "filedelete-success": "'''$1''' silinmişdir.",
        "filedelete-reason-otherlist": "Başqa səbəb",
        "filedelete-reason-dropdown": "*Əsas silmə səbəbi\n** Müəllif hüququ pozuntusu\n** Dublikat fayl\n** Keyfiyyətsiz şəkil\n** İstifadəsiz fayl\n** Qeyri-ensiklopedik şəxs\n** Lisenziyasız fayl\n** Azad şəkillə əvəz olundu\n** Müəllif istəyi",
        "filedelete-edit-reasonlist": "Silmə səbəblərini redaktə et",
+       "filedelete-maintenance": "Texniki işlər səbəbindən faylların silinməsi və bərpası müvəqqəti olaraq bağlanmışdır.",
+       "filedelete-maintenance-title": "Faylı silmək mümkün olmadı.",
        "mimesearch": "MIME axtar",
        "mimetype": "MIME tipi:",
        "download": "Yüklə",
        "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ı",
        "filedeleteerror-short": "Fayl silinərkən xəta: $1",
        "filedeleteerror-long": "Fayl silinərkən üzə çıxan xətalar:\n\n$1",
        "filedelete-missing": "\"$1\" faylı mövcud olmadığından silinə bilinmir.",
+       "filedelete-old-unregistered": "Göstərilən faylın \"$1\" versiyası verilənlər bazasında mövcud deyil.",
        "filedelete-current-unregistered": "Göstərilən \"$1\" faylı verilənlər bazasında yoxdur.",
        "filedelete-archive-read-only": "\"$1\" kataloqunun arxivi veb-server yazıları üçün qapalıdır.",
        "previousdiff": "← Əvvəlki redaktə",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|səhifə|səhifələr}}",
        "file-info": "faylın ölçüsü: $1, MIME tipi: $2",
        "file-info-size": "$1 × $2 piksel, fayl həcmi: $3, MIME növü: $4",
+       "file-info-size-pages": "$1 × $2 piksel, faylın ölçüsü: $3, MIME-tipi: $4, $5 {{PLURAL:$5|səhifə|səhifələr}}",
        "file-nohires": "Daha dəqiq versiyası yoxdur.",
        "svg-long-desc": "SVG fayl, nominal olaraq $1 × $2 piksel, faylın ölçüsü: $3",
        "show-big-image": "Faylın əsli",
        "file-info-gif-frames": "$1 {{PLURAL:$1|frame|çərçivə}}",
        "file-info-png-looped": "ilmələnib",
        "file-info-png-frames": "$1 {{PLURAL:$1|frame|çərçivə}}",
+       "file-no-thumb-animation": "'''Qeyd. Texniki səbəblərdən bu fayl tipinin animasiyası mümkün deyil.'''",
+       "file-no-thumb-animation-gif": "'''Qeyd. Yüksək ayırdetmə dəqiqliyinə malik belə GIF-təsvirlərinin animasiyası texniki səbəblərdən mümkün deyil.'''",
        "newimages": "Yeni faylların siyahısı",
        "newimages-legend": "Filtrlər",
        "newimages-label": "Faylın (və ya onun bir hissəsinin) adı:",
        "duplicate-defaultsort": "<strong>Diqqət:</strong> Susmaya görə \"$2\" çeşidləmə açarı susmaya görə əvvəlki \"$1\" çeşidləmə açarını inkar edir.",
        "version": "Versiya",
        "version-extensions": "NIzamlanmış genişlənmələr",
+       "version-skins": "Üzlük",
        "version-specialpages": "Xüsusi səhifələr",
        "version-parserhooks": "Parser hooks",
        "version-variables": "Dəyişkənlər",
        "version-antispam": "Spam önləmə",
-       "version-skins": "Üzlük",
        "version-other": "Digər",
        "version-hooks": "Çəngəllər",
        "version-hook-name": "Çəngəlin adı",
        "fileduplicatesearch-legend": "Dublikatı axtar",
        "fileduplicatesearch-filename": "Fayl adı:",
        "fileduplicatesearch-submit": "Axtar",
+       "fileduplicatesearch-result-1": "\"$1\" faylı hər hansı eyni dublikata malik deyil.",
+       "fileduplicatesearch-result-n": "\"$1\" faylı  $2 {{PLURAL:$2|eyni duplikata|eyni duplikatlara}} malikdir.",
        "fileduplicatesearch-noresults": "\"$1\" adında fayl tapılmadı.",
        "specialpages": "Xüsusi səhifələr",
        "specialpages-group-maintenance": "Cari məruzələr",
index 4898f0c..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": "واریانتلار",
        "difference-missing-revision": "بو فرقین ($1) {{PLURAL:$2|بیر|$2}} نوسخه‌سی تاپیلانمادی.\n\nعموماً بو خطا، سیلینن بیر صحیفه‌یه واختی گئچمیش بیر فرق باغلانتی‌سیلا گلمک ایله آرا گلر.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}سیلمک سیاهی‌سی]ندا باشقا بیلگیلر اولا بیلر.",
        "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 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..d2f090e 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",
        "cannotdelete-title": "Seiten „$1“ kå néd gléschd wern",
        "badtitle": "koa gitiga Titl",
        "badtitletext": "Da Titl voh da ogfordatn Seitn is ned gitig, laar oda a ungitiga Sprochlink vonam andan Wiki.",
-       "perfcached": "Dé fóigernden Daaten staummern aus'm Cache und san méglicherweis nimmer aktuö. Maximoi {{PLURAL:$1|oah Ergebnis is|$1 Ergebniss san}} im Cache vafiagbor.",
-       "perfcachedts": "Dé Daaten staummern aus 'm Cache. Da Zeidbunkt voh da létzden Aktualisiarung: $1. Maximoi {{PLURAL:$4|oah Ergebnis is|$4 Ergebniss san}} im Cache vafiagbor.",
+       "perfcached": "De foigandn Datn stamma ausm Cache und san meglichaweis neama aktuäi. Maximoi {{PLURAL:$1|oa Eagebnis is|$1 Ergebniss san}} im Cache vafigboar.",
+       "perfcachedts": "De Datn stamma ausm Cache. Da Zeidpunkt vo da lezzdn Aktualisiarung: $2, $3 Uah. Maximoi {{PLURAL:$4|oa Ergebnis is|$4 Ergebniss san}} im Cache vafigboar.",
        "querypage-no-updates": "'''Dé Aktualisiarungsfunkzión voh derer Seiten is derzeid deaktivird. Dé Daaten wern bis auf Weiders néd daneiert.'''",
        "viewsource": "Quejtext ozoagn",
        "viewsource-title": "Quöntext voh da Seiten $1 auhschauh",
        "yourpassword": "Passwort:",
        "yourpasswordagain": "Es Passwort no amoi eigebm",
        "remembermypassword": "Mitm Brausa dauahoft ogmejd bleibm (maximoi $1 {{PLURAL:$1|Dog|Dog}})",
-       "yourdomainname": "Eanerne Domain:",
+       "yourdomainname": "Dei Domain:",
        "externaldberror": "Entweder es ligt a Feeler bai da externen Authentifiziarung vur oder du derfst dai externs Benytzerkonto ned aktualisirn.",
        "login": "Eilogga",
        "nav-login-createaccount": "Eilogga / Konto olegn",
        "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",
        "wrongpassword": "Des Posswort is foisch! Bitschee prowirs nuamoi.",
        "wrongpasswordempty": "Es is koa Posswort ned aigeem worn. Bittschee prowirs nuamoi.",
        "mailmypassword": "Neichs Passwort zuaschicka",
-       "passwordremindertitle": "Naichs Posswort fyra {{SITENAME}}-Benytzerkonto",
+       "passwordremindertitle": "A neichs Kennwoat fiar a {{SITENAME}}-Nutzakonto",
        "acct_creation_throttle_hit": "Du host scho $1 {{PLURAL:$1|Benytzerkonto|Benytzerkonten}} und kååst jetzad koane mer åleeng.",
        "emailconfirmlink": "E-Póst-Adressen bstäting (Authentifiziarung)",
        "accountcreated": "Benytzerkonto is erstöid worn",
        "resetpass-submit-loggedin": "Posswort ändern",
        "resetpass-submit-cancel": "Obbrechen",
        "passwordreset": "Passwoat zrucksetzn",
-       "passwordreset-username": "Benutzernåm:",
+       "passwordreset-username": "Nutzanama:",
        "bold_sample": "Fetta Text",
        "bold_tip": "Fetta Text",
        "italic_sample": "Kursiva Text",
        "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 e554b9e..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": "منوء ناویگ",
        "cascadeprotected": "ای صفحه محافظت بیت چه اصلاح چرا که آیی شامل جهلیگین {{PLURAL:$1|صفحه, که|صفحات, که}} محافظتی گون the \"cascading\" option turned on:\n$2",
        "namespaceprotected": "شما اجازت په اصلاح صفحات ته  '''$1'' نام فضا نیست",
        "customcssprotected": "شما ائ پیجء سی اس اسء اصلاح کتنء اجازتء نداریت، پرچا که آئی توکا وتیگین تنظیمان چه ادگر کاربرء انت.",
+       "customjsprotected": "شما رء ائ جاوا اسکریپتین پیجء اصلاح کتنء اجازتء نه انت، پرچا که آئی توکا وتیگین تنظیمان چه ادگر کاربرء انت.",
+       "mycustomcssprotected": "شما رء اجازت پر ائ سی اس اسین پیجء اصلاح کتن نه انت.",
+       "mycustomjsprotected": "شما رء ائ جاوا اسکریپتین پیجء اصلاح کتنء اجازتء نه انت.",
+       "myprivateinfoprotected": "شما رء اجازت پر وتیگین اینفارمیشنء اصلاح کتنء نه انت.",
+       "mypreferencesprotected": "شما رء اجازت پر وتی تنظیماتء اصلاح کتنء نه انت.",
        "ns-specialprotected": "حاصین صفحات اصلاح نه بنت",
        "titleprotected": "ای عنوان محافظت بوتت چه سربیگ به وسیله  [[User:$1|$1]].\nای دلیل دییگ بیتت ''$2''.",
+       "filereadonlyerror": "ائ فایل ٹگل «$1» بیت نکنت پرچا که ائ فایلء مهزن «$2» مان تهناوانتنیء حالت ایر انت.\n\nهما ماسٹر که آئرا کبل کتگ چوشین توضیحئ درشان کتگ:  «$3».",
+       "invalidtitle-knownnamespace": "نامهتبرین عنوان گون نامء جاگاه «$2» ءُ تکست «$3»",
+       "invalidtitle-unknownnamespace": "نامهتبرین نام گون ناشناسین نامء جاگاه نمبر $1 ءُ تکست «$2»",
+       "exception-nologin": "مان نبیتگ ات",
+       "exception-nologin-text": "دزبندی انت سیستمء تها [[Special:Userlogin|مان بئیت]] تانکه بتوان ات ائ تاکء بگند ات.",
+       "exception-nologin-text-manual": "دزبندی انت  $1  تانکه شمارء پر ائ تاک یانکه اکشنء دزرس ببیت انت.",
        "virus-badscanner": "تنظیم بد: ناشناسین اسکنر ویروس: ''$1''",
        "virus-scanfailed": "اسکن پروش وارت(کد $1)",
        "virus-unknownscanner": "ناشناسین آنتی ویروس:",
-       "logouttext": "''' شما الان در بوتت.'''\n\nشما تونیت چه {{SITENAME}} ناشناس استفاده کنیت یا شما تونیت دگه وراد بیت گون دگه یا هما کاربر.\nتوجه بیت که لهتی صفحات شاید په داب هما وهدی که شما وراد بوتتیت پیش درگ بند تا وهدی که ذخیره بروزر وتی پاک کنیت.",
+       "logouttext": "''' شما انیگء در شُت ات'''\nبزان که تانکه شمئی بروزرء چیرداتگین هافظه پهک مبیت، لهتئ چه تاکان ممکن انت رندا هم هنچوش پیش دارگ ببنت که انگار شما لاگین کتگ ات.",
+       "welcomeuser": "وشاتک ات $1!",
+       "welcomecreation-msg": "انیگء شمئی اکانت اڈ بیتگ انت.\nمشموش ات که وتی [[Special:Preferences|ترجیحات {{SITENAME}}]] رء ٹگل دئیت.",
        "yourname": "نام کاربری",
+       "userlogin-yourname": "اکانتء نام",
+       "userlogin-yourname-ph": "وتی یوزرنامء بلک ات",
+       "createacct-another-username-ph": "وتی یوزرنامء بلک ات",
        "yourpassword": "کلمه رمز",
+       "userlogin-yourpassword": "پسورد",
+       "userlogin-yourpassword-ph": "وتی پسوردء بلک ات",
+       "createacct-yourpassword-ph": "یک پسوردء بلک ات",
        "yourpasswordagain": "کلمه رمز دگه نویس",
+       "createacct-yourpasswordagain": "چه دوبارگ پسوردء بلک ات",
+       "createacct-yourpasswordagain-ph": "چه دوبارگ پسوردء بلک ات",
        "remembermypassword": "می ورودءَ ته ای کامپیوتر بدار (په $1 {{PLURAL:$1|روچ|روچ}})",
+       "userlogin-remembermypassword": "منء همک وهد برجاه بدار",
+       "userlogin-signwithsecure": "چه ایمنین کنکشنء کارمرز بکن ات",
        "yourdomainname": "شمی دامین",
+       "password-change-forbidden": "شما نتوان ات پسوردان مان ائ ویکیء رء ٹگل دئیت.",
        "externaldberror": "یک حطا دیتابیس تصدیق هویت دراییگی هست یا شما را اجازت نیست وتی حساب درایی په روچ کنیت.",
        "login": "ورود",
        "nav-login-createaccount": "ورود/شرکتن حساب",
        "loginprompt": "شما بایدن په وارد بیگ ته {{SITENAME}} کوکی فعال کنیت",
        "userlogin": "ورود/شرکتن حساب",
+       "userloginnocreate": "لاگین",
        "logout": "در بیگ",
        "userlogout": "در بیگ",
        "notloggedin": "وارد نهت",
+       "userlogin-noaccount": "شما رء اکانت نه انت؟",
+       "userlogin-joinproject": "مان {{SITENAME}} ناملکی بکن ات!",
        "nologin": "حسابء  نیستن؟ '''$1'''.",
        "nologinlink": "شرکتن یک حساب",
        "createaccount": "حساب شرکن",
        "gotaccount": "یک حساب الان هست؟'''$1'''.",
        "gotaccountlink": "ورود",
-       "createaccountmail": "گون ایمیل",
+       "userlogin-resetlink": "وتی لاگینء جزئیاتء رء شموش کتگ ات؟",
+       "userlogin-resetpassword-link": "وتی پسوردء رء شموش کتگ ات؟",
+       "userlogin-helplink2": "کمک گون لاگین",
+       "userlogin-loggedin": "شما انیگء {{GENDER:$1|$1}}ء حالتء مان بیتگ ات.\nچه جهلیگین فرم پر لاگین مان ادگر کاربرء حالتء کارمرز بکن ات.",
+       "userlogin-createanother": "ادگر اکانتء اڈ بکن ات",
+       "createacct-emailrequired": "ایمیل",
+       "createacct-emailoptional": "ایمیل (ایهتیاری)",
+       "createacct-email-ph": "وتی ایمیلء بلک ات",
+       "createacct-another-email-ph": "ایمیلء ادرسء بلک ات",
+       "createaccountmail": "کارمرز چه وتکارین موقتین پسورد ءُ رندا آئی دیم داتن پر مالومین ایمیل",
+       "createacct-realname": "شمئی اصلیگین نام (ایهتیاری)",
+       "createacct-reason-ph": "پرچا شما ادگر نوکین اکانتء اڈ کن ات",
+       "createacct-captcha": "سکیوریتی چک",
+       "createacct-imgcaptcha-ph": "برزین سیاهگء ادان بلک ات",
+       "createacct-submit": "وتی اکانتء اڈ کن ات",
+       "createacct-another-submit": "ادگر اکانتء اڈ بکن ات",
+       "createacct-benefit-heading": "{{SITENAME}} شهسانی واسته هنچوش که شمئیء اڈ بیتگ",
+       "createacct-benefit-body1": "$1 {{PLURAL:$1|اصلاح|اصلاح کتگان}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|تاک|تاکان}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|هوار بیتگ}} نوکین",
        "badretype": "کلماتی رمزی که شما وارد کتگیت یک نهنت.",
-       "userexists": "وارد بیتگیت نام کاربری الان استفاده بیت.\nلطفا دگه دابین نامی بزوریت.",
+       "userexists": "ائ یوزرنامء که لکتگ ات پیسریگء کارمرز بیتگ انت.\nدزبندی انت ادگر نامء بزیریت.",
        "loginerror": "حطا ورود",
+       "createacct-error": "ارور مان اکانتء اڈ کنگء",
+       "createaccounterror": "پر ائ اکانتء اڈ کتن امکان نه انت: $1",
        "nocookiesnew": "حساب کاربر شر بوت بله شما وارد نه بیتگیت ته.\n{{SITENAME}} چه کوکی په ورود کابران استفاده کنت.\nشما کوکی غیر فعال کتت.\nلطفا آییآ فعال کنیت رندا گون وتی نوکین نام کاربری و کلمه رمز وارد بیت.",
        "nocookieslogin": "{{SITENAME}} په ورود کابران چه کوکی استفاده کنت.\nشمی کوکی غیر فعالنت.\nلطفا آییا فعال کنیت و دگه  سعی کنیت.",
+       "nocookiesfornew": "اکانت اڈ نبیت، پرچا که ما نتوانت آئی منبعء رء تأیید کنین.\nپکا بزان ات که کوکی‌هان فعال انت، رندا پیجء چه نوک رلود کن ات و دوبارگ بچکاس ات.",
        "noname": "شما یک معتبرین نام کاربر مشخص نه کتت.",
        "loginsuccesstitle": "ورود موفقیت آمیز",
        "loginsuccess": "''''شما الان وارد {{SITENAME}} په عنوان \"$1\".'''",
        "nosuchuser": "هچ کاربری گون نام \"$1\" نیستن.\nکاربری نام حرفش په هور و مزنی حساس انت.\nوتی املايا چک کنیت یا [[Special:UserLogin/signup|نوکین حسابی شرکنیت]].",
        "nosuchusershort": "هچ کاربری گون نام  \"$1\"نیستن.\nوتی املايا کنترل کنیت",
        "nouserspecified": "شما باید یک نام کاربری مشخص کنیت.",
+       "login-userblocked": "ائ کابر بلاک بیتگ. لاگین مان سیستمء اجازت نه انت.",
        "wrongpassword": "اشتباهین کلمه رمز وارد بوت. دگه سعی کن.",
        "wrongpasswordempty": "کلمه رمز وارد بیتگین هالیکنت. دگه سعی کن",
-       "passwordtooshort": "شمی کلمه رمز نامعتبر یا باز هوردنت.\nآیی بایدن حداقل {{PLURAL:$1|1 کاراکتر|$1 کاراکتر}} کاراکتر بیت و چه نام کاربری متفاوت بیت.",
-       "mailmypassword": "نوکین کلمه رمزء ایمیل کن",
+       "passwordtooshort": "پسورد ضرورانت چکم {{PLURAL:$1|۱ کرکتر|$1 کرکتر}} داشتگ بیت.",
+       "password-name-match": "شمئی پسورد ضرورنت چه شمئی یوزرنامء پرک بیت انت.",
+       "password-login-forbidden": "ائ یوزرنام ءُ پسوردء کارمرز اجازت نه انت.",
+       "mailmypassword": "نوکین پسوردء بلوٹ",
        "passwordremindertitle": "نوکین هنگین کلمه رمز په {{SITENAME}}",
        "passwordremindertext": "یک نفری(شاید شما، چه آی پی $1)\nلوٹتگی که ما شما را یک نوکین کلمه رمز دیم دهین په {{SITENAME}} ($4).\nکلمه رمز په کاربر \"$2\" الان شینت\"$3\".\nشما بایدن وارد بیت و وتی کلمه رمزآ بدل کنیت انو.\nشمی موقتین کلمه رمز دا {{PLURAL:$5|یک روچ|$5 روچ}} هلیت\n\nاگه دگه کسی په شما ای درخواست دیم داته و یا شما وتی کلمه رمزآ خاطر داریت و نه لوٹتیت آیآ عوض کنیت، شما تونیت این کوله یا شموشیت و گون هما قدیمی کلمه رمز ادامه دهیت",
        "noemail": "هچ آدرس ایمیلی په کاربر \"$1\" ثبت نه بیتت.",
+       "noemailcreate": "پیکن یک مهتبرین ایمیلء بلک ات.",
        "passwordsent": "یک نوکین کلمه رمزی په آدرس ایمیل ثبت بوتگین په \"$1\" دیم دهگ بیت.\nلطفا بعد چه دریافت وارد بیت",
        "blocked-mailpassword": "شمی آدرس آی پی چه اصلاح کتن محدود بوتت و اجازت نداریت په خاطر جلوگیری چه سو استفاده چه عملگر کلمه رمز استفاده بکنت.",
-       "eauthentsent": "یک ایمیل تاییدی په نامتگین آدرس ایمیل دیم دهگ بوت.\nپیش چه هردابین ایمیلی په حساب دیم دیگ بین، شما بایدن چه دستور العملی که ته ایمیل آتکه پیروی کنیت په شی که شمی حساب که شمی گنت تایید بیت.",
-       "throttled-mailpassword": "یک کلمه رمز یاد آوری پیش تر دیم دهگ بوتت ته  {{PLURAL:$1|ساعت|$1 ساعت}}  ساعت پیش.\nپه جلوگرگ چه سو استفاده فقط یک کلمه رمز یاد آوری هر$1  ساعت دیم دهگ بیت.",
+       "eauthentsent": "یک ایمیلء پر شمئی ایمیل ادرسء تاییدء پر لکتگین ایمیلء راهیگ بوت.\nپیسر چریشی که ادگر ایمیلء راهیگ بیت، ایمیلء توضیحانء پر ائ واسته که هما ادرس المء شمئیگ انت رهچار بکن ات.",
+       "throttled-mailpassword": "یک ایمیلء پر پسوردء واترء مان $1 {{PLURAL:$1|ساهت|ساهت}} پیسریگء راهیگ بیتگ انت.\nپر هلاپء دیمداریء، هر $1 {{PLURAL:$1|ساهت|ساهت}} تهنا یک ایمیلء گون پسوردء واترء راهیگ بیت انت.",
        "mailerror": "حطا دیم دهگ ایمیل:$1",
        "acct_creation_throttle_hit": "شرمنده، لهتی پیسرگین چارون گون شمی آی زیگ لهتی {{PLURAL:$1|1 حساب|$1 حساب}}   شر کتت , که گیشترین حد مجاز ته ای زمان انت.\nهنچوش چاروکان گون ای آی پی ن توننت گیشتر الان حساب شرکننت.",
-       "emailauthenticated": " $3 شمی آدرس ایمیل ته $2  تصدیق بوت.",
-       "emailnotauthenticated": "په آدرس ایمیل هنگت تصدیق نه بوتت.\nهچ ایمیلی په جهلیگین ویژگی دیم دهگ نه بیت.",
+       "emailauthenticated": "شمئی ایمیلء مان $2 ساهت $3 تائید بوت.",
+       "emailnotauthenticated": "شمئی ایمیل ادرسء انیگء تائید نبیتگ انت.\nپر جهلیگین بابت ان هچ ایمیلء راهیگ نبیت.",
        "noemailprefs": "یک آدرس ایمیل په کار کتن ای ویژگیان مشخص کنیت.",
        "emailconfirmlink": "وتی آدرس ایمیل تایید کن",
        "invalidemailaddress": "آدرس ایمیل قبول نه بیت چوش که جاه کیت یک فرمت نامعتبری هست.\nلطفا یک آدرس ایمیل هو-فرمتی وارد کنیت یا ای فیلد هالیک بلیت.",
+       "cannotchangeemail": "مان ائ ویکیء اکانتء ایمیلان ڈگل بیت نکنت انت.",
+       "emaildisabled": "ائ سایتء نتوانیت ایمیل راهیگ بکنت انت.",
        "accountcreated": "حساب شر بوت",
-       "accountcreatedtext": "حساب Ú©Ø§Ø±Ø¨Ø± Ù¾Ù\87 $1 Ø´Ø± Ø¨Ù\88ت.",
+       "accountcreatedtext": "اکاÙ\86تء Ù¾Ø± [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|تراÙ\86]]) Ø§Ú\88 Ø¨Û\8cتگ Ø§Ù\86ت.",
        "createaccount-title": "شرکتن حساب په {{SITENAME}}",
        "createaccount-text": "یکی یک حساب په شمی آدرس ایمیل ته  {{SITENAME}} گون نام ($4)  \"$2\"، گون کلمه رمز \"$3\" شرکتت.\nشما بایدن وارد بیت و وتی کلمه رمز الان عوض کنیت.\n\nشما شاید ای پیام شموشیت اگه ای ای حساب گون حطا شر بوتت.",
-       "login-throttled": "شما په کلمه رمز ای حساب باز جهد کتت نوکی. لطفا صبر کنیت و. رندا جهد کنیت.",
+       "login-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
+       "login-abort-generic": "شمئی لاگینء پکا نبیت - Aborted",
        "loginlanguagelabel": "زبان: $1",
+       "suspicious-userlogout": "شمئی لوٹ پر در شتن چه سیستمء رد بوت پرچا که چوش که پیداگ انت ائ لوٹ چه هرابین بروزر یانکه پراکسیء راهیگ بیتگ انت.",
+       "createacct-another-realname-tip": "اصلیگین نام ایهتیاری انت.\nاگان آئرا بلک ات رهشونء درگتء پر شمئی سیاهگان چه اصلیگین نام کارمرز بیت انت.",
+       "pt-login": "لاگین",
+       "pt-login-button": "لاگین",
+       "pt-createaccount": "اکانتء اڈ بکن",
+       "pt-userlogout": "در شُتن",
+       "php-mail-error-unknown": "نامالومین ارور مان تابع  mail()‎ پی‌اچ‌پی",
+       "user-mail-no-addy": "جهد پر ایمیلء راهیگ گیر چه ایمیل ادرس",
+       "user-mail-no-body": "جهد پر هالیگ یانکه هوردین ایمیلء راهیگء",
        "changepassword": "کلمه رمز عوض کن",
-       "resetpass_announce": "شما گون یک هنوکین کد ایمیل بوتگین وارد بوتءیت.\nپه تمام کتن ورود، شما باید یک نوکین کلمه رمز اداں شرکنیت",
+       "resetpass_announce": "شما پر وتی لاگینء آسر کتنء، نوکین پسوردء تیار بکن ات.",
        "resetpass_text": "<!-- متن دان هورکن -->",
        "resetpass_header": "حساب کلمه رمزءَ عوض کن",
        "oldpassword": "کلمه رمز کهنگین:",
        "newpassword": "نوکین کلمه رمز:",
        "retypenew": "کلمه رمز دگه بنویس",
        "resetpass_submit": "تنظیم کلمه رمز و ورود",
-       "changepassword-success": "شمی کلمه رمز گون موفقیت عوض بون! هنو شما وارد بیگیت...",
+       "changepassword-success": "شمئی پسورد پر درستیء ٹگل بیت!",
+       "changepassword-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
        "resetpass_forbidden": "کلمات رمز نه توننت عوض بنت.",
        "resetpass-no-info": "په مستقیمین دسترسی په ای صفحه شما بایدن وارد سایت بیت",
        "resetpass-submit-loggedin": "عوض کتن کلمه رمز",
+       "resetpass-submit-cancel": "کنسیل",
        "resetpass-wrong-oldpass": "کلمه رمز موقت یا هنوکین رمز شر نهنت.\nبلیکن شما الان وتی کلمه رمز عوض کتت یا یک نوکین موقتین رمزی لوٹت.",
+       "resetpass-recycled": "دزبندی انت وتی پسوردء پر ادگرین چیزء گیر چه انیگین پسوردء ٹگل دئیت.",
+       "resetpass-temp-emailed": "شما گون یک موکتین ایمیل کدء مان بیتگ ات.\nپر لاگینء آسرء، شما ضرورنت نوکین پسوردء ادان لاک ات:",
        "resetpass-temp-password": "موقتین کلمه رمز:",
+       "resetpass-abort-generic": "پسوردء ٹگل گون یک اکتنشنء واسته کنسیل بیتگ انت.",
+       "resetpass-expired": "شمئی پسوردء مالومین وهد هلتگ انت. دزبندی انت پر لاگین کتن نوکین پسوردء تیار کن ات.",
+       "resetpass-expired-soft": "شمئی پسوردء مالومین وهد هلتگ انت ءُ نوکین پسوردء اڈ کتن ضرور انت. دزبندی انت انیگء نوکین پسوردء بزیر ات، یانکه پر رندیگین تیار کتنء، ائ بٹنء  \"{{int:resetpass-submit-cancel}}\" سرء کلیک کن ات.",
+       "resetpass-validity-soft": "شمئی پسورد درست نه انت: $1\nدزبندی انت انیگء نوکین پسوردء بزیر ات یانکه ائ بٹنء «{{int:resetpass-submit-cancel}}» سرء کلیک کن ات که رندا آئرا تیار کن ات.",
+       "passwordreset": "نوکین پسوردء بلوٹ",
+       "passwordreset-text-one": "پر وتی پسوردء واترء ائ فرمء پکا کن ات.",
+       "passwordreset-text-many": "{{PLURAL:$1|اگان لوٹت ایمیلء گون موکتین پسوردء پر شما راهیگ ببیت، یکئ چه ائ جاگاهانء پر بکن ات.}}",
+       "passwordreset-legend": "نوکین پسوردء بلوٹ",
+       "passwordreset-disabled": "پسوردء واتر کتن مان ائ ویکیء نافعال بیتگ انت.",
+       "passwordreset-emaildisabled": "ایمیلء حالتان مان ائ ویکیء نافعال بیتگ انت.",
+       "passwordreset-username": "یوزرنام:",
+       "passwordreset-domain": "دامین:",
+       "passwordreset-capture": "آسریگین ایمیل پیش دارگ بیت؟",
+       "passwordreset-capture-help": "اگان ائ گزینگ رء نشانیگ بهل ات، یک ایمیلء (گون موکتین پسوردء) شما رء پیش دارگ بیت ءُ هنچوش پر کاربرء راهیگ بیت انت.",
+       "passwordreset-email": "ایمیل ادرس:",
+       "passwordreset-emailtitle": "اکانتء جزئیات مان {{SITENAME}}",
+       "passwordreset-emailtext-ip": "یک شهسء (بلکین شما، گون آی‌پیء نشانیگ $1) شمئی پسوردء واترء {{SITENAME}} ($4) لوٹتگ انت. {{PLURAL:$3|اکانت|اکانتان}} گون ائ ایمیل ادرسء همگرنچ انت:\n\n$2\n\n{{PLURAL:$3|ائ موکتین پسورد|ائ موکتین پسوردان}} رند چه {{PLURAL:$5|یک روچ|$5 روچ}} باطل بیت انت.\nشما پیکن انیگء لاگین کن ات ءُ نوکین پسوردء بزیر ات. اگان شمئی پگر انت که ادگر شهسء ائ لوٹء راهیگ کتگ یانکه وتی پیسریگین پسوردء هیال کت ات ءُ رندء نلوٹیت آئرا ٹگل دئیت، بیت که ائ پیگامء ناگند بزان ات ءُ وتی پیسریگین پسوردء کارمرز کن ات.",
+       "passwordreset-emailtext-user": "کاربر $1 چه {{SITENAME}} شمئی پسوردء واترء لوٹ مان {{SITENAME}} ($4) کتگ انت. {{PLURAL:$3|اکانت|اکانتان}} چیریگین کاربر گون ائ ایمیل ادرس همگرنچ انت:\n\n$2\n\n{{PLURAL:$3|ائ موکتین پسورد|ائ موکتین پسوردان}} رند چه {{PLURAL:$5|یک روچ|$5 روچ}} باطل بیت انت.\nشما ضرور انت انیگء لاگین کن ات ءُ نوکین پسوردء بزیر ات. اگان ادگر شهسء ائ لوٹء راهیگ کتگ انت، یانکه وتی اصلیگین پسوردء هیال کت ات ءُ رندء نلوٹ ات آئرا ٹگل دئیت، بیت که ائ پیگامء نگند بزان ات ءُ وتی پیسریگین پسوردء کارمرز کن ات.",
+       "passwordreset-emailelement": "یوزرنام: $1\nموکتین پسورد: $2",
+       "passwordreset-emailsent": "یک ایمیلء گون پسوردء واترء راهیگ بوت.",
+       "passwordreset-emailsent-capture": "یک ایمیلء پر پسورد واترء واسته که جهلیگء پیش دارگ بیت، راهیگ بیتگ انت.",
+       "passwordreset-emailerror-capture": "واترین ایمیل، که جهلیگء پیش دارگ بیت، اڈ بوت، بلئی آئی راهیگ پر {{GENDER:$2|کاربر}} پکا نبوت: $1",
+       "changeemail": "ایمیل ادرسء ٹگل بدئ",
+       "changeemail-header": "وتی اکانتء ایمیل ادرسء ٹگل بدئ",
+       "changeemail-text": "ائ فرمء پکا کن ات تانکه شمئی ایمیلء ٹگل به بیت. پریشی که ائ تغییرء تایید کن ات ضرور انت وتی پسوردء بلک ات.",
+       "changeemail-no-info": "پر یکپارگین دزرسی مان ائ تاکء پیکن لاگین کن ات.",
+       "changeemail-oldemail": "انیگین ایمیل ادرس:",
+       "changeemail-newemail": "نوکین ایمیل ادرس:",
+       "changeemail-none": "هج کجام",
+       "changeemail-password": " {{SITENAME}} شمئی پسورد:",
+       "changeemail-submit": "ایمیلء ٹگل بدئ",
+       "changeemail-cancel": "کنسیل",
+       "changeemail-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
+       "resettokens": "پجاروکان(tokens)ی واتر",
+       "resettokens-text": "شما توان ات پجاروکان(tokens) که دزرسیء اجازت پر شمئی وتیگین دیتا همگرنچ گون شمئی اکانتء دینت، واتر بکن ات.\nهما درگتء ائ کار بیت کنت که نامالومین شهسء شمئی اکانتء لاگین کتگ انت.",
+       "resettokens-no-tokens": "هچ پجاروکء پر واترء ودی نبوت.",
+       "resettokens-legend": "پجاروکان(tokens)ی واتر",
+       "resettokens-tokens": "پجاروکان(tokens):",
+       "resettokens-token-label": "$1 (انیگین اندازگ: $2)",
+       "resettokens-watchlist-token": "ویب فیدء پجاروک [[Special:Watchlist|پیجانی تغییرات که آهانء رهگر کن ات]] (اتم/آراس‌اس)",
+       "resettokens-done": "پجاروکانی واتر.",
+       "resettokens-resetbutton": "درچتگین پجاروکانء واتر بکن",
        "bold_sample": "پررنگین متن",
        "bold_tip": "پررنگین متن",
        "italic_sample": "ایتالیکی متن",
        "showpreview": "بازبین پیش دار",
        "showdiff": "تغییرات پیش دار",
        "anoneditwarning": "'''هوژاری:''' شما وارد نه بیتگیت.\nشمی آی پی ته تاریح اصلاح ای صفحه ثبت بیت.",
+       "anonpreviewwarning": "''شما مان سیستمء لاگین نکتگ. ذخیره کتنء حالت شمئی آی‌پیء نشانیگ مان ائ پیجء هاپزگ سبت بیت انت.''",
        "missingsummary": "'''یادآوری:''' شما یک خلاصه چه اصلاح وارد نه کرت.\nاگر دگه کلیک کنیت ذخیره آ، شمی اصلاح به بی آی ذخیره بنت.",
        "missingcommenttext": "لطفا یک نظری وارد کنیت جهل آ",
-       "missingcommentheader": "'''یاداوری:'' شما یک موضوع/سرخط په ای نظر وارد نکتت.\nاگر شما دگه ذخیره کلیک کنیت، شمی اصلاح بی آی ذخیره بنت.",
+       "missingcommentheader": "'''هالداری:'' شما یک موضوع/سرهت پر ائ کامنت نهشتگ ات.\nاگان دوبارگ بٹن «{{int:savearticle}}» سرء کلیک کن ات شمئی ویرایش گیر چه آئیء ذخیرگ بیت انت.",
        "summary-preview": "خلاصه بازبینی:",
        "subject-preview": "بازبین موضوع/سرخط:",
        "blockedtitle": "کاربر محدود بوتت",
        "blockednoreason": "هچ دلیلی دهگ نه بیته",
        "whitelistedittext": "شما باید $1به اصلاح کتن صفحات.",
        "confirmedittext": "شما بایدن وتی آدرس ایمیل آ پیش چه اصلاح کتن صفحات تایید کنیت.\nلطفا وتی آدرس ایمیل آی چه طریق [[Special:Preferences|ترجحات کاربر]] تنظیم و معتبر کنیت.",
-       "nosuchsectiontitle": "هچ چوشن بخش",
-       "nosuchsectiontext": "Ø´Ù\85ا Ø³Ø¹Û\8c Ú©Øª Û\8cÚ© Ø¨Ø®Ø´Û\8c Ø§ØµÙ\84اح Ú©Ù\86Û\8cت Ú©Ù\87 Ù\86Û\8cستÙ\86.",
+       "nosuchsectiontitle": "هنچوشین بهرء ودی نبوت",
+       "nosuchsectiontext": "Ø´Ù\85ا Ø¬Ù\87د Ú©ØªÚ¯ Ù¾Ø± Û\8cÚ© Ø¨Ù\87رء Ø§Ø¯Û\8cت Ú©ØªÙ\86Ø¡ Ú©Ù\87 Ù\85Ù\88جÙ\88د Ù\86Ù\87 Ø§Ù\86ت .\nÙ\85Ù\85Ú©Ù\86 Ø§Ù\86ت Ù\87Ù\85ئ Ø¯Ø±Ú¯ØªØ¡ Ú©Ù\87 Ø´Ù\85ا Ù¾Û\8cجء Ú\86ارگ Ú©ØªÚ¯ Ø§Øª Ø§Ø¦ Ø³Ù\8fرÛ\8cÙ\86Ú¯ Û\8cاÙ\86Ú©Ù\87 Ù\87زپ Ø¨Û\8cتگ Ø§Ù\86ت.",
        "loginreqtitle": "ورود نیازنت",
        "loginreqlink": "ورود",
        "loginreqpagetext": "شما باید $1 په گندگ دگه صفحات.",
        "accmailtitle": "کلمه رمز دیم دات",
-       "accmailtext": "کلمه رمز په [[User talk:$1|$1]]  دیم دهگ بوت په $2.\nکلمه رمز په نوکین حساب ته صفحه ''[[Special:ChangePassword|عوض کتن رمز]]'' وهدی که وارد بیتت تونیت بدل بیتن",
+       "accmailtext": "یک پسوردء [[User talk:$1|$1]] پر $2 راهیگ بوت. بیت آئرا چه پیجء ''[[Special:ChangePassword|پسوردء ٹگل]]'' که لاگینء درگتء پیش دارگ بیت ٹگل دئیت.",
        "newarticle": "(نوکین)",
        "newarticletext": "شما رند چه یک لینکی په یک صفحه ی که هنو نیستند اتکگیت.\nپه شر کتن صفحه، شروع کن نوشتن ته جعبه جهلی(بچار  [$1 صفحه کمک]  په گیشترین اطلاعات).\nاگر شما اشتباهی ادانیت ته وتی بروزر دکمه ''Back'' بجن.",
        "anontalkpagetext": "----'' ای صفحه بحث انت په یک ناشناس کاربری که هنگت یک حسابی شر نه کتت یا آی ا ستفاده نه کتت. اچه ما بایدن آدرس آی پی عددی په پچاه آرگ آیی استفاده کنین.\nچوشن آدرس آی پی گون چندین کاربر استفاده بیت.\nاگه شما یک کاربر ناشناس ایت وی حس کنیت بی ربطین نظر مربوط شمی هست، لطفا [[Special:UserLogin|وارد بیت ]] یا [[Special:UserLogin/signup|حسابی شرکن]] دان چه هور بییگ گون ناسناسین کاربران پرهیز بیت.''",
        "noarticletext": "هنو هچ متنی ته ای صفحه نیست.\nشما تونیت [[Special:Search/{{PAGENAME}}|گردیت په عنوان صفحه]]  ته دگه صفحات یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} گردگ په مربوطین آمار],\nیا [{{fullurl:{{FULLPAGENAME}}|action=edit}} اصلاح ای صفحه]</span>.",
+       "noarticletext-nopermission": "ائ تاکء رء انیگ هچ سیاهگء نه انت .\nشما توانت مان ادگر تاکان [[Special:Search/{{PAGENAME}}|ائ عنوانء رء پٹوپول بکن ات]]،\nیانکه <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} مان یکپیمیگین سیاهگان شوهاز بکن ات]</span> بلئ شما رء پر ائ پیجء اڈ کتنء اجازت نه انت.",
+       "missing-revision": "ویرایش #$1 چه پیجء «{{FULLPAGENAME}}» موجود نه انت.\n\nبلکین چه نوک نکتنء بابتء هزپ بیتگ انت.\nتوان ات گیشترین جزئیات رء مان [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ] ودی بکن ات.",
        "userpage-userdoesnotexist": "حساب کاربر \"<nowiki>$1</nowiki>\" ثبت نهنت. لطفا کنترل کنیت اگه شما لوٹیت ای صفحه یا شر/اصلاح کنیت.",
-       "clearyourcache": "'''توجه:''' بعد چه ذخیره کتن، شما شاید مجبور بیت چه وتی ذخیره ی بروزر رد بیت تا تغییرات بگندیت. '''Mozilla / Firefox / Safari:'' ''Shift'' جهل داریت همی وهدی که کلیک کنیت ''Reload'' یا بداریت ''Ctrl-Shift-R'' (''Cmd-Shift-R'' on Apple Mac);'''IE:''' ''Ctrl''  بداری وهدی که کلیک ''Refresh' یا 'Ctrl-F5''; '''Konqueror:''':  راحت کلیک کن دکمه ''Reload'' یا بدار ''F5''; '''Opera''' کاربر بایدن ته ''Tools→Preferences'' ذخیره پاک کنت.",
-       "usercssyoucanpreview": "'''نکته:''' چه دکمه 'Show preview' په آزمایش کتن  CSS پیش چه ذخیره کتن استفاده کن",
-       "userjsyoucanpreview": "'''نکته:''' چه دکمه 'Show preview' په آزمایش کتن  JS پیش چه ذخیره کتن استفاده کن",
+       "userpage-userdoesnotexist-view": "ائ یوزر اکانت «$1» سبت نبیتگ انت.",
+       "blocked-notice-logextract": "ائ کاربر انیگء بلاک بیتگ انت.\nآهرین سیاهگئ که گون بلاکء همگرنچ انت جهلیگء آتکگ انت:",
+       "clearyourcache": "<strong>بزان:</strong> رند چه ذخیرگ کتنء ممکن انت پر ٹگلانی گندگء وتی بروزرئ هاپزگء پهک کتن لوٹ به بیت.\n*<strong>پایرپاکس / ساپاری:</strong> کلیت <em>Shift</em> رء جهل بدار ات ءُ رندء ائ بٹنء <em>Reload</em> کلیک بکن ات، یانکه ائ کلیتان <em>Ctrl-F5</em> یانکه <em>Ctrl-R</em> رء گون همدگرء جهل بدار ات (مان اپل ءُ مکینتاشء سیستمان ائ کلیتان <em>⌘-R</em>)\n*<strong>گوگل کروم:</strong> ائ کلیتان <em>Ctrl+Shift+R</em> رء گون هم جهل بدار ات (مان اپل ءُ مکینتاشء سیستمان ائ کلیتان <em>⌘-Shift-R</em>)\n*<strong>اینترنت اکسپلورر:</strong> کلیت <em>Ctrl</em> رء جهل بدار ات ءُ رندء ائ بٹنء <em>Refresh</em> کلیک بکن ات، یان ائ کلیتان <em>Ctrl-F5</em> رء گون همدگرء جهل بدار ات.\n*<strong>اپرا:</strong> وتی بروزرء چیرداتگین هاپزگ رء چه ائ منو  <em>Tools &rarr; Preferences</em> پهک بکن ات.",
+       "usercssyoucanpreview": "'''بزان:''' پیسر چه سی اس اسء ذخیرگ کتنء، گون ائ بٹن '''{{int:showpreview}}''' بچکاس ات.",
+       "userjsyoucanpreview": "'''بزان:''' پیسر چه جاوا اسکریپتء ذخیرگ کتنء، گون ائ بٹن '''{{int:showpreview}}''' بچکاس ات.",
        "usercsspreview": "''''بزان که شما فقط وتی CSS کاربری بازبینی کنین. هنگنت آیی ذخیره نه بوتت!''''",
        "userjspreview": "''''په یاد دار که شما فقط وتی کاربری  JavaScript بازبینی/آزمایش کنگیت، هنگت ذخیره نه بوتت!''''",
+       "sitecsspreview": "<strong> شمارء هیالداری ببیت که انیگء تهنا پیشچارگ چه ائ سی اس اسء رء گند ات.\nآئی انگت ذخیرگ نبیتگ انت </strong>",
+       "sitejspreview": "<strong> شمارء هیالداری ببیت که انیگء تهنا پیشچارگ چه ائ جاوا اسکریپٹء رء گند ات.\nآئی انگت ذخیرگ نبیتگ انت </strong>",
        "userinvalidcssjstitle": "'''هوژاری:''هچ جلدی نیست\"$1\".\nبزان که صفحات .css و .js چه عناوین گون هوردین حرف استفاده کننت، مثلا {{ns:user}}:Foo/vector.css بدل به په {{ns:user}}:Foo/Vector.css.",
        "updated": "(په روچ بیتگین)",
        "note": "'''یادداشت:'''",
-       "previewnote": "'''شی فقط یک بازبینی انت;\nتغییرات هنگت ذخیره نهنت. '''",
+       "previewnote": "<strong> بزان که ائ تهنا یک پیشچارگء انت</strong>\nشمئی ٹگلان انگتء ذخیرگ نبیتگ انت!",
+       "continue-editing": "شتن پر ادیت کنوکین جاگاه",
        "previewconflict": "ای بازبین متنء پیش داریت ته منطفه بالدی اصلاحی هنچوش که پیش دارگ بیت اگه شما انتخاب کنیت ذخیره",
        "session_fail_preview": "'''شرمنده! ما نه تونست شمی اصلاحء په خاطر گار کتن دیتا دیوان پردازش کنین.\nطلف دگه سعی کنیت. اگر هنگت کار نکنت یک بری [[Special:UserLogout|دربیت]] و پیدا وارد بیت.'''",
        "session_fail_preview_html": "'''شرمنده! ما نه تونست شمی اصلاحء په خاطر گار کتن دیتا دیوان پردازش کنین.'''\n\n''په چی که {{SITENAME}} HTML هام فعالنت، بازبین په خاطر حملات JavaScript پناهنت.''\n\n''' اگر شی یک قانونی تلاش اصلاحنت، دگه کوشش کنیت. اگر هنگت کار نکنت یک بری [[Special:UserLogout|دربیت]] و دگه وارد بیت.'''",
        "token_suffix_mismatch": "''' شمی اصلاح رد بوت په چی که شمی کلاینت نویسگ کاراکترانی په هم جتت.\nاصلاح رد بوت داں چه هراب بیگ متن صفحه جلوگیری بیت.\nشی لهتی وهد پیش کت که شما چه یک هرابین سرویس پروکسی وبی استفاده کنیت.'''",
+       "edit_form_incomplete": "<strong>لهتی چه ادیت فرمء بهران پر سرورء نرستگ انت؛ پکا بزان ات که شمئی ادیتان پکا انت و رندء چدوبارگ جهد کن ات</strong>",
        "editing": "اصلاح $1",
+       "creating": "اڈ کتن $1",
        "editingsection": "اصلاح $1(بخش)",
        "editingcomment": "اصلاح $1 (نوکین بخش)",
        "editconflict": "جنگ ورگ اصلاح: $1",
        "yourdiff": "تفاوتان",
        "copyrightwarning": "لطفا توجه بیت که کل نوشته یات ته {{SITENAME}}  تحت $2 نشر بنت.(بچار په جزیات$1).\nاگه شما لوٹیت شمی نوشتانک اصلاح و دگه چهاپ مبنت، اچه آیانا ادان مهلیت.\nشما ما را قول دهیت که وتی چیزا بنویسیت یا چه یک دامین عمومی کپی کتگیت.\n''' نوشتانکی که کپی رایت دارند بی اجازه ادا هور مکنیت'''",
        "copyrightwarning2": "لطفا توجه کنیت که کل مشارکاتن ته {{SITENAME}} شاید اصلاح, عوض و یا توسط دگه شرکت کننده آن حذف بنت.\nاگر شما نه لوٹیت شمی نوشتاک گون بی رحمی اصلاح مه بنت، اچه شما آیء ادان دیم مه دهیت.<br />\nشما هنچوش ما را قول دهیت که شما شی وت نوشتت یا ایء چه یک دامین عمومی یا هنچوشین آزاتین منبع کپی کتیت.(بچار $1 په جزییات).\n''' نوشتاکی که حق کپی دارنت بی اجازت دیم مه دهیت!'''",
-       "longpageerror": "'''حطا: Ù\85تÙ\86Û\8c Ú©Ù\87 Ø´Ù\85ا Ø¯Û\8cÙ\85 Ø¯Ø§ØªØª $1 Ú©Û\8cÙ\84Ù\88 Ø¨Ø§Û\8cتتØ\8c Ú©Ù\87 Ú\86Ù\87 Ú¯Û\8cشترÛ\8cÙ\86 Ø­Ø¯ $2 Ú©Û\8cÙ\84Ù\88باÛ\8cت Ù\85زÙ\86\nØ¢Û\8c Ù\86Ù\87 ØªÙ\88Ù\86Û\8cت Ø°Ø®Û\8cرÙ\87 Ø¨Ù\88ت.'''",
-       "readonlywarning": "'''هوژاری: دیتابیس به تعمیرات کبلنت، اچه شما نه تونیت وتی اصلاحات هنو ذخیره کنیت.\nشما شاید بلوٹیت متنء تع یم فایل متنی کپی و پیست کنیت و آیء ذخیره کنیت.'''\nمدیری که آیء کبل کتت ای توضیحی داتت: $1",
-       "protectedpagewarning": "'''هوژاری: ای صفحه په کبلنت چی که فقط کابران گون اجازت مدیر سیستم توننت آیء اصلاح کننت.'''",
-       "semiprotectedpagewarning": "''''توجه:'''' ای صفحه کبلنت چوش که فقط ثبت نامی کابران توننت آیء اصلاح کننت.",
+       "longpageerror": "'''ارÙ\88ر: Ø§Ø¦ Ø³Û\8cاÙ\87گء Ú©Ù\87 Ø±Ø§Ù\87Û\8cÚ¯ Ú©ØªÚ¯ Ø§Øª {{PULAR:$1|Û\8cÚ© Ú©Û\8cÙ\84Ù\88باÛ\8cت|$1 Ú©Û\8cÙ\84Ù\88باÛ\8cت}} Ø§Ù\86دازگ Ø¯Ø§Ø±Û\8cت. Ø§Ø¦ Ø§Ù\86دازگ Ú\86Ù\87 Ù\85اکسÛ\8cÙ\85Ù\85Ø¡ {{PLURAL:$2|Û\8cÚ© Ú©Û\8cÙ\84Ù\88باÛ\8cت|$2 Ú©Û\8cÙ\84Ù\88باÛ\8cت}} Ú¯Û\8cشتر Ø§Ù\86ت.'''\nÙ\86بÛ\8cت Ú©Ù\87 Ø¢Ø¦Ø±Ø§ Ø°Ø®Û\8cرگ Ø¨Ú©Ù\86 Ø§Øª.",
+       "readonlywarning": "'''هژاری: دیتابیس پر جوڑ کتنء واسته کبل بیتگ انت، پمیشکا انیگء نبیت که وتی ادیتانء ذخیرگ بکن ات.'''\nاگان لوٹ ات وتی سیاهگء مان یک تکست فایلء کپی و پر آیوکء ذخیرگ بکن ات.\n\nهما ماسٹر که آئرا کبل کتگ ائ توضیحء درشان کتگ انت: $1",
+       "protectedpagewarning": "'''هوژاری: ائ تاک پراتکت بیتگ انت، گڑا تهنا کاربرانء گون ماسٹری حالتء توان انت که آئرا ادیت بکن انت'''\nآهرین سیاهگ که گون ائ بابتء همگرنچ انت جهلیگء آتکگ انت:",
+       "semiprotectedpagewarning": "'''بزان:''' ائ پیج کبل بیتگ تانکه تهنا رجستر کتگین کاربران بتوان انت آئرا ادیت بکن انت.\nآهرین سیاهگ که گون ائ بابتء همگرنچ انت جهلیگء آتکگ:",
        "cascadeprotectedwarning": "''هوژاری''ای صفحه کبلنت چوش که فقط کابران گون دسترسی مدیر سیستم توننت آییء اصلاح کننت،په چی که آیی ته چهلین حمایت آبشاری {{PLURAL:$1|صفحات|صفحه}}:",
-       "titleprotectedwarning": "'''هوژاری: ای صفحه کبلنت چوش که فقط لهتی کاربر گون [[Special:ListGroupRights|خاصین حق]] تواننت آیء شر کننت.'''",
+       "titleprotectedwarning": "'''هوژاری: ائ پیجء پر ائ پیمء کبل بیتگ که پر آئیء اڈ کتنء  [[Special:ListGroupRights|خاصین اجازت]] ضرور انت.'''\nآهریگین سیاهگ که گون ائ بابتء همگرنچ انت جهلیگء آتکگ انت:",
        "templatesused": "{{PLURAL:$1|تمپلت|تمپلت}} که ته ای صفحه کارمز بیتت:",
        "templatesusedpreview": "{{PLURAL:$1|تمپلت|تمپلت}} ته ای بازبینی کارمرز بوتت",
-       "templatesusedsection": "تمپلتانی که ته ای بخش به کار رونت",
+       "templatesusedsection": "{{PLURAL:$1|تمپلٹ|تمپلٹ}} کارمرز بوتگین مان ائ بهر:",
        "template-protected": "(محافظتین)",
        "template-semiprotected": "(نیم محافظتی)",
        "hiddencategories": "ای صفحه عضوی چه {{PLURAL:$1|1 hidden category|$1 پناهین دسته جات}}:",
        "edittools": "<!-- <strong>په کپی و پست کتن چه CTRL+V , CTRL+C استفاده کنیت.</strong> -->",
        "nocreatetext": "{{SITENAME}} شما را چه شرکتن نوکین صفحه منه کته.\nشما تونیت برگردیت و یک پیشگین صفحه ای اصلاح کنیت، یا [[Special:UserLogin|وارد بیت یان یک حسابی شرکنیت]].",
        "nocreate-loggedin": "شما را اجازت په شرکتن نوکین صفحات نیست.",
-       "permissionserrors": "حطای اجازت",
+       "sectioneditnotsupported-title": "ائ بهرانئ ادیت کتن ساپورٹ نه بیت",
+       "sectioneditnotsupported-text": "ائ بهرانئ ادیت کتن مان ائ پیجء ساپورٹ نه بیت",
+       "permissionserrors": "ارور جاگاه دزرسی",
        "permissionserrorstext": "شما را اجازت په انجام آی نیست، په جهلیگین دلیل {{PLURAL:$1|دلیل|دلایل}}:",
        "permissionserrorstext-withaction": "شما را اجازت په $2, په خاطر جهلیگین {{PLURAL:$1|دلیل|دلایل}}:",
        "recreate-moveddeleted-warn": "هوژاری: شما یک صفحه ای دگه شرکنگیت که پیشتر حذف بوتت.'''\n\nشما بایدن توجه کنیت که ادامه اصلاح ای صفحه درستنت.\nآمار حذف و جاه په جاهی ای صفحه په شمی حاطرء ادان هستن:",
        "edit-gone-missing": "نه تونیت صفحهء په روچی کنت.\nچوش که جاه کیت آیی حذف بوتگت.",
        "edit-conflict": "جنگ اصلاحی",
        "edit-no-change": "شمی اصلاح نادید گرگ بوت، په چی که هچ تغییری په متن دهگ نه بوت.",
+       "postedit-confirmation-created": "تاک اڈ بوت.",
+       "postedit-confirmation-restored": "تاک واتر بوت.",
+       "postedit-confirmation-saved": "شمئی ادیت ذخیرگ بوت.",
        "edit-already-exists": "نه تونیت یک نوکین صفحه ای شر کنت.\nهنو شی هستن.",
+       "defaultmessagetext": "اصلیگین پیگامء سیاهگ",
+       "content-failed-to-parse": "تجزیگء $2 توکداریگ پر $1 مدل: $3 پکا نبوت",
+       "invalid-content-data": "توکداریگء دیتا مهتبر نه انت",
+       "content-not-allowed-here": "توکداریگ «$1» مان ائ پیج[[$2]] اجازت نه انت",
+       "editwarning-warning": "گون در شتن چه ائ پیج ممکن انت شمئی پهکین شانس که تان انیگء کٹ کتگ ات بیران بیت.\nاگان شما لاگین کتگ ات، بیت که ائ هژاریء مان ای بهر «{{int:prefs-editing}}» وتی پریفرنسء نافعال بکن ات..",
+       "editpage-notsupportedcontentformat-title": "توکداریگء فرمت ساپورٹ نه بیت",
+       "editpage-notsupportedcontentformat-text": "ائ توکداریگء فرمت $1 مان ائ توکداریگء تهر $2 ساپورٹ نبیتگ انت.",
+       "content-model-wikitext": "ویکیسیاهگ",
+       "content-model-text": "سادگین سیاهگ",
+       "content-model-javascript": "جاوا اسکریپٹ",
+       "content-model-css": "سی اس اس",
        "expensive-parserfunction-warning": "هوژاری: ای صفحه شامل بازگین توار عملگر تجریه کنوک سنگیننت.\nآیی بایدن کمتر چه  $2{{PLURAL:$2|توار|توار}}, داشته بیت ادان هنو  $1 هست.",
        "expensive-parserfunction-category": " صفحات گونبازگین توار عملگر تجریه کنوک",
        "post-expand-template-inclusion-warning": "هوژاری: اندازه شامل تمپلت باز مزننت.\nلهتی تمپلتان هور نه بینت.",
        "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\"",
-       "toomanymatches": "بازگین هم دپ درگیزگ بوت، لطفا یک متفاوتین درخواست آزمایش کنیت",
        "titlematches": "عنوان صفحه هم دپ نت",
        "textmatches": "متن صفحه هم دپ بنت",
        "notextmatches": "هچ متن صفحه هم دپ نهنت",
        "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 562b3e2..f5fb077 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",
        "difference-missing-revision": "{{PLURAL:$2|sarong rebisyon|$2 mga rebisyon}} kaining diperensiya ($1) {{PLURAL:$2|na iyo an|kaidto na iyo an}} dae nanagboan.\n\nIni pirmihan na pinagkakausa sa paagi nin pagsusunod nin luwas sa petsang diff na kasugponan pasiring sa sarong pahina na pinagpura na.\nAn mga detalye mapuwedeng matatagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinagpuraan].",
        "searchresults": "Resulta kan paghahánap",
        "searchresults-title": "Resulta kan paghahanap para sa \"$1\"",
-       "toomanymatches": "Kadakol-dakol na angay an ipigbalik, probaran an ibang kahaputan",
        "titlematches": "Angay an título kan artíkulo",
        "textmatches": "Angay an teksto nin páhina",
        "notextmatches": "Mayong ángay na teksto nin páhina",
        "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",
        "rclistfrom": "Ipahiling an baguhon na mga kaliwatan magpoon kan $3 $2",
        "rcshowhideminor": "$1 saradit na mga pagliwat",
        "rcshowhideminor-show": "Ipatanaw",
-       "rcshowhideminor-hide": "Tagoa",
+       "rcshowhideminor-hide": "Itago",
        "rcshowhidebots": "$1 mga gantaw",
        "rcshowhidebots-show": "Ipatanaw",
-       "rcshowhidebots-hide": "Tagoa",
+       "rcshowhidebots-hide": "Itago",
        "rcshowhideliu": "$1 rehistradong mga paragamit",
        "rcshowhideliu-show": "Ipatanaw",
-       "rcshowhideliu-hide": "Tagoa",
+       "rcshowhideliu-hide": "Itago",
        "rcshowhideanons": "$1 mga dae bistong paragamit",
        "rcshowhideanons-show": "Ipatanaw",
-       "rcshowhideanons-hide": "Tagoa",
+       "rcshowhideanons-hide": "Itago",
        "rcshowhidepatr": "$1 patrolyadong mga pagliwat",
        "rcshowhidepatr-show": "Ipatanaw",
        "rcshowhidepatr-hide": "Tagoa",
        "rcshowhidemine": "$1 sakong mga pagliliwat",
        "rcshowhidemine-show": "Ipatanaw",
-       "rcshowhidemine-hide": "Tagoa",
+       "rcshowhidemine-hide": "Itago",
        "rclinks": "Ipahilíng an $1 huring mga kaliwatan sa laog nin huring $2 na mga aldaw<br />$3",
        "diff": "kalaenan",
        "hist": "sagaysay",
        "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",
        "duplicate-defaultsort": "'''Patanid tabi:''' An susing panugmad kan salansan na \"$2\" minasalimbaw sa dating susing panugmad kan salansan na \"$1\".",
        "version": "Bersyon",
        "version-extensions": "Instaladong mga ekstensyon",
+       "version-skins": "Mga kublit",
        "version-specialpages": "Espesyal na mga pahina",
        "version-parserhooks": "Mga pangawil kan parser",
        "version-variables": "Mga kabalanggayahan",
        "version-antispam": "Pan-spam na pangataman",
-       "version-skins": "Mga kublit",
        "version-other": "An iba pa",
        "version-mediahandlers": "Mga Midyang Tagakapot",
        "version-hooks": "Mga pangawil",
index 0e4df24..f49c47e 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": "Крынічная старонка мусіць мець карэктную назву.",
        "difference-missing-revision": "{{PLURAL:$2|$2 вэрсія|$2 вэрсіі|$2 вэрсіяў}} з гэтымі адрозьненьнямі ($1) {{PLURAL:$2|не была|не былі}} знойдзеныя.\n\nЗвычайна гэта здараецца з-за пераходу па састарэлай спасылцы на старонку, якая была выдаленая.\nПадрабязнасьці можна знайсьці ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].",
        "searchresults": "Вынікі пошуку",
        "searchresults-title": "Вынікі пошуку для «$1»",
-       "toomanymatches": "Знойдзена зашмат супадзеньняў з запытам, калі ласка, паспрабуйце зьмяніць запыт",
        "titlematches": "Супадзеньні ў назвах старонак",
        "textmatches": "Супадзеньні ў тэкстах старонак",
        "notextmatches": "Супадзеньні ў тэкстах старонак ня знойдзеныя",
        "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": "Удасканалены пошук",
        "windows-nonascii-filename": "Гэтая вікі не падтрымлівае назвы файлаў з спэцыяльнымі сымбалямі.",
        "fileexists": "Файл з такой назвай ужо існуе. Калі ласка, праверце <strong>[[:$1]]</strong>, калі Вы ня ўпэўненыя, што жадаеце яго замяніць. [[$1|thumb]]",
        "filepageexists": "Старонка апісаньня для гэтага файла ўжо існуе як <strong>[[:$1]]</strong>, але файла з такой назвай няма.\nАпісаньне якое Вы дадалі ня зьявіцца на старонцы апісаньня.\nКаб яно там зьявілася, Вам трэба рэдагаваць яе самастойна.\n[[$1|thumb]]",
-       "fileexists-extension": "Файл Ð· Ð¿Ð°Ð´Ð¾Ð±Ð½Ð°Ð¹ Ð½Ð°Ð·Ð²Ð°Ð¹ Ñ\83жо Ñ\96Ñ\81нÑ\83е: [[$2|thumb]]\n* Ð\9dазва Ð·Ð°Ð³Ñ\80Ñ\83жанага Ñ\84айла: <strong>[[:$1]]</strong>\n* Ð\9dазва Ñ\96Ñ\81нÑ\83Ñ\8eÑ\87ага Ñ\84айла: <strong>[[:$2]]</strong>\nÐ\9aалÑ\96 Ð»Ð°Ñ\81ка, Ð²Ñ\8bбÑ\8fÑ\80Ñ\8bÑ\86е Ñ\96нÑ\88Ñ\83Ñ\8e Ð½Ð°Ð·Ð²Ñ\83.",
+       "fileexists-extension": "Файл Ð· Ð¿Ð°Ð´Ð¾Ð±Ð½Ð°Ð¹ Ð½Ð°Ð·Ð²Ð°Ð¹ Ñ\83жо Ñ\96Ñ\81нÑ\83е: [[$2|thumb]]\n* Ð\9dазва Ð·Ð°Ð³Ñ\80Ñ\83жанага Ñ\84айла: <strong>[[:$1]]</strong>\n* Ð\9dазва Ñ\96Ñ\81нÑ\83Ñ\8eÑ\87ага Ñ\84айла: <strong>[[:$2]]</strong>\nÐ\9cагÑ\87Ñ\8bма, Ð²Ñ\8b Ð¶Ð°Ð´Ð°ÐµÑ\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": "Файл з такой назвай ужо існуе і ня можа быць перапісаны.\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": "Старонкі, за якімі ніхто не назірае",
        "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": "Апісаньне",
        "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": "зьмену мовы старонкі"
 }
index 73604bb..1a09be1 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": "Навігацыя",
        "toc": "Змест",
        "showtoc": "паказаць",
        "hidetoc": "не паказваць",
-       "collapsible-collapse": "схаваць",
+       "collapsible-collapse": "Схаваць",
        "collapsible-expand": "Паказаць",
        "thisisdeleted": "Паказаць ці аднавіць $1?",
        "viewdeleted": "Ці паказаць $1?",
        "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": "<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-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": "Функцыі эл.пошты адключаны на гэтай Вікі.",
        "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": "Крынічная старонка павінна мець карэктную назву.",
        "diff-multi-sameuser": "(Не паказана{{PLURAL:$1|адна прамежкавая версія|$1 прамежкавыя версіі|$1 прамежкавых версій}} таго ж удзельніка)",
        "diff-multi-otherusers": "(Не паказана {{PLURAL:$1|адна прамежкавая версія|$1 прамежкавыя версіі|$1 прамежкавых версій}} {{PLURAL:$2|яшчэ аднаго ўдзельніка|$2 удзельнікаў}})",
        "diff-multi-manyusers": "({{PLURAL:$1|не паказана $1 прамежкавая версія|не паказаны $1 прамежкавыя версіі|не паказаны $1 прамежкавых версій}}, зробленыя больш чым {{PLURAL:$2|$1 удзельнікам|$2 удзельнікамі}})",
+       "difference-missing-revision": "{{PLURAL:$2|$2 версія|$2 версіі|$2 версій}} гэтай розніцы ($1) {{PLURAL:$2|не знойдзена|не знойдзены}}.\n\nЗвычайна такое здараецца з-за пераходу па састарэлай спасылцы на розніцу ў старонцы, якая была сцёрта.\nПадрабязнасці могуць быць у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале сціранняў].",
        "searchresults": "Вынікі пошуку",
        "searchresults-title": "Вынікі пошуку «$1»",
-       "toomanymatches": "Знойдзена занадта шмат адпаведнасцяў, паспрабуйце змяніць шуканае.",
        "titlematches": "Знойдзена ў назвах",
        "textmatches": "Знойдзена ў тэкстах",
        "notextmatches": "Нічога не знойдзена ў тэкстах старонак",
        "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": "Запомніць выбар для наступных пошукаў",
        "recentchangesdays-max": "(найбольш $1 {{PLURAL:$1|дзень|дзён}})",
        "recentchangescount": "Прадвызначаная колькасць правак дзеля паказу:",
        "prefs-help-recentchangescount": "Гэта ўключае ў сябе апошнія змены, гісторыі старонак, журналы.",
+       "prefs-help-watchlist-token2": "Гэта сакрэтны ключ к сеціўнай стужцы з вашага спісу назірання.\nКожны, хто ведае гэты ключ, будзе мець магчымасць чытаць ваш спіс назірання, таму не дзяліцеся ім.\nКалі трэба, можна [[Special:ResetTokens|скінуць яго]].",
        "savedprefs": "Настройкі замацаваныя.",
        "timezonelegend": "Часавы пояс:",
        "localtime": "Мясцовы час:",
        "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": "р",
        "largefileserver": "Гэты файл большага аб'ёму, чым дазваляе канфігурацыя сервера.",
        "emptyfile": "Здаецца, што файл, укладзены вамі, пусты. Магчыма, здарылася памылка ў назве файла? Праверце, ці вы сапраўды хацелі ўкласці менавіта гэты файл.",
        "windows-nonascii-filename": "Дадзеная вікі не падтрымлівае імёны файлаў са спецыяльнымі знакамі.",
-       "fileexists": "Ужо Ñ\96Ñ\81нÑ\83е Ñ\84айл Ð· Ñ\82акоÑ\8e назвай, праверце <strong>[[:$1]]</strong>, калі не ўпэўнены, што жадаеце мяняць яго змесціва.\n[[$1|thumb]]",
+       "fileexists": "Ужо Ñ\91Ñ\81Ñ\86Ñ\8c Ñ\84айл Ð· Ñ\82акой назвай, праверце <strong>[[:$1]]</strong>, калі не ўпэўнены, што жадаеце мяняць яго змесціва.\n[[$1|thumb]]",
        "filepageexists": "Для файла з такой назвай існуе старонка апісання <strong>[[:$1]]</strong>, але сам файл зараз не існуе.\nТаму вашае апісанне не з'явіцца на адпаведнай старонцы, пакуль вы самастойна яе не паправіце.\n[[$1|thumb]]",
-       "fileexists-extension": "Ужо Ñ\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]]",
        "backend-fail-internal": "Узнікла невядомая памылка на серверы сховішча «$1».",
        "backend-fail-contenttype": "Немагчыма вызначыць тып зместу файла, які мусіць быць захаваны ў «$1».",
        "backend-fail-batchsize": "Сервер сховішча атрымаў блок з $1 {{PLURAL:$1|файлавай аперацыі|файлавых аперацый|файлавых аперацый}}; абмежаванне складае $2",
+       "backend-fail-usable": "Немагчыма прачытаць ці запісаць файл \"$1\" з-за нястачы дазволаў ці адсутнасці каталогаў/кантэйнераў.",
+       "filejournal-fail-dbconnect": "Немагчыма далучыцца да базы звестак журнала для рухавіка захоўвання дадзеных \"$1\".",
+       "filejournal-fail-dbquery": "Немагчыма абнавіць базу звестак журнала для рухавіка захоўвання дадзеных \"$1\".",
        "lockmanager-notlocked": "Не ўдалося разблакаваць \"$1\"; ён не заблакаваны.",
        "lockmanager-fail-closelock": "Не ўдалося закрыць файл блакіроўкі для  «$1».",
        "lockmanager-fail-deletelock": "Не ўдалося выдаліць файл блакіроўкі для  «$1».",
        "lockmanager-fail-releaselock": "Не ўдалося разблакіраваць \"$1\"",
        "lockmanager-fail-db-bucket": "Не атрымалася звязацца з дастатковай колькасцю баз блакаванняў у сегменце $1.",
        "lockmanager-fail-db-release": "Не атрымалася зняць блакаванне базы дадзеных $1.",
+       "lockmanager-fail-svr-acquire": "Не ўдалося атрымаць блакаванні на серверы $1.",
        "lockmanager-fail-svr-release": "Не атрымалася зняць блакаванні на серверы $1.",
        "zip-file-open-error": "Адбылася памылка пры адкрыцці файла для праверкі архіва.",
        "zip-wrong-format": "Указаны файл не з'яўляецца файлам ZIP.",
        "uploadstash-refresh": "Абнавіць спіс файлаў",
        "invalid-chunk-offset": "Недапушчальнае зрушэнне фрагмента",
        "img-auth-accessdenied": "Доступ забаронены",
-       "img-auth-nopathinfo": "Адсутнічае PATH_INFO",
+       "img-auth-nopathinfo": "Адсутнічае PATH_INFO.\nВаш сервер не настроены на перадачу гэтых звестак.\nМагчыма, ён на аснове CGI і не падтрымлівае img_auth.\nГл. https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "Запытаны шлях не ставіцца да наладжанага каталога ўкладанняў.",
        "img-auth-badtitle": "Немагчыма пабудаваць правільны загаловак з «$1».",
        "img-auth-nologinnWL": "Вы не ўвайшлі ў сістэму, а «$1» не ўваходзіць ў белы спіс.",
        "http-invalid-url": "Памылковы URL: $1",
        "http-invalid-scheme": "Не падтрымліваюцца адрасы са схемай \"$1\"",
        "http-request-error": "Не атрымалася выканаць HTTP-запыт з-за невядомай памылкі",
-       "http-read-error": "Памылка чытання HTTP",
+       "http-read-error": "Памылка чытання HTTP.",
        "http-timed-out": "Мінуў час чакання HTTP-запыту.",
        "http-curl-error": "Памылка звароту да URL: $1",
        "http-bad-status": "Пад час апрацоўкі HTTP-запыту выяўлена праблема: $1 $2",
        "listfiles_size": "Памер у байтах",
        "listfiles_description": "Апісанне",
        "listfiles_count": "Версіі",
+       "listfiles-show-all": "Уключыць старыя версіі відарысаў",
+       "listfiles-latestversion": "Актуальная версія",
+       "listfiles-latestversion-yes": "Так",
+       "listfiles-latestversion-no": "Не",
        "file-anchor-link": "Файл",
        "filehist": "Гісторыя файла",
        "filehist-help": "Націснуць на даце з часам, каб паказаць файл, якім ён тады быў.",
        "sharedupload": "Гэты файл з $1 і можа выкарыстоўвацца іншымі праектамі.",
        "sharedupload-desc-there": "Гэты файл з $1 і можа выкарыстоўвацца ў іншых праектах.\nДадатковую інфармацыю можна знайсці на [$2 старонцы апісання файла].",
        "sharedupload-desc-here": "Гэты файл з $1 і можа выкарыстоўвацца іншымі праектамі. Апісанне на яго [$2 старонцы размоў] прыведзена ніжэй",
+       "sharedupload-desc-edit": "Гэты файл з $1 і можа выкарыстоўвацца ў іншых праектах.\nМажліва, вы хочаце правіць апісанне на [$2 старонцы апісання файла] там.",
+       "sharedupload-desc-create": "Гэты файл з $1 і можа выкарыстоўвацца ў іншых праектах.\nПравіць яго апісанне можна на гэнай [$2 старонцы апісання файла].",
        "filepage-nofile": "Не знойдзены файл з такой назвай.",
        "filepage-nofile-link": "Не знойдзены файл з такой назвай, але можна [$1 яго ўкласці].",
        "uploadnewversion-linktext": "Укласці новую версію гэтага файла",
        "shared-repo-from": "з $1",
        "shared-repo": "супольнае сховішча",
+       "upload-disallowed-here": "Вы не можаце перапісаць гэты файл.",
        "filerevert": "Адкаціць $1",
        "filerevert-legend": "Адкат файла",
        "filerevert-intro": "Вы адкочваеце '''[[Media:$1|$1]]''' да [$4 версіі з $3, $2].",
        "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": "Старонкі, якія не назіраюцца",
        "listredirects": "Усе перасылкі",
+       "listduplicatedfiles": "Пералік дублікатных файлаў",
+       "listduplicatedfiles-summary": "Гэта пералік файлаў, у якіх найноўшая версія файла ўяўляе сабою копію апошняй версіі якога-небудзь іншага файла. Улічваюцца толькі лакальныя файлы.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] мае [[$3|{{PLURAL:$2|дублікат|$2 дублікаты|$2 дублікатаў}}]].",
        "unusedtemplates": "Шаблоны, якія не выкарыстаны",
        "unusedtemplatestext": "Тут пералічаныя ўсе старонкі ў прасторы назваў {{ns:template}}, якія ані разу не ўкладзеныя ў іншыя старонкі. Памятайце, што трэба правяраць спасылкі на шаблоны перад тым, як сціраць іх.",
        "unusedtemplateswlh": "іншыя спасылкі",
        "randompage": "Выпадковая старонка",
        "randompage-nopages": "Няма старонак у наступн{{PLURAL:$2|ай прасторы|ых прасторах}} назваў: $1.",
+       "randomincategory": "Выпадковая старонка ў катэгорыі",
+       "randomincategory-invalidcategory": "\"$1\" - недапушчальная назва катэгорыі.",
+       "randomincategory-nopages": "Няма старонак у катэгорыі [[:Category:$1|$1]].",
+       "randomincategory-selectcategory": "Атрымаць выпадковую старонку з катэгорыі: $1 $2.",
+       "randomincategory-selectcategory-submit": "Перайсці",
        "randomredirect": "Выпадковая перасылка",
        "randomredirect-nopages": "Няма перасылак у прасторы назваў \"$1\".",
        "statistics": "Статыстыка",
        "statistics-users-active": "Актыўныя ўдзельнікі",
        "statistics-users-active-desc": "Удзельнікі, якія хоць нешта зрабілі за апошн{{PLURAL:$1|і дзень|ія $1 дзён}}",
        "statistics-mostpopular": "Самыя папулярныя старонкі",
+       "pageswithprop": "Старонкі з уласцівасцю старонкі",
+       "pageswithprop-legend": "Старонкі з пэўнай уласцівасцю",
+       "pageswithprop-text": "На гэтай старонцы пералічаны старонкі, якія выкарыстоўваюць пэўную уласцівасць.",
+       "pageswithprop-prop": "Назва ўласцівасці:",
+       "pageswithprop-submit": "Перайсці",
+       "pageswithprop-prophidden-long": "доўгае тэкставае значэнне ўласцівасці схавана ($1)",
+       "pageswithprop-prophidden-binary": "двайковае значэнне ўласцівасці схавана ($1)",
        "doubleredirects": "Падвойныя перасылкі",
        "doubleredirectstext": "Тут пералічаныя старонкі-перасылкі, якія паказваюць на іншыя перасылкі.\nКожны радок утрымлівае спасылкі на першую і другую перасылкі, а таксама мэту другой перасылкі, якая звычайна і ёсць \"сапраўдная\" мэтавая старонка, на якую павінна была паказваць першая перасылка.\n<del>Закрэсленыя складнікі</del> ўжо былі папраўленыя.",
-       "double-redirect-fixed-move": "Назва [[$1]] была перанесена, і зараз перасылае да [[$2]]",
-       "double-redirect-fixed-maintenance": "Ð\92Ñ\8bпÑ\80аÑ\9eленне Ð¿Ð°Ð´Ð²Ð¾Ð¹Ð½Ð°Ð³Ð° Ð¿ÐµÑ\80анакÑ\96Ñ\80аваннÑ\8f Ð· [[$1]] Ð½Ð° [[$2]].",
+       "double-redirect-fixed-move": "Назва [[$1]] была перанесена.\nПасля аўтаматычнага абнаўлення зараз яна перасылае да [[$2]]",
+       "double-redirect-fixed-maintenance": "Ð\90Ñ\9eÑ\82амаÑ\82Ñ\8bÑ\87нае Ð²Ñ\8bпÑ\80аÑ\9eленне Ð¿Ð°Ð´Ð²Ð¾Ð¹Ð½Ð°Ð¹ Ð¿ÐµÑ\80аÑ\81Ñ\8bлкÑ\96 Ð· [[$1]] Ð½Ð° [[$2]] Ñ\86Ñ\8fгам Ñ\82Ñ\8dÑ\85нÑ\96Ñ\87нага Ð°Ð±Ñ\81лÑ\83гоÑ\9eваннÑ\8f.",
        "double-redirect-fixer": "Выпраўляльнік перасылак",
        "brokenredirects": "Паламаныя перасылкі",
        "brokenredirectstext": "Гэтыя перасылкі паказваюць на старонкі, якіх няма:",
        "fewestrevisions": "Артыкулы з найменшай колькасцю версій",
        "nbytes": "$1 {{PLURAL:$1|байт|байта|байтаў}}",
        "ncategories": "$1 {{PLURAL:$1|катэгорыя|катэгорыі|катэгорый}}",
+       "ninterwikis": "$1 {{PLURAL:$1|інтэрвікі|інтэрвікі}}",
        "nlinks": "$1 {{PLURAL:$1|спасылка|спасылкі|спасылак}}",
        "nmembers": "$1 {{PLURAL:$1|складнік|складнікі|складнікаў}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|складнік|складнікі|складнік}}",
        "nrevisions": "$1 {{PLURAL:$1|версія|версіі|версій}}",
        "nviews": "$1 {{PLURAL:$1|паказ|паказаў}}",
        "nimagelinks": "Выкарыстоўваецца на $1 {{PLURAL:$1|старонцы|старонках|старонках}}",
        "mostlinkedtemplates": "Шаблоны ў частым выкарыстанні",
        "mostcategories": "Артыкулы ў найбольшай кольк. катэгорый",
        "mostimages": "Выявы ў частым выкарыстанні",
+       "mostinterwikis": "Артыкулы з найбольш. кольк. інтэрвікі",
        "mostrevisions": "Артыкулы з найбольшай колькасцю версій",
        "prefixindex": "Старонкі з назвамі на ўзор",
        "prefixindex-namespace": "Усе старонкі з прэфіксам ( $1 прастора імёнаў)",
+       "prefixindex-strip": "Прыбраць прэфікс у пераліку",
        "shortpages": "Старонкі малога аб'ёму",
        "longpages": "Старонкі вялікага аб'ёму",
        "deadendpages": "Старонкі без спасылак",
        "deadendpagestext": "Спіс старонак без спасылак на тутэйшыя артыкулы.",
        "protectedpages": "Старонкі пад аховай",
        "protectedpages-indef": "Толькі бестэрміновыя аховы",
+       "protectedpages-summary": "На гэтай старонцы пералічаны наяўныя старонкі, якія зараз знаходзяцца пад аховай. Спіс назваў, абароненых ад стварэння, гл. [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Толькі каскадныя засцераганні",
        "protectedpages-noredirect": "Схаваць перанакіраванні",
        "protectedpagesempty": "Ніякія старонкі такім чынам не ахоўваюцца.",
+       "protectedpages-timestamp": "Дата/час",
        "protectedpages-page": "Старонка",
        "protectedpages-expiry": "Канчаецца",
        "protectedpages-performer": "Паставіў ахову",
        "protectedpages-unknown-timestamp": "Невядома",
        "protectedpages-unknown-performer": "Нявызначаны ўдзельнік",
        "protectedtitles": "Назвы пад аховай",
+       "protectedtitles-summary": "На гэтай старонцы пералічаны назвы, якія зараз абаронены ад стварэння. Спіс існых старонак пад аховай гл. [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Няма назваў, якія зараз бы ахоўваліся з такімі параметрамі.",
        "listusers": "Усе ўдзельнікі",
        "listusers-editsonly": "Толькі ўдзельнікі, якія маюць праўкі",
        "allpagesbadtitle": "Гэтая назва старонкі недапушчальная або ўтрымлівае між-моўны або між-вікавы прэфікс. Магчыма, у назве ёсць знак ці знакі, якія нельга ўжываць у назвах.",
        "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": "Паказаць удзельнікаў, пачаўшы з:",
        "listusers-blocked": "(заблакаваны)",
        "activeusers": "Актыўныя ўдзельнікі",
        "activeusers-intro": "Гэта пералік удзельнікаў, якія нешта рабілі за апошнія $1 {{PLURAL:$1|дзень|дзён}}.",
-       "activeusers-count": "$1 {{PLURAL:$1|пÑ\80аÑ\9eка|пÑ\80аÑ\9eкÑ\96|пÑ\80авак}} Ð·Ð° Ð°Ð¿Ð¾Ñ\88нÑ\96{{PLURAL:$3| Ð´Ð·ÐµÐ½Ñ\8c|я $3 дзён}}",
+       "activeusers-count": "$1 {{PLURAL:$1|дзеÑ\8fнне|дзеÑ\8fннÑ\96|дзеÑ\8fннÑ\8fÑ\9e}} Ð·Ð° Ð°Ð¿Ð¾Ñ\88нÑ\96{{PLURAL:$3| Ð´Ð·ÐµÐ½Ñ\8c\8f $3 Ð´Ð½Ñ\96|я $3 дзён}}",
        "activeusers-from": "Паказ, пачынаючы з:",
        "activeusers-hidebots": "Без робатаў",
        "activeusers-hidesysops": "Без адміністратараў",
        "activeusers-noresult": "Няма такіх удзельнікаў.",
        "listgrouprights": "Дазволы для груп удзельнікаў",
        "listgrouprights-summary": "Гэты пералік вызначаных у гэтай вікі груп удзельнікаў, разам з прыпісанымі ім дазволамі.\nДаведацца больш пра асабістыя дазволы можна на старонцы [[{{MediaWiki:Listgrouprights-helppage}}]].",
-       "listgrouprights-key": "* <span class=\"listgrouprights-granted\">Дадзены правы</span>\n* <span class=\"listgrouprights-revoked\">Адкліканыя правы</span>",
+       "listgrouprights-key": "Легенда:\n* <span class=\"listgrouprights-granted\">Дадзены дазвол</span>\n* <span class=\"listgrouprights-revoked\">Адкліканы дазвол</span>",
        "listgrouprights-group": "Група",
        "listgrouprights-rights": "Дазволы",
        "listgrouprights-helppage": "Help:Дазволы ў групах",
        "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": "Крытэрый уключэння ў катэгорыю",
+       "noindex-category-desc": "Старонка не індэксуецца пошукавымі робатамі, таму што на ёй ёсць магічнае слова <code><nowiki>__NOINDEX__</nowiki></code> і яна знаходзіцца ў прасторы назваў, дзе гэты сцяг дазволены.",
+       "index-category-desc": "На старонцы ёсць магічнае слова <code><nowiki>__INDEX__</nowiki></code> (і старонка знаходзіцца ў прасторы назваў, дзе гэты сцяг дазволены), таму яна індэксуецца пошукавымі робатамі у выпадках, калі гэтага звычайна не адбываецца.",
+       "post-expand-template-inclusion-category-desc": "Пасля разгортвання ўсіх шаблонаў памер старонкі перавышае <code>$wgMaxArticleSize</code>, таму некаторыя шаблоны пакінуты неразгорнутымі.",
+       "post-expand-template-argument-category-desc": "Пасля разгортвання аргумента шаблона (штосьці ў патройных фігурных дужках, напрыклад, <code>{{{Foo}}}</code>), памер старонкі перавышае <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Занадта шмат працаёмкіх зваротаў да функцый парсера (напрыклад, <code>#ifexist</code>) уключана ў старонку. Гл. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Катэгорыя дадаецца, калі старонка ўтрымлівае няспраўную спасылку на файл (спасылку на ўкладзены файл, якога няма).",
+       "hidden-category-category-desc": "Гэта катэгорыя змяшчае <code><nowiki>__HIDDENCAT__</nowiki></code>, што паводле прадвызначэння засцерагае яе ад паказу ў спісе катэгорый на старонках.",
        "trackingcategories-nodesc": "Апісанне адсутнічае.",
+       "trackingcategories-disabled": "Катэгорыя адключана",
        "mailnologin": "Няма эл.адрасу",
        "mailnologintext": "Трэба [[Special:UserLogin|ўвайсці ў сістэму]] і мець пацверджаны адрас эл.пошты ў сваіх [[Special:Preferences|настáўленнях]], каб слаць эл.пошту іншым удзельнікам.",
        "emailuser": "Эл.пошта ўдзельніка",
+       "emailuser-title-target": "Напісаць ліст {{GENDER:$1|удзельніку|удзельніцы}}",
        "emailuser-title-notarget": "Напісанне электроннага ліста ўдзельніку",
        "emailpage": "Зварот да ўдзельніка праз эл.пошту",
        "emailpagetext": "Тут можна выслаць эл.пошту гэта{{GENDER:$1|му ўдзельніку|й удзельніцы}}.\nАдрас эл.пошты, уведзены вамі ў [[Special:Preferences|сваіх настройках]], з'явіцца ў полі \"Ад каго (From)\" вашага ліста, і атрымальнік зможа адказаць на ваш ліст.",
        "watchlistanontext": "Каб паглядзець ці змяніць спіс назірання, трэба $1.",
        "watchnologin": "Без прадстаўлення",
        "addwatch": "Дадаць у спіс назірання",
-       "addedwatchtext": "Старонка \"[[:$1]]\" была дададзена да [[Special:Watchlist|назіраных]] вамі.\nЗмяненні, якія адбудуцца з гэтай старонкай і з Размовай пра яе, будуць паказвацца там, і старонка будзе '''вылучацца шрыфтам''' у [[Special:RecentChanges|спісе нядаўніх змяненняў]], каб лягчэй пазнаваць яе.\n\nКалі вы не пажадаеце больш назіраць за гэтай старонкай, націсніце \"Не назіраць\" у бакоўцы.",
+       "addedwatchtext": "Старонка \"[[:$1]]\" была дададзена да [[Special:Watchlist|назіраных]] вамі.\nЗмяненні, якія адбудуцца з гэтай старонкай і з размовамі пра яе, будуць паказвацца ў спісе назірання.",
        "addedwatchtext-short": "Старонка \"$1\" была дададзена ў ваш спіс назірання.",
        "removewatch": "Выдаліць са спіса назірання",
        "removedwatchtext": "Старонка \"[[:$1]]\" была вынята з вашага [[Special:Watchlist|спіса назірання]].",
        "enotif_reset": "Пазначыць усе старонкі як наведаныя",
        "enotif_impersonal_salutation": "Шаноўны ўдзельнік {{SITENAME}}",
        "enotif_subject_deleted": "Старонка $1 праекта {{SITENAME}} сцёрта {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $2",
+       "enotif_subject_created": "Старонка $1 праекта {{SITENAME}} створана {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $2",
+       "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": "Перанесці старонку",
        "immobile-target-namespace-iw": "Нельга пераносіць старонку на месца спасылкі інтэрвікі.",
        "immobile-source-page": "Нельга пераносіць гэтую старонку.",
        "immobile-target-page": "Нельга пераносіць пад гэтую назву.",
+       "bad-target-model": "Пажаданая мэта ўжывае іншую мадэль змесціва. Немагчыма пераўтварыць $1 у $2.",
        "imagenocrossnamespace": "Нельга пераносіць у не-файлавую прастору назваў",
        "nonfile-cannot-move-to-file": "Немагчыма пераназываць старонкі ў выявы",
        "imagetypemismatch": "Новы канчатак назвы файла не адпавядае яго тыпу",
        "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": "Не ўдаецца стварыць часовы файл эскіза",
        "thumbnail_image-type": "Дадзены тып выявы не падтрымліваецца",
        "thumbnail_gd-library": "Няпоўная канфігурацыя бібліятэкі GD, адсутнічае функцыя $1",
        "thumbnail_image-missing": "Хутчэй за ўсё, адсутнічае файл $1",
+       "thumbnail_image-failure-limit": "Занадта шмат няўдалых спробаў ($1 ці болей) стварыць гэту мініяцюру, за апошні час. Калі ласка, паспрабуйце пазней.",
        "import": "Імпартаваць старонкі",
        "importinterwiki": "Імпарт Transwiki",
        "import-interwiki-text": "Выбар вікі і назвы старонкі дзеля імпарту.\nДаты версій і імёны аўтараў будуць захаваныя.\nУсе транс-вікавыя імпарты запісваюцца ў [[Special:Log/import|журнале імпартаў]].",
        "import-interwiki-templates": "Разам з усімі шаблонамі",
        "import-interwiki-submit": "Імпартаваць",
        "import-interwiki-namespace": "У прастору назваў:",
+       "import-interwiki-rootpage": "Мэтавая каранёвая старонка (неабавязкова):",
        "import-upload-filename": "Назва файла:",
        "import-comment": "Каментарый:",
        "importtext": "Калі ласка, экспартуйце файл з крынічнай вікі з дапамогай [[Special:Export|прылады экспарту]].\nЗахавайце яго на свой камп'ютар, а потым загрузіце сюды.",
        "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": "Згублены звесткі пра сеанс. Паспрабуйце ізноў.",
        "import-error-interwiki": "Старонка «$1» не была імпартаваная, таму што гэтая назва зарэзерваваная для інтэрвікі.",
        "import-error-special": "Старонка «$1» не была імпартаваная, таму што яна належыць да спецыяльнай прасторы назваў, старонкі ў якой не дазволеныя.",
        "import-error-invalid": "Старонка «$1» не была імпартаваная з-за няслушнасці назвы.",
+       "import-error-bad-location": "Версія $2, якая выкарыстоўвае мадэль змесціва $3, не можа быць запісана на старонцы \"$1\" гэтай вікі, паколькі такая мадэль не падтрымліваецца на гэтай старонцы.",
+       "import-rootpage-invalid": "Пазначаная назва каранёвай старонкі недапушчальная.",
+       "import-rootpage-nosubpage": "У прастора назваў \"$1\" каранёвай старонкі падстаронкі не дазволены.",
        "importlogpage": "Журнал імпартаванняў",
        "importlogpagetext": "Адміністрацыйныя імпартаванні старонак з іншых вікі, разам з гісторыямі правак.",
        "import-logentry-upload": "імпартавана [[$1]] праз файлавы ўклад",
        "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",
        "spambot_username": "Чыстка спаму MediaWiki",
        "spam_reverting": "Вяртаемся да апошняй версіі без спасылак на $1",
        "spam_blanking": "Усе версіі ўтрымлівалі спасылкі на $1, чысцім",
+       "spam_deleting": "Усе версіі ўтрымлівалі спасылкі на $1, сціраем",
+       "simpleantispam-label": "Праверка анты-спаму.\n<strong>НЕ</strong> ўпісвайце тут нічога!",
        "pageinfo-title": "Інфармацыя для \"$1\"",
+       "pageinfo-not-current": "Выбачайце, немагчыма даць гэтыя звесткі для старых версій.",
        "pageinfo-header-basic": "Агульныя звесткі",
        "pageinfo-header-edits": "Гісторыя правак",
-       "pageinfo-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-magic-words": "{{PLURAL:$1|1=Магічнае слова|Магічныя словы}} ($1)",
+       "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-desc-animated": "Анімаваны файл SVG, намінальна $1 × $2 кропак, аб'ём файла: $3",
+       "svg-long-error": "Няспраўны файл SVG: $1",
        "show-big-image": "Арыгінальны файл",
        "show-big-image-preview": "Памер пры папярэднім праглядзе: $1.",
        "show-big-image-other": "{{PLURAL:$2|Іншы дазвол|Іншыя дазволы}}: $1.",
        "file-info-png-looped": "бясконца",
        "file-info-png-repeat": "паўтараецца $1 {{PLURAL:$1|раз|разоў}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|кадр|кадраў}}",
+       "file-no-thumb-animation": "<strong>Заўвага: З-за тэхнічных абмежаванняў мініяцюры гэтага файла не будуць анімаванымі.</strong>",
+       "file-no-thumb-animation-gif": "<strong>Заўвага: З-за тэхнічных абмежаванняў мініяцюры файлаў GIF высокага разрознення, такіх як гэты, ствараюцца без анімацыі.</strong>",
        "newimages": "Новыя файлы",
        "imagelisttext": "Ніжэй даецца спіс з '''$1''' {{PLURAL:$1|файла|файлаў}} у парадку $2.",
        "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": "Пераход!",
        "imgmultigoto": "На старонку $1",
        "img-lang-default": "(прадвызначаная мова)",
+       "img-lang-info": "Паказаць гэту выяву на мове $1. $2",
+       "img-lang-go": "Перайсці",
        "ascending_abbrev": "да больш.",
        "descending_abbrev": "да менш.",
        "table_pager_next": "Наступная старонка",
        "autosumm-replace": "Замена старонкі на '$1'",
        "autoredircomment": "Перасылае да [[$1]]",
        "autosumm-new": "Новая старонка: '$1'",
-       "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-credits-title": "Спіс аўтараў $1",
        "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": "Перасылка да файла, ID удзельніка, старонкі ці версіі",
+       "redirect-legend": "Перасылка да файла ці старонкі",
+       "redirect-summary": "Гэта адмысловая старонка перасылае да файла (з назвы файла), на старонку (з ідэнтыфікатара версіі ці старонкі), ці на старонку ўдзельніка (калі дадзены лічбавы ID удзельніка). Ужыванне: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ці [[{{#Special:Redirect}}/user/101]].",
+       "redirect-submit": "Перайсці",
+       "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-yes": "Так",
        "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-stasherror": "У час укладання файла ў сховішча здарылася памылка.",
        "api-error-timeout": "Сервер не адказаў у чаканы тэрмін.",
        "api-error-unclassified": "Узнікла невядомая памылка",
        "api-error-unknown-code": "Невядомая памылка: «$1».",
        "duration-decades": "$1 {{PLURAL:$1|дзесяцігоддзе|дзесяцігоддзі|дзесяцігоддзяў}}",
        "duration-centuries": "$1 {{PLURAL:$1|стагоддзе|стагоддзі|стагоддзяў}}",
        "duration-millennia": "$1 {{PLURAL:$1|тысячагоддзе|тысячагоддзі|тысячагоддзяў}}",
+       "rotate-comment": "Выява павернута на $1 {{PLURAL:$1|градус|градусы|градусаў}} па гадзіннікавай стрэлцы",
+       "limitreport-title": "Звесткі прафілявання парсера:",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунды|секундаў}}",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунды|секундаў}}",
+       "limitreport-ppvisitednodes": "Колькасць вузлоў, наведаных прэпрацэсарам",
+       "limitreport-ppgeneratednodes": "Колькасць вузлоў, створаных прэпрацэсарам",
+       "limitreport-postexpandincludesize": "Памер уключэнняў па разгортванні",
+       "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_xml_output": "Выніковы XML",
+       "expand_templates_html_output": "Выніковы зыходны код HTML",
+       "expand_templates_ok": "Добра",
        "expand_templates_remove_comments": "Сцерці каментарыі",
-       "expand_templates_preview": "Перадпаказ"
+       "expand_templates_remove_nowiki": "Прыбраць тэгі <nowiki> з выніку",
+       "expand_templates_generate_xml": "Паказаць дрэва сінтаксічнага аналізу XML",
+       "expand_templates_generate_rawhtml": "Паказаць зыходны код HTML",
+       "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 e334f2a..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": "Варианти",
        "difference-missing-revision": "{{PLURAL:$2|Не беше открита|Не бяха открити}} {{PLURAL:$2|една версия|$2 версии}} от тази разликова препратка ($1).\n\nТова обикновено се случва, когато е последвана остаряларазликова препратка на страница,коятоебила изтрита.\nПовече подробности могат да бъдат открити в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневника на изтриванията].",
        "searchresults": "Резултати от търсенето",
        "searchresults-title": "Резултати от търсенето за „$1“",
-       "toomanymatches": "Бяха открити твърде много съвпадения, опитайте с различна заявка",
        "titlematches": "Съответствия в заглавията на страници",
        "textmatches": "Съответствия в текста на страници",
        "notextmatches": "Няма съответствия в текста на страници",
        "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..bd3d464 100644 (file)
        "tog-hidepatrolled": "हाल के परिवर्तन में मामूली संपादन छुपाईं",
        "tog-newpageshidepatrolled": "नयका पृष्ठ के सूची में से जाँचल पृष्क के छुपाँई",
        "tog-extendwatchlist": "मात्र हाल के परिवर्तन ही नाही,बल्कि सब परिवर्तन के देखावे खातिर ध्यान सूची के विस्तारित करीं",
-       "tog-usenewrc": "तà¥\81रà¤\82त à¤­à¤\88ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\86 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¥\8bà¤\82 à¤\95à¥\87 à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤\85नà¥\81सार à¤¸à¤®à¥\82ह à¤®à¥\87à¤\82 à¤¬à¤¾à¤\81à¤\9fà¥\80 (à¤\9cावासà¥\8dà¤\95à¥\8dरिपà¥\8dà¤\9f à¤\86वशà¥\8dयà¤\95)",
+       "tog-usenewrc": "तà¥\81रà¤\82त à¤­à¤\88ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤®à¥\87à¤\82 à¤\86 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤­à¤\88ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनन à¤\95à¥\87 à¤ªà¤¨à¥\8dना à¤\85नà¥\81सार à¤¸à¤®à¥\82ह à¤®à¥\87à¤\82 à¤¬à¤¾à¤\82à¤\9fà¥\80",
        "tog-numberheadings": "स्वयं-सांख्यिकी शिर्षक",
-       "tog-showtoolbar": "सम्पादन औजार् बक्सा के दिखाइल् जाए",
-       "tog-editondblclick": "दुई क्लिक पर पृष्ठ संपादित करीं (जावास्क्रिप्ट आवश्यक बा)",
-       "tog-editsectiononrightclick": "अनुभाग शीर्षक पर दायाँ क्लिक कर अनुभाग सम्पादित करीं (जावास्क्रिप्ट आवश्यक बा)",
-       "tog-rememberpassword": "इ ब्राउजर पर हमार प्रवेश जारी रहे (अधिकतम $1 {{PLURAL:$1|दिन|दिन}})",
+       "tog-showtoolbar": "सम्पादन औजारपट्टी के दिखावल जाव",
+       "tog-editondblclick": "दुई क्लिक पर पन्ना संपादन करीं",
+       "tog-editsectiononrightclick": "अनुभाग शीर्षक पर दायाँ क्लिक कर अनुभाग सम्पादित करीं",
        "tog-watchcreations": "हमरा द्वारा निर्मित पृष्ठ आ हमरा द्वारा लादल फ़ाइलन के हमार ध्यानसूची में जोड़ी",
        "tog-watchdefault": "हमरा द्वारा निर्मित पृष्ठ आ हमरा द्वारा लादल फ़ाइलन के हमार ध्यानसूची में जोड़ी",
        "tog-watchmoves": "हमरा द्वारा स्थानांतरित पृष्ठ आ लादल फाईल के हमरा ध्यानसूची में जोड़ी",
@@ -32,7 +31,7 @@
        "tog-shownumberswatching": "ध्यान रखे वालन सदस्यन के देखावल जाव",
        "tog-oldsig": "वर्तमान हस्ताक्षर:",
        "tog-fancysig": "हस्ताक्षर के विकी पाठ के रुप में उपयोग करीं (बिना स्वचालित कड़ी के)",
-       "tog-uselivepreview": "लाà¤\88व à¤ªà¥\81रà¥\8dवालà¥\8bà¤\95न à¤\95à¥\87 à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रà¥\80à¤\82 (à¤\9cावासà¥\8dà¤\95à¥\8dरिपà¥\8dà¤\9f à¤¹à¥\8bà¤\96à¥\87 à¤\95à¥\87 à¤\9aाहà¥\80à¤\82) (पà¥\8dरयà¥\8bà¤\97à¤\95à¥\8dषम)",
+       "tog-uselivepreview": "लाà¤\87व à¤ªà¥\81रà¥\8dवालà¥\8bà¤\95न à¤\95à¥\87 à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रà¥\80à¤\82 (पà¥\8dरयà¥\8bà¤\97ातà¥\8dमà¤\95)",
        "tog-forceeditsummary": "यदि सम्पादन सारांश ना दिहल होखे त हमके सूचित करब",
        "tog-watchlisthideown": "हमार ध्यान दिहल पन्ना के सूची से हमरा खातिर परिवर्तन छिपाईं",
        "tog-watchlisthidebots": "हमार ध्यान सूची से बोट द्वारा करल गईल परिवर्तन के छिपाईं",
        "category-empty": "''इ श्रेणी में इ समय कउनो पन्ना या मीडिया नइखे।''",
        "hidden-categories": "{{PLURAL:$1|छुपावल गईल श्रेणी|छुपावल गईल श्रेणीं}}",
        "hidden-category-category": "छुपावल गइल श्रेणीं",
-       "category-subcat-count": "{{PLURAL:$2|à¤\87 à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤®à¤¾à¤¤à¥\8dर à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित à¤\89पशà¥\8dरà¥\87णà¥\80 à¤¬à¤¾|à¤\87 à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80|$1 à¤\89पशà¥\8dरà¥\87णà¥\80याà¤\82}} à¤¬à¤¾à¤¡à¤¼à¥\87, à¤\95à¥\81ल à¤\89पशà¥\8dरà¥\87णà¥\80याà¤\82 $2 à¤¬à¤¾à¤¡à¤¼à¥\87।}}",
+       "category-subcat-count": "{{PLURAL:$2|à¤\87 à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤®à¤¾à¤¤à¥\8dर à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित à¤\89पशà¥\8dरà¥\87णà¥\80 à¤¬à¤¾|à¤\87 à¤¶à¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80|$1 à¤\89पशà¥\8dरà¥\87णियाà¤\82}} à¤¬à¤¾à¤¡à¤¼à¥\87, à¤\95à¥\81ल à¤\89पशà¥\8dरà¥\87णियाà¤\81$2}}",
        "category-subcat-count-limited": "इ श्रेणी में निम्नलिखित {{PLURAL:$1|उपश्रेणी बा|$1 उपश्रेणीं बाड़े}}।",
-       "category-article-count": "{{PLURAL:$2|इ श्रेणी में मात्र निम्नलिखित पन्ना बा।|इ श्रेणी में निम्नलिखित {{PLURAL:$1|पन्ना बा|$1 पन्नें}}, कुल पन्नें $2 बाड़े।}}",
+       "category-article-count": "{{PLURAL:$2|इ श्रेणी में मात्र निम्नलिखित पन्न बा।|इ श्रेणी में निम्नलिखित {{PLURAL:$1|पन्ना बा|$1 पन्ना बाड़े}, कुल पन्ना $2}}",
        "category-article-count-limited": "निम्नलिखित {{PLURAL:$1|पन्ना|$1 पन्ना}} इ श्रेणीं में बा।",
        "category-file-count": "{{PLURAL:$2|इ श्रेणी में मात्र निम्नलिखित फ़ाइल बा।|इ श्रेणी में निम्नलिखित {{PLURAL:$1|फ़ाइल|$1 फ़ाइलं}} बाड़े, कुल फ़ाइलं $2}}",
        "category-file-count-limited": "वर्तमान में निम्नलिखित {{PLURAL:$1|पन्ना|$1 पन्नां}} इ श्रेणीं में बाड़े।",
        "newwindow": "(नया विंडो में खोलीं)",
        "cancel": "निरस्त",
        "moredotdotdot": "अउर...",
-       "morenotlisted": "à¤\85धिà¤\95 à¤¸à¥\82à¤\9aà¥\80बदà¥\8dध à¤¨à¤\87à¤\96à¥\87...",
+       "morenotlisted": "à¤\87 à¤¸à¥\82à¤\9aà¥\80 à¤ªà¥\82रà¥\8dण à¤¨à¤\87à¤\96à¥\87।",
        "mypage": "पन्ना",
        "mytalk": "राउर बात",
        "anontalk": "इ आइ॰पी खातिर वार्ता",
        "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": "मिटाईं",
        "articlepage": "सामग्री पन्ना देखीं",
        "talk": "बात-चीत",
        "views": "विचारसूची",
-       "toolbox": "à¤\94à¤\9cार-पà¥\87à¤\9fà¥\80",
+       "toolbox": "à¤\89पà¤\95रण",
        "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": "सामà¤\97à¥\8dरà¥\80 $1 à¤\95à¥\87 à¤¤à¤¹à¤¤ à¤\89पलबà¥\8dध à¤¬à¤¾।",
+       "copyright": "à¤\89पलबà¥\8dध à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 $1 à¤\95à¥\87 à¤\85धà¥\80न à¤\89पलबà¥\8dध à¤¬à¤¾ à¤\9cब à¤¤à¤\95 à¤\95à¥\80 à¤\85लà¤\97 à¤¸à¥\87 à¤\89लà¥\8dलà¥\87à¤\96 à¤¨à¤¾ à¤\95रल à¤\97à¤\88ल à¤¹à¥\8bà¤\96à¥\87 ।",
        "copyrightpage": "{{ns:project}}:लेखाधिकार",
        "currentevents": "हाल के घटना",
        "currentevents-url": "Project:हाल के घटना",
        "youhavenewmessages": "रउआ लगे बा $1 ($2).",
        "youhavenewmessagesfromusers": "रउआ खातिर {{PLURAL:$3|एगो अन्य सदस्य|$3 अन्य सदस्यन}} के $1 बा। ($2)",
        "youhavenewmessagesmanyusers": "रउआ खातिर कई सदस्यन द्वारा $1 बा। ($2)",
-       "newmessageslinkplural": "{{PLURAL:$1|à¤\8fà¤\97à¥\8b à¤¨à¤¯à¤¾ à¤¸à¤¨à¥\8dदà¥\87श à¤¬à¤¾|नया à¤¸à¤¨à¥\8dदà¥\87श à¤¬à¤¾à¤¡à¤¼à¤¨}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|पिछला|पिछलका}} बदलाव",
+       "newmessageslinkplural": "{{PLURAL:$1|à¤\8fà¤\95 à¤¨à¤¯à¤¾ à¤¸à¤¨à¥\8dदà¥\87श|999=नयà¤\95ा à¤¸à¤¨à¥\8dदà¥\87श}}",
+       "newmessagesdifflinkplural": "पिछला {{PLURAL:$1|बदलाव|999=बदलावं}}",
        "youhavenewmessagesmulti": "रउआ लगे $1 पर नया सन्देश बा",
        "editsection": "सम्पादन",
        "editold": "सम्पादन",
        "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": "लॉक करे के कारण दिहीं, साथे लॉक खुले के समय के लगभग आकलन दिहीं।",
        "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": "इ पन्ना पर इ कार्य नइखे करल जा सकत।",
        "invalidtitle-knownnamespace": "\"$2\" नामस्थान आ \"$3\" पाठ्य वाला गलत शीर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आ नाम \"$2\" वाला गलत शीर्षक",
        "exception-nologin": "खाता में प्रवेश नईखीं भईल",
-       "exception-nologin-text": "इ पन्ना अथवा कार्य खातिर रउआ विकि प्रवेश (लॉग इन) होना आवश्यक है।",
+       "exception-nologin-text": "इ पन्ना अथवा कार्य के सक्षम करे खातिर कृपया [[Special:Userlogin|लॉग इन]] करीं।",
+       "exception-nologin-text-manual": "इ पन्ना अथवा कार्य के सक्षम करे खातिर कृपया $1 करीं।",
        "virus-badscanner": "गलत जमाव: अज्ञात वायरस जाँचक: ''$1''",
        "virus-scanfailed": "जाँच विफल (कोड $1)",
        "virus-unknownscanner": "अज्ञात ऐंटीवायरस:",
        "gotaccount": "का पहिले से एगो खाता बा? $1.",
        "gotaccountlink": "खाता में प्रवेश",
        "userlogin-resetlink": "का रउआ आपन प्रवेश जानकारी भूला गइल बानी?",
-       "userlogin-resetpassword-link": "आपन गुप्तशब्द के फिर से बहाल करीं",
-       "createacct-join": "अपना बारे में जानकारी नीचे लिखीं",
-       "createacct-another-join": "नयका खाता के जानकारी नीचे लिखीं",
+       "userlogin-resetpassword-link": "आपन गुप्तशब्द भूला गईनी का?",
+       "userlogin-helplink2": "खाता प्रवेश साथ मदद",
+       "userlogin-loggedin": "रउआ {{GENDER:$1|$1}} के रूप में पहिले से लॉग्ड इन बानीं।\nकौनो अन्य सदस्य के रूप में लॉग इन करे खातिर निम्नलिखित फ़ॉर्म के प्रयोग करीं।",
+       "userlogin-createanother": "एगो दोसर खाता बनाईं",
        "createacct-emailrequired": "ई-मेल पता",
        "createacct-emailoptional": "ई-मेल पता (वैकल्पिक)",
        "createacct-email-ph": "आपन ई-मेल पता लिखीं",
        "passwordtooshort": "गुप्त-शब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षर}} के होवे के चाहीं।",
        "password-name-match": "राउर गुप्त-शब्द राउर प्रयोगकर्ता नाम से अलग होवे के चाहीं।",
        "password-login-forbidden": "इस सदस्यनाम आ गुप्तशब्द के प्रयोग वर्जित बा।",
-       "mailmypassword": "नया à¤\97à¥\81पà¥\8dत-शबà¥\8dद à¤\88-मà¥\87ल à¤ªà¤° à¤­à¥\87à¤\9cीं",
+       "mailmypassword": "à¤\97à¥\81पà¥\8dतशबà¥\8dद à¤°à¤¿à¤¸à¥\87à¤\9f à¤\95रीं",
        "passwordremindertitle": "{{SITENAME}} खातिर नया अस्थायी गुप्त-शब्द",
        "passwordremindertext": "केहु (शायद रउए, $1 आइ॰पी पता से) {{SITENAME}} ($4) पर प्रयोग खातिर नया गुप्तशब्द के निवेदन कईले बानी। सदस्य \"$2\" खातिर एगो अस्थायी गुप्तशब्द बना दिहल गईल बा, आ ई अभी \"$3\" बा। यदि ई राउरे आशय रहल, त अब रउआ खाता प्रवेश खातिर एगो नया गुप्तशब्द चुने के पड़ी।\nराउर अस्थायी गुप्तशब्द के अवधि {{PLURAL:$5|एक दिन|$5 दिनं}} में समाप्त हो जाई।\n\nयदि इ निवेदन केहु अउर कइले रहल, या रउआ आपन पुरान गुप्तशब्द अब नइखी बदले के चाहत काहे कि रउआ राउर पुरनका गुप्तशब्द के स्मरण हो आइल बा, त रउआ इ संदेश के अनदेखा कर सकत बानी, आ आपन पुरान गुप्तशब्द के प्रयोग पहिले हि जइसन कर सकत बानी।",
        "noemail": "\"$1\" सदस्य खातिर कउनो भी ई-मेल पता दर्ज नइखे करल गइल।",
        "noemailcreate": "रउआ एगो जायज ई-मेल पता उपलब्ध करावे के पड़ी।",
        "passwordsent": "\"$1\" के ई-मेल पता पर एगो नया गुप्तशब्द भेज दिहल गइल बा।\nई-मेल पावे के बाद कृपया दुबारा खाता में प्रवेश करब।",
        "blocked-mailpassword": "राउर आइ॰पी पता के सम्पादन करे से वंचित कर दिहल गइल बा, आ गलत प्रयोग रोके खातिर गुप्तशब्द पुनः प्राप्ति के सुविधा इ आइ॰पी पर बंद कर दिहल गइल बा।",
-       "eauthentsent": "दरà¥\8dà¤\9c à¤\95रावल à¤\97à¤\87ल à¤\88-मà¥\87ल à¤ªà¤¤à¤¾ à¤ªà¤° à¤\8fà¤\97à¥\8b à¤ªà¥\81षà¥\8dà¤\9fिà¤\95रण à¤\88-मà¥\87ल à¤­à¥\87à¤\9c à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¬à¤¾à¥¤\nरà¤\89à¤\86 à¤\89 à¤\88-मà¥\87ल à¤ªà¤° à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¨à¤¿à¤°à¥\8dदà¥\87श à¤\95à¥\87 à¤\85नà¥\81सरण à¤\95र à¤\95à¥\87 à¤\88-मà¥\87ल à¤ªà¤¤à¤¾ à¤\95à¥\87 à¤ªà¥\81षà¥\8dà¤\9fिà¤\95रण à¤\95रावà¥\87 à¤\95à¥\87 à¤ªà¤¡à¤¼à¥\80, à¤\93à¤\95रा à¤¬à¤¾à¤¦à¥\87 à¤\85हिà¤\9cा à¤¸à¥\87 à¤\95à¤\89नà¥\8b à¤¦à¥\82सर à¤\88-मà¥\87ल à¤­à¥\87à¤\9cल à¤\9cाà¤\88।",
+       "eauthentsent": "दरà¥\8dà¤\9c à¤\95रावल à¤\97à¤\87ल à¤\88-मà¥\87ल à¤ªà¤¤à¤¾ à¤ªà¤° à¤\8fà¤\97à¥\8b à¤ªà¥\81षà¥\8dà¤\9fिà¤\95रण à¤\88-मà¥\87ल à¤­à¥\87à¤\9c à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¬à¤¾à¥¤\nà¤\89 à¤\96ाता à¤ªà¤° à¤\95à¥\8cनà¥\8b à¤¦à¥\81सर à¤\88मà¥\87ल à¤­à¥\87à¤\9cल à¤\9cाà¤\93 à¤\89 à¤¸à¥\87 à¤ªà¤¹à¤¿à¤²à¥\87, à¤°à¤\89à¤\86 à¤­à¥\87à¤\9cल à¤\97à¤\88ल à¤\88-मà¥\87ल à¤ªà¤° à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¨à¤¿à¤°à¥\8dदà¥\87श à¤\95à¥\87 à¤\85नà¥\81सरण à¤\95र à¤\95à¥\87 à¤\88-मà¥\87ल à¤ªà¤¤à¤¾ à¤\95à¥\87 à¤ªà¥\81षà¥\8dà¤\9fिà¤\95रण à¤\95रावà¥\87 à¤\95à¥\87 à¤ªà¤¡à¤¼à¥\80 à¤¤à¤¾à¤\95ि à¤ªà¤¤à¤¾ à¤\9aलà¥\87 à¤\95à¥\80 à¤¸à¤¹à¥\80 à¤®à¥\87à¤\82 à¤\89 à¤°à¤¾à¤\89रà¥\87 à¤\96ाता à¤¹।",
        "throttled-mailpassword": "पिछला {{PLURAL:$1|एक घंटा|$1 घंटा}} के अंदर एगो गुप्तशब्द पुनर्स्थापन ई-मेल भेजल जा चुकल बा।\nदुरुपयोग से बचावे खातिर {{PLURAL:$1|एक घंटा|$1 घंटा}} में सिर्फ एगो गुप्तशब्द पुनर्स्थापन ई-मेल भेजल जाई।",
        "mailerror": "ई-मेल भेजे में त्रुटि: $1",
        "acct_creation_throttle_hit": "राउर आइ॰पी पता से आईल आगंतुक पिछला चौबीस घंटा में इ विकि पर {{PLURAL:$1|एक खाता|$1 खाता}} बना चुकल बानी, इ समयावधि में इहे अधिकतम सीमा बा।\nअतः इ समय इ आइ॰पी पता के प्रयोग करे वाला आगंतुक अउर अधिक खाता नइखन बना सकत।",
-       "emailauthenticated": "राउर ई-मेल पता के पुष्ट दिनांक $2 के $3 बजे हो चुकल रहे।",
-       "emailnotauthenticated": "राउर ई-मेल पता के अभी तक प्रमाणिकरण नइखे भईल।\nनिम्नलिखित कउनो भी सुविधा खातिर रउआ ई-मेल ना भेजल जाई।",
+       "emailauthenticated": "$2 के $3 पर राउर ई-मेल पता के पुष्टीकरण हो चुकल बा।",
+       "emailnotauthenticated": "राà¤\89र à¤\88-मà¥\87ल à¤ªà¤¤à¤¾ à¤\95à¥\87 à¤\85भà¥\80 à¤¤à¤\95 à¤ªà¥\8dरमाणिà¤\95रण à¤¨à¤\87à¤\96à¥\87 à¤­à¤\88ल।\nनिमà¥\8dनलिà¤\96ित à¤\95à¤\89नà¥\8b à¤­à¥\80 à¤¸à¥\81विधा à¤\96ातिर à¤°à¤\89à¤\86 à¤\95à¥\87 à¤\95à¥\8cनà¥\8b à¤­à¥\80 à¤\88-मà¥\87ल à¤¨à¤¾ à¤­à¥\87à¤\9cल à¤\9cाà¤\88।",
        "noemailprefs": "इ सुविधा के प्रयोग करे खातिर आपन वरियता में एगो ई-मेल पता दिहीं।",
        "emailconfirmlink": "अपना ई-मेल पता कन्फर्म करीं",
        "invalidemailaddress": "राउर ई-मेल पता स्वीकार करल नइखे जा सकत काहे कि ई-मेल के जउन रुप दिखाई दे रहल बा उ गलत लागत बा।\nकृपया एगो सहि ई-मेल पता उपलब्ध कराईं या उ जगह के खाली छोड़ दिहीं।",
        "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": "रà¤\89à¤\86 à¤\88-मà¥\87ल à¤¸à¥\87 à¤ªà¥\8dरापà¥\8dत à¤\85सà¥\8dथायà¥\80 à¤\95à¥\8bड à¤¸à¥\87 à¤\96ाता à¤®à¥\87à¤\82 à¤ªà¥\8dरवà¥\87श à¤­à¤\88ल à¤¬à¤¾à¤¨à¥\80।\nà¤\96ाता à¤ªà¥\8dरवà¥\87श à¤\95à¥\87 à¤ªà¥\82रा à¤\95रà¥\87 à¤\96ातिर à¤°à¤\89à¤\86 à¤\87हाà¤\81 à¤\8fà¤\97à¥\8b à¤¨à¤¯à¤¾ à¤\97à¥\81पà¥\8dतशबà¥\8dद à¤¦à¥\87वà¥\87 à¤\95à¥\87 à¤ªà¤¡à¤¼à¥\80:",
+       "resetpass_announce": "लà¥\89à¤\97 à¤\87न à¤¸à¤®à¥\8dपà¥\82रà¥\8dण à¤\95रà¥\87 à¤\96ातिर à¤°à¤\89à¤\86 à¤\8fà¤\97à¥\8b à¤¨à¤¯à¤¾ à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड à¤¦à¥\87वà¥\87 à¤\95à¥\87 à¤¹à¥\8bà¤\88।",
        "resetpass_header": "खाता के गुप्तशब्द बदलीं",
        "oldpassword": "पुराना गुप्त-शब्द:",
        "newpassword": "नया गुप्त-शब्द:",
        "retypenew": "नया गुप्त-शब्द पुन: डालीं:",
        "resetpass_submit": "गुप्तशब्द बनाईं आ खाता में प्रवेश करीं",
        "changepassword-success": "राउर गुप्तशब्द सफलतापुर्वक बदल दिहल गईल बा!",
+       "changepassword-throttled": "रउआ हाले में कईयन बार खाता में प्रवेश करे के कोशिश कर चुकल बानी।\nकृपया $1 प्रतिक्षा करला के बाद फिर से प्रयास करब।",
        "resetpass_forbidden": "गुप्तशब्द बदलल नइखे जा सकत",
        "resetpass-no-info": "इ पन्ना के सिधे प्रयोग करे खातिर रउआ पहिले खाता में प्रवेश करे के पड़ी।",
        "resetpass-submit-loggedin": "गुप्त शब्द बदलीं",
        "resetpass-submit-cancel": "रद्द करीं",
        "resetpass-wrong-oldpass": "अवैद्य अस्थायी या वर्तमान गुप्तशब्द।\nरउआ पहिले हिं सफलतापूर्वक आपन गुप्तशब्द बदल चुकल बानी, या रउआ एगो अस्थायी गुप्तशब्द के अनुरोध कइले होखब।",
+       "resetpass-recycled": "रीसेट करे खातिर नया पासवर्ड में कृपया आपन वर्तमान पासवर्ड के अलावा कौनो अन्य पासवर्ड के प्रयोग करीं।",
+       "resetpass-temp-emailed": "अस्थाई ईमेल कोड के द्वारा रउआ लॉग इन भइल बानी।\nलॉग इन पूरा करे खातिर, रउआ एगो नया पासवर्ड सेट करे के पड़ी:",
        "resetpass-temp-password": "अस्थायी गुप्तशब्द:",
        "resetpass-abort-generic": "कउनो एक्सटेंशन द्वारा गुप्तशब्द में बदलाव रोक दिहल गईल बा।",
+       "resetpass-expired": "राउर पासवर्ड की वैधता अवधि समाप्त हो चुकल बा। कृपया लॉग इन करे खातिर एगो नया पासवर्ड सेट करीं।",
        "passwordreset": "गुप्तशब्द रिसेट करीं",
        "passwordreset-text-one": "आपन गुप्तशब्द के पुनर्स्थापित करे खातिर इ फॉर्म भरीं।",
        "passwordreset-text-many": "{{PLURAL:$1|आपन गुप्तशब्द पुनर्स्थापित करे खातिर निम्न में से कउनो एगो स्थान भरीं।}}",
        "savearticle": "पन्ना सुरक्षित करीं",
        "preview": "पूर्वावलोकन",
        "showpreview": "पूर्वावलोकन देखाईं",
-       "showlivepreview": "सीधा पूर्वावलोकन",
        "showdiff": "परिवर्तन देखाईं",
        "anoneditwarning": "'''चेतावनी:''' रउआ आपन खाता में प्रवेश नईखीं कईले। ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज कईल जाई।",
        "anonpreviewwarning": "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"",
        "permissionserrors": "अनुमति त्रुटी",
        "log-fulllog": "पूरा लॉग देखीं",
        "edit-conflict": "संपादन अंतर्विरोध",
-       "postedit-confirmation": "राउर सम्पादन सुरक्षित कर दिहल गईल।",
+       "postedit-confirmation-created": "पन्ना बना दिहल गईल।",
+       "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": "कउनो ना",
        "prefs-editing": "संपादन",
        "searchresultshead": "खोज",
        "savedprefs": "राउर वरीयताएँ सुरक्षित कर दिहल गईल।",
+       "timezoneregion-africa": "अफ़्रीका",
+       "timezoneregion-america": "अमेरिका",
+       "timezoneregion-antarctica": "अंटार्कटिका",
+       "timezoneregion-arctic": "आर्कटिक",
        "timezoneregion-asia": "एशिया",
+       "timezoneregion-atlantic": "एटलांटिक महासागर",
        "timezoneregion-australia": "अस्ट्रेलिया",
        "timezoneregion-europe": "यूरोप",
        "timezoneregion-indian": "हिंद महासागर",
        "yourrealname": "असली नाम",
        "yourlanguage": "भाषा:",
        "prefs-preview": "पूर्वावलोकन",
+       "action-move": "ई पन्ना के स्थांतरण करीं",
+       "action-delete": "ई पन्ना के मिटाईं",
        "recentchanges": "तुरंत भईल परिवर्तन",
        "recentchanges-legend": "हाल के परिवर्तन संबंधी विकल्प",
        "recentchanges-label-newpage": "ई सम्पादन से एगो नवका पृष्ठ तैयार हो गइल बा",
        "recentchanges-label-minor": "ई एगो छोटा सम्पाद बा",
+       "recentchanges-legend-heading": "'''कुंजी:'''",
        "rcshowhideminor": "$1 छोट सम्पादन",
+       "rcshowhideminor-show": "दिखाईं",
+       "rcshowhideminor-hide": "छुपाँई",
        "diff": "अन्तर",
        "hist": "इति",
        "hide": "छुपाँई",
        "recentchangeslinked": "सम्बन्धित बदलाव",
        "recentchangeslinked-feed": "सम्बन्धित बदलाव",
        "recentchangeslinked-toolbox": "सम्बन्धित बदलाव",
+       "recentchangeslinked-page": "पन्ना नाम:",
        "upload": "फाईल लादीं",
+       "filedesc": "सारांश",
+       "fileuploadsummary": "सारांश:",
+       "filesource": "स्रोत:",
+       "unknown-error": "अज्ञात त्रुटि उत्पन्न हो गईल बा।",
        "file-anchor-link": "फ़ाइल",
        "filehist": "पन्ना के इतिहास",
        "filehist-deleteall": "सब मिटाईं",
        "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 c76d3b9..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": "পরিভ্রমণ মেনু",
        "difference-missing-revision": "$1 পার্থক্যের {{PLURAL:$2|একটি সংস্করণ|$2টি সংস্করণসমূহ}} খুজে পাওয়া যাচ্ছে না।\n\nসাধারণত মুছে ফেলা হয়েছে এমন পাতার মেয়াদ উত্তীর্ণ ইতিহাস পাতার লিংক ওপেন করার কারণে এটি হতে পারে। \n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] বিস্তারিত তথ্য জানা যাবে।",
        "searchresults": "অনুসন্ধানের ফলাফল",
        "searchresults-title": "\"$1\" অনুসন্ধানের ফলাফল",
-       "toomanymatches": "একই রকম অনেকগুলো উত্তর এসেছে, অনুগ্রহ করে অন্য কোন কুয়েরি দিন",
        "titlematches": "নিবন্ধের শিরোনাম মিলেছে",
        "textmatches": "পাতার লেখার সাথে মিলেছে",
        "notextmatches": "কোন পাতার লেখার সাথে মিলে নেই",
        "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 d7f080b..0198e96 100644 (file)
@@ -14,7 +14,8 @@
                        "VIGNERON",
                        "Y-M D",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Pymouss"
                ]
        },
        "tog-underline": "Liammoù islinennet",
        "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ñ",
        "userlogin-loggedin": "Kevreet oc'h dija evel {{GENDER:$1|$1}}.\nImplijit ar furmskrid amañ dindan evit kevreañ evel un implijer all.",
        "userlogin-createanother": "Krouiñ ur gont all",
        "createacct-emailrequired": "Chomlec'h postel",
-       "createacct-emailoptional": "Chomlec'h postel (direizh)",
+       "createacct-emailoptional": "Chomlec'h postel (diret)",
        "createacct-email-ph": "Skrivit ho chomlec'h postel",
        "createacct-another-email-ph": "Ebarzhiñ ur chomlec'h postel",
        "createaccountmail": "Implijout ur ger-tremen dibad ha kas anezhañ d'ar chomlec'h postel diferetDre bostel",
        "wrongpasswordempty": "Ger-tremen ebet. Lakait unan mar plij.",
        "passwordtooshort": "{{PLURAL:$1|1 arouezenn|$1 arouezenn}} hir a rank bezañ ar gerioù-tremen da nebeutañ.",
        "password-name-match": "Rankout a ra ho ker-tremen bezañ disheñvel diouzh hoc'h anv implijer.",
-       "password-login-forbidden": "Berzet eo ober gant an anv-implijer hag ar ger-tremen-mañ.",
+       "password-login-forbidden": "Berzet eo ober gant an anv implijer hag ar ger-tremen-mañ.",
        "mailmypassword": "Adderaouekaat ar ger-tremen",
        "passwordremindertitle": "Ho ker-tremen berrbad nevez evit {{SITENAME}}",
        "passwordremindertext": "Unan bennak (c'hwi moarvat gant ar chomlec'h IP $1)\nen deus goulennet ma vo kaset dezhañ ur ger-tremen nevez evit {{SITENAME}} ($4).\nSavet ez eus bet ur ger-tremen da c'hortoz evit an implijer \"$2\" hag a zo \"$3\".\nMard eo se a felle deoc'h ober e vo ret deoc'h kevreañ ha cheñch ho ker-tremen bremañ. Didalvez e vo ho ker ker-tremen da c'hortoz a-benn {{PLURAL:$5|un devezh|$5 devezh}}\n\nMard eo bet graet ar goulenn gant unan bennak all, pe m'hoc'h eus soñj eus ho ker-tremen bremañ ha\nma ne fell ket deoc'h cheñch anezhañ ken, e c'hallit leuskel ar postel-mañ a-gostez ha kenderc'hel d'ober gant ho ker-tremen kozh.",
        "difference-missing-revision": "!!{{PLURAL:$2|Un adweladur|$2 adweladurioù}} eus an disheñvelder ($1) {{PLURAL:$2|n'eo ket bet kavet|n'int ket bet adkavet}}.\n\nC'hoarvezout a ra peurliesañ pa vez heuliet ul liamm disheñvel dispredet war-zu ur bajenn zo bet dilamet.\nGallout a reot kavout munudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} renabl an dilamadurioù].",
        "searchresults": "Disoc'hoù enklask",
        "searchresults-title": "Disoc'hoù klask evit \"$1\"",
-       "toomanymatches": "Re a respontoù a glot gant ar goulenn, klaskit gant ur goulenn all",
        "titlematches": "Klotadurioù gant an titloù",
        "textmatches": "Klotadurioù en testennoù",
        "notextmatches": "N'emañ ar ger(ioù) goulennet e testenn pennad ebet",
        "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ù staliet",
        "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ù",
        "expand_templates_remove_nowiki": "Diverkañ a ra ar balizennoù <nowiki> en disoc'h",
        "expand_templates_generate_xml": "Gwelet ar gwezennadur XML",
        "expand_templates_generate_rawhtml": "Diskouez an HTML kriz",
-       "expand_templates_preview": "Rakwelet"
+       "expand_templates_preview": "Rakwelet",
+       "pagelang-name": "Pajenn",
+       "pagelang-language": "Yezh",
+       "pagelang-use-default": "Implijout ar yezh dre ziouer",
+       "pagelang-select-lang": "Dibab ar yezh",
+       "right-pagelang": "Cheñch yezh ar bajenn"
 }
index db5235c..0c30961 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",
        "difference-missing-revision": "{{PLURAL:$2|Jedna izmjena|$2 izmjene}} od ove razlike ($1) ne {{PLURAL:$2|postoji|postoje}}.\n\nOvo se obično dešava kada pratite zastarjelu vezu na stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokol brisanja].",
        "searchresults": "Rezultati pretrage",
        "searchresults-title": "Rezultati pretrage za \"$1\"",
-       "toomanymatches": "Pronađeno je previše rezultata, molimo pokušajte unijeti konkretniji izraz",
        "titlematches": "Naslov članka odgovara",
        "textmatches": "Tekst stranice odgovara",
        "notextmatches": "Tekst članka ne odgovara",
        "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-lasttime": "Datum posljednje izmjene",
        "pageinfo-edits": "Ukupan broj izmjena",
        "pageinfo-authors": "Ukupan broj različitih autora",
-       "pageinfo-recent-edits": "Broj nedavnih izmjena (u poslednjih $1)",
+       "pageinfo-recent-edits": "Broj nedavnih izmjena (u posljednjih $1)",
        "pageinfo-recent-authors": "Broj nedavnih različitih autora",
        "pageinfo-magic-words": "{{PLURAL:$1|Čarobna riječ|Čarobne riječi}} ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($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 951f810..a01a3c1 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ó",
        "token_suffix_mismatch": "'''S'ha rebutjat la vostra modificació perquè el vostre client ha fet malbé els caràcters de puntuació en el testimoni d'edició. S'ha rebutjat la modificació per a evitar la corrupció del text de la pàgina. Açò passa a vegades quan s'utilitza un servei web de servidor intermediari anònim amb problemes.'''",
        "edit_form_incomplete": "'''Certes parts del formulari de modificació no han arribat al servidor, verifiqueu que les vostres modificacions estan intactes i proveu-ho de nou.'''",
        "editing": "Edició de la pàgina «$1»",
-       "creating": "S'està creant $1",
-       "editingsection": "Edició de «$1» (secció)",
-       "editingcomment": "Edició de «$1» (secció nova)",
+       "creating": "Creació de la pàgina «$1»",
+       "editingsection": "Edició de la pàgina «$1» (secció)",
+       "editingcomment": "Edició de la pàgina «$1» (secció nova)",
        "editconflict": "Conflicte d'edició: $1",
        "explainconflict": "Algú més ha canviat aquesta pàgina des que l'heu editada.\nL'àrea de text superior conté el text de la pàgina com existeix actualment.\nEls vostres canvis es mostren en l'àrea de text inferior.\nHaureu de fusionar els vostres canvis en el text existent.\n'''Només''' el text de l'àrea superior es desarà quan premeu el botó «{{int:savearticle}}».",
        "yourtext": "El vostre text",
        "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",
        "revdelete-nooldid-title": "La revisió objectiu no és vàlida",
        "revdelete-nooldid-text": "No heu especificat unes revisions objectius per a realitzar aquesta\nfunció, la revisió especificada no existeix, o bé esteu provant d'amagar l'actual revisió.",
        "revdelete-no-file": "El fitxer especificat no existeix.",
-       "revdelete-show-file-confirm": "Esteu segurs que voleu veure una revisió esborrada del fitxer «<nowiki>$1</nowiki>» de $2 a $3?",
+       "revdelete-show-file-confirm": "Esteu segur que voleu veure una revisió esborrada del fitxer «<nowiki>$1</nowiki>» de $2 a $3?",
        "revdelete-show-file-submit": "Sí",
        "revdelete-selected-text": "{{PLURAL:$1|Versió seleccionada|Versions seleccionades}} de [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Versió seleccionada|Versions seleccionades}} del fitxer [[:$2]]:",
        "difference-missing-revision": "{{PLURAL:$2|Una revisió|$2 revisions}} d'aquesta diferència ($1) no {{PLURAL:$2|s'ha|s'han}} trobat.\n\nAixò passa generalment en seguir un enllaç obsolet de diferències a una pàgina que s'ha suprimit.\nEs pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre de supressions].",
        "searchresults": "Resultats de la cerca",
        "searchresults-title": "Resultats de la recerca de «$1»",
-       "toomanymatches": "S'han retornat masses coincidències. Proveu-ho amb una consulta diferent.",
        "titlematches": "Coincidències de títol de la pàgina",
        "textmatches": "Coincidències de text de pàgina",
        "notextmatches": "No hi ha cap coincidència de text de pàgina",
        "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",
        "move-page-legend": "Reanomena la pàgina",
        "movepagetext": "Amb el formulari següent reanomenareu una pàgina, movent tot el seu historial al nou nom.\nEl títol anterior es convertirà en una pàgina de redirecció al nou títol.\nPodeu actualitzar automàticament les redireccions que apuntin al títol original.\nSi no ho feu, assegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].\nSerà de la vostra responsabilitat verificar que els enllaços segueixin apuntant cap a on se suposa que ho han de fer.\n\nTingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció sense més historial.\nAixò significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.\n\n'''Atenció!'''\nAçò pot ser un canvi dràstic i inesperat en una pàgina que sigui popular; \nassegureu-vos d'entendre les conseqüències que comporta abans de seguir endavant.",
        "movepagetext-noredirectfixer": "Amb el formulari següent podeu reanomenar una pàgina movent tot el seu historial al nom nou.\nEl títol anterior es convertirà en una pàgina de redirecció al nou títol. \nAssegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].\nÉs responsabilitat vostra assegurar que els enllaços continuen apuntant cap a on se suposa que han d'anar. \n\nTingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció i no tingui més historial. \nAixò significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.\n \n'''Atenció!''' \nAixò pot ser un canvi dràstic i inesperat per una pàgina popular; \nassegureu-vos que sabeu el que feu abans de continuar.",
-       "movepagetalktext": "La pàgina de discussió associada també serà traslladada automàticament '''tret que''':\n* Ja existeix una pàgina de discussió no buida amb el nou nom, o\n* Desactiveu la opció de més avall.\n\nEn aquests casos, haureu de traslladar o fusionar la pàgina manualment si ho desitgeu.",
+       "movepagetalktext": "La pàgina de discussió associada també serà traslladada automàticament '''tret que''':\n* Ja existeixi una pàgina de discussió no buida amb el nou nom, o\n* Desactiveu l'opció de més avall.\n\nEn aquests casos, haureu de traslladar o fusionar la pàgina manualment si ho desitgeu.",
        "movearticle": "Reanomena la pàgina",
        "moveuserpage-warning": "'''Atenció:''' Esteu a punt de moure una pàgina d'usuari. Tingueu en compte que només la pàgina es desplaçarà i que el compte d'usuari ''no'' canviarà de nom.",
        "movecategorypage-warning": "<strong>Avís:</strong> Esteu a punt de moure una pàgina de categoria. Tingueu en compte que només es moure la pàgina i qualsevol de les pàgines a l'antiga categoria <em>no</em> es recategoritzarà automàticament en la nova.",
        "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ó",
+       "version-skin-colheader-name": "Aparença",
        "version-ext-colheader-version": "Versió",
        "version-ext-colheader-license": "Llicència",
        "version-ext-colheader-description": "Descripció",
        "expand_templates_remove_nowiki": "Suprimeix l'etiqueta <nowiki> en el resultat",
        "expand_templates_generate_xml": "Mostra l'arbre XML",
        "expand_templates_generate_rawhtml": "Mostra l'HTML sense filtrar",
-       "expand_templates_preview": "Previsualitza"
+       "expand_templates_preview": "Previsualitza",
+       "pagelanguage": "Selector de l'idioma de les pàgines",
+       "pagelang-name": "Pàgina",
+       "pagelang-language": "Idioma",
+       "pagelang-use-default": "Utilitza l'idioma per defecte",
+       "pagelang-select-lang": "Selecciona un idioma",
+       "right-pagelang": "Canvia l'idioma de la pàgina",
+       "action-pagelang": "canvia l'idioma de la pàgina"
 }
index 9b44207..f69fec2 100644 (file)
@@ -5,7 +5,8 @@
                        "Xqt",
                        "Yejianfei",
                        "Hakka",
-                       "아라"
+                       "아라",
+                       "Mywood"
                ]
        },
        "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": "動作",
        "namespaces": "命名空間",
        "variants": "變體",
        "history_short": "歷史",
        "updatedmarker": "趁我最後蜀回訪問開始更新",
        "printableversion": "會拍印其版本",
-       "permalink": "永久鏈接",
+       "permalink": "固定链接",
        "print": "拍印",
        "view": "覷蜀覷",
        "edit": "修改",
        "searchprofile-everything": "所有乇",
        "searchprofile-advanced": "高級",
        "searchprofile-articles-tooltip": "敆$1𡅏尋討",
-       "searchprofile-project-tooltip": "敆$1𡅏尋討",
        "searchprofile-images-tooltip": "尋討文件",
        "search-result-size": "$1 ({{PLURAL:$2|$2萆單詞}})",
        "search-redirect": "(重定向 $1)",
        "searchrelated": "相關其",
        "searchall": "全部",
        "showingresults": "顯示趁#<b>$2</b>開始其{{PLURAL:$1|'''$1'''萆結果}}。",
-       "showingresultsnum": "顯示趁#<b>$2</b>開始其{{PLURAL:$3|'''$3'''萆結果}}。",
        "preferences": "設定",
        "mypreferences": "我其設定",
        "prefs-edits": "修改數量:",
        "prefs-files": "文件",
        "youremail": "電子郵件:",
        "username": "{{GENDER:$1|用戶名}}:",
-       "uid": "{{GENDER:$1|用戶}}ID:",
        "prefs-registration": "開賬戶時間",
        "yourrealname": "真實姓名:",
        "yourlanguage": "語言:",
        "alllogstext": "所有會使趁{{SITENAME}}獲得其日誌其都合併顯示。\n汝會使使揀選日誌類型、用戶名(大小寫敏感),或者受影響其頁面(大小寫敏感)其方法來縮小視角。",
        "logempty": "日誌底裏討要𣍐著項目",
        "allpages": "所有頁面",
-       "alphaindexline": "$1遘$2",
        "nextpage": "下蜀頁($1)",
        "prevpage": "前蜀頁($1)",
        "allpagesfrom": "使下底其乇開始顯示頁:",
        "whatlinkshere-filters": "過濾器",
        "blockip": "封鎖用戶",
        "blockiptext": "使下底其表單來封鎖趁指定IP地址或者用戶名其寫入訪問。茲囇使廮𡅏防止破壞,固加著符合[[{{MediaWiki:Policy-url}}|政策]]。敆下底填底指定其原因(比如講:引用乞破壞其頁面)。",
-       "ipadressorusername": "IP地址或者用戶名:",
+       "ipaddressorusername": "IP地址或者用戶名:",
        "ipbexpiry": "過期:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*普通封鎖原因\n** 加添假其信息\n** 塗掉頁面內容\n** 發佈不實信息\n** 亂寫文字\n** 做獃/騷擾\n** 亂開賬戶\n** 亂起用戶名",
        "previousdiff": "← 舊其修改",
        "nextdiff": "新其修改 →",
        "file-nohires": "無更高決斷",
-       "showhidebots": "($1機器人)",
        "ilsubmit": "尋討",
        "bydate": "按日期",
        "metadata": "元數據",
index 2bd08b1..3ee38c1 100644 (file)
@@ -7,7 +7,8 @@
                        "Mega programmer",
                        "Sasan700",
                        "Умар",
-                       "아라"
+                       "아라",
+                       "Kaganer"
                ]
        },
        "tog-underline": "КӀел сиз хьакха хьажорган:",
@@ -39,7 +40,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": "Навигацин меню",
        "login-abort-generic": "Сестемин довзийта тарцаделира",
        "loginlanguagelabel": "Мотт: $1",
        "suspicious-userlogout": "Хьан сеанс чекхъяккха дина дехаш кхочуш цадина, иза нийса йоцу браузерца дар бахьнехь я прокси кэш еш хилар бахьнехь.",
+       "createacct-another-realname-tip": "Декъашхочун бакъ цӀе (яз ца йича мега).\nАхьа и язяхь, агӀона хийцам бича хьан цӀе гуш хира ю.",
        "pt-login": "ЧугӀо",
        "pt-login-button": "ЧугӀо",
        "pt-createaccount": "Кхолла декъашхочун дӀаяздар",
        "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": "ХӀара агӀо лело системин чугӀо.",
        "loginreqlink": "Логин",
        "loginreqpagetext": "Ахьа да деза $1, кхин агӀонаш хьажа.",
        "accmailtitle": "Пароль дlаяхьийтина.",
-       "accmailtext": "Пароль декъашхочуьна [[User talk:$1|$1]], йина ша шех хитта делла чу элпашах, дlаяхийтина хьокху $2 адрес тӀе.\n\nЧуваьлла/яла чул тӀехьа , кху гlирса чохь шуьга хийцалур ю ''[[Special:ChangePassword|шай пароль]]''.",
+       "accmailtext": "Пароль декъашхочуьнан [[User talk:$1|$1]], йина ша шех хитта делла чу элпашах, дӀаяхийтина хьокху $2 адрес тӀе.\n\nЧуваьлла/яла чул тӀехьа , кху гӀирса чохь шуьга хийцалур ю ''[[Special:ChangePassword|шай пароль]]''.",
        "newarticle": "(Kерла)",
-       "newarticletext": "Хьо веана хьажоригци хӀокху агӀон тӀе, хӀара агӀо хӀинца йоцаш ю.\nНагахь иза кхолла лаахь, хӀотта де лахо гуш долу корехь йоза (мадарра хьажа. [$1 гӀон агӀон чу]).\nНагахь гӀалат даьлла цахууш кхечехь кхузе, атта тӀе тӀаӀа йе '''юха йоккхуриг''' хьай гӀирса тӀехь.",
+       "newarticletext": "ХӀара агӀо хӀинца йоцаш ю.\nНагахь иза кхолла лаахь, хӀотта де лахо гуш долу корехь йоза (мадарра хьажа. [$1 гӀон агӀон чу]).\nНагахь гӀалат даьлла цахууш кхечехь кхузе, атта тӀе тӀаӀа йе '''юха йоккхуриг''' хьай браузеран тӀехь.",
        "anontalkpagetext": "----''ХӀара дийцаре агӀо къайлаха декъашхочуьна ю, хӀинца дӀаяздар доцу, я лелош воцуш/йоцуш.\nЦундела иза вовзийта/йовзийта лелош ду терахьца IP-адрес.\nИза терахь долу меттиг хила мега кхечу декъашхойчух терра.\nНагахь хьо къайлах волу декъашхо валахь хьайна хаам кхаьчна аьлла хеташн, хьуна хьажийна доцуш, дехар до, кхолла хьай меттиг кху чохь[[Special:UserLogin/signup|дӀаяздар кхоллар]] я [[Special:UserLogin|системин чугӀо]],",
        "noarticletext": "Хlокх хан чохь кху агlонца йоза дац.\nШуьга далундерг [[Special:Search/{{PAGENAME}}|лахар ишта хьехош йолу цlе]] кхечу яззамашкахь,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} лахар кхечу тептаршкахь],\nйа '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} кхолла ишта цlе йолу агlо]'''</span>.",
        "noarticletext-nopermission": "ХӀокх хан чохь кху агӀонца йоза дац.\nШуьга далундерг [[Special:Search/{{PAGENAME}}|лахар ишта хьехош йолу цӀе]] кхечу яззамашкахь,\nйа <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} лаха оцуьнах терадерг кхечу тептаршкахь].</span>",
        "copyrightwarning": "Тергаме хьажа, массо яззаман чутухуш долу йозан хийцам хьажарехь бу, арахоьцушсанна оцу бакъойалар хьоляхь $2 (хьаж. $1).\nНагахь хьо лууш вацахь хьай йозанаш маьрша даржа а кхечаьрга хийцам байта, мадаха уьш кху чу.<br />\nИшта чlагlо йой ахьа, айхьа далош долучуьн хьо куьг да ву аьлла, йа хьаэцна цхьан\nхьостера, хийцам ба а дlаса даржада а чулацам болуш.<br />\n'''МАТОХИЙШ БАКЪО ЙОЦУ ГlИРСАШ КХУ ЧУ, КУЬГ ДЕ БАКЪО ЛАР ЙЕШ ЙОЛУ!'''",
        "readonlywarning": "'''ДӀАХЬЕДО. ГӀирса бух блоктоьхна оьшуш долучу хьаштан, цундера хӀинц хьоьга дӀа ца йазло хийцам.\nХила мега, ахьа Ӏалаш дан дезаш хьайн йоза, юха тӀаьхьо леладан иза йоза.'''\n\nКуьйгалхочо блоктоьхна гӀирса бух, цо битина кхетош хӀара хаам: $1",
        "protectedpagewarning": "'''Дlахьедар. Хlара агlо гlаролла дина ю хийцам цабайта, иза хийца йа нисйа а бакъо йолуш адаманкуьйгалла лелош болу декъашхой бе бац.'''\nЛахахьа гойту хаамаш тlаьхьара бина болу хийцамна тептар чура:",
+       "semiprotectedpagewarning": "'''ДӀахьедо.''' ХӀара агӀо гӀаролла йина ю; дӀабазбиначу декъашхошка бе цӀе хийцалуш яц.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
        "cascadeprotectedwarning": "<div id=\"cascadeprotectedwarning\" style=\"border:1px solid #ee0; padding:10px; background:#ffa; margin-bottom:1em\">[[file:Padlock.svg|left|25px|ДовгӀа|link=]]\nХӀара агӀо тада бакъо йолуш [[Project:Куьйгалхой|куьйгалхой]] бу, хӀунда аьлча и агӀо латийна кхечу агӀонашца хӀоттделлачу гӀаролле:</div>",
-       "templatesused": "{{PLURAL:$1|1=Кеп, лелийна|Кепаш, лелош ду}} хlокху агlон башхонца:",
-       "templatesusedpreview": "{{PLURAL:$1|1=Кеп, лелошдолу|Кепаш, лелошдолу}} оцу хьалх хьожучу агlонца:",
+       "templatesused": "{{PLURAL:$1|1=Кеп, лелийна|Кепаш, лелош ю}} хӀокху агон башхонца:",
+       "templatesusedpreview": "{{PLURAL:$1|1=Кеп, лелошдолу|Кепаш, лелойлу}} оцу хьалх хьожучу агӀонца:",
        "templatesusedsection": "ХӀокху декъан чохь {{PLURAL:$1|1=лелош йолу кеп|лелош йолу кепаш}}:",
        "template-protected": "(гlароллийца)",
        "template-semiprotected": "(дуьззина доцуш гlаролла)",
        "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 карина",
        "revdelete-reason-dropdown": "Даржина долу дӀаяккхаран баьхьанаш \n** Авторан бакъонаш талхор\n** Бита йиш йоцу шех лаьцна хаам\n** Бакъдоцург зуламан хаам",
        "revdelete-otherreason": "Кхин бахьна/тӀетохар:",
        "revdelete-reasonotherlist": "Кхин бахьна",
-       "revdelete-edit-reasonlist": "Бахьанин список нисяр",
+       "revdelete-edit-reasonlist": "Бахьанин могӀам нисбар",
        "revdelete-offender": "АгӀона версен автор:",
        "suppressionlog": "Хьулдаран тептар",
        "mergehistory": "Нисдарин истори цхьаьнатохар",
        "showingresultsheader": "{{PLURAL:$5|1=Хилам '''$1''' кху '''$3'''|Хиламаш '''$1 — $2''' кху '''$3'''}} оцун '''$4'''",
        "search-nonefound": "Дехаре терра цхьа хӀума ца карийна.",
        "powersearch-legend": "Шуьро лахар",
-       "powersearch-ns": "Цlераши анахь лахар:",
+       "powersearch-ns": "ЦӀерийн меттигашкахь лахар:",
        "powersearch-togglelabel": "Билгалдан:",
        "powersearch-toggleall": "Массо",
        "powersearch-togglenone": "ХӀумма цаоьшу",
+       "powersearch-remember": "Дагахь дита хаьржинарг кхечу хенахь лаха",
        "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|декъашхо|декъашхой}}:",
        "http-read-error": "Ешаран гӀалат HTTP.",
        "http-timed-out": "Хьежаран хан чекхели HTTP-жоп дехаран.",
        "http-curl-error": "URLан гӀалат: $1",
+       "upload-curl-error6": "Билгал дина адресе хьажа цало.",
        "upload-curl-error28": "Чуйоккху хан чеккхелла",
        "license": "Бакъойалар:",
        "license-header": "Бакъойалар",
        "filedelete-otherreason": "Кхин бахьна:",
        "filedelete-reason-otherlist": "Кхин бахьна",
        "filedelete-reason-dropdown": "* Даржина долу дӀаяккхаран баьхьанаш \n** Авторан бакъонаш талхор\n** ЦхӀатера файлаш хилар",
-       "filedelete-edit-reasonlist": "Бахьанин список нисяр",
+       "filedelete-edit-reasonlist": "Бахьанин могӀам нисбар",
        "filedelete-maintenance-title": "Файл дӀаяккха цало",
        "mimesearch": "MIME хула лаха",
        "mimesearch-summary": "ХӀокху агӀоно йиш хуьлуьйту MIME-тайпан файлаш харжа. Яздеш долу формат: чулацаман тайп/бухара тайп, масала  <code>image/jpeg</code>.",
        "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": "Категори дӀаяйина ю",
        "email-legend": "{{grammar:genitive|{{SITENAME}}}} кхечу декъашхочунга кехат дахьийтар",
        "emailfrom": "Хьаьнгара",
        "emailto": "Хьаьнга:",
+       "emailsubject": "Къамел:",
        "emailmessage": "Хаам:",
        "emailsend": "ДӀадахьийта",
        "emailccme": "Соьга а кхосса хааман копи.",
        "deleteotherreason": "Кхин бахьна/тӀетохар:",
        "deletereasonotherlist": "Кхин бахьна",
        "deletereason-dropdown": "* Даржина долу дӀаяккхаран баьхьанаш \n** зулма  \n** авторан лаамца\n** авторан бакъонаш талхор",
-       "delete-edit-reasonlist": "Бахьанин список нисяр",
+       "delete-edit-reasonlist": "Бахьанин могӀам нисбар",
        "deleting-backlinks-warning": "'''ДӀахьедар:''' Ахьа дӀайоккхуш йолчун тӀе товжийна [[Special:WhatLinksHere/{{FULLPAGENAME}}|кхин агӀонаш]] ю.",
        "rollback": "Юхабаккха хийцам",
        "rollback_short": "Юхаяккхар",
        "modifiedarticleprotection": "агlонан гlаролли локхалла хийцина «[[$1]]»",
        "unprotectedarticle": "ГӀоролла дӀадаьстина «[[$1]]»",
        "movedarticleprotection": "«[[$2]]» агӀона тӀера гӀаролла «[[$1]]» агӀона тӀе даьккхина",
-       "protect-title": "Оцунна «$1» гӀоралла дар",
+       "protect-title": "ГӀоралла хӀоттор: «$1»",
+       "protect-title-notallowed": "ГӀораллин бараме хьажар «$1»",
        "prot_1movedto2": "«[[$1]]» цӀе хийцина → «[[$2]]»",
+       "protect-badnamespace-title": "ГӀораладан цалуш йолу цӀерийн меттиг",
+       "protect-badnamespace-text": "ХӀокху цӀерийн меттигехь йолу агӀонашна гӀараладан цало.",
+       "protect-norestrictiontypes-title": "ГӀараладан цалуш йолу агӀо",
        "protect-legend": "Бакъде гӀоралла дар",
        "protectcomment": "Бахьна:",
        "protectexpiry": "Чекхйолу:",
        "protect-otherreason": "Кхин бахьна/тӀетохар:",
        "protect-otherreason-op": "Кхин бахьна",
        "protect-dropdown": "* ГӀоралла дарна баьхьаш \n** сих-сиха зулам дар \n** дуккха спам хилар\n** нисдаршан тӀом \n** гӀараялл агӀо",
-       "protect-edit-reasonlist": "Бахьанин список нисяр",
+       "protect-edit-reasonlist": "Бахьанин могӀам нисбар",
        "protect-expiry-options": "1 сахьт:1 hour,1 де:1 day,1 кӀиран:1 week,2 кӀиран:2 weeks,1 бутт:1 month,3 бутт:3 months,6 бутт:6 months,1 шо:1 year,цlкъа:infinite",
        "restriction-type": "Бакъонаш:",
        "restriction-level": "ТӀекхочаран локхалла:",
        "contribsub2": "Къинхьегам $1 ($2)",
        "contributions-userdoesnotexist": "«$1» декъашхочун дӀаяздар дӀаяздина яц.",
        "nocontribs": "Дехарца хийцамаш цакарий.",
-       "uctop": " (тlаьхьара)",
+       "uctop": "(карара)",
        "month": "Баттаца (я хьалхе):",
        "year": "Шерачохь (я хьалхе):",
        "sp-contributions-newbies": "Гайта бекъ къинхьегам, керла дlабазбиначара бина болу",
        "istemplate": "юкъаялийнарш",
        "isimage": "Файлан хьажораг",
        "whatlinkshere-prev": "{{PLURAL:$1|1=хьалхайодарг|хьалхайодарш}} $1",
-       "whatlinkshere-next": "{{PLURAL:$1|тlаьхьайогlург|тlаьхьайогlурш|тlаьхьайогlурш}} $1",
+       "whatlinkshere-next": "{{PLURAL:$1|тӀаьхьайогӀург|тӀаьхьайогӀурш}} $1",
        "whatlinkshere-links": "← хьажоргаш",
        "whatlinkshere-hideredirs": "$1 дӀасахьажорш",
        "whatlinkshere-hidetrans": "$1 латораш",
        "ipbsubmit": "Блоктоха хӀокху декъашхочун/адресна",
        "ipbother": "Кхин хан:",
        "ipboptions": "2 сахьат:2 hours,1 де:1 day,3 де:3 days,1 кlиран:1 week,2 кlиран:2 weeks,1 бутт:1 month,3 бутт:3 months,6 бутт:6 months,1 шо:1 year,цӀкъа:infinite",
+       "ipbhidename": "Нисдарийн а могӀаман а чура декъашхочун цӀе хьул йе",
        "ipbwatchuser": "ТӀетоха тергаме могӀам юкъа цуьнан долахь йолу агӀо а цуьнан дийцаре агӀо а",
        "ipb-disableusertalk": "Цамагдо шин дийцаре агӀо та я блоктоьхна хан чекхъяллалц",
        "ipb-change-block": "Юхаблоктоха декъашхочун оьцу хийцамашца",
        "ipb-confirm": "Бакъде блоктохар",
+       "badipaddress": "Магийна доцу IP адрес",
        "blockipsuccesssub": "Блоктохар чакхдели",
        "blockipsuccesstext": "[[Special:Contributions/$1|«$1»]] {{GENDER:$1|блоктоьхна}}.<br />\nХьажа. [[Special:BlockList|блоктоьхна IP-адресийнн могӀам]].",
        "ipb-blockingself": "Хьо хьайна блоктоха гӀерта! Лаьий хьона и кхочушдан?",
-       "ipb-edit-dropdown": "Бахьанин список нисяр",
+       "ipb-edit-dropdown": "Бахьанин могӀам нисбар",
        "ipb-unblock-addr": "ДӀаякхаблок $1",
        "ipb-unblock": "дӀаякхаблок декъашхонтӀера я IP-адрес тӀера",
        "ipb-blocklist": "Блоктоьхнарш",
        "block-log-flags-noautoblock": "ша блоктухарг дӏаяйина",
        "block-log-flags-noemail": "цамаго кехаташ кхехӀита",
        "block-log-flags-nousertalk": "шин дийцаре агӀо тая лууш дац",
+       "block-log-flags-angry-autoblock": "латина шуьйра автоблоктохар",
        "block-log-flags-hiddenname": "декъашхочун цӀе къайлаяьккхина",
+       "range_block_disabled": "Куьйгалхошна диапазонашна блоктоха цамага до.",
        "ipb_expiry_invalid": "Дешдерг дан нийса йоцу хан.",
+       "ipb_already_blocked": "«$1» хӀинцале блоктоьхна ю.",
        "ipb-needreblock": "ХӀокху $1 декъашхочун {{GENDER:$1|блоктоьхна ю}}. Лаьий хьуна блоктохаран параметраш хийца?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Кхин блоктохар|Кхин блоктохарш}}",
        "unblock-hideuser": "Декъашхочун тӀера блокдӀаяккха хьа таро яц, цуна цӀе хьулйина хилар бахьанехь.",
+       "ipb_cant_unblock": "ГӀалат: блоктохар цакарий $1. Иза хӀинцале дӀаяьккхина хила мега.",
        "ip_range_invalid": "IP-адресийн магийна йоцу диапазон.",
+       "proxyblocker": "Проксин блоктохар",
+       "lockdb": "Хаамийн база еша бен цалуш йе",
+       "unlockdb": "Хаамийн базан чу дӀаяздарш дан аьтту меттахӀотта бе",
+       "lockbtn": "Хаамийн база еша бен цалуш йе",
+       "unlockbtn": "Хаамийн базан чу дӀаяздарш дан аьтту меттахӀотта бе",
+       "locknoconfirm": "Ахьа бакъдеш йолу меттиге билгало йилина яц.",
+       "lockdbsuccesssub": "Хаамийн базан блоктоьхна",
+       "unlockdbsuccesssub": "Хаамийн базан тӀера блокдӀаяьккхина",
        "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": "'''Тергам бе.''' Хьо декъашхочун агӀона цӀе хийца гӀерта. Дехар до, тергам бе, декъашхочун агӀона цӀе бен хийца лур яц, декъашхочун дӀаяздаран цӀе хийца лур яц.",
        "semiprotectedpagemovewarning": "'''ДӀахьедо.''' ХӀара агӀо гӀаролла йина ю; дӀабазбиначу декъашхошка бе цӀе хийцалуш яц.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
        "export": "АгӀонаш араяхар",
        "exporttext": "Шуьга далур ду кхечу меттера чудахарш, йоза а хийцаме тептарш билгалла йолу агӀонаш йа гулдина йолу агӀонаш хӀокх XML барамца, юха тӀяхьа чура [[Special:Import|хьаэцалурдолш]] кхечу вики-хьалхен, болх беш йолу хlокху MediaWiki гlирсаца.\n\nКхечу меттера яззамаш чуйаха, чуязйе цӀе тадечу метте, цӀхьа могӀан цӀе могӀаршкахь, юха харжа лаьи шуна Кхечу меттер чуйаха массо яззамашна истори хийцамбарш йа тӀяхьаралера яззамна башхо.\n\nШуьга кхи даландерг, лелаеш йолу меттиг къастаман машан хьажораг кхечу меттер чудаха тӀаьхьарлерачу башхон яззамаш. Масала оцу яззамна [[{{MediaWiki:Mainpage}}]] хӀара хира ю хьажораг [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].",
+       "exportall": "Массо агӀонаш экспорт ян",
        "exportcuronly": "Карара верси бен юкъа ма тоха, юзийна хьалхалерра истори йоцуш",
        "export-submit": "Экспорт ян",
        "export-addcattext": "ТӀетоха агӀонаш категори чура:",
        "filemissing": "Файл цакарий",
        "thumbnail_error": "Миниатюра кхолларна гӀалат: $1",
        "thumbnail_error_remote": "ГӀалатах хаам $1:\n$2",
+       "thumbnail_image-missing": "$1 файл йоцчух тера ду",
        "import": "АгӀонаш чуяхар",
+       "importinterwiki": "Викиюкъахь-импорт",
        "import-interwiki-source": "Вики-хьост/агlо:",
+       "import-interwiki-history": "ХӀокху агӀона ерриг хийцаман истори копи ян",
        "import-interwiki-templates": "Юкъайихка массо кепаш",
        "import-interwiki-submit": "Импорт ян",
+       "import-interwiki-namespace": "Коьрта цӀерийн меттиг:",
+       "import-interwiki-rootpage": "Коьрта агӀо (тӀехь дац):",
        "import-upload-filename": "Файлан цӀе:",
        "import-comment": "Билгалдаккхар:",
        "importstart": "АгӀонаш импорт яр…",
        "importnopages": "Импорт ян агӀонаш яц.",
        "imported-log-entries": "{{PLURAL:$1|Тептар чура импорт дина $1 дӀаяздар|Тептар чура импорт дина $1 дӀаяздарш}}.",
        "importfailed": "Импорт ян цаелира: $1",
+       "importcantopen": "Цатарло импорт еш йолу файл елла.",
+       "importbadinterwiki": "Нийса йоцу юкъаравики-хьажорг",
+       "importsuccess": "Импорт яр кхочушдина!",
        "importnosources": "Юкъаравики-импортан хьост хаьржина яцара, дуьхьала хийцамашан истори чуяккхар дӀадайина ду.",
+       "importnofile": "Импорт еш йолу файл чуяьккхина яц.",
        "import-noarticle": "Импорт ян агӀонаш яц!",
        "xml-error-string": "$1 $2 могӀан чохь, позицеш $3 (байт $4): $5",
        "import-upload": "Чуяха XML-хаамаш",
        "tooltip-ca-nstab-template": "Куцкепа агlо",
        "tooltip-ca-nstab-help": "ГӀоьна агӀо",
        "tooltip-ca-nstab-category": "Категорешан агӀо",
-       "tooltip-minoredit": "Къастам бé хlокху хийцамна кlеззиг боуш санна",
+       "tooltip-minoredit": "Къастам бé хӀокху хийцамна кӀеззиг болуш санна",
        "tooltip-save": "Хьан хийцамаш lалашбой",
        "tooltip-preview": "Дехар до, агlо lалаш йарал хьалха хьажа муха йу яз!",
        "tooltip-diff": "Гайта долуш долу йозанах бина болу хийцам.",
        "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": "ДӀадахка теллина санна хилар",
        "show-big-image-preview": "Барам хьажале: $1.",
        "show-big-image-other": "{{PLURAL:$2|1=Кхин шоралла|Кхин шоралла}}: $1.",
        "show-big-image-size": "$1 × $2 пиксель",
+       "file-info-gif-looped": "чӀуг йиллина",
        "file-info-gif-frames": "$1 {{PLURAL:$1|фрейм|фреймаш}}",
+       "file-info-png-looped": "чӀуг йиллина",
        "file-info-png-repeat": "локху $1 {{PLURAL:$1|за}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|кадр|кадраш}}",
        "newimages": "Керлачу файлийн галерей",
        "minutes-abbrev": "$1 мин",
        "hours-abbrev": "$1 сахь.",
        "seconds": "{{PLURAL:$1|$1 секунд}}",
-       "minutes": "{{PLURAL:$1|$1 минут}}",
+       "minutes": "$1 минут",
        "hours": "{{PLURAL:$1|сахьат}}",
        "days": "{{PLURAL:$1|$1 де}}",
        "weeks": "{{PLURAL:$1|$1 кӀира}}",
        "years": "$1 {{PLURAL:$1|шо}}",
        "ago": "$1 хьалха",
        "just-now": "хӀинца",
-       "hours-ago": "$1 {{PLURAL:$1|сахьт}} хьалха",
+       "hours-ago": "$1 сахьт хьалха",
        "minutes-ago": "$1 {{PLURAL:$1|минут}} хьалха",
        "seconds-ago": "$1 {{PLURAL:$1|секунд}} хьалха",
        "monday-at": "оршотан дийнахь $1",
        "exif-whitebalance": "Къайн баланс",
        "exif-digitalzoomratio": "Терхьаш дукха хиларан коэффициент",
        "exif-scenecapturetype": "Сурт доккхуш йолу меттиган тайп",
+       "exif-contrast": "Къастам",
+       "exif-saturation": "Ӏаьбна",
+       "exif-sharpness": "Къаьсташ хилар",
+       "exif-devicesettingdescription": "Камеран хьолахь лаьцна",
+       "exif-subjectdistancerange": "Сурт тӀехь йолучун хӀуман юкъ",
        "exif-imageuniqueid": "Суьртан номер (ID)",
+       "exif-gpslatituderef": "Шораллин индекс",
        "exif-gpslatitude": "Шоралла",
+       "exif-gpslongituderef": "Дохаллин индекс",
        "exif-gpslongitude": "Дохалла",
+       "exif-gpsaltituderef": "Локхаллин индекс",
        "exif-gpsaltitude": "Локхалла",
+       "exif-gpstimestamp": "UTC-ца нийса хан",
        "exif-gpsdestlatitude": "Объектан дохалла",
        "exif-gpsdatestamp": "Терахь",
        "exif-jpegfilecomment": "JPEG-файлан билгалдаккхар",
        "exif-headline": "Корта",
        "exif-credit": "Кхоьхьург, хьа делла сурт",
        "exif-source": "Хьост",
+       "exif-urgency": "Керлачу хенахь",
+       "exif-fixtureidentifier": "МогӀан цӀе",
+       "exif-locationdest": "Сурт тӀера меттиг",
+       "exif-locationdestcode": "Сурт тӀера меттиган код",
+       "exif-contact": "Контактан хаам",
+       "exif-writer": "Йозан автор",
        "exif-languagecode": "Мотт",
        "exif-iimversion": "Верси IIM",
+       "exif-iimcategory": "Категори",
+       "exif-iimsupplementalcategory": "Кхин тӀе категореш",
+       "exif-datetimeexpires": "Ма лелае тӀехьа",
+       "exif-datetimereleased": "Араяларан терахь",
        "exif-originaltransmissionref": "ДӀадолалун меттиган код",
+       "exif-identifier": "ID",
+       "exif-lens": "ID",
+       "exif-serialnumber": "Камеран серин номер",
+       "exif-cameraownername": "Камера ерг",
        "exif-label": "Билгало",
        "exif-datetimemetadata": "ТӀехьара метахаамаш хийцина терахь",
+       "exif-nickname": "ЧӀагӀъелла йоцу суьртан цӀе",
+       "exif-rating": "Мах хадор (5 нах)",
+       "exif-rightscertificate": "Бакъонийн урхалладаран сертификат",
+       "exif-copyrighted": "Авторийн-бакъонийн статус:",
        "exif-copyrightowner": "Авторийн бакъонаш ерг",
        "exif-usageterms": "Лелоран хьал",
+       "exif-webstatement": "Интернет чохь долу авторийн бакъонийн хьал",
+       "exif-originaldocumentid": "ДӀадолалун документан ша тайпа ID",
+       "exif-licenseurl": "Авторийн лицензин URL",
+       "exif-morepermissionsurl": "Альтернативан лицензин хаам",
        "exif-pngfilecomment": "PNG-файлан билгалдаккхар",
+       "exif-disclaimer": "Бехк тӀе ца эцар",
+       "exif-contentwarning": "Чулацамах лаьцна дӀахьедар",
        "exif-giffilecomment": "GIF-файлан билгалдаккхар",
+       "exif-intellectualgenre": "ХӀуман тайп",
+       "exif-subjectnewscode": "Теман код",
+       "exif-scenecode": "IPTC сценан код",
+       "exif-event": "Сурт тӀе даьккхина хиларг",
+       "exif-organisationinimage": "Сурт тӀера организаци",
+       "exif-personinimage": "Сурт тӀера адам",
        "exif-compression-1": "ТIеIовдан яц",
        "exif-copyrighted-false": "Юкъараллин хьал",
        "exif-unknowndate": "Хууш доцу терахь",
        "exif-orientation-1": "Лартӏахь",
        "exif-xyresolution-i": "$1 тӏадамаш дюйман",
        "exif-xyresolution-c": "$1 тӀадамаш сантиметрна",
+       "exif-exposureprogram-1": "Куьйгаца",
        "exif-subjectdistance-value": "$1 {{PLURAL:$1|метр}}",
        "exif-meteringmode-0": "Хууш дац",
        "exif-meteringmode-1": "Юкъара",
        "exif-lightsource-9": "Хаза хенан хӀоттам",
        "exif-lightsource-10": "Мархаш йолу",
        "exif-lightsource-11": "ӀиндагӀ",
+       "exif-flash-mode-3": "авто хьал",
+       "exif-flash-function-1": "Серло яц",
        "exif-focalplaneresolutionunit-2": "дюйм",
+       "exif-sensingmethod-1": "Билгала ца йинарг",
        "exif-filesource-3": "Терахьийн суртдохку аппарат",
        "exif-scenetype-1": "Сурт даьккхина нис дуьххьал",
        "exif-customrendered-0": "ХӀума дийна дац",
        "exif-whitebalance-0": "Къайн автоматически баланс",
        "exif-whitebalance-1": "Куьйга хӀоттийна къайн баланс",
        "exif-scenecapturetype-0": "Стандартан",
+       "exif-scenecapturetype-3": "Буса даьккхина сурт",
        "exif-gaincontrol-0": "Яц",
+       "exif-gaincontrol-1": "Жим докха дар",
+       "exif-gaincontrol-2": "Дукху доккха дар",
+       "exif-gaincontrol-3": "Дуккху жим дар",
+       "exif-gaincontrol-4": "Дукху жим дар",
        "exif-contrast-0": "Лартӏахь",
+       "exif-contrast-1": "КӀеда айина",
+       "exif-contrast-2": "ЧӀогӀа айина",
        "exif-saturation-0": "Лартӏахь",
+       "exif-saturation-1": "КӀезиг Ӏаьбна",
+       "exif-saturation-2": "Докха Ӏаьбна",
        "exif-sharpness-0": "Лартӏахь",
+       "exif-sharpness-1": "КӀеда айина",
+       "exif-sharpness-2": "ЧӀогӀа айина",
+       "exif-subjectdistancerange-0": "Хууш дац",
+       "exif-subjectdistancerange-1": "Макро сурт даккхар",
+       "exif-subjectdistancerange-2": "Уллера сурт даккхар",
+       "exif-subjectdistancerange-3": "Генара сурт даккхар",
+       "exif-gpslatitude-n": "къилбседера шоралла",
+       "exif-gpslatitude-s": "къилбера шоралла",
+       "exif-gpslongitude-e": "малхбалера дохалла",
+       "exif-gpslongitude-w": "малхбузера шоралла",
        "exif-gpsaltitude-above-sealevel": "Хи хIоттарал локхалла $1 {{PLURAL:$1|метр}}",
        "exif-gpsaltitude-below-sealevel": "Хи хIоттарал локхаллин $1 {{PLURAL:$1|метр}} лахахь",
+       "exif-gpsstatus-a": "Дустар чекх даьлла дац",
+       "exif-gpsstatus-v": "Хаам дӀабала кичча ю",
+       "exif-gpsmeasuremode-2": "Дустар 2-х координаташ",
+       "exif-gpsmeasuremode-3": "Дустар 3-х координаташ",
        "exif-gpsspeed-k": "км/сахьтехь",
        "exif-gpsspeed-m": "миль/сахьтехь",
        "exif-gpsspeed-n": "шеддаш",
        "exif-dc-type": "Медиан тайп",
        "exif-rating-rejected": "ДӀайайина",
        "exif-isospeedratings-overflow": "65535 дукха",
+       "exif-iimcategory-ace": "Исбаьхьалла, культура а синкъерам а",
+       "exif-iimcategory-clj": "Зулам дар а Ӏедал а",
+       "exif-iimcategory-dis": "Ирча бохам а авари а",
+       "exif-iimcategory-fin": "Экономика а бизнес а",
+       "exif-iimcategory-edu": "Дешна хилар",
+       "exif-iimcategory-lab": "Къинхьегам",
+       "exif-urgency-normal": "Диканиг ($1)",
+       "exif-urgency-low": "Лахара ($1)",
+       "exif-urgency-high": "Лакхара ($1)",
        "watchlistall2": "массо",
        "namespacesall": "массо",
        "monthsall": "массо",
        "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интаксисан къасторан шораллин тегаш",
        "redirect-lookup": "Лаха:",
        "redirect-value": "МаьӀна:",
        "redirect-user": "Декъашхочун ID",
+       "redirect-page": "АгӀона ID",
        "redirect-revision": "АгӀона верси",
        "redirect-file": "Файлан цӀе",
+       "redirect-not-exists": "МаьӀна цакарий",
        "fileduplicatesearch": "Лаха цхьатера йолу файлаш",
        "fileduplicatesearch-summary": "Лаха цхьатера йолу файлаш хэш-кодаца.",
        "fileduplicatesearch-legend": "Цхьатера ерш лахар",
        "fileduplicatesearch-filename": "Файлан цӀе:",
        "fileduplicatesearch-submit": "Лаха",
        "fileduplicatesearch-info": "$1 × $2 пиксель<br />Файлан барам: $3<br />MIME-тайп: $4",
+       "fileduplicatesearch-result-1": "«$1» файлах тера хӀума яц.",
        "fileduplicatesearch-noresults": "ЦӀе «$1» йолуш файл цакарий.",
        "specialpages": "Леррина агlонаш",
        "specialpages-note": "* Гуттарлера белха агlонаш.\n* <strong class=\"mw-specialpagerestricted\">Кlеззиг таронаш йолу леррина агlонаш.</strong>",
        "htmlform-no": "ХӀахӀа",
        "htmlform-yes": "ХӀаъ",
        "htmlform-chosen-placeholder": "Харжа кеп",
+       "htmlform-cloner-create": "ТӀетоха кхин",
+       "htmlform-cloner-delete": "ДӀаяккха",
        "logentry-delete-delete": "$1 {{GENDER:$2|дӀаяьккхина}} агӀо $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|меттахӀоттайина|меттахӀоттайина}} агӀо $3",
        "logentry-delete-event": "$1 {{GENDER:$2|хийцина}} гуш хилар {{PLURAL:$5|1=$5 дӀаяздаран|$5 дӀаяздаршан}} тептаран → $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|хийцина}} {{PLURAL:$5|1=$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 къайлаха {{GENDER:$2|хийцина}} тептаран {{PLURAL:$5|1=$5 дӀаяздар|$5 дӀаяздарш}} гуш хилар $3: $4 чохь",
        "logentry-suppress-revision": "$1 къайлаха {{GENDER:$2|хийцина}} {{PLURAL:$5|1=$5 верси|$5 версеш}} $3: $4 чохь гуш хилар",
        "logentry-suppress-event-legacy": "$1 къайлаха {{GENDER:$2|хийцина}} $3 тептар чура дӀаяздарш гуш хилар",
        "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|хьаьжина}}  агӀона $3 $4 версега",
        "logentry-patrol-patrol-auto": "$1 автоматически {{GENDER:$2|хьаьжина}} $3 агӀона версега $4",
        "logentry-newusers-newusers": "{{GENDER:$2|ДӀавазвелла|ДӀаязелла}} керла декъашхо $1",
        "logentry-newusers-create": "{{GENDER:$2|ДӀавазвелла|ДӀаязелла}} керла декъашхо $1",
+       "logentry-newusers-create2": "$1 {{GENDER:$2|кхоьллина}} декъашхочун дӀаяздапр $3",
+       "logentry-newusers-byemail": "$1 {{GENDER:$2|кхоьллина}} декъашхочун дӀаяздар $3 пароль электронан почте яхьийтина",
        "logentry-newusers-autocreate": "Автоматически кхоьллина {{GENDER:$2|декъашхочун}} $1 дӀаяздар",
        "logentry-rights-rights": "$1 {{GENDER:$2|хийцина}} $3 бакъо $4 → $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|хийцина}} хӏокхуна $3 бакъо",
+       "logentry-rights-autopromote": "$1 {{GENDER:$2|вара|яра}} автоматически {{GENDER:$2|сихьа ваьлла|сихьа яьлла}} $4 $5 чу",
        "rightsnone": "(яц)",
+       "feedback-bugornote": "Хьайн техникин халонах лаьцна яздан хӀума делахь, дехар до, [$1 хаам бе тхоьга].\nДацахь хьан йиш ю хӀокху атта кепаца «[$3 $2]» агӀонг къамел тӀетоха хьан декъашхочун цӀарца, кхин лелош йолу браузер билгал еш.",
+       "feedback-subject": "Къамел:",
+       "feedback-message": "Хаам:",
        "feedback-cancel": "Цаоьшу",
+       "feedback-submit": "Дахьийта хетарг",
+       "feedback-adding": "АгӀона хетарг тӀетохар...",
        "feedback-close": "Кийчча ю",
        "searchsuggest-search": "Лаха",
        "searchsuggest-containing": "чуьраниг…",
        "limitreport-cputime": "Процессоран хан лелор",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|секунд}}",
        "limitreport-walltime": "Йодуш йолу хенахь лелор",
-       "limitreport-walltime-value": "$1 {{PLURAL:$1|секунд}}",
+       "limitreport-walltime-value": "$1 секунд",
        "limitreport-ppvisitednodes": "Препроцессор хьаьжна шадин дукхалла",
        "limitreport-ppgeneratednodes": "Препроцессорс сгенерировать бина шадин дукхалла",
        "limitreport-postexpandincludesize": "Схьаяьстина юккъерчаран барам",
        "expand_templates_remove_nowiki": "ДӀайоху тегаш <nowiki> хилча",
        "expand_templates_generate_xml": "Гойту дитта цу XML",
        "expand_templates_generate_rawhtml": "Гайта HTML",
-       "expand_templates_preview": "Хьалха муха ю хьажа"
+       "expand_templates_preview": "Хьалха муха ю хьажа",
+       "pagelang-name": "АгӀо",
+       "pagelang-language": "Мотт",
+       "pagelang-use-default": "Ӏад битарца мотт",
+       "pagelang-select-lang": "Харжа мотт",
+       "right-pagelang": "АгӀона мотт хийца",
+       "action-pagelang": "агӀона мотт хийца",
+       "log-name-pagelang": "Мотт хийцаран тептар",
+       "log-description-pagelang": "ХӀара агӀонашкахь мотт хийцаран тептар ду."
 }
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 12e7239..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": "مێنۆی ڕێدۆزی",
        "editundo": "پووچەڵکردنەوە",
        "searchresults": "ئاکامەکانی گەڕان",
        "searchresults-title": "ئاکامەکانی گەڕان بۆ «$1»",
-       "toomanymatches": "هاوتای ئەوەی داوات کرد، زۆر هەیە. تکایە داوای‌تر تاقی بکەوە.",
        "titlematches": "سەردێڕی پەڕە پێی ئەخوا",
        "textmatches": "هاوتاکانی دەقی لاپەڕە",
        "notextmatches": "لە دەقی نووسراوەکان دا نەبینرا",
        "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 7d74d59..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",
        "filehist-dimensions": "Dimensione",
        "filehist-comment": "Cummentu",
        "imagelinks": "Usu di u schedariu",
+       "sharedupload": "'Ssu file pruvene da $1 è pò esse imprudatu da altri prugetti.",
        "filerevert-comment": "Mutivu:",
        "filedelete-comment": "Mutivu:",
        "filedelete-submit": "Supprimà",
        "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 9e627a8..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": "Вариантлар",
        "diff-multi-manyusers": "($2-ден зияде {{PLURAL:$2|1=къулланыджы|къулланыджы}}нынъ япкъан {{PLURAL:$1|1=бир ара версиясы|$1 ара версиясы}} косьтерильмей)",
        "searchresults": "Къыдырув нетиджелери",
        "searchresults-title": "«$1» ичюн къыдырув нетиджелери",
-       "toomanymatches": "Пек чокъ эшлешме чыкъты, лютфен, башкъа бир соратма сайланъыз.",
        "titlematches": "Макъале ады бир келе",
        "textmatches": "Саифе метни бир келе",
        "notextmatches": "Ич бир саифеде тапыламады",
        "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 b607567..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",
        "diff-multi-manyusers": "($2-den ziyade {{PLURAL:$2|qullanıcı|qullanıcı}}nıñ yapqan {{PLURAL:$1|bir ara versiyası|$1 ara versiyası}} kösterilmey)",
        "searchresults": "Qıdıruv neticeleri",
        "searchresults-title": "\"$1\" içün qıdıruv neticeleri",
-       "toomanymatches": "Pek çoq eşleşme çıqtı, lütfen, başqa bir soratma saylañız",
        "titlematches": "Saife adı bir kele",
        "textmatches": "Saife metni bir kele",
        "notextmatches": "İç bir saifede tapılamadı",
        "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 26fa002..0e298a5 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.",
        "difference-missing-revision": "{{PLURAL:$2|Jedna z revizí|$2 revize|$2 revizí}} k požadovanému porovnání ($1) {{PLURAL:$2|neexistuje|neexistují|neexistuje}}.\n\nToto je obvykle způsobeno tím, že jste následovali zastaralý odkaz na historickou verzi stránky, jež byla smazána.\nPodrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} knize smazaných stránek].",
        "searchresults": "Výsledky hledání",
        "searchresults-title": "Výsledky hledání „$1“",
-       "toomanymatches": "Požadavku odpovídá příliš mnoho záznamů, zkuste jiný dotaz.",
        "titlematches": "Stránky s odpovídajícím názvem",
        "textmatches": "Stránky s odpovídajícím textem",
        "notextmatches": "Žádné stránky textem neodpovídají.",
        "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",
        "expand_templates_remove_nowiki": "Potlačit ve výsledku značky <nowiki>",
        "expand_templates_generate_xml": "Zobrazit syntaktický strom v XML",
        "expand_templates_generate_rawhtml": "Zobrazit surové HTML",
-       "expand_templates_preview": "Náhled"
+       "expand_templates_preview": "Náhled",
+       "pagelanguage": "Volba jazyka stránky",
+       "pagelang-name": "Stránka",
+       "pagelang-language": "Jazyk",
+       "pagelang-use-default": "Použít implicitní jazyk",
+       "pagelang-select-lang": "Vybrat jazyk",
+       "right-pagelang": "Změnit jazyk stránky",
+       "action-pagelang": "měnit jazyk stránky",
+       "log-name-pagelang": "Kniha změn jazyků",
+       "log-description-pagelang": "Toto je protokol změn jazyků stránek.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|změnil|změnila}} jazyk stránky $3 z $4 na $5."
 }
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 44d5e57..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": "дѣиства",
        "namespaces": "имєнъ просторꙑ",
        "errorpagetitle": "блаꙁна",
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 b52336a..e66b267 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",
        "createacct-another-realname-tip": "Gallwch ddewis roi eich enw go iawn.\nOs y gwnewch, fe gaiff yr enw go iawn ei defnyddio wrth dadogi'ch gwaith.",
        "pt-login": "Mewngofnodi",
        "pt-login-button": "Mewngofnoder",
-       "pt-createaccount": "Creu cyfri",
+       "pt-createaccount": "Crëwch gyfrif",
        "pt-userlogout": "Allgofnodi",
        "php-mail-error-unknown": "Gwall anhysbys yng ngweithrediad post() PHP",
        "user-mail-no-addy": "Wedi ceisio anfon e-bost heb gyfeiriad e-bost",
        "difference-missing-revision": "Ni chafwyd hyd i $1 {{PLURAL:$2|diwygiad|diwygiad|ddiwygiad|diwygiad}} o'r gwahaniaeth ($1) {{PLURAL:$2|hwn}}.\n\nFel arfer, fe ddigwydd hyn pan mae person wedi dilyn hen gyswllt gwahaniaeth i dudalen sydd erbyn hyn wedi cael ei ddileu.\nMae manylion pellach i'w cael yn [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} lòg y dileuon].",
        "searchresults": "Canlyniadau'r chwiliad",
        "searchresults-title": "Canlyniadau chwilio am \"$1\"",
-       "toomanymatches": "Cafwyd hyd i ormod o enghreifftiau o'r term chwilio; ceisiwch chwilio am derm arall",
        "titlematches": "Teitlau erthygl yn cyfateb",
        "textmatches": "Testun erthygl yn cyfateb",
        "notextmatches": "Does dim testun yn cyfateb",
        "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",
        "duplicate-defaultsort": "Rhybudd: Mae'r allwedd trefnu diofyn \"$2\" yn gwrthwneud yr allwedd trefnu diofyn blaenorol \"$1\".",
        "version": "Fersiwn",
        "version-extensions": "Estyniadau gosodedig",
+       "version-skins": "Gweddau",
        "version-specialpages": "Tudalennau arbennig",
        "version-parserhooks": "Bachau dosrannydd",
        "version-variables": "Newidynnau",
        "version-antispam": "Atal sbam",
-       "version-skins": "Gweddau",
        "version-other": "Arall",
        "version-mediahandlers": "Trinyddion cyfryngau",
        "version-hooks": "Bachau",
index 734139d..797b8b6 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",
        "difference-missing-revision": "{{PLURAL:$2|En revision|$2 revisioner}} af denne forskel ($1) {{PLURAL:$2|blev|blev}} ikke fundet.\n\nDette skyldes normalt et forældet diff link til en side der er slettet.\nDetaljer kan findes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletningsloggen].",
        "searchresults": "Søgeresultater",
        "searchresults-title": "Søgeresultater for \"$1\"",
-       "toomanymatches": "Søgningen fandt for mange sider. Prøv venligst med en anden søgning.",
        "titlematches": "Artikeltitler der opfyldte forespørgslen",
        "textmatches": "Artikeltekster der opfyldte forespørgslen",
        "notextmatches": "Ingen artikeltekster opfyldte forespørgslen",
        "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",
        "right-move": "Flytte sider",
        "right-move-subpages": "Flytte sider og undersider",
        "right-move-rootuserpages": "Flytte hovedbrugersider",
+       "right-move-categorypages": "Flytte kategorisider",
        "right-movefile": "Flytte filer",
        "right-suppressredirect": "Flytte sider uden at oprette en omdirigering fra det gamle navn",
        "right-upload": "Lægge filer op",
        "action-move": "flytte denne side",
        "action-move-subpages": "flytte denne side og dens undersider",
        "action-move-rootuserpages": "flytte hovedbrugersider",
+       "action-move-categorypages": "flytte kategorisider",
        "action-movefile": "flytte denne fil",
        "action-upload": "lægge denne fil op",
        "action-reupload": "overskrive den nuværende fil",
        "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",
        "duplicate-defaultsort": "Advarsel: Standardsorteringsnøglen \"$2\" tilsidesætter den tidligere sorteringsnøgle \"$1\".",
        "version": "Information om MediaWiki",
        "version-extensions": "Installerede udvidelser",
+       "version-skins": "Udseender",
        "version-specialpages": "Specialsider",
        "version-parserhooks": "Parserfunktioner",
        "version-variables": "Variabler",
        "version-antispam": "Spamforebyggelse",
-       "version-skins": "Udseender",
        "version-other": "Andet",
        "version-mediahandlers": "Specialhåndtering af mediefiler",
        "version-hooks": "Funktionstilføjelser",
index 43b4c77..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.",
        "difference-missing-revision": "{{PLURAL:$2|Eine Version|$2 Versionen}} dieser Unterschiedsanzeige ($1) {{PLURAL:$2|wurde|wurden}} nicht gefunden.\n\nDieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.\nEinzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch] vorhanden.",
        "searchresults": "Suchergebnisse",
        "searchresults-title": "Suchergebnisse für „$1“",
-       "toomanymatches": "Die Anzahl der Suchergebnisse ist zu groß, bitte versuche eine andere Abfrage.",
        "titlematches": "Übereinstimmungen mit Seitentiteln",
        "textmatches": "Übereinstimmungen mit Inhalten",
        "notextmatches": "Keine Übereinstimmungen mit Inhalten",
        "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",
        "largefileserver": "Die Datei ist größer als die vom Server eingestellte Maximalgröße.",
        "emptyfile": "Die hochgeladene Datei ist leer. Der Grund kann ein Tippfehler im Dateinamen sein. Bitte kontrolliere, ob du die Datei wirklich hochladen willst.",
        "windows-nonascii-filename": "Dieses Wiki unterstützt keine Dateinamen, die Sonderzeichen enthalten.",
-       "fileexists": "Eine Datei dieses Namens ist bereits vorhanden. Bitte prüfe <strong>[[:$1]]</strong>, sofern du dir nicht sicher bist, ob du sie ändern möchtest.\n[[$1|thumb]]",
+       "fileexists": "Eine Datei dieses Namens ist bereits vorhanden. Bitte prüfe <strong>[[:$1]]</strong>, sofern {{GENDER:|du}} dir nicht sicher bist, ob du sie ändern möchtest.\n[[$1|thumb]]",
        "filepageexists": "Eine Beschreibungsseite wurde bereits als <strong>[[:$1]]</strong> erstellt, es ist aber keine Datei mit diesem Namen vorhanden.\nDie eingegebene Beschreibung wird nicht auf die Beschreibungsseite übernommen.\nDie Beschreibungsseite musst du nach dem Hochladen der Datei noch manuell bearbeiten.\n[[$1|thumb]]",
-       "fileexists-extension": "Eine Datei ähnlichen Namens ist bereits vorhanden: [[$2|thumb]]\n* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>\n* Name der bereits vorhandenen Datei: <strong>[[:$2]]</strong>\nBitte wähle einen anderen Namen.",
+       "fileexists-extension": "Eine Datei ähnlichen Namens ist bereits vorhanden: [[$2|thumb]]\n* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>\n* Name der bereits vorhandenen Datei: <strong>[[:$2]]</strong>\nMöchtest du vielleicht einen eindeutigeren Namen verwenden?",
        "fileexists-thumbnail-yes": "Bei der Datei scheint es sich um ein Bild verringerter Größe ''(Miniatur)'' zu handeln. [[$1|thumb]]\nBitte prüfe die Datei <strong>[[:$1]]</strong>.\nWenn es sich um das Bild in Originalgröße handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
        "file-thumbnail-no": "Der Dateiname beginnt mit <strong>$1</strong>. Dies deutet auf ein Bild verringerter Größe ''(Minitatur)'' hin.\nBitte prüfe, ob du das Bild in voller Auflösung vorliegen hast und lade dieses unter dem Originalnamen hoch.",
        "fileexists-forbidden": "Unter diesem Namen existiert bereits eine Datei und sie kann nicht überschrieben werden. Bitte gehe zurück und lade die Datei unter einem anderen Namen hoch. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Das Löschen und Wiederherstellen von Dateien ist aufgrund von Wartungsarbeiten vorübergehend deaktiviert.",
        "filedelete-maintenance-title": "Die Datei kann nicht gelöscht werden.",
        "mimesearch": "Suche nach MIME-Typ",
-       "mimesearch-summary": "Auf dieser Spezialseite können die Dateien nach dem MIME-Typ gefiltert werden. Die Eingabe muss immer den Medien- und Subtyp beinhalten: <code>image/jpeg</code> (siehe Dateibeschreibungsseite).",
+       "mimesearch-summary": "Auf dieser Spezialseite können die Dateien nach dem MIME-Typ gefiltert werden.\nDie Eingabe muss immer den Medien- und Subtyp beinhalten: <code>image/jpeg</code> oder <code>image/*</code> (siehe Dateibeschreibungsseite).",
        "mimetype": "MIME-Typ:",
        "download": "Herunterladen",
        "unwatchedpages": "Nicht beobachtete Seiten",
        "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",
        "version-ext-colheader-credits": "Autoren",
-       "version-license-title": "Lizenz für $1",
-       "version-license-not-found": "Es wurden keine detaillierten Lizenzinformationen für diese Erweiterung gefunden.",
+       "version-license-title": "Lizenz für „$1“",
+       "version-license-not-found": "Es wurden keine detaillierten Lizenzinformationen zu dieser Erweiterung gefunden.",
        "version-credits-title": "Danksagungen für $1",
        "version-credits-not-found": "Es wurden keine detaillierten Danksagungsinformationen für diese Erweiterung gefunden.",
        "version-poweredby-credits": "Diese Website nutzt '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
        "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 24aecc3..4250606 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",
        "personaltools": "Hacetê şexsiy",
        "postcomment": "Qısımo newe",
        "articlepage": "Pela zerreki bıvêne",
-       "talk": "Vatenkerdış",
+       "talk": "Werênayış",
        "views": "Asayışi",
        "toolbox": "Haceti",
        "userpage": "Pela karberi bıvêne",
        "difference-missing-revision": "Ferqê {{PLURAL:$2|Yew rewizyonê|$2 rewizyonê}} {{PLURAL:$2|dı|dı}} ($1) sero çıniyo.\n\nNo normal de werênayış dê pelanê besterneyan dı ena xırabin asena.\nDetayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} tiya dı] aseno.",
        "searchresults": "Neticeyê geyrayışi",
        "searchresults-title": "Qandê \"$1\" neticeyê geyrayışi",
-       "toomanymatches": "Zêde teki (zewci) peyser çarnay, şıma rê zehmet, be persê do bin ra bıcerrebnên.",
        "titlematches": "Tekê (zewcê) sernameyê pele",
        "textmatches": "Tekê (zewcê) nuştey pele",
        "notextmatches": "tekê (zewcê) nuştey pele çıniyê",
        "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",
        "created": "viraziya",
        "changed": "vurneya",
        "deletepage": "Pele bestere",
-       "confirm": "Testiq ke",
+       "confirm": "Tesdiq ke",
        "excontent": "Zerreko verén: '$1'",
        "excontentauthor": "Zerrey cı: '$1' no/na ('[[Special:Contributions/$2|$2]]'  teyna iştıraq kerdo)",
        "exbeforeblank": "behsê verê esteriyayişi: '$1'",
        "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",
        "duplicate-defaultsort": "'''Tembe:''' Hesıbyaye sırmey ratnayış de \"$2\" sırmey ratnayış de \"$1\"i nêhesıbneno.",
        "version": "Versiyon",
        "version-extensions": "Ekstensiyonî ke ronaye",
+       "version-skins": "Cıldi",
        "version-specialpages": "Pelanê xasiyan",
        "version-parserhooks": "Çengelê Parserî",
        "version-variables": "Vurnayeyî",
        "version-antispam": "Spam vındarnayış",
-       "version-skins": "Cıldi",
        "version-api": "API",
        "version-other": "Bin",
        "version-mediahandlers": "Kulbê medyayî",
index 671f9b4..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",
        "difference-missing-revision": "{{PLURAL:$2|Jadna wersija|$2 wersiji|$2 wersije|$2 wersijow}} toś togo rozdźěla ($1) {{PLURAL:$2|njejo se namakała|njejstej se namakałej|njejsu namakali|njejo se namakało}}.\n\nPśicyna jo zwětšego zestarjony diferencny wótkaz k bokoju, kótaryž jo se wulašował.\nDrobnostki móžoš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokolu wulašowanjow] namakaś.",
        "searchresults": "Wuslědki pytanja",
        "searchresults-title": "Pytańske wuslědki za \"$1\"",
-       "toomanymatches": "Pśewjele pytańskich wuslědkow, pšosym wopytaj druge wótpšašanje.",
        "titlematches": "boki z wótpowědujucym napismom",
        "textmatches": "Boki z wótpowědujucym tekstom",
        "notextmatches": "Boki z wótpowědujucym tekstom njeeksistěruju.",
        "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 27f7929..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.",
        "difference-missing-revision": "{{PLURAL:$2|'Na versiòun|$2 versiòun}} ed cla diferèinsa ché ($1) {{PLURAL:$2|an n'é mìa stêda catêda|în mìa stêdi catêdi}}. \n\nCòst a sucēd ed sôlit quând a's và adrē a un colegamèint vèc ed 'na diff a 'na pàgina scanşlêda. I particulêr a pōlen èser catê int al [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} regéster dal scanşladûri].",
        "searchresults": "Rişultê 'd la sērca",
        "searchresults-title": "Rişultê 'd la sērca ed \"$1\"",
-       "toomanymatches": "Trôpi relasiòun. Cambiêr la dmânda.",
        "titlematches": "Rapôrt int al tétol dal pàgini",
        "textmatches": "Rapôrt int al tèst dal pàgini",
        "notextmatches": "Nisóna relasiòun int al tèst dal pàgini",
        "search-result-score": "Impurtânsa: $1%",
        "search-redirect": "(redirect $1)",
        "search-section": "(sesiòun $1)",
+       "search-file-match": "(relasiòun dèinter al file)",
        "search-suggest": "Fōrsi 't serchêv $1",
        "search-interwiki-caption": "Prugèt fradē",
        "search-interwiki-default": "Rişultêt da $1:",
        "search-interwiki-more": "(êter)",
+       "search-relatedarticle": "Rişultêt coleghê",
        "searchrelated": "coleghê",
        "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>.",
        "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 b6eebbc..c7bd536 100644 (file)
@@ -37,7 +37,8 @@
                        "לערי ריינהארט",
                        "Kolega2357",
                        "아라",
-                       "Calak"
+                       "Calak",
+                       "Auslaender"
                ]
        },
        "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": "Μενού πλοήγησης",
        "permalink": "Σταθερός σύνδεσμος",
        "print": "Εκτύπωση",
        "view": "Προβολή",
+       "view-foreign": "Δείτε στο $1",
        "edit": "Επεξεργασία",
        "create": "Δημιουργία",
+       "create-local": "Προσθέστε τοπική περιγραφή",
        "editthispage": "Επεξεργασία αυτής της σελίδας",
        "create-this-page": "Δημιουργία αυτής της σελίδας",
        "delete": "Διαγραφή",
        "difference-missing-revision": "{{PLURAL:$2|Μία αναθεώρηση|$2 αναθεωρήσεις}} αυτής της διαφοράς ($1) δεν {{PLURAL:$2|μπόρεσε να βρεθεί|μπόρεσαν να βρεθούν}}.\n\nΑυτό συνήθως προκαλείται από παλιό σύνδεσμο διαφοράς προς σελίδα που έχει διαγραφεί.\nΛεπτομέρειες θα βρείτε στο [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ημερολόγιο καταγραφής διαγραφών].",
        "searchresults": "Αποτελέσματα αναζήτησης",
        "searchresults-title": "Αποτελέσματα αναζήτησης για \"$1\"",
-       "toomanymatches": "Ανταποκρίνονται πάρα πολλές περιπτώσεις, παρακαλούμε δοκιμάστε μια διαφορετική ερώτηση",
        "titlematches": "Τίτλοι άρθρων που ανταποκρίνονται",
        "textmatches": "Κείμενα σελίδων που ανταποκρίνονται:",
        "notextmatches": "Δεν υπάρχουν αντίστοιχα κείμενα σελίδων.",
        "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": "Αναλυτική αναζήτηση",
        "recentchanges-label-unpatrolled": "Αυτή η επεξεργασία δεν έχει ελεγχθεί ακόμα",
        "recentchanges-label-plusminus": "Μεταβολή του μεγέθους της σελίδας σε bytes",
        "recentchanges-legend-heading": "'''Υπόμνημα:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (δείÏ\84ε [[Special:NewPages|Î\9dέεÏ\82 Ï\83ελίδεÏ\82]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (δείÏ\84ε [[Special:NewPages|καÏ\84άλογοÏ\82 Î½Î­Ï\89ν Ï\83ελίδÏ\89ν]])",
        "rcnotefrom": "Παρακάτω είναι οι αλλαγές από τις <strong>$2</strong>  (εμφανίζονται μέχρι <strong>$1</strong> ).",
        "rclistfrom": "Εμφάνιση νέων αλλαγών αρχίζοντας από $3 $2",
        "rcshowhideminor": "$1 μικροεπεξεργασιών",
        "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 14b6b66..d0e7ad3 100644 (file)
        "faqpage": "Project:FAQ",
        "sitetitle": "{{SITENAME}}",
        "sitesubtitle": "",
-       "vector-action-addsection": "Add topic",
-       "vector-action-delete": "Delete",
-       "vector-action-move": "Move",
-       "vector-action-protect": "Protect",
-       "vector-action-undelete": "Undelete",
-       "vector-action-unprotect": "Change protection",
-       "vector-view-create": "Create",
-       "vector-view-edit": "Edit",
-       "vector-view-history": "View history",
-       "vector-view-view": "Read",
-       "vector-view-viewsource": "View source",
        "actions": "Actions",
-       "vector-more-actions": "More",
        "namespaces": "Namespaces",
        "variants": "Variants",
        "navigation-heading": "Navigation menu",
        "mergehistory-empty": "No revisions can be merged.",
        "mergehistory-success": "$3 {{PLURAL:$3|revision|revisions}} of [[:$1]] successfully merged into [[:$2]].",
        "mergehistory-fail": "Unable to perform history merge, please recheck the page and time parameters.",
+       "mergehistory-fail-toobig" : "Unable to perform history merge as more than the limit of $1 {{PLURAL:$1|revision|revisions}} would be moved.",
        "mergehistory-no-source": "Source page $1 does not exist.",
        "mergehistory-no-destination": "Destination page $1 does not exist.",
        "mergehistory-invalid-source": "Source page must be a valid title.",
        "search-summary": "",
        "searchresults": "Search results",
        "searchresults-title": "Search results for \"$1\"",
-       "toomanymatches": "Too many matches were returned, please try a different query",
        "titlematches": "Page title matches",
        "textmatches": "Page text matches",
        "notextmatches": "No page text matches",
        "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",
        "windows-nonascii-filename": "This wiki does not support filenames with special characters.",
        "fileexists": "A file with this name exists already, please check <strong>[[:$1]]</strong> if {{GENDER:|you}} are not sure if you want to change it.\n[[$1|thumb]]",
        "filepageexists": "The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.\nThe summary you enter will not appear on the description page.\nTo make your summary appear there, you will need to manually edit it.\n[[$1|thumb]]",
-       "fileexists-extension": "A file with a similar name exists: [[$2|thumb]]\n* Name of the uploading file: <strong>[[:$1]]</strong>\n* Name of the existing file: <strong>[[:$2]]</strong>\nPlease choose a different name.",
+       "fileexists-extension": "A file with a similar name exists: [[$2|thumb]]\n* Name of the uploading file: <strong>[[:$1]]</strong>\n* Name of the existing file: <strong>[[:$2]]</strong>\nDo you perhaps want to use a more distinctive name?",
        "fileexists-thumbnail-yes": "The file seems to be an image of reduced size <em>(thumbnail)</em>.\n[[$1|thumb]]\nPlease check the file <strong>[[:$1]]</strong>.\nIf the checked file is the same image of original size it is not necessary to upload an extra thumbnail.",
        "file-thumbnail-no": "The filename begins with <strong>$1</strong>.\nIt seems to be an image of reduced size <em>(thumbnail)</em>.\nIf you have this image in full resolution upload this one, otherwise change the filename please.",
        "fileexists-forbidden": "A file with this name already exists, and cannot be overwritten.\nIf you still want to upload your file, please go back and use a new name.\n[[File:$1|thumb|center|$1]]",
        "license-nopreview": "(Preview not available)",
        "upload_source_url": "(a valid, publicly accessible URL)",
        "upload_source_file": "(a file on your computer)",
+       "listfiles-delete": "delete",
        "listfiles-summary": "This special page shows all uploaded files.",
        "listfiles_search_for": "Search for media name:",
        "imgfile": "file",
        "filedelete-maintenance": "Deletion and restoration of files temporarily disabled during maintenance.",
        "filedelete-maintenance-title": "Cannot delete file",
        "mimesearch": "MIME search",
-       "mimesearch-summary": "This page enables the filtering of files for their MIME type.\nInput: contenttype/subtype, e.g. <code>image/jpeg</code>.",
+       "mimesearch-summary": "This page enables the filtering of files for their MIME type.\nInput: contenttype/subtype or contenttype/*, e.g. <code>image/jpeg</code>.",
        "mimetype": "MIME type:",
        "download": "download",
        "unwatchedpages": "Unwatched pages",
        "tooltip-summary": "Enter a short summary",
        "interlanguage-link-title": "$1 – $2",
        "interlanguage-link-title-langonly": "$1",
+       "interlanguage-link-title-nonlang": "$1 – $2",
+       "interlanguage-link-title-nonlangonly": "$1",
        "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-user.js": "/* Any JavaScript here will be loaded for registered users only */",
        "group-bot.js": "/* Any JavaScript here will be loaded for bots only */",
        "pageinfo-category-pages": "Number of pages",
        "pageinfo-category-subcats": "Number of subcategories",
        "pageinfo-category-files": "Number of files",
-       "skinname-monobook": "MonoBook",
-       "skinname-vector": "Vector",
        "markaspatrolleddiff": "Mark as patrolled",
        "markaspatrolledlink": "[$1]",
        "markaspatrolledtext": "Mark this page as patrolled",
        "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 0d6d4e2..45dc6b7 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",
        "edit-gone-missing": "Ne eblis ĝisdatigi la paĝon.\nVerŝajne ĝi estis forigita.",
        "edit-conflict": "Redakto-konflikto.",
        "edit-no-change": "Via redakto estis ignorita, ĉar neniu ŝanĝo estis farita al la teksto.",
+       "postedit-confirmation-created": "La paĝo estis kreita.",
+       "postedit-confirmation-restored": "La paĝo estis restarigita.",
        "postedit-confirmation-saved": "Via redakto estis konservita.",
        "edit-already-exists": "Ne eblis krei novan paĝon.\nĜi jam ekzistas.",
        "defaultmessagetext": "Defaŭlta teksto",
        "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",
        "currentrev": "Aktuala versio",
        "currentrev-asof": "Nuna versio ekde $1",
        "revisionasof": "Kiel registrite je $1",
-       "revision-info": "Redakto de $1 de $2",
+       "revision-info": "Revizio de $1 fare de {{GENDER:$6|$2}}$7",
        "previousrevision": "← Antaŭa versio",
        "nextrevision": "Sekva versio →",
        "currentrevisionlink": "Rigardi nunan version",
        "difference-missing-revision": "{{PLURAL:$2|Unu revizio|$2 revizioj}} de ĉi tiu malsameco ($1) ne {{PLURAL:$2|estis|estis}} trovebla.\n\nLa kutima kaŭzo estas sekvi malaktualan malsamo-ligilon al paĝo forviŝita.\nDetaloj troveblos en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de forviŝoj].",
        "searchresults": "Serĉrezultoj",
        "searchresults-title": "Serĉrezultoj por \"$1\"",
-       "toomanymatches": "Tro da serĉo-trafoj estis trovitaj; bonvolu provi malsaman serĉomendon.",
        "titlematches": "Trovitaj laŭ titolo",
        "textmatches": "Trovitaj laŭ enhavo",
        "notextmatches": "Neniu trovita laŭ enhavo",
        "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",
        "largefileserver": "Ĉi tiu dosiero estas pli granda ol permesas la servilaj preferoj.",
        "emptyfile": "La dosiero kiun vi alŝutis ŝajnas malplena. Tio povas esti kaŭzita sde tajperaro en la titolo. Bonvolu kontroli ĉu vi vere volas alŝuti tiun dosieron.",
        "windows-nonascii-filename": "Ĉi tiu vikio ne subtenas dosiernomoj kun specialaj signoj.",
-       "fileexists": "Dosiero kun tia ĉi nomo jam ekzistas.\nBonvolu kontroli <strong>[[:$1]]</strong> krom se vi certas ke vi konscie volas ŝanĝi ĝuste tiun.\n[[$1|thumb]]",
+       "fileexists": "Dosiero kun tiu ĉi nomo jam ekzistas.\nBonvolu kontroli <strong>[[:$1]]</strong> krom se vi certas ke {{GENDER:|vi}} konscie volas ŝanĝi ĝuste tiun.\n[[$1|thumb]]",
        "filepageexists": "La priskriba paĝo por ĉi tiu dosiero jam estis kreita ĉe <strong>[[:$1]]</strong>, sed neniu dosiero kun ĉi tiu nomo nune ekzistas.\nLa resumo kiun vi entajpos ne aperos en la priskribo-paĝo.\nPor aperigi vian resumon, vi devos permane redakti ĝin.\n[[$1|thumb]]",
-       "fileexists-extension": "Dosiero kun simila nomo ekzistas: [[$2|thumb]]\n* Nomo de la alŝuta dosiero: <strong>[[:$1]]</strong>\n* Nomo de la ekzistanta dosiero: <strong>[[:$2]]</strong>\nBonvolu elekti malsaman nomon.",
+       "fileexists-extension": "Dosiero kun simila nomo ekzistas: [[$2|thumb]]\n* Nomo de la alŝutanta dosiero: <strong>[[:$1]]</strong>\n* Nomo de la ekzistanta dosiero: <strong>[[:$2]]</strong>\nBonvolu elekti malsaman nomon.",
        "fileexists-thumbnail-yes": "Ĉi tiu dosiero ŝajnas kiel bildo de malkreskigita grandeco ''(bildeto)''. [[$1|thumb]]\nBonvolu kontroli la dosieron <strong>[[:$1]]</strong>.\nSe la kontrolita dosiero estas la sama bildo kiel la originala grandeco, ĝi ne nepras alŝuti plian bideton.",
        "file-thumbnail-no": "La dosiernomo komencas kun <strong>$1</strong>.\nĜi ŝajnas kiel bildo de malgrandigita grandeco ''(thumbnail)''.\nSe vi havas ĉi tiun bildon en plena distingivo, alŝutu ĉi tiun, alikaze bonvolu ŝanĝi la dosieran nomon.",
        "fileexists-forbidden": "Dosiero kun ĉi tiu nomo jam ekzistas kaj ne povas anstataŭigi ĝin.\nSe vi ankoraŭ volas alŝuti vian dosieron, bonvolu reprovi kun nova nomo.\n[[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Forigado kaj restarigado de dosieroj provizore malŝaltis dum funkciteno.",
        "filedelete-maintenance-title": "Ne povas forigi dosieron",
        "mimesearch": "MIME-serĉilo",
-       "mimesearch-summary": "Ĉi tiu paĝo ebligas la filtradon de dosieroj por ties MIME-tipo. Enigu: enhavo-tipo/subtipo, ekz. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Ĉi tiu paĝo ebligas la filtradon de dosieroj por ties MIME-tipo. \nEnigu: enhavo-tipo/subtipo, aŭ enhavo-tipo/* - ekz. <code>image/jpeg</code>.",
        "mimetype": "MIME-tipo:",
        "download": "elŝuti",
        "unwatchedpages": "Neatentataj paĝoj",
        "doubleredirects": "Duoblaj alidirektadoj",
        "doubleredirectstext": "Ĉi tiu paĝo montras paĝojn kiuj alidirektas al aliaj alidirektiloj.\nĈiu vico enhavas ligilojn ĉe la unua kaj dua alidirektadoj, kaj la unua linio de la dua alidirektado, kiu ĝenerale montras la \"veran\" celpaĝon, kiu celu la unuan alidirektadon.\n<del>Forstrekitaj</del> listeroj estis riparitaj.",
        "double-redirect-fixed-move": "[[$1]] estis alinomigita. Ĝi estis ĝisdatigita kaj nun ĝi alidirektas al [[$2]].",
-       "double-redirect-fixed-maintenance": "Riparas duoblan alidirektilon de [[$1]] al [[$2]].",
+       "double-redirect-fixed-maintenance": "Aŭtomate riparas duoblan alidirektilon de [[$1]] al [[$2]] dum prizorga tasko.",
        "double-redirect-fixer": "Alidirektila riparilo",
        "brokenredirects": "Rompitaj alidirektadoj",
        "brokenredirectstext": "La jenaj alidirektadoj ligas al neekzistantaj paĝoj:",
        "listgrouprights-namespaceprotection-header": "Nomspacaj restriktoj",
        "listgrouprights-namespaceprotection-namespace": "Nomspaco",
        "listgrouprights-namespaceprotection-restrictedto": "Rajtoj, kiuj permesas al uzanto redakti",
+       "trackingcategories-name": "Nomo de mesaĝo",
        "trackingcategories-nodesc": "Neniu priskribo estas disponebla.",
        "trackingcategories-disabled": "Kategorio estas malaktivigita",
        "mailnologin": "Neniu alsendota adreso",
        "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",
        "watchlistedit-normal-title": "Redakti atentaron",
        "watchlistedit-normal-legend": "Forigi titolojn de atentaro",
        "watchlistedit-normal-explain": "Jen titoloj de via atentaro.\nForigi titolon, marku la skatoleto apude de ĝi, kaj klaku \"{{int:Watchlistedit-normal-submit}}\".\nVi ankaŭ povas [[Special:EditWatchlist/raw|redakti la krudan liston]].",
-       "watchlistedit-normal-submit": "Forigi Titolojn",
+       "watchlistedit-normal-submit": "Forigi titolojn",
        "watchlistedit-normal-done": "{{PLURAL:$1|1 titolo estis forigita|$1 titoloj estis forigitaj}} de via atentaro:",
        "watchlistedit-raw-title": "Redakti krudan atentaron",
        "watchlistedit-raw-legend": "Redakti krudan atentaron",
        "watchlistedit-raw-done": "Via atentaro estas ĝisdatigita.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 titolo estis aldonita|$1 titoloj estis aldonitaj}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 titolo estis forigita|$1 titoloj estis forigitaj}}:",
+       "watchlistedit-clear-title": "Malplenigita atentaro",
+       "watchlistedit-clear-legend": "Malplenigi la atentaron",
+       "watchlistedit-clear-explain": "Ĉiuj el la titoloj estos forigitaj el via atentaro",
+       "watchlistedit-clear-titles": "Titoloj:",
+       "watchlistedit-clear-submit": "Malplenigi la atentaron (Tio estas definitiva!)",
+       "watchlistedit-clear-done": "Via atentaro estas malplenigita.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 titolo estis forigita|$1 titoloj estis forigitaj}}:",
+       "watchlistedit-too-many": "Estas tro da pagoj por montri ĉi tie.",
+       "watchlisttools-clear": "Malplenigi la atentaron",
        "watchlisttools-view": "Rigardi koncernajn ŝanĝojn",
        "watchlisttools-edit": "Rigardi kaj redakti atentaron",
        "watchlisttools-raw": "Redakti krudan atentaron",
        "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": "Instalitaj 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 7764be8..fa41f55 100644 (file)
                        "아라",
                        "Mcervera",
                        "Wifidel",
-                       "Macofe"
+                       "Macofe",
+                       "Koavf",
+                       "Themasterriot"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "tog-prefershttps": "Utilizar una conexión segura siempre que haya iniciado una sesión",
        "underline-always": "Siempre",
        "underline-never": "Nunca",
-       "underline-default": "Aspecto (skin) o valor predeterminado del navegador",
+       "underline-default": "Tema o valor predeterminado del navegador",
        "editfont-style": "Estilo de tipografía del área de edición:",
        "editfont-default": "Predeterminado del navegador",
        "editfont-monospace": "Tipo de letra monoespaciado",
        "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.",
        "difference-missing-revision": "No {{PLURAL:$2|se ha encontrado|se han encontrado}} {{PLURAL:$2|una revisión|$2 revisiones}} de esta diferencia ($1).\n\nEsto suele deberse a seguir un enlace obsoleto hacia una página que ya ha sido borrada.\nLos detalles pueden encontrarse en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrado].",
        "searchresults": "Resultados de la búsqueda",
        "searchresults-title": "Resultados de la búsqueda de «$1»",
-       "toomanymatches": "Se han obtenido muchos resultados; por favor intenta una consulta diferente",
        "titlematches": "Coincidencias de título de artículo",
        "textmatches": "Coincidencias de texto de artículo",
        "notextmatches": "No hay coincidencias de texto de artículo",
        "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",
        "right-editprotected": "Editar páginas protegidas como «{{int:protect-level-sysop}}»",
        "right-editsemiprotected": "Editar páginas protegidas como «{{int:protect-level-autoconfirmed}}»",
        "right-editinterface": "Editar la interfaz de usuario",
-       "right-editusercssjs": "Editar las páginas de CSS y JS de otros usuarios",
+       "right-editusercssjs": "Editar las páginas de CSS y JavaScript de otros usuarios",
        "right-editusercss": "Editar las páginas de CSS de otros usuarios",
-       "right-edituserjs": "Editar las páginas de JS de otros usuarios",
+       "right-edituserjs": "Editar las páginas de JavaScript de otros usuarios",
        "right-editmyusercss": "Editar tus archivos de usuario CSS",
        "right-editmyuserjs": "Editar tus propios archivos JavaScript de usuario",
        "right-viewmywatchlist": "Ver tu lista de seguimiento",
        "recentchanges-summary": "Sigue los cambios más recientes de la wiki en esta página.",
        "recentchanges-noresult": "No hubo cambios durante el período seleccionado que respondan a esos criterios.",
        "recentchanges-feed-description": "Realiza un seguimiento de los cambios más recientes en el wiki en este canal.",
-       "recentchanges-label-newpage": "Esta edición inició una página",
+       "recentchanges-label-newpage": "Esta edición creó una página",
        "recentchanges-label-minor": "Esta es una edición menor",
        "recentchanges-label-bot": "Esta edición fue realizada por un robot",
        "recentchanges-label-unpatrolled": "Esta edición todavía no se ha patrullado",
        "largefileserver": "El tamaño de este archivo es mayor del que este servidor admite por configuración.",
        "emptyfile": "El archivo que has intentado subir parece estar vacío; por favor, verifica que realmente se trate del archivo que intentabas subir.",
        "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 no estás seguro de querer cambiarlo.\n[[$1|thumb]]",
+       "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]]",
        "nolicense": "Ninguna seleccionada",
        "license-nopreview": "(Previsualización no disponible)",
        "upload_source_url": " (una URL válida y accesible públicamente)",
-       "upload_source_file": " (un archivo en tu disco)",
+       "upload_source_file": "(un archivo en tu computadora)",
        "listfiles-summary": "Esta página especial muestra todos los archivos subidos.\nCuando el usuario la filtra, solo se muestran los archivos cargados por el usuario en su versión más reciente.",
        "listfiles_search_for": "Buscar por nombre de imagen:",
        "imgfile": "archivo",
        "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",
        "patrol-log-header": "Este es un registro de revisiones patrulladas.",
        "log-show-hide-patrol": "$1 registro de patrullaje",
        "deletedrevision": "Borrada revisión antigua $1",
-       "filedeleteerror-short": "Se produjo un error al borrar el archivo: $1",
+       "filedeleteerror-short": "Error al borrar el archivo: $1",
        "filedeleteerror-long": "Se han producido errores mientras se borraba el archivo:\n\n$1",
        "filedelete-missing": "No se pudo borrar el archivo \"$1\" porque no existe.",
        "filedelete-old-unregistered": "La revisión de archivo \"$1\" no está en la base de datos.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|un título fue removido|Los títulos $1 fueron removidos}}:",
        "watchlistedit-too-many": "Hay demasiadas páginas para mostrar aquí.",
        "watchlisttools-clear": "Limpiar la lista de seguimiento",
-       "watchlisttools-view": "Ver cambios",
+       "watchlisttools-view": "Ver cambios relevantes",
        "watchlisttools-edit": "Ver y editar tu lista de seguimiento",
        "watchlisttools-raw": "Editar lista de seguimiento en crudo",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discusión]])",
        "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": "Temas instalados",
        "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",
+       "version-skin-colheader-name": "Tema",
        "version-ext-colheader-version": "Versión",
        "version-ext-colheader-license": "Licencia",
        "version-ext-colheader-description": "Descripción",
        "api-error-filetype-banned": "Este tipo de archivo está prohibido.",
        "api-error-filetype-banned-type": "$1 {{PLURAL:$4|no es un tipo de archivo permitido|no son tipos de archivos permitidos}}. {{PLURAL:$3|El tipo de archivo permitido es|Los tipos de archivos permitidos son}} $2.",
        "api-error-filetype-missing": "El archivo no tiene extensión de archivo.",
-       "api-error-hookaborted": "La modificación que intentaste hacer fue cancelada por un gancho de extensión.",
+       "api-error-hookaborted": "La modificación que intentaste hacer fue cancelada por una extensión.",
        "api-error-http": "Error interno: No se puede conectar al servidor.",
        "api-error-illegal-filename": "El nombre de archivo no está permitido.",
        "api-error-internal-error": "Error interno: Algo salió mal al procesar tu subida en el wiki.",
        "expand_templates_remove_nowiki": "Suprimir <nowiki> etiquetas en resultado",
        "expand_templates_generate_xml": "Mostrar el árbol XML.",
        "expand_templates_generate_rawhtml": "Mostrar HTML en crudo",
-       "expand_templates_preview": "Previsualización"
+       "expand_templates_preview": "Previsualización",
+       "pagelanguage": "Selector de idioma de página",
+       "pagelang-name": "Página",
+       "pagelang-language": "Idioma",
+       "pagelang-use-default": "Utilizar el idioma predeterminado",
+       "pagelang-select-lang": "Seleccionar idioma",
+       "right-pagelang": "Cambiar el idioma de la página",
+       "action-pagelang": "cambiar el idioma de la página",
+       "log-name-pagelang": "Registro de cambios en idiomas",
+       "log-description-pagelang": "Este es un registro de los cambios en los idiomas de las páginas.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} el idioma de la página «$3» del $4 al $5."
 }
index 0408191..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.",
        "difference-missing-revision": "Selle erinevuste vaate {{PLURAL:$2|üht|$2}} redaktsiooni ($1) ei leitud.\n\nHarilikult tähendab see seda, et sind siia juhatanud link on vananenud ja siin asunud lehekülg on kustutatud.\nÜksikasjad leiad [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} kustutamislogist].",
        "searchresults": "Otsingu tulemused",
        "searchresults-title": "Otsingu \"$1\" tulemused",
-       "toomanymatches": "Liiga palju tulemusi, ürita teistsugust päringut",
        "titlematches": "Vasted lehekülje pealkirjades",
        "textmatches": "Vasted lehekülje tekstides",
        "notextmatches": "Vasted lehekülje tekstides puuduvad.",
        "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",
        "windows-nonascii-filename": "Sellel vikil puudub erimärkidega failinimede tugi.",
        "fileexists": "Sellise nimega fail on juba olemas. Palun vaata lehekülge <strong>[[:$1]]</strong>, kui sa pole kindel, kas soovid seda muuta.\n[[$1|thumb]]",
        "filepageexists": "Selle faili kirjelduslehekülg <strong>[[:$1]]</strong> on juba loodud, aga selle nimega faili hetkel pole.\nSinu sisestatud kokkuvõtet ei kuvata kirjeldusleheküljel.\nSinu kokkuvõtte kuvamiseks tuleb kirjelduslehekülge eraldi redigeerida.\n[[$1|thumb]]",
-       "fileexists-extension": "Sarnase nimega fail on olemas: [[$2|thumb]]\n* Üleslaetava faili nimi: <strong>[[:$1]]</strong>\n* Olemasoleva faili nimi: <strong>[[:$2]]</strong>\nPalun vali teistsugune nimi.",
+       "fileexists-extension": "Sarnase nimega fail on olemas: [[$2|thumb]]\n* Üleslaaditava faili nimi: <strong>[[:$1]]</strong>\n* Olemasoleva faili nimi: <strong>[[:$2]]</strong>\nKas tahaksid ehk kasutada paremini eristavat nime?",
        "fileexists-thumbnail-yes": "See paistab olevat vähendatud suurusega pilt (''pisipilt''). [[$1|thumb]]\nPalun vaata faili <strong>[[:$1]]</strong>.\nKui vaadatud fail on sama pilt algupärases suuruses, pole vaja täiendavat pisipilti üles laadida.",
        "file-thumbnail-no": "Failinimi algab eesliitega <strong>$1</strong>.\nSee paistab vähendatud suurusega pilt (''pisipilt'') olevat.\nKui sul on ka selle pildi täislahutusega versioon, laadi palun hoopis see üles, vastasel korral muuda palun faili nime.",
        "fileexists-forbidden": "Sellise nimega fail on juba olemas, seda ei saa üle kirjutada.\nPalun pöörduge tagasi ja laadige fail üles mõne teise nime all. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Failide kustutamine ja taastamine on hoolduse ajaks keelatud.",
        "filedelete-maintenance-title": "Faili ei saa kustutada",
        "mimesearch": "MIME otsing",
-       "mimesearch-summary": "Selle leheküljega saab faile otsida MIME tüübi järgi.\nSisesta kujul tüüp/alamtüüp, näiteks <code>image/jpeg</code>.",
+       "mimesearch-summary": "Selle leheküljega saab faile otsida MIME tüübi järgi.\nSisesta kujul sisutüüp/alamtüüp või sisutüüp/*, näiteks <code>image/jpeg</code>.",
        "mimetype": "MIME tüüp:",
        "download": "laadi alla",
        "unwatchedpages": "Jälgimata lehed",
        "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 3455cc7..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",
        "diff-empty": "(Ez dago alderik)",
        "searchresults": "Bilaketaren emaitzak",
        "searchresults-title": "\"$1(e)rako\" emaitzak bilatu",
-       "toomanymatches": "Aukera gehiegi aurkitu dira, saia zaitez beste eskaera ezberdin batekin",
        "titlematches": "Emaitzak artikuluen izenburuetan",
        "textmatches": "Emaitza orrialde testuetan",
        "notextmatches": "Ez dago bat datorren orrialde testurik",
        "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 40bfabc..77c1b16 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": "صفحهٔ مبدأ باید عنوانی معتبر داشته باشد.",
        "difference-missing-revision": "{{PLURAL:$2|یک ویرایش|$2 ویرایش}}  از تفاوت نسخه‌ها ($1) {{PLURAL:$2|یافت|یافت}}  نشد.\n\nمعمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.\nمی‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.",
        "searchresults": "نتایج جستجو",
        "searchresults-title": "نتایج جستجو برای «$1»",
-       "toomanymatches": "تعداد موارد مطابق خیلی زیاد بود، لطفاً درخواست دیگری را امتحان کنید",
        "titlematches": "تطبیق عنوان مقاله",
        "textmatches": "تطبیق متن مقاله",
        "notextmatches": "متن هیچ مقاله‌ای مطابقت ندارد",
        "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": "قلاب‌ها",
        "version-hook-name": "نام قلاب",
        "version-hook-subscribedby": "وارد شده توسط",
        "version-version": "(نسخه  $1)",
+       "version-no-ext-name": "[بدون نام]",
        "version-svn-revision": "(&رلم;r$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": "توصیفات",
        "expand_templates_remove_nowiki": "خنثی کردن تگ‌های <nowiki> در نتیجه",
        "expand_templates_generate_xml": "نمایش درخت تجزیهٔ XML",
        "expand_templates_generate_rawhtml": "نمایش اچ‌تی‌ام‌ال خام",
-       "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 a4b0188..d554fe6 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-box": "Yhdistä kahden sivun muutoshistoria",
        "mergehistory-from": "Lähdesivu",
        "mergehistory-into": "Kohdesivu",
-       "mergehistory-list": "Liitettävissä olevat muutokset",
+       "mergehistory-list": "Sivuhistoria, joka voidaan yhdistää",
        "mergehistory-merge": "Seuraavat sivun [[:$1]] muutokset voidaan liittää sivun [[:$2]] muutoshistoriaan. Voit valita version, jota myöhempiä muutoksia ei liitetä. Selainlinkkien käyttäminen kadottaa tämän valinnan.",
        "mergehistory-go": "Etsi muutokset",
        "mergehistory-submit": "Yhdistä versiot",
        "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.",
        "mergehistory-autocomment": "Yhdisti sivun [[:$1]] sivuun [[:$2]]",
        "mergehistory-comment": "Yhdisti sivun [[:$1]] sivuun [[:$2]]: $3",
        "mergehistory-same-destination": "Lähde- ja kohdesivut eivät voi olla samat",
-       "mergehistory-reason": "Syy",
+       "mergehistory-reason": "Syy:",
        "mergelog": "Yhdistämisloki",
        "pagemerge-logentry": "liitti sivun [[$1]] sivuun [[$2]] (muokkaukseen $3 asti)",
        "revertmerge": "Kumoa yhdistäminen",
        "difference-missing-revision": "{{PLURAL:$2|Yhtä versiota|$2 versiota}} tästä vertailusta ($1) {{PLURAL:$2|ei}} löytynyt.\n\nUseimmiten tämä johtuu vanhentuneesta vertailulinkistä poistettuun sivuun.\nLisätietoja löytyy [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} poistolokista].",
        "searchresults": "Hakutulokset",
        "searchresults-title": "Haun tulokset hakusanalle ”$1”",
-       "toomanymatches": "Liian monta osumaa. Kokeile erilaista kyselyä.",
        "titlematches": "Osumat sivujen otsikoissa",
        "textmatches": "Osumat sivujen teksteissä",
        "notextmatches": "Hakusanaa ei löytynyt sivujen teksteistä",
        "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",
        "deletedcontributions-title": "Poistetut muokkaukset",
        "sp-deletedcontributions-contribs": "muokkaukset",
        "linksearch": "Etsi ulkoisia linkkejä",
-       "linksearch-pat": "Osoite",
-       "linksearch-ns": "Nimiavaruus",
+       "linksearch-pat": "Hakuehto:",
+       "linksearch-ns": "Nimiavaruus:",
        "linksearch-ok": "Etsi",
        "linksearch-text": "Jokerimerkkejä, kuten \"*.wikipedia.org\", voidaan käyttää.\nVaaditaan vähintään ylätason verkkotunnus, esimerkiksi \"*.org\".<br />\n{{PLURAL:$2|Tuettu protokolla|Tuetut protokollat}}: <code>$1</code> (oletuksena on <code>http://</code>, jos protokollaa ei määritetä).",
        "linksearch-line": "$1 on linkitetty sivulta $2",
        "undelete-error-long": "Tiedoston palauttaminen epäonnistui:\n\n$1",
        "undelete-show-file-confirm": "Haluatko varmasti nähdä poistetun version tiedostosta <nowiki>$1</nowiki>, joka on tallennettu $2 kello $3?",
        "undelete-show-file-submit": "Kyllä",
-       "namespace": "Nimiavaruus",
+       "namespace": "Nimiavaruus:",
        "invert": "Käänteinen valinta",
        "tooltip-invert": "Valitse tämä kohta, jos haluat piilottaa muutokset sivuihin valitussa nimiavaruudessa (ja liittyviin nimiavaruuksiin, jos valittu)",
-       "namespace_association": "Liitetty nimiavaruus",
-       "tooltip-namespace_association": "Valitse tämä kohta, jos haluat sisällyttää myös keskustelu- tai aihe-nimiavaruudet, jotka on liitetty valittuun nimiavaruuteen",
+       "namespace_association": "Liittyvä nimiavaruus",
+       "tooltip-namespace_association": "Valitse tämä kohta, jos haluat sisällyttää ne keskustelu- tai aihe-nimiavaruudet, jotka liittyvät valittuun nimiavaruuteen",
        "blanknamespace": "(sivut)",
        "contributions": "{{GENDER:$1|Käyttäjän}} muokkaukset",
        "contributions-title": "Käyttäjän $1 muokkaukset",
        "blockip-legend": "Estä käyttäjä",
        "blockiptext": "Tällä toiminnolla voit estää käyttäjätunnusta tai IP-osoitetta muokkaamasta.<br />\nTällainen muokkausesto pitäisi asettaa vain vandalismin torjumiseksi ja [[{{MediaWiki:Policy-url}}|käytännön]] mukaisesti.\nKirjoita eston syy alla olevaan kenttään.",
        "ipaddressorusername": "IP-osoite tai käyttäjätunnus",
-       "ipbexpiry": "Kesto",
-       "ipbreason": "Syy",
+       "ipbexpiry": "Vanhentuu:",
+       "ipbreason": "Syy:",
        "ipbreason-dropdown": "*Yleiset estosyyt\n** Väärän tiedon lisääminen\n** Sisällön poistaminen\n** Mainoslinkkien lisääminen\n** Sotkeminen tai roskan lisääminen\n** Häiriköinti\n** Useamman käyttäjätunnuksen väärinkäyttö\n** Sopimaton käyttäjätunnus",
        "ipb-hardblock": "Estä sisäänkirjautuneita käyttäjiä muokkaamasta tästä IP-osoitteesta",
        "ipbcreateaccount": "Estä tunnusten luonti",
        "allmessages-filter-unmodified": "Muuttamaton",
        "allmessages-filter-all": "Kaikki",
        "allmessages-filter-modified": "Muutettu",
-       "allmessages-prefix": "Suodata etuliitteellä",
+       "allmessages-prefix": "Suodata etuliitteellä:",
        "allmessages-language": "Kieli:",
        "allmessages-filter-submit": "Siirry",
        "allmessages-filter-translate": "Käännä",
        "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 */",
        "siteuser": "{{GRAMMAR:genitive|{{SITENAME}}}} käyttäjä $1",
        "anonuser": "{{GRAMMAR:genitive|{{SITENAME}}}} anonyymi käyttäjä $1",
        "lastmodifiedatby": "Tätä sivua muokkasi viimeksi $3 $1 kello $2.",
-       "othercontribs": "Perustuu työlle, jonka teki $1.",
+       "othercontribs": "Perustuu seuraavien tekijöiden työhön: $1.",
        "others": "muut",
        "siteusers": "{{GRAMMAR:genitive|{{SITENAME}}}} {{PLURAL:$2|käyttäjä|käyttäjät}} $1",
        "anonusers": "{{GRAMMAR:genitive|{{SITENAME}}}} {{PLURAL:$2|anonyymi käyttäjä|anonyymit käyttäjät}} $1",
        "pageinfo-display-title": "Sivun otsikko",
        "pageinfo-default-sort": "Oletuslajitteluavain",
        "pageinfo-length": "Sivun pituus (tavuina)",
-       "pageinfo-article-id": "Sivun tunniste",
+       "pageinfo-article-id": "Sivun tunnistenumero",
        "pageinfo-language": "Sivun sisällön kieli",
        "pageinfo-content-model": "Sivun sisällön muoto",
        "pageinfo-robot-policy": "Hakukonemerkinnät",
        "pageinfo-toolboxlink": "Sivun tiedot",
        "pageinfo-redirectsto": "Ohjaus sivulle",
        "pageinfo-redirectsto-info": "tiedot",
-       "pageinfo-contentpage": "Lasketaan sisältösivuksi",
+       "pageinfo-contentpage": "Kohdellaan sisältösivuna",
        "pageinfo-contentpage-yes": "Kyllä",
        "pageinfo-protect-cascading": "Tämä on tarttuvan suojauksen lähdesivu",
        "pageinfo-protect-cascading-yes": "Kyllä",
        "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",
        "intentionallyblankpage": "Tämä sivu on tarkoituksellisesti tyhjä.",
        "external_image_whitelist": " #Älä muuta tätä riviä lainkaan.<pre>\n#Laita säännöllisten lausekkeiden palaset (vain osa, joka menee //-merkkien väliin) alle\n#Niitä verrataan ulkoisten (suoralinkitettyjen) kuvien URLeihin\n#Ne jotka sopivat, näytetään kuvina, muutoin kuviin näytetään vain linkit\n#Rivit, jotka alkavat #-merkillä ovat kommentteja\n#Tämä on riippumaton kirjainkoosta\n\n#Laita kaikki säännöllisten lausekkeiden palaset tämän rivit yläpuolelle. Älä muuta tätä riviä lainkaan</pre>",
        "tags": "Voimassa olevat muutosmerkinnät",
-       "tag-filter": "[[Special:Tags|Merkintäsuodatin]]",
+       "tag-filter": "[[Special:Tags|Merkintä]]suodatin:",
        "tag-filter-submit": "Suodata",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merkintä|Merkinnät}}]]: $2)",
        "tags-title": "Merkinnät",
        "expand_templates_remove_nowiki": "Poista <nowiki>-tagit tulosteesta",
        "expand_templates_generate_xml": "Näytä XML-jäsennyspuu",
        "expand_templates_generate_rawhtml": "Näytä raaka HTML",
-       "expand_templates_preview": "Esikatselu"
+       "expand_templates_preview": "Esikatselu",
+       "pagelanguage": "Sivun kielen valinta",
+       "pagelang-name": "Sivu",
+       "pagelang-language": "Kieli",
+       "pagelang-use-default": "Käytä oletuskieltä",
+       "pagelang-select-lang": "Valitse kieli",
+       "right-pagelang": "Vaihda sivun kieli",
+       "action-pagelang": "muuttaa sivun kieliasetuksia",
+       "log-name-pagelang": "Kielenvaihtoloki",
+       "log-description-pagelang": "Tämä on loki, johon merkitään muutokset sivujen kieliasetuksissa.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutti}} sivun kieltä sivulla $3 kielestä $4 kieleksi $5."
 }
index 795825f..2e56326 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",
        "namespaces": "Navnarúm",
        "variants": "Ymisk sløg",
        "permalink": "Støðug slóð",
        "print": "Prenta",
        "view": "Vís",
+       "view-foreign": "Vís á $1",
        "edit": "Rætta",
+       "edit-local": "Rætta lokala frágreiðing",
        "create": "Stovna",
+       "create-local": "Skriva lokala frágreiðing",
        "editthispage": "Rætta hesa síðuna",
        "create-this-page": "Stovna hesa síðuna",
        "delete": "Strika",
        "gotaccountlink": "Rita inn",
        "userlogin-resetlink": "Hevur tú gloymt tínar logg inn upplýsingar",
        "userlogin-resetpassword-link": "Hevur tú gloymt títt loyniorð?",
+       "userlogin-helplink2": "Hjálp til innritan",
        "userlogin-loggedin": "Tú ert longu innritað/ur sum {{GENDER:$1|$1}}.\nNýt formularin niðanfyri fyri at rita inn sum ein annar brúkari.",
        "userlogin-createanother": "Stovna eina aðra kontu",
        "createacct-emailrequired": "Teldupost adressa",
        "loginlanguagelabel": "Mál: $1",
        "suspicious-userlogout": "Tín fyrispurningur um at útrita var noktaður, tí tað sær út til at hann varð sendur frá einum oyðiløgdum kaga ella caching proxy.",
        "createacct-another-realname-tip": "Veruligt navn er valfrítt.\nUm tú velur at skriva tað, so verður tað nýtt til at geva brúkaranum æruna fyri hennara/hansara  arbeiði.",
+       "pt-login": "Rita inn",
+       "pt-login-button": "Rita inn",
+       "pt-createaccount": "Stovna kontu",
+       "pt-userlogout": "Rita út",
        "php-mail-error-unknown": "Ókend villa í PHP'sa teldupost () funktión.",
        "user-mail-no-addy": "Royndi at senda t-post uttan eina t-post adressu.",
        "user-mail-no-body": "Tú royndi at senda ein teldupost við ongum ella órímiliga stuttum innihaldi.",
        "changepassword": "Broyt loyniorð",
-       "resetpass_announce": "Tú ritaði inn við einum fyribils loyniorði, sum tú hevur fingið við telduposti.\nFyri at gera innritanina lidna, mást tú velja tær eitt nýtt loyniorð her:",
+       "resetpass_announce": "Fyri at gera innritanina lidna, mást tú velja tær eitt nýtt loyniorð.",
        "resetpass_header": "Broyt loyniorði á kontuni",
        "oldpassword": "Gamalt loyniorð:",
        "newpassword": "Nýtt loyniorð:",
        "resetpass-submit-loggedin": "Broyt loyniorð",
        "resetpass-submit-cancel": "Ógildað",
        "resetpass-wrong-oldpass": "Ógyldug fyribils ella verandi loyniorð.\nMøguliga hevur tú longu broytt títt loyniorð ella biðið um eitt nýtt fyribils loyniorð.",
+       "resetpass-recycled": "Vinarliga broyt títt loyniorð til okkurt annað enn tað tú hevur í løtuni.",
+       "resetpass-temp-emailed": "Tú hevur ritað inn við einum fyribils loyniorði frá telduposti. \nFyri at gjøgnumføra innritanina, so mást tú velja tær eitt nýtt loyniorð og skriva tað her:",
        "resetpass-temp-password": "Fyribils loyniorð",
        "resetpass-abort-generic": "Broyting av loyniorði bleiv avbrotin av einari víðkan.",
+       "resetpass-expired": "Títt loyniorð er útgingið. Vinarliga vel tær eitt nýtt, so tú kanst rita inn.",
+       "resetpass-expired-soft": "Títt loyniorð er útgingið og má broytast. Vinarliga vel tær eitt nýtt nú ella trýst á \"{{int:resetpass-submit-cancel}}\" fyri at broyta tað seinni.",
        "passwordreset": "Nullstilla loyniorðið",
        "passwordreset-text-one": "Útfyll henda teigin fyri at nullstilla títt loyniorð.",
        "passwordreset-text-many": "{{PLURAL:$1|Útfyll í ein av teigunum fyri at móttaka eitt fyribils loyniorð við telduposti.}}",
        "edit-gone-missing": "Tað var ikki møguligt at dagføra síðuna.\nTað sær út til at hon er blivin strikað.",
        "edit-conflict": "Rættingar trupulleiki (konflikt).",
        "edit-no-change": "Tín rætting var sæð burtur frá, tí ongin broyting varð gjørd í tekstinum.",
+       "postedit-confirmation-created": "Síðan er upprættað.",
+       "postedit-confirmation-restored": "Síðan er endurskapað.",
        "postedit-confirmation-saved": "Tín rætting varð goymd.",
        "edit-already-exists": "Tað var ikki møguligt at upprætta nýggja síðu.\nSíðan er longu til.",
        "defaultmessagetext": "Standard boðtekstur",
        "undo-summary-username-hidden": "Angra versjón $1 sum ein fjaldur brúkari hevur gjørt",
        "cantcreateaccounttitle": "Tað ber ikki til at upprætta konto",
        "cantcreateaccount-text": "Upprættan frá hesi IP adressuni ('''$1''') er blivin sperrað av [[User:$3|$3]]. Orsøkin til sperringina sigst vera ''$2''\n\n$3 sigur orsøkina vera ''$2''",
+       "cantcreateaccount-range-text": "IP adressur í intervallinum '''$1''', sum fevnir um tína IP adressu ('''$4'''), eru sperraðar fyri upprættan av nýggjari konto av [[User:$3|$3]].\n\n$3 segði orsøkina vera ''$2''",
        "viewpagelogs": "Sí logg fyri hesa grein",
        "nohistory": "Eingin broytisøga er til hesa síðuna.",
        "currentrev": "Núverandi endurskoðan",
        "currentrev-asof": "Seinasta endurskoðan sum var $1",
        "revisionasof": "Endurskoðan frá $1",
-       "revision-info": "Versjón frá $1 av $2",
+       "revision-info": "Versjón frá $1 av {{GENDER:$6|$2}}$7",
        "previousrevision": "←Eldri endurskoðan",
        "nextrevision": "Nýggjari endurskoðan→",
        "currentrevisionlink": "Skoða verandi endurskoðan",
        "diff-multi-manyusers": "({{PLURAL:$1|Ein versjón sum liggur ímillum|$1 versjónir sum liggja ímillum}} skrivaðar av meira enn $2 {{PLURAL:$2|brúkara|brúkarum}} ikki víst)",
        "searchresults": "Leitúrslit",
        "searchresults-title": "Leiti úrslit fyri \"$1\"",
-       "toomanymatches": "Alt ov nógvar úrslit vóru funnin, vinarliga royn aftur við nýggjum fyrispurningi",
        "titlematches": "Síðu heiti samsvarar",
        "textmatches": "Teksturin á síðuni samsvarar",
        "notextmatches": "Ongin síðutekstur samsvarar",
        "search-section": "(sektión $1)",
        "search-suggest": "Meinti tú: $1",
        "search-interwiki-caption": "Líknandi verkætlanir",
-       "search-interwiki-default": "$1 úrslit:",
+       "search-interwiki-default": "Úrslit frá $1:",
        "search-interwiki-more": "(meira)",
        "search-relatedarticle": "Líknandi",
        "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>.",
+       "showingresultsinrange": "Niðanfyri verða víst upp til {{PLURAL:$1|<strong>1</strong> úrslit|<strong>$1</strong> úrslit}} í økinum #<strong>$2</strong> til #<strong>$3</strong>.",
        "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",
        "powersearch-togglelabel": "Kanna eftir:",
        "powersearch-toggleall": "Alt",
        "powersearch-togglenone": "Ongi",
+       "powersearch-remember": "Minst til tað valda til framtíðar leitingar",
        "search-external": "Uttanhýsis leitan",
        "searchdisabled": "{{SITENAME}} leitan er sett úr gildi.\nTú kanst leita via Google ímeðan.\nLegg til merkis, at teirra innihaldsyvirlit av {{SITENAME}} kann vera gamalt og ikki dagført.",
        "search-error": "Ein feilur hendi undir leitanini: $1",
        "preferences": "Innstillingar",
        "mypreferences": "Innstillingar",
        "prefs-edits": "Tal av rættingum:",
+       "prefsnologintext2": "Vinarliga $1 fyri at broyta tínar innstillingat.",
        "prefs-skin": "Hamur",
        "skin-preview": "Forskoðan",
        "datedefault": "Ongi serlig ynskir",
        "right-move": "Flyt síður",
        "right-move-subpages": "Flyt síður saman við undirsíðum teirra",
        "right-move-rootuserpages": "Flyta høvuðs brúkarasíður",
+       "right-move-categorypages": "Flyt bólkasíður",
        "right-movefile": "Flyt fílur",
        "right-suppressredirect": "Flyta síður uttan at upprætta víðaristilling frá tí gomlu síðuni.",
        "right-upload": "Legg upp fílur",
        "action-createpage": "upprætta síður",
        "action-createtalk": "upprætta kjak síður",
        "action-createaccount": "upprætta hesa brúkarakontuna",
+       "action-history": "vís søguna hjá hesi síðu",
        "action-minoredit": "marka hesa rætting sum lítla",
        "action-move": "flyt hesa síðu",
        "action-move-subpages": "flyt hesa síðu og undirsíður hennara",
        "action-move-rootuserpages": "flyt høvuðs brúkarasíður",
+       "action-move-categorypages": "Flyt bólkasíður",
        "action-movefile": "flyt hesa fílu",
        "action-upload": "send hesa fílu upp",
        "action-reupload": "yvirskriva hesa verandi fíluna",
        "recentchanges-label-minor": "Hetta er ein lítil rætting",
        "recentchanges-label-bot": "Henda rætting varð gjørd av einum botti",
        "recentchanges-label-unpatrolled": "Henda rætting er ikki blivin eftirkannað enn",
+       "recentchanges-label-plusminus": "Støddin á síðuni broyttist við hesum talinum av bytes",
        "recentchanges-legend-heading": "'''Teknfrágreiðing:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sí eisini [[Special:NewPages|yvirlit yvir nýggjar síður]])",
-       "rcnotefrom": "Niðanfyri standa broytingarnar síðani '''$2''', (upp til '''$1''' er sýndar).",
+       "rcnotefrom": "Niðanfyri verða broytingar síðan <strong>$2</strong> (upp til <strong>$1</strong> vístar).",
        "rclistfrom": "Sýn nýggjar broytingar byrjandi við $3 $2",
        "rcshowhideminor": "$1 minni rættingar",
+       "rcshowhideminor-show": "Vís",
+       "rcshowhideminor-hide": "Fjal",
        "rcshowhidebots": "$1 bottar",
+       "rcshowhidebots-show": "Vís",
+       "rcshowhidebots-hide": "Fjal",
        "rcshowhideliu": "$1 skrásettir brúkarar",
+       "rcshowhideliu-show": "Vís",
+       "rcshowhideliu-hide": "Fjal",
        "rcshowhideanons": "$1 navnleysar brúkarar",
+       "rcshowhideanons-show": "Vís",
+       "rcshowhideanons-hide": "Fjal",
        "rcshowhidepatr": "$1 eftirhugdar rættingar",
+       "rcshowhidepatr-show": "Vís",
+       "rcshowhidepatr-hide": "Fjal",
        "rcshowhidemine": "$1 mínar rættingar",
+       "rcshowhidemine-show": "Vís",
+       "rcshowhidemine-hide": "Fjal",
        "rclinks": "Sýn seinastu $1 broytingarnar seinastu $2 dagarnar<br />$3",
        "diff": "munur",
        "hist": "søga",
        "lockmanager-fail-svr-acquire": "Kundi ikki skaffa lás til dátagrunnin $1.",
        "lockmanager-fail-svr-release": "Kundi ikki loysa lásini í ambætaranum $1.",
        "uploadstash": "Legg út stash",
+       "uploadstash-clear": "Rudda burtur stashaðar fílur",
        "uploadstash-refresh": "Uppfrískað listan við fílum",
        "img-auth-accessdenied": "Atgongd noktað",
        "img-auth-badtitle": "Tað bar ikki til at gera eitt heiti útfrá \"$1\".",
        "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 0f1dacc..cb06d62 100644 (file)
                        "לערי ריינהארט",
                        "아라",
                        "Scoopfinder",
-                       "Akeron"
+                       "Akeron",
+                       "Linedwell",
+                       "Yona b"
                ]
        },
        "tog-underline": "Souligner les liens :",
        "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.",
        "difference-missing-revision": "{{PLURAL:$2|Une révision|$2 révisions}} de cette différence ($1) {{PLURAL:$2|n'a pas été trouvée|n'ont pas été trouvées}}.\n\nCela survient en général en suivant un lien de différence obsolète vers une page qui a été supprimée.\nVous pouvez trouver des détails dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].",
        "searchresults": "Résultats de la recherche",
        "searchresults-title": "Résultats de recherche pour « $1 »",
-       "toomanymatches": "Un trop grand nombre d'occurrences a été renvoyé, veuillez soumettre une requête différente.",
        "titlematches": "Correspondances dans les titres des pages",
        "textmatches": "Correspondances dans le texte des pages",
        "notextmatches": "Aucun texte de page ne correspond à la recherche.",
        "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",
        "largefileserver": "La taille de ce fichier est supérieure au maximum autorisé.",
        "emptyfile": "Le fichier que vous voulez importer semble vide.\nCeci peut être dû à une erreur dans le nom du fichier.\nVeuillez vérifier que vous désirez vraiment importer ce fichier.",
        "windows-nonascii-filename": "Ce wiki ne supporte pas les noms de fichiers avec des caractères spéciaux.",
-       "fileexists": "Un fichier existe déjà sous ce nom.\nMerci de vérifier <strong>[[:$1]]</strong> si vous n'êtes pas certain{{GENDER:||e|}} de vouloir le modifier.\n[[$1|thumb]]",
+       "fileexists": "Un fichier existe déjà sous ce nom.\nMerci de vérifier <strong>[[:$1]]</strong> si vous n'êtes pas certain{{GENDER:||e|}} de vouloir le remplacer.\n[[$1|thumb]]",
        "filepageexists": "La page de description pour ce fichier a déjà été créée ici <strong>[[:$1]]</strong>, mais aucun fichier n'existe actuellement sous ce nom.\nLe résumé que vous allez spécifier n'apparaîtra pas sur la page de description.\nPour que ce soit le cas, vous devrez modifier manuellement la page. [[$1|thumb]]",
-       "fileexists-extension": "Un fichier existe avec un nom proche : [[$2|thumb]]\n* Nom du fichier à importer : <strong>[[:$1]]</strong>\n* Nom du fichier existant : <strong>[[:$2]]</strong>\nVeuillez choisir un autre nom.",
+       "fileexists-extension": "Un fichier existe avec un nom proche : [[$2|thumb]]\n* Nom du fichier à importer : <strong>[[:$1]]</strong>\n* Nom du fichier existant : <strong>[[:$2]]</strong>\nPeut-être voulez-vous utiliser un nom plus explicite ?",
        "fileexists-thumbnail-yes": "Le fichier semble être une image en taille réduite ''(vignette)''. [[$1|thumb]]\nVeuillez vérifier le fichier <strong>[[:$1]]</strong>.\nSi le fichier vérifié est la même image avec la taille initiale, il n'y a pas besoin d'importer une version réduite.",
        "file-thumbnail-no": "Le nom du fichier commence par <strong>$1</strong>.\nIl est possible qu'il s'agisse d'une version réduite ''(vignette)''.\nSi vous disposez du fichier en haute résolution, importez-le, sinon veuillez modifier son nom.",
        "fileexists-forbidden": "Un fichier avec ce nom existe déjà et ne peut pas être écrasé.\nSi vous voulez toujours importer votre fichier, veuillez revenir en arrière et utiliser un autre nom. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "La suppression et restauration de fichiers est temporairement désactivée durant la maintenance.",
        "filedelete-maintenance-title": "Impossible de supprimer le fichier",
        "mimesearch": "Recherche par type de contenu MIME",
-       "mimesearch-summary": "Cette page vous permet de lister les fichiers accessibles par ce wiki en fonction de leur type de contenu MIME.\nEntrée : ''typedecontenu''/''sous-type'', par exemple <code>image/jpeg</code>.",
+       "mimesearch-summary": "Cette page vous permet de filtrer les fichiers par leur type de contenu MIME.\nEntrée : type_de_contenu/sous-type ou type_de_contenu/*, par ex. <code>image/jpeg</code>.",
        "mimetype": "Type MIME :",
        "download": "télécharger",
        "unwatchedpages": "Pages ne faisant partie d’aucune liste de suivi",
        "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",
        "expand_templates_remove_nowiki": "Supprime les marqueurs <nowiki> dans le résultat",
        "expand_templates_generate_xml": "Voir l’arborescence d’analyse XML",
        "expand_templates_generate_rawhtml": "Afficher le HTML brut",
-       "expand_templates_preview": "Aperçu du rendu"
+       "expand_templates_preview": "Aperçu du rendu",
+       "pagelanguage": "Sélecteur de langue de la page",
+       "pagelang-name": "Page",
+       "pagelang-language": "Langue",
+       "pagelang-use-default": "Utiliser la langue par défaut",
+       "pagelang-select-lang": "Sélectionner la langue",
+       "right-pagelang": "Changer la langue de la page",
+       "action-pagelang": "changer la langue de la page",
+       "log-name-pagelang": "Tracer les changements de langue",
+       "log-description-pagelang": "Ceci est un journal des changements dans les langues des pages.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a changé}} la langue de la page $3 de $4 à $5."
 }
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 eecbc54..6bb0457 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",
        "permalink": "Permanent link",
        "print": "Drük",
        "view": "Lees",
+       "view-foreign": "Üüb $1 uunluke",
        "edit": "Bewerke",
+       "edit-local": "Lokaal beskriiwang bewerke",
        "create": "Maage",
+       "create-local": "Lokaal beskriiwang diartudu",
        "editthispage": "Sidj bewerke",
        "create-this-page": "Nei sidj maage",
        "delete": "Strik",
        "jumptonavigation": "Nawigatjuun",
        "jumptosearch": "Schük",
        "view-pool-error": "Det dää üs iarag, a servers san auerläästet.\nTuföl brükern ferschük, det sidj tu beschüken.\nWees so gud an teew en uugenblak, iar dü det noch ans ferschükst.\n\n$1",
+       "generic-pool-error": "Det dää üs iarag, a servers san tu tidj auerläästet.\nTuföl brükern ferschük, det sidj tu beschüken.\nWees so gud an teew en uugenblak, iar dü det noch ans weder ferschükst.",
        "pool-timeout": "Tidj uflepen bi't teewen üüb't sperang",
        "pool-queuefull": "Pool as auerläästet",
        "pool-errorunknown": "Ünbekäänd feeler",
        "edit-gone-missing": "Detdiar sidj küd ei aktualisiaret wurd. Ferlicht as det stregen wurden.",
        "edit-conflict": "Konflikt bi't bewerkin (BK).",
        "edit-no-change": "Din feranrang woort ei seekert, auer dü di tekst ei feranert heest.",
+       "postedit-confirmation-created": "Det sidj as maaget wurden.",
+       "postedit-confirmation-restored": "Det sidj as weder turaghaalet wurden.",
        "postedit-confirmation-saved": "Din feranrang as seekert wurden.",
        "edit-already-exists": "Det nei sidj küd ei iinracht wurd. Son sidj as al diar.",
        "defaultmessagetext": "Standard tekst",
        "parser-template-recursion-depth-warning": "Tuföl föörlaagen uun föörlaagen ($1)",
        "language-converter-depth-warning": "Spriakenkonwerter auerläästet ($1)",
        "node-count-exceeded-category": "Jodiar sidjen haa tuföl ferbinjangen (nodes)",
+       "node-count-exceeded-category-desc": "En kategorii för sidjen mä tuföl knooter (nodes).",
        "node-count-exceeded-warning": "Detdiar sidj hää tuföl ferbinjangen (nodes)",
        "expansion-depth-exceeded-category": "Jodiar sidjen haa tuföl ütjwidjangen (expansion)",
+       "expansion-depth-exceeded-category-desc": "Det as en kategorii för sidjen mä tuföl ütjwidjangen.",
        "expansion-depth-exceeded-warning": "Detdiar sidj hää tuföl ütjwidjangen (expansion)",
        "parser-unstrip-loop-warning": "Diar as en jinsidjag ferwisang",
        "parser-unstrip-recursion-limit": "Tuföl jinsidjag ferwisangen bi $1",
        "currentrev": "Leetst werjuun",
        "currentrev-asof": "Leetst werjuun faan di $2, am a klook $3",
        "revisionasof": "Werjuun faan a $2, klook $3",
-       "revision-info": "Werjuun faan di $4 am a klook $5 faan $2",
+       "revision-info": "Werjuun faan di $4, am a klook $5 faan {{GENDER:$6|$2}}$7",
        "previousrevision": "← Naistääler werjuun:",
        "nextrevision": "Naistjonger werjuun →",
        "currentrevisionlink": "Leetst werjuun",
        "mergehistory-empty": "Nian werjuunen kön tuupfeerd wurd.",
        "mergehistory-success": "$3 {{PLURAL:$3|werjuun|werjuunen}} faan [[:$1]] tuupfeerd tu [[:$2]].",
        "mergehistory-fail": "Werjuunen kön ei tuupfeerd wurd. Luke noch ans efter at sidj an a tidjen.",
+       "mergehistory-fail-toobig": "A werjuunen küd ei tuupfeerd wurd, auer muar üs {{PLURAL:$1|ian werjuun|$1 werjuunen}} fersköwen {{PLURAL:$1|wurd skul|wurd skul}}.",
        "mergehistory-no-source": "Det iarst sidj \"$1\" as ai diar.",
        "mergehistory-no-destination": "Det ööder sidj „$1“ as ei diar.",
        "mergehistory-invalid-source": "Jurtkamstsid mötj en gülti sidnoome heewe.",
        "difference-missing-revision": "{{PLURAL:$2|Ian werjuun|$2 werjuunen}} faan di ferskeel ($1) {{PLURAL:$2|as|san}} ei fünjen wurden.\n\nDet komt diar miast faan, dat en ual ferwisang stregen wurden as.\nDü könst det uun't [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} logbuk faan stregen sidjen] efterlees.",
        "searchresults": "Fünjen sidjen",
        "searchresults-title": "Fünjen sidjen för „$1“",
-       "toomanymatches": "Diar kaam tuföl resultaaten üüb din uunfraag. Ferschük det ööders.",
        "titlematches": "Auerianstemangen mä sidjennöömer",
        "textmatches": "Auerianstemangen mä teksten",
        "notextmatches": "Nian auerianstemangen mä teksten",
        "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",
        "powersearch-togglelabel": "Schük uun:",
        "powersearch-toggleall": "Aaltumaal",
        "powersearch-togglenone": "Nianen",
+       "powersearch-remember": "Ütjwool mark för leeder schükuunfraagen",
        "search-external": "Schük ekstern",
        "searchdisabled": "Det schüken üüb {{SITENAME}} as ei aktiif. Dü könst uuntesken mä Google schük. Seenk diaram, dat Google sin steegwurden miast ei üüb a leetst stant san.",
        "search-error": "Diar as wat skiaf gingen bi't schüken: $1",
        "right-move": "Sidjen fersküüw",
        "right-move-subpages": "Sidjen mä onersidjen fersküüw",
        "right-move-rootuserpages": "Hood-brükersidj fersküüw",
+       "right-move-categorypages": "Kategoriisidjen fersküüw",
        "right-movefile": "Datein fersküüw",
        "right-suppressredirect": "Bi't fersküüwen nian widjerfeerang iinracht",
        "right-upload": "Datein huuchschüür",
        "action-createpage": "nei sidjen tu maagin",
        "action-createtalk": "diskusjuunssidjen maage",
        "action-createaccount": "jüdeer brükerkonto mååge",
+       "action-history": "di ferluup faan detdiar sidj uuntulukin.",
        "action-minoredit": "detdiar feranrang üs letj kääntiakne",
        "action-move": "an fersküüw det diar sidj",
        "action-move-subpages": "an fersküüw detdiar sidj mä hör onersidjen",
        "action-move-rootuserpages": "hood-brükersidj fersküüw",
+       "action-move-categorypages": "kategoriisidjen uuntulukin",
        "action-movefile": "an fersküüw detdiar datei",
        "action-upload": "Datein huuchschüür",
        "action-reupload": "det datei auerskriiw",
        "windows-nonascii-filename": "Detheer wiki läät nian dateinöömer mä aparte tiakens tu.",
        "fileexists": "En datei mä didiar nööm jaft at al. Luke noch ans efter <strong>[[:$1]]</strong>, wan dü ei gans seeker beest, of dü det anre wel.\n[[$1|thumb]]",
        "filepageexists": "En beskriiwangssidj för <strong>[[:$1]]</strong> as al diar, oober nian datei. Din beskriiwang woort ei apnimen. Det beskriiwangssidj mut do man efter't huuchschüüren noch ans efterluket wurd.\n[[$1|thumb]]",
-       "fileexists-extension": "Diar as al en datei mä di nööm: [[$2|thumb]]\n* Nööm faan det nei datei: <strong>[[:$1]]</strong>\n* Nööm faan det ual datei: <strong>[[:$2]]</strong>\nWees so gud an nem en öödern nööm.",
+       "fileexists-extension": "Diar as al en datei mä di nööm: [[$2|thumb]]\n* Nööm faan det nei datei: <strong>[[:$1]]</strong>\n* Nööm faan det ual datei: <strong>[[:$2]]</strong>\nWel dü ei ferlicht en beedern nööm brük?",
        "fileexists-thumbnail-yes": "Detdiar datei as was en sümnaielbil ''(thumbnail)''. [[$1|thumb]]\nLuke di det datei <strong>[[:$1]]</strong> noch ans uun.\nWan det det originaal bil as, säärst dü nian sümnaielbil huuchschüür.",
        "file-thumbnail-no": "Di dateinööm begant mä <strong>$1</strong>. Det as was en sümnaielbil ''(thumbnail)''.\nLuke noch ans efter, of dü det bil uun fol grate diar heest, an do schüür det huuch.",
        "fileexists-forbidden": "En datei mä didiar nööm jaft at al an koon ei auerskrewen wurd.\nGung noch ans turag an schüür det datei mä en öödern nööm huuch.\n[[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Det striken of turaghaalin faan datein gongt uun uugenblak ei.",
        "filedelete-maintenance-title": "Det datei koon ei stregen wurd",
        "mimesearch": "Efter MIME-Typ schük",
-       "mimesearch-summary": "Üüb detheer sidj könst dü datein efter hör MIME-Typ filtre.\nDet formoot as leewen slach/onerslach üs uun det bispal: <code>image/jpeg</code>.",
+       "mimesearch-summary": "Üüb detheer sidj könst dü datein efter hör MIME-Typ filtre.\nDet formoot as leewen slach/onerslach üs uun det bispal: <code>image/jpeg</code> of uk <code>image/*</code>.",
        "mimetype": "MIME-Typ:",
        "download": "Deelloose",
        "unwatchedpages": "Sidjen, diar näämen uun't uug hää",
        "pageswithprop-prophidden-binary": "Binär eegenskapswäärs ferbürgen ($1)",
        "doubleredirects": "Dobelt widjerfeerangen",
        "doubleredirectstext": "Detheer list feert widjerfeerangen ap, diar üüb widjerfeerangen widjer feer.\nUun arke rä stun ferwisangen tu't iarst an ööder widjerfeerang an uk tu det sidj, huar det ööder widjerfeerang üüb ferwiset. <del>Trochstregen</del> iindracher san al bewerket wurden.",
-       "double-redirect-fixed-move": "[[$1]] as fersköwen wurden an feert nü widjer tu [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] as fersköwen wurden. Hat feert nü widjer tu [[$2]].",
        "double-redirect-fixed-maintenance": "Dobelt widjerfeerang faan [[$1]] tu [[$2]] as apredet wurden.",
        "double-redirect-fixer": "Bot för widjerfeerangen",
        "brokenredirects": "Uunstaken widjerfeerangen",
        "wantedtemplates": "Föörlaagen, diar brükt wurd",
        "mostlinked": "Sidjen, huar a miast ööder sidjen üüb ferwise",
        "mostlinkedcategories": "Miast brükt kategoriin",
-       "mostlinkedtemplates": "Miast brükt föörlaagen",
+       "mostlinkedtemplates": "Miast iinbünjen sidjen",
        "mostcategories": "Sidjen mä a miast kategoriin",
        "mostimages": "Datein, huar a miast sidjen üüb ferwise",
        "mostinterwikis": "Sidjen mä a miast ferwisangen tu ööder spriaken",
        "listgrouprights-removegroup-self": "Aanj brükerkonto faan {{PLURAL:$2|detdiar skööl|jodiar sköölen}} wechnem: $1",
        "listgrouprights-addgroup-self-all": "Koon aal a sköölen tu't aanj brükerkonto tuwise",
        "listgrouprights-removegroup-self-all": "Koon aal a sköölen faan't aanj brükerkonto wechnem",
+       "listgrouprights-namespaceprotection-header": "Nöömrüm mögelkhaiden",
+       "listgrouprights-namespaceprotection-namespace": "Nöömrüm",
+       "listgrouprights-namespaceprotection-restrictedto": "Rochten faan di brüker tu bewerkin",
        "trackingcategories": "Kategoriin ferfulge",
        "trackingcategories-summary": "Üüb detdiar sidj stun ferfulagt kategoriin, diar faan't MediaWiki-software iindraanj wurden san. Hör nöömer kön feranert wurd, wan dü a süsteem-noorachten uun a {{ns:8}}-nöömrüm feranerst.",
        "trackingcategories-msg": "Kategorii ferfulge",
        "watchnologin": "Ei uunmeldet",
        "addwatch": "Uk uun't uug behual",
        "addedwatchtext": "Det sidj „[[:$1]]“ wel dü [[Special:Watchlist|uun't uug behual]].\nFeranrangen faan detdiar sidj wurd üüb detdiar list fäästhäälen.",
+       "addedwatchtext-short": "Det sidj „$1“ kaam tu din sidjen, diar dü uun't uug behual wel.",
        "removewatch": "Ei muar uun't uug behual",
        "removedwatchtext": "Det sidj „[[:$1]]“ as faan a sidjen, diar dü [[Special:Watchlist|uun't uug behual]] wel, wechnimen wurden.",
+       "removedwatchtext-short": "Det sidj „$1“ woort ei muar faan di uun't uug behäälen.",
        "watch": "Uun't uug behual",
        "watchthispage": "Detdiar sidj uun't uug behual",
        "unwatch": "Ei muar uun't uug behual",
        "unwatchthispage": "Ei muar uun't uug behual",
        "notanarticle": "Nään artiikel",
        "notvisiblerev": "Det werjuun faan en öödern brüker as stregen wurden.",
-       "watchlist-details": "Dü heest {{PLURAL:$1|1 sidj|$1 sidjen}} uun't uug.",
+       "watchlist-details": "Dü behäälst {{PLURAL:$1|1 sidj|$1 sidjen}} uun't uug, diarbi wurd diskuschuunsidjen ei mätääld.",
        "wlheader-enotif": "Di e-mail siinst as aktiif.",
        "wlheader-showupdated": "Nei feranert sidjen wurd '''fäät''' uunwiset.",
        "wlnote2": "Diar stun a feranrangen faan a leetst {{PLURAL:$1|stünj|<strong>$1</strong> stünjen}}, üüb a stant faan $2, $3.",
        "contributions-title": "Brükerbidracher för \"$1\"",
        "mycontris": "Bidracher",
        "contribsub2": "För {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Son brükerkonto \"$1\" jaft at ei.",
        "nocontribs": "Diar wiar nian paasin brükerbidracher",
        "uctop": "(aktuel)",
        "month": "faan muun (of iarer):",
        "movepagetalktext": "Uk det diskusjuunssidj woort fersköwen, wan det diar as, '''oober ei, wan:'''\n*Diar al en diskusjuunssidj mä didiar nööm as, of\n*Dü detdiar mögelkhaid ütjslotst.\n\nUun didiar faal skel dü a diskusjuunssidjen faan hun tuupfeer.\n\nDreeg di '''nei''' tiitel bi '''ööder sidj''' iin, an diaroner '''en grünj''' för't amnäämen.",
        "movearticle": "Sidj fersküüw:",
        "moveuserpage-warning": "'''Paase üüb:''' Dü wel en brükersidj fersküüw. Seenk diaram, dat bluas det brükersidj amnäämd woort, oober '''ei''' di brüker. Hi behäält san ual nööm.",
+       "movecategorypage-warning": "<strong>Paase üüb:</strong> Dü wel jüst en kategoriisidj fersküüw. Seenk diaram, dat bluas det sidj fersköwen woort. A sidjen uun det kategorii wurd <em>ei</em> nei kategorisiaret.",
        "movenologintext": "Dü skel registriaret an [[Special:UserLogin|uunmeldet]] wees, am en sidj tu fersküüwen.",
        "movenotallowed": "Dü mutst nian sidjen fersküüw.",
        "movenotallowedfile": "Dü mutst nian datein fersküüw.",
        "cant-move-user-page": "Dü mutst nian brükersidjen fersküüw (bluas onersidjen).",
        "cant-move-to-user-page": "Dü mutst nian sidjen üüb en brükersidj fersküüw (bluas üüb onersidjen).",
+       "cant-move-category-page": "Dü mutst nian kategoriisidjen fersküüw.",
+       "cant-move-to-category-page": "Dü mutst nian sidj tu en kategoriisidj fersküüw.",
        "newtitle": "Müülj:",
        "move-watch": "Jodiar sidjen uun't uug behual",
        "movepagebtn": "Sidj fersküüw",
        "newimages-summary": "Detdiar spezial-sidj wiset a tuleetst huuchschüürd datein uun.",
        "newimages-legend": "Filter",
        "newimages-label": "Dateinööm (of en dial diarfaan):",
+       "newimages-showbots": "Faan bots huuchschüürd sidjen uunwise.",
        "noimages": "Niks tu sen.",
        "ilsubmit": "Schük",
        "bydate": "efter dootem",
        "watchlistedit-raw-done": "Det list mä sidjen, diar dü uun't uug behual wel, as nü üüb di neist stant.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Ään iindrach as|$1 iindracher san}} diartu skrewen wurden:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Ään iindrach as|$1 iindracher san}} wechnimen wurden:",
+       "watchlistedit-clear-title": "Nian sidjen muar uun't uug behual",
+       "watchlistedit-clear-legend": "Nian sidjen muar uun't uug behual",
+       "watchlistedit-clear-explain": "Aal a sidjennöömer wel dü ei muar uun't uug behual",
+       "watchlistedit-clear-titles": "Sidjennöömer:",
+       "watchlistedit-clear-submit": "Sidjen, diar dü uun't uug behual wel, strik (permanent)",
+       "watchlistedit-clear-done": "Det list mä sidjen, diar dü uun't uug behual wel, as nü leesag maaget wurden.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Ään iindrach as|$1 iindracher san}} wechnimen wurden:",
+       "watchlistedit-too-many": "Diar san tuföl sidjen tu uunwisin heer.",
+       "watchlisttools-clear": "Nian sidjen muar uun't uug behual",
        "watchlisttools-view": "Uun't uug behual: Feranrangen",
        "watchlisttools-edit": "Normool bewerke",
        "watchlisttools-raw": "Uun't listenformoot bewerke",
        "duplicate-defaultsort": "'''Paase üüb:''' Di sortiarkai \"$2\" auerskraft di ual sortiarkai \"$1\"",
        "version": "Werjuun",
        "version-extensions": "Instaliaret ütjwidjangen",
+       "version-skins": "Instaliaret brükerskaker",
        "version-specialpages": "Spezial-sidjen",
        "version-parserhooks": "Ütjwidjet parserfunktjuunen",
        "version-variables": "Wariaabeln",
        "version-antispam": "''Spam''seekerangen",
-       "version-skins": "Brükerskaker",
        "version-other": "Ööders wat",
        "version-mediahandlers": "Ütjwidjet medien-funktjuunen",
        "version-hooks": "Hooks",
        "version-hook-name": "Hook nööm",
        "version-hook-subscribedby": "Aprepen faan",
        "version-version": "($1)",
+       "version-no-ext-name": "[saner nööm]",
        "version-license": "MediaWiki-lisens",
        "version-ext-license": "Lisens",
        "version-ext-colheader-name": "Ütjwidjang",
+       "version-skin-colheader-name": "Skak",
        "version-ext-colheader-version": "Werjuun",
        "version-ext-colheader-license": "Lisens",
        "version-ext-colheader-description": "Beskriiwang",
        "htmlform-no": "Naan",
        "htmlform-yes": "Ja",
        "htmlform-chosen-placeholder": "Schük ütj",
+       "htmlform-cloner-create": "Muar diartudu",
+       "htmlform-cloner-delete": "Wechnem",
+       "htmlform-cloner-required": "Dü skel tumanst ään wäärs uundu.",
        "sqlite-has-fts": "Werjuun $1 mä halep för't schüken uun di hialer tekst.",
        "sqlite-no-fts": "Werjuun $1 saner halep för't schüken uun di hialer tekst.",
        "logentry-delete-delete": "$1 {{Gender:$2}} hää det sidj $3 stregen",
        "expand_templates_remove_nowiki": "<nowiki>-tags uun't resultaat ei uunwise",
        "expand_templates_generate_xml": "XML-parser-buum uunwise",
        "expand_templates_generate_rawhtml": "Rä HTML uunwise",
-       "expand_templates_preview": "Föörskau"
+       "expand_templates_preview": "Föörskau",
+       "pagelanguage": "Ütjwool faan sidjenspriaken",
+       "pagelang-name": "Sidj",
+       "pagelang-language": "Spriak",
+       "pagelang-use-default": "Standard spriak brük",
+       "pagelang-select-lang": "Spriak ütjschük",
+       "right-pagelang": "Sidjenspriak feranre",
+       "action-pagelang": "det sidjenspriak tu feranrin",
+       "log-name-pagelang": "Logbuk för spriak-feranrangen",
+       "log-description-pagelang": "Det as en logbuk för sidjenspriak-feranrangen",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|hää}} det sidjenspriak för $3 faan $4 tu $5 feranert."
 }
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 747f40c..b15deea 100644 (file)
                        "Urhixidur",
                        "Vipuser",
                        "Xiaomingyan",
-                       "아라"
+                       "아라",
+                       "Mywood",
+                       "Duolaimi",
+                       "Impersonator 1"
                ]
        },
        "tog-underline": "下划链接",
        "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": "变换",
        "history_short": "历史",
        "updatedmarker": "最末道浏览后𠮶改动",
        "printableversion": "可打印版本",
-       "permalink": "永久链接",
+       "permalink": "固定链接",
        "print": "打印",
        "view": "眵",
        "edit": "编写",
        "enterlockreason": "请输入锁到数据库𠮶理由,包括预计几时间解锁",
        "readonlytext": "数据库上嘞锁改伓正,可能佢正维修中,搞正嘞仰上会还原。管理员𠮶解释: $1",
        "missing-article": "资料库冇寻到倷要𠮶版面,「$1」 $2。\n\n通常个系因为修订历史页上头,过时𠮶连结连到删吥𠮶版面咁舞得𠮶。\n\n如果不系咁,倷可能系寻到软件里头𠮶bug。\n请记得 URL 𠮶地址,向[[Special:ListUsers/sysop|管理员]]报告。",
-       "missingarticle-rev": "(修订#: $1)",
+       "missingarticle-rev": "(版本#: $1)",
        "missingarticle-diff": "(差异: $1, $2)",
        "readonly_lag": "附属数据库服务器拿缓存更新到主服务器,数据库自动锁到嘞",
        "internalerror": "内部错误",
        "viewsourcetext": "倷可以眵吖或复制个页𠮶源代码:",
        "protectedinterface": "个页给正嘞软件𠮶界面文本,佢拖锁到怕人乱扤。",
        "editinginterface": "'''Warning:''' You are editing a page which is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users.\nFor translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
-       "cascadeprotected": "个页已拖保护,因为佢拖“联锁保护”𠮶{{PLURAL:$1|一只|几只}}拖保护页包到:\n$2",
+       "cascadeprotected": "个页已拖保护,因为佢拖“级联”𠮶{{PLURAL:$1|一只|几只}}拖保护页包到:\n$2",
        "namespaceprotected": "倷冇权编写'''$1'''空间里度𠮶页面。",
        "ns-specialprotected": "编写伓正{{ns:special}}空间𠮶页面。",
        "virus-unknownscanner": "不晓得𠮶防病毒:",
        "readonlywarning": "'''警告: 数据库锁到嘞进行定期修护,眼下倷存伓正倷𠮶改动。倷可以拿佢存到文档再著。'''",
        "protectedpagewarning": "'''警告: 个页拕锁到哩,单就管理员许可权𠮶用户才改得正。'''\n下首系供得汝参考𠮶最晏𠮶日志。",
        "semiprotectedpagewarning": "'''注意:'''个页拕锁到哩,单就注册用户编得正。\n下首系供得汝参考𠮶最晏𠮶日志。",
-       "cascadeprotectedwarning": "警告: 个页已经受保护,单只管理员权限𠮶用户才改得正,因为个页同底下𠮶连锁保护𠮶{{PLURAL:$1|一只|多只}}页面包到嘞:",
+       "cascadeprotectedwarning": "警告: 个页已经受保护,单只管理员权限𠮶用户才改得正,因为个页同底下𠮶级联保护𠮶{{PLURAL:$1|一只|多只}}页面包到嘞:",
        "titleprotectedwarning": "'''警告:个只页锁到哩,需要[[Special:ListGroupRights|指定𠮶权限]]才建立得正。'''\n下首系供得汝参考𠮶最晏𠮶日志。",
        "templatesused": "个只页面使用𠮶有{{PLURAL:$1|模板|模板}}:",
        "templatesusedpreview": "个只预览使用𠮶有{{PLURAL:$1|模板|模板}}",
        "rev-delundel": "显示/弆到",
        "rev-showdeleted": "敨开",
        "revisiondelete": "删除/反删除修改",
-       "revdelete-nooldid-title": "冇目标修订",
+       "revdelete-nooldid-title": "无效目标版本",
        "revdelete-nooldid-text": "倷冇话个只操作𠮶目标修改。",
        "logdelete-selected": "拣$1𠮶$2只日志事件:",
        "revdelete-legend": "设置可见性𠮶限制",
        "editundo": "还原",
        "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": "到自定名字空间里头寻",
        "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": "高级搜寻",
        "servertime": "服务器时间",
        "guesstimezone": "到浏览器上填",
        "allowemail": "接受别𠮶用户𠮶邮件",
-       "defaultns": "默认搜索𠮶名字空间:",
        "default": "默认",
        "prefs-files": "档案",
        "youremail": "电子邮件:",
        "username": "用户名:",
-       "uid": "用户ID:",
        "yourrealname": "真名:",
        "yourlanguage": "语言:",
        "yourvariant": "多款内容语言:",
        "logempty": "日志里头冇符合𠮶项目。",
        "log-title-wildcard": "寻吖个只字开头𠮶标题",
        "allpages": "所有𠮶页面",
-       "alphaindexline": "$1到$2",
        "nextpage": "下页($1)",
        "prevpage": "上页($1)",
        "allpagesfrom": "显示以个底开始𠮶页面:",
        "exbeforeblank": "拖清空之前𠮶内容系: '$1'",
        "delete-confirm": "删卟\"$1\"去",
        "delete-legend": "删卟去",
-       "historywarning": "'''警告''': 倷要删卟𠮶页面含到$1到{{PLURAL:$1|修订|修订}}𠮶历史",
+       "historywarning": "'''警告''': 倷要删卟𠮶页面含到$1到{{PLURAL:$1|版本}}𠮶历史",
        "confirmdeletetext": "仰上倷就要永久删卟数据库𠮶一只页面或图像同佢𠮶历史。请确定倷要啖做,哈要晓得佢𠮶后果,更加伓能违反[[{{MediaWiki:Policy-url}}]]。",
        "actioncomplete": "扤正嘞",
        "actionfailed": "操作冇舞正",
        "protect-fallback": "非要“$1”𠮶许可",
        "protect-level-autoconfirmed": "禁止冇注册𠮶用户",
        "protect-level-sysop": "只限操作员",
-       "protect-summary-cascade": "联锁",
+       "protect-summary-cascade": "级联",
        "protect-expiring": "$1 (UTC)到期",
-       "protect-cascade": "保护个页含到𠮶页面 (连锁保护)",
+       "protect-cascade": "保护个页含到𠮶页面 (级联保护)",
        "protect-cantedit": "倷改伓正个页𠮶保护程度,因为倷冇搦到编辑授权。",
        "protect-expiry-options": "两个钟头:2 hours,一日:1 day,三日:3 days,一个礼拜:1 week,两个礼拜:2 weeks,一个月:1 month,三个月:3 months,六个月:6 months,一年:1 year,一世:infinite",
        "restriction-type": "权限:",
        "undelete-search-prefix": "显示以下底开头𠮶页面:",
        "undelete-search-submit": "寻吖",
        "undelete-no-results": "删卟记录冇合到𠮶结果。",
-       "undelete-filename-mismatch": "删伓正带到时间标记𠮶档案修订 $1: 档案伓匹配",
+       "undelete-filename-mismatch": "删伓正带到时间标记𠮶档案版本$1: 档案伓匹配",
        "undelete-bad-store-key": "删伓正带到时间标记𠮶档案修订 $1: 档案删卟之前就跌卟嘞。",
        "undelete-cleanup-error": "删卟冇用𠮶存盘文件 \"$1\" 时出错。",
        "undelete-missing-filearchive": "数据库冇档案存盘 ID $1 ,故系佢也就到档案存盘恢复伓正。佢话伓定早反删除嘞。",
        "sp-contributions-userrights": "用户权限管理",
        "sp-contributions-search": "寻贡献",
        "sp-contributions-username": "IP地址或用户名:",
-       "sp-contributions-toponly": "光显示最晏修订版本𠮶编辑",
+       "sp-contributions-toponly": "光显示最晏版本𠮶编辑",
        "sp-contributions-submit": "寻",
        "whatlinkshere": "有什哩连到个首",
        "whatlinkshere-title": "连到 $1 𠮶页面",
        "tooltip-t-upload": "上传图像或多媒体文件",
        "tooltip-t-specialpages": "全部特殊页列表",
        "tooltip-t-print": "个只页面𠮶打印版",
-       "tooltip-t-permalink": "个只页面𠮶永久链接",
+       "tooltip-t-permalink": "个只页面𠮶固定链接",
        "tooltip-ca-nstab-main": "望吖内容页",
        "tooltip-ca-nstab-user": "望吖用户页",
        "tooltip-ca-nstab-media": "望吖媒体页",
        "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 d98fe23..8320af5 100644 (file)
@@ -8,7 +8,8 @@
                        "Urhixidur",
                        "Vipuser",
                        "Xiaomingyan",
-                       "아라"
+                       "아라",
+                       "Mywood"
                ]
        },
        "tog-underline": "下劃連結",
        "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": "變換",
        "history_short": "歷史",
        "updatedmarker": "頂晏嗰許到瀏覽後嗰改動",
        "printableversion": "可打印版本",
-       "permalink": "永久連結",
+       "permalink": "固定連結",
        "print": "打印",
        "view": "眵",
        "edit": "編寫",
        "editundo": "還原",
        "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": "到自定名字空間裡頭尋",
        "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": "高級搜尋",
        "servertime": "服務器時間",
        "guesstimezone": "到瀏覽器上填",
        "allowemail": "接受別嗰用戶嗰郵件",
-       "defaultns": "默認搜索嗰名字空間:",
        "default": "預設",
        "prefs-files": "檔案",
        "youremail": "電子郵件:",
        "username": "用戶名:",
-       "uid": "用戶ID:",
        "yourrealname": "真名:",
        "yourlanguage": "語言:",
        "yourvariant": "多款內容語言:",
        "logempty": "日誌裡頭冇符合嗰項目。",
        "log-title-wildcard": "尋吖箇隻字開頭嗰標題",
        "allpages": "所有嗰頁面",
-       "alphaindexline": "$1到$2",
        "nextpage": "下頁($1)",
        "prevpage": "上頁($1)",
        "allpagesfrom": "顯示以箇底開始嗰頁面:",
        "tooltip-t-upload": "上傳圖像或多媒體文件",
        "tooltip-t-specialpages": "全部特殊頁嗰清單",
        "tooltip-t-print": "箇隻頁面嗰打印版",
-       "tooltip-t-permalink": "箇隻頁面嗰永久連結",
+       "tooltip-t-permalink": "箇隻頁面嗰固定連結",
        "tooltip-ca-nstab-main": "望下內容頁",
        "tooltip-ca-nstab-user": "望下用戶頁",
        "tooltip-ca-nstab-media": "望吖媒體頁",
        "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 aa1a1ab..b329eb0 100644 (file)
@@ -7,19 +7,20 @@
                        "Sionnach",
                        "Steafan31",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "GunChleoc"
                ]
        },
        "tog-underline": "Fo-loidhneadh nan ceanglaichean:",
        "tog-hideminor": "Falaich mùthaidhean beaga ann an liosta nam mùthaidhean ùra",
-       "tog-hidepatrolled": "Falaich mùthaidhean fo fhaire ann an liosta nam mùthaidhean ùra",
-       "tog-newpageshidepatrolled": "Falaich duilleagan fo fhaire ann an liosta nan duilleagan ùra",
+       "tog-hidepatrolled": "Falaich mùthaidhean fo fhreiceadan ann an liosta nam mùthaidhean ùra",
+       "tog-newpageshidepatrolled": "Falaich duilleagan fo fhreiceadan ann an liosta nan duilleagan ùra",
        "tog-extendwatchlist": "Leudaich an clàr-faire gus an seall e gach mùthadh 's chan ann an fheadhainn as ùire a-mhàin",
        "tog-usenewrc": "Buidhnich na h-atharraichean a-rèir duilleige sna mùthaidhean ùra agus air a' chlàr-fhaire",
        "tog-numberheadings": "Cuir àireamhan ri ceann-sgrìobhaidhean leis fhèin",
        "tog-showtoolbar": "Seall am bàr-inneal deasachaidh",
        "tog-editondblclick": "Tòisich air deasachadh duilleige le briogadh dùbailte",
-       "tog-editsectiononrightclick": "Cuir an comas deasachadh earrainn le briogadh deas air tiotal de dh'earrainn",
+       "tog-editsectiononrightclick": "Cuir an comas deasachadh earrainn le briogadh deas air tiotal na h-earrainn",
        "tog-watchcreations": "Cuir duilleagan a chruthaicheas mi air a' chlàr-fhaire agam",
        "tog-watchdefault": "Cuir duilleagan a dheasaicheas mi air a' chlàr-fhaire agam",
        "tog-watchmoves": "Cuir duilleagan a ghluaiseas mi air a' chlàr-fhaire agam",
@@ -28,9 +29,9 @@
        "tog-previewontop": "Nochd an ro-shealladh os cionn a' bhogsa deasachaidh",
        "tog-previewonfirst": "Nochd an ro-shealladh nuair a nithear a' chiad deasachadh",
        "tog-enotifwatchlistpages": "Cuir post-dealain thugam nuair a mhùthar duilleag a tha air a' chlàr-fhaire agam",
-       "tog-enotifusertalkpages": "Cuir post-dealain thugam nuair a mhùthaichear duilleag mo chonaltraidh",
+       "tog-enotifusertalkpages": "Cuir post-dealain thugam nuair a thèid duilleag mo dheasbaireachd atharrachadh",
        "tog-enotifminoredits": "Cuir post-dealain thugam nuair a nithear mùthadh beag air duilleagan cuideachd",
-       "tog-enotifrevealaddr": "Nochd an seòladh puist-dhealain agam ann am teachdaireachdan fiosrachaidh",
+       "tog-enotifrevealaddr": "Nochd an seòladh puist-d agam ann am brathan-naidheachd puist-d",
        "tog-shownumberswatching": "Nochd àireamh nan cleachdaichean a tha a' cumail sùil air",
        "tog-oldsig": "An t-earr-sgrìobhadh làithreach:",
        "tog-fancysig": "Làimhsich an t-earr-sgrìobhadh mar wikitext (gun cheangal leis fhèin)",
        "tog-watchlisthideminor": "Falaich mùthaidhean beaga air mo chlàr-faire",
        "tog-watchlisthideliu": "Falaich mùthaidhean le cleachdaichean a tha air logadh a-steach air mo chlàr-faire",
        "tog-watchlisthideanons": "Falaich mùthaidhean le cleachdaichean gun ainm air mo chlàr-faire",
-       "tog-watchlisthidepatrolled": "Falaich mùthaidhean air duilleagan fo fhreiceadan air mo chlàr-faire",
+       "tog-watchlisthidepatrolled": "Falaich mùthaidhean air duilleagan fo fhreiceadan air a' chlàr-fhaire agam",
        "tog-ccmeonemails": "Cuir lethbhric de phuist-dhealain a chuireas mi do chleachdaichean eile thugam",
-       "tog-diffonly": "Na seall susbaint nan duilleagan fo na diofaichean",
-       "tog-showhiddencats": "Seall na roinnean falaichte",
-       "tog-norollbackdiff": "Na dèan diof às dèidh roiligeadh air ais",
+       "tog-diffonly": "Na seall susbaint nan duilleagan fo na diofaran",
+       "tog-showhiddencats": "Seall na roinnean-seòrsa falaichte",
+       "tog-norollbackdiff": "Na seall na diofaran às dèidh roladh air ais",
        "tog-useeditwarning": "Thoir rabhadh dhomh ma bhios mi an impis duilleag deasachaidh fhàgail mus do shàbhail mi na mùthaidhean agam",
-       "tog-prefershttps": "Cleachd ceangal tèarainte an-còmhnaidh nuair a bhios mi clàraichte a-staigh",
+       "tog-prefershttps": "Cleachd ceangal tèarainte an-còmhnaidh nuair a bhios mi air logadh a-steach",
        "underline-always": "An-còmhnaidh",
        "underline-never": "Na dèan seo idir",
        "underline-default": "Bun-roghainn a' bhrabhsair no a' chraicinn",
        "october-date": "$1 dhen Dàmhair",
        "november-date": "$1 dhen t-Samhain",
        "december-date": "$1 dhen Dùbhlachd",
-       "pagecategories": "{{PLURAL:$1|Roinn-seòrsa|Roinn-seòrsa|Roinnean-seòrsa|Roinn-seòrsa}}",
-       "category_header": "Duilleagan sa roinn \"$1\"",
-       "subcategories": "Fo-roinnean",
-       "category-media-header": "Meadhanan sa roinn \"$1\"",
-       "category-empty": "''Chan eil duilleagan no meadhanan san roinn seo an-dràsta.''",
-       "hidden-categories": "{{PLURAL:$1|Roinn-seòrsa fhalaichte|Roinn-seòrsa fhalaichte|Roinnean-seòrsa falaichte|Roinn-seòrsa fhalaichte}}",
-       "hidden-category-category": "Roinnean falaichte",
-       "category-subcat-count": "{{PLURAL:$2|Chan eil san roinn-seòrsa ach an fho-roinn-seòrsa a leanas.|Tha {{PLURAL:$1|an fho-roinn-seòrsa|an $1 fho-roinn-seòrsa|na $1 fo-roinnean-seòrsa|na $1 fo-roinn-seòrsa}}, aig an roinn-seòrsa a leanas, a-mach à $2 uile gu lèir.}}",
-       "category-subcat-count-limited": "Tha {{PLURAL:$1|an fho-roinn-seòrsa|na fo-roinntean-seòrsa}} a leanas sa roinn-seòrsa seo.",
-       "category-article-count": "{{PLURAL:$2|Chan eil ach an duilleag a leanas san fho-roinn-seòrsa seo.|Tha {{PLURAL:$1|an duilleag|an $1 dhuilleag|na $1 duilleagan|na $1 duilleag}} a leanas san roinn-seòrsa seo, a-mach à $2 uile gu lèir.}}",
-       "category-article-count-limited": "Tha {{PLURAL:$1|an duilleag|an $1 dhuilleag|na $1 duilleagan|na $1 duilleag}} a leanas san roinn-seòrsa làithreach.",
-       "category-file-count": "{{PLURAL:$2|Chan eil ach am faidhle a leanas san fho-roinn-seòrsa seo.|Tha {{PLURAL:$1|am faidhle|an $1 fhaidhle|na $1 faidhlichean|na $1 faidhle}} a leanas san roinn-seòrsa seo, a-mach à $2 uile gu lèir.}}",
-       "category-file-count-limited": "Tha {{PLURAL:$1|am faidhle|an $1 fhaidhle|na $1 faidhlichean|na $1 faidhle}} a leanas san roinn-seòrsa làithreach.",
+       "pagecategories": "{{PLURAL:$1|Roinn-seòrsa|Roinnean-seòrsa}}",
+       "category_header": "Duilleagan san roinn-seòrsa \"$1\"",
+       "subcategories": "Fo-roinnean-seòrsa",
+       "category-media-header": "Meadhanan san roinn-seòrsa \"$1\"",
+       "category-empty": "<em>Chan eil duilleagan no meadhanan san roinn-seòrsa seo an-dràsta.</em>",
+       "hidden-categories": "{{PLURAL:$1|Roinn-seòrsa fhalaichte|Roinnean-seòrsa falaichte}}",
+       "hidden-category-category": "Roinnean-seòrsa falaichte",
+       "category-subcat-count": "{{PLURAL:$2|Chan eil ach an fho-roinn-seòrsa a leanas san roinn-seòrsa seo.|Tha {{PLURAL:$1|an fho-roinn-seòrsa|na $1 fo-roinnean-seòrsa}} a leanas san roinn-seòrsa (a-mach à $2 uile gu lèir).}}",
+       "category-subcat-count-limited": "Tha {{PLURAL:$1|an fho-roinn-seòrsa|na fo-roinnean-seòrsa}} a leanas san roinn-seòrsa seo.",
+       "category-article-count": "{{PLURAL:$2|Chan eil ach an duilleag a leanas san roinn-seòrsa seo.|Tha {{PLURAL:$1|an $1 duilleag|an $1 dhuilleag|na $1 duilleagan|na $1 duilleag}} a leanas san roinn-seòrsa seo (a-mach à $2 uile gu lèir).}}",
+       "category-article-count-limited": "Tha {{PLURAL:$1|an $1 duilleag|an $1 dhuilleag|na $1 duilleagan|na $1 duilleag}} a leanas san roinn-seòrsa làithreach.",
+       "category-file-count": "{{PLURAL:$2|Chan eil ach am faidhle a leanas san roinn-seòrsa seo.|Tha {{PLURAL:$1|an $1 fhaidhle|an $1 fhaidhle|na $1 faidhlichean|na $1 faidhle}} a leanas san roinn-seòrsa seo (a-mach à $2 uile gu lèir).}}",
+       "category-file-count-limited": "Tha {{PLURAL:$1|an $1 fhaidhle|an $1 fhaidhle|na $1 faidhlichean|na $1 faidhle}} a leanas san roinn-seòrsa làithreach.",
        "listingcontinuesabbrev": "(an corr)",
        "index-category": "Duilleagan air a' chlàr-innse",
        "noindex-category": "Duilleagan nach eil air a' chlàr-innse",
        "broken-file-category": "Duilleagan sa bheil ceanglaichean faidhle a tha briste",
+       "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Mu",
        "article": "Duilleag susbainte",
        "newwindow": "(a' fosgladh ann an uinneag ùr)",
        "morenotlisted": "Chan eil an liosta seo iomlan.",
        "mypage": "Duilleag",
        "mytalk": "Deasbaireachd",
-       "anontalk": "Conaltradh airson an IP seo",
+       "anontalk": "Deasbaireachd airson an IP seo",
        "navigation": "Seòladh",
        "and": "&#32;agus",
        "qbfind": "Lorg",
        "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",
-       "namespaces": "Namespaces",
+       "namespaces": "Ainm-spàsan",
        "variants": "Tionndaidhean",
        "navigation-heading": "Clàr-taice na seòladaireachd",
        "errorpagetitle": "Mearachd",
        "delete": "Sguab às",
        "deletethispage": "Sguab às an duilleag seo",
        "undeletethispage": "Neo-dhèan sguabadh às na duilleige seo",
-       "undelete_short": "Neo-dhèan sguabadh às de {{PLURAL:$1|dh'aon deasachadh|$1 dheasachadh|$1 deasachaidhean|$1 deasachadh}}",
-       "viewdeleted_short": "Seall {{PLURAL:$1|aon deasachadh|$1 dheasachadh|$1 deasachaidhean|$1 deasachadh}} a chaidh a sguabadh às",
+       "undelete_short": "Neo-dhèan an sguabadh às air $1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}}",
+       "viewdeleted_short": "Seall $1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} a chaidh a sguabadh às",
        "protect": "Dìon",
        "protect_change": "mùth",
        "protectthispage": "Dìon an duilleag seo",
        "mediawikipage": "Seall duilleag na teachdaireachd",
        "templatepage": "Seall duilleag na teamplaide",
        "viewhelppage": "Seall an duilleag cobharach",
-       "categorypage": "Seall duilleag na roinne",
+       "categorypage": "Seall duilleag na roinn-seòrsa",
        "viewtalkpage": "Seall an deasbaireachd",
        "otherlanguages": "Ann an cànain eile",
        "redirectedfrom": "(Air ath-sheòladh o $1)",
        "redirectpagesub": "Ath-sheòl an duilleag",
        "lastmodifiedat": "Chaidh an duilleag seo a mhùthadh $1 aig $2 turas mu dheireadh.",
-       "viewcount": "Chaidh inntrigeadh a dhèanamh dhan duilleag seo {{PLURAL:$1|aon turas|$1 thuras|$1 turais|$1 turas}}.",
+       "viewcount": "Chaidh inntrigeadh a dhèanamh dhan duilleag seo $1 {{PLURAL:$1|turas|thuras|tursan|turas}}.",
        "protectedpage": "Duilleag fo dhìon",
        "jumpto": "Gearr leum gu:",
        "jumptonavigation": "seòladh",
        "aboutsite": "Mu dhèidhinn {{SITENAME}}",
        "aboutpage": "Project:Mu dhèidhinn",
        "copyright": "Tha susbaint ri làimh fo $1 mur eil an caochladh 'ga innse.",
-       "copyrightpage": "{{ns:project}}:Còraichean lethbhric",
+       "copyrightpage": "{{ns:project}}:Còir-lethbhreac",
        "currentevents": "Cùisean an latha",
        "currentevents-url": "Project:Cùisean an latha",
        "disclaimers": "Aithrisean-àichidh",
        "privacypage": "Project:Am polasaidh prìobhaideachd",
        "badaccess": "Meareachd le cead",
        "badaccess-group0": "Chan eil cead agad an gnìomh a dh'iarr thu a thoirt gu buil.",
-       "badaccess-groups": "Tha an gnìomh a dh'iarr thu cuingichte 's cha dèan ach buill {{PLURAL:$2|a' bhuidhinn|nam buidhnean}} a leanas e: $1.",
+       "badaccess-groups": "Chan fhaod ach buill {{PLURAL:$2|dhen bhuidheann|dhe na buidhnean}} an gnìomh a dh'iarr thu a dhèanamh: $1.",
        "versionrequired": "Feum air tionndadh $1 de MhediaWiki",
        "versionrequiredtext": "Tha feum air tionndadh $1 de MhediaWiki mus faicear an duilleag seo.\nSeall air [[Special:Version|duilleag an tionndaidh]].",
        "ok": "Ceart ma-thà",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": "Air a tharraing à \"$1\"",
-       "youhavenewmessages": "Tha $1 ($2) agad.",
-       "youhavenewmessagesfromusers": "Tha $1 o {{PLURAL:$3|aon chleachdaiche|$3 chleachdaiche|$3 cleachdaichean|$3 cleachdaiche}} agad ($2).",
+       "youhavenewmessages": "Tha $1 agad ($2).",
+       "youhavenewmessagesfromusers": "Tha $1 o $3 {{PLURAL:$3|chleachdaiche|chleachdaiche|cleachdaichean|cleachdaiche}} agad ($2).",
        "youhavenewmessagesmanyusers": "Tha $1 agad o iomadh cleachdaiche ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|teachdaireachd ùr|theachdaireachd ùr|theachdaireachdan ùra|teachdaireachd ùr}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} mu dheireadh",
+       "newmessageslinkplural": "{{PLURAL:$1|teachdaireachd ùr|teachdaireachdan ùra}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|am mùthadh|na mùthaidhean}} mu dheireadh",
        "youhavenewmessagesmulti": "Tha teachdaireachdan ùra agad ann an $1",
        "editsection": "deasaich",
        "editold": "deasaich",
        "hidetoc": "falaich",
        "collapsible-collapse": "Co-theannaich",
        "collapsible-expand": "Leudaich",
-       "thisisdeleted": "Seall no aisig $1?",
-       "viewdeleted": "Seall $1?",
-       "restorelink": "{{PLURAL:$1|aon deasachadh|$1 dheasachadh|$1 deasachaidhean|$1 deasachadh}} a chaidh a sguabadh às",
+       "thisisdeleted": "A bheil thu airson $1 a shealltainn no aiseag?",
+       "viewdeleted": "A bheil thu airson $1 a shealltainn?",
+       "restorelink": "$1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} a chaidh a sguabadh às",
        "feedlinks": "Inbhir:",
        "feed-invalid": "Seòrsa mì-dhligheach de dh'fho-sgrìobhadh inbhir.",
        "feed-unavailable": "Chan eil inbhirean co-bhanntachd ri fhaighinn",
        "site-atom-feed": "$1 Inbhir Atom",
        "page-rss-feed": "\"$1\" Inbhir RSS",
        "page-atom-feed": "\"$1\" Inbhir Atom",
+       "feed-atom": "Atom",
+       "feed-rss": "RSS",
        "red-link-title": "$1 (chan eil duilleag ann fhathast)",
        "sort-descending": "Seòrsaich a' tèarnadh",
        "sort-ascending": "Seòrsaich a' dìreadh",
        "nstab-mediawiki": "Teachdaireachd",
        "nstab-template": "Teamplaid",
        "nstab-help": "Cuideachadh",
-       "nstab-category": "Roinn",
+       "nstab-category": "Roinn-seòrsa",
        "nosuchaction": "Chan eil a leithid de ghnìomh ann",
        "nosuchactiontext": "Tha an gnìomh a shònraich an t-URL mì-dhligheach.\nFaodaidh gun do chuir thu a-steach URL mearachdach no gun do lean thu ri ceangal mearachdach.\nCuideachd, faodaidh gu bheil seo 'na chomharradh air buga sa bhathar-bhog aig {{SITENAME}}",
        "nosuchspecialpage": "Chan eil duilleag shònraichte d' a leithid ann",
        "databaseerror-query": "Ceist: $1",
        "databaseerror-function": "Foincsean: $1",
        "databaseerror-error": "Mearachd: $1",
-       "laggedslavemode": "'''Rabhadh:''' Faodaidh nach eil ùrachaidhean a rinneadh o chionn ghoirid a' nochdadh san duilleag.",
+       "laggedslavemode": "<strong>Rabhadh:</strong> Faodaidh nach eil ùrachaidhean a rinneadh o chionn ghoirid a' nochdadh san duilleag.",
        "readonly": "Stòr-dàta glaiste",
        "enterlockreason": "Cuir a-steach adhbhar a' ghlais, a' gabhail a-steach tuairmeas air fuasgladh a' ghlais.",
        "readonlytext": "Tha an stòr-dàta glaiste do chlàir ùra 's mùthaidhean eile, ma dh'fhaoidte air sgàth obair-chàraidh chunbhalach an stòir-dhàta 's bidh e mar as àbhaist às dèidh sin.\n\nChuir an rianadair a ghlas e an cèill na leanas: $1",
-       "missing-article": "Cha do lorg an stòr-dàta teacsa de dhuilleag a bu chòir a bhith air a lorg aige 's air a bheil \"$1\" $2.\n\n'S e mùthaidhean no ceangal eachdraidheil ro shean ri duilleag a chaidh a sguabadh às a bhios coireach à seo mar is trice.\n\nMur eil seo fìor, faodaidh gun do lorg thu buga sa bhathar-bhog.\nAn dèan thu aithris air seo do [[Special:ListUsers/sysop|rianadair]], ag innse dhaibh dè an t-URL a bha ann.",
+       "missing-article": "Cha do lorg an stòr-dàta teacsa de dhuilleag a bu chòir a bhith air a lorg aige 's air a bheil \"$1\" $2.\n\n'S e diofar no ceangal eachdraidheil ro shean ri duilleag a chaidh a sguabadh às a bhios coireach à seo mar is trice.\n\nMur eil seo fìor, faodaidh gun do lorg thu buga sa bhathar-bhog.\nAn dèan thu aithris air seo do [[Special:ListUsers/sysop|rianadair]], ag innse dhaibh dè an t-URL a bha ann.",
        "missingarticle-rev": "(mùthadh#: $1)",
-       "missingarticle-diff": "(Diof: $1, $2)",
+       "missingarticle-diff": "(Diofar: $1, $2)",
        "readonly_lag": "Chaidh an stòr-dàta a ghlasadh leis fhèin fhad 's a tha frithealaichean nan stòr-dàta tràilleach air dheireadh a' mhaighstir",
        "internalerror": "Ion-mhearachd",
        "internalerror_info": "Ion-mhearachd: $1",
-       "filecopyerror": "Cha do ghabh lethbhreac dhen fhaidhle \"$1\" gu \"$2\".",
+       "filecopyerror": "Cha b' urrainn dhuinn lethbhreac dhen fhaidhle \"$1\" a chur gu \"$2\".",
        "filerenameerror": "Cha do ghabh ainm an fhaidhle \"$1\" atharrachadh gu \"$2\".",
        "filedeleteerror": "Cha do ghabh am faidhle \"$1\" a sguabadh às.",
        "directorycreateerror": "Cha do ghabh am pasgan \"$1\" a chruthachadh.",
        "cannotdelete": "Cha do ghabh an duilleag no am faidhle \"$1\" a sguabadh às.\nFaodaidh gun deach a sguabadh às le cuideigin eile mu thràth.",
        "cannotdelete-title": "Cha ghabh an duilleag \"$1\" a sguabadh às",
        "delete-hook-aborted": "Sguireadh dhen sguabadh às ri linn dubhain.\nCha deach adhbhar a thoirt seachad.",
-       "no-null-revision": "Cha b' urrainn dhuinn lèirmheas neoinitheach ùr a chruthachadh dhan duilleag \"$1\"",
+       "no-null-revision": "Cha b' urrainn dhuinn mùthadh neoinitheach ùr a chruthachadh dhan duilleag \"$1\"",
        "badtitle": "Droch thiotal",
-       "badtitletext": "Bha an duilleag a dh'iarr thu mì-dhligheach, falamh no le tiotal eadar-chànanach no eadar-uici air a dhroch cheangal.\nFaodaidh gu bheil aon no barrachd charactairean ann nach urrainn dhut a chleachdadh ann an tiotalan.",
+       "badtitletext": "Bha an duilleag a dh'iarr thu mì-dhligheach, falamh no le tiotal eadar-chànanach no eadar-uicidh air a dhroch cheangal.\nFaodaidh gu bheil aon no barrachd charactairean ann nach urrainn dhut a chleachdadh ann an tiotalan.",
        "perfcached": "Chaidh an dàta a leanas a thasgadh 's faodaidh gu bheil e air dheireadh. Tha {{PLURAL:$1|$1 toradh|$1 thoradh|$1 toraidhean|$1 toradh}} ri fhaighinn san tasgadan air a' char as motha.",
        "perfcachedts": "Chaidh an dàta a leanas a thasgadh agus chaidh ùrachadh $1 turas mu dheireadh. Tha {{PLURAL:$4|$4 toradh|$4 thoradh|$4 toraidhean|$4 toradh}} ri fhaighinn san tasgadan air a' char as motha.",
        "querypage-no-updates": "Tha ùrachadh air a chur à comas air an duilleag seo an-dràsta.\nCha dèid an dàta an-seo ùrachadh aig an àm seo.",
        "actionthrottledtext": "Gus casg a chur air spama, chan urrainn dhut an gnìomh seo a dhèanamh ro thric am broinn ùine ghoirid agus chaidh thu thairis air a' chrìoch seo.\nFeuch ris a-rithist às a dhèidh seo.",
        "protectedpagetext": "Chaidh an duilleag seo a dhìon gus casg a chur air deasachadh.",
        "viewsourcetext": "'S urrainn dhut coimhead air tùs na duilleige seo 's lethbhreac a dhèanamh dheth:",
-       "viewyourtext": "'S urrainn dhut coimhead air '''na mhùthaich thu''' 's lethbhreac a dhèanamh dheth air an duilleag seo:",
-       "protectedinterface": "Bheir an duilleag seo dhut teacsa eadar-aghaidh airson a' bhathar-bhog air an uicipeid seo 's chaidh a ghlasadh gus casg a chur air mì-chleachdadh. Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicipeid, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
-       "editinginterface": "'''Rabhadh:''' Tha thu a' deasachadh duilleag a tha 'ga chleachdadh a chum teacsa eadar-aghaidh a sholar airson a' bhathar-bhog.\nMa dh'atharraicheas tu an duilleag seo, bidh buaidh ann air coltas na h-eadar-aghaidh mar a chì càch e air an uicipeid seo.\nGus eadar-theangachadh atharrachadh no a chur ris airson gach uicipeid, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
-       "cascadeprotected": "Chaidh an duilleag seo a dhìon o dheasachadh a chionn 's gu bheil e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a chaidh an dìon 's an roghainn \"mar eas\" air:\n$2",
-       "namespaceprotected": "Chan eil cead agad duilleagan san namespace '''$1''' a dheasachadh.",
+       "viewyourtext": "'S urrainn dhut coimhead air <strong>na dheasaich thu</strong> 's lethbhreac a dhèanamh dheth air an duilleag seo:",
+       "protectedinterface": "Bheir an duilleag seo dhut teacsa eadar-aghaidh airson a' bhathar-bhog air an uicidh seo 's chaidh a ghlasadh gus casg a chur air mì-chleachdadh. Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
+       "editinginterface": "<strong>Rabhadh:</strong> Tha thu a' deasachadh duilleag a tha 'ga chleachdadh a chum teacsa eadar-aghaidh a sholar airson a' bhathar-bhog.\nMa dh'atharraicheas tu an duilleag seo, bidh buaidh ann air coltas na h-eadar-aghaidh mar a chì càch e air an uicidh seo.\nGus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
+       "cascadeprotected": "Chaidh an duilleag seo a dhìon o dheasachadh a chionn 's gu bheil e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a chaidh a dhìon 's an roghainn \"mar eas\" air:\n$2",
+       "namespaceprotected": "Chan eil cead agad duilleagan san ainm-spàs <strong>$1</strong> a dheasachadh.",
        "customcssprotected": "Chan eil cead agad an duilleag CSS seo a dheasachadh a chionn 's gu bheil na roghainnean pearsanta aig cleachdaiche eile innte.",
        "customjsprotected": "Chan eil cead agad an duilleag JavaScript seo a dheasachadh a chionn 's gu bheil na roghainnean pearsanta aig cleachdaiche eile innte.",
        "mycustomcssprotected": "Chan eil cead agad an duilleag CSS seo a dheasachadh.",
        "myprivateinfoprotected": "Chan eil cead agad am fiosrachadh prìobhaideach agad a dheasachadh.",
        "mypreferencesprotected": "Chan eil cead agad na roghainnean agad a dheasachadh.",
        "ns-specialprotected": "Chan ghabh duilleagan sònraichte a dheasachadh.",
-       "titleprotected": "Chaidh an duilleag seo a dhìon o chruthachadh le [[User:$1|$1]].\nSeo am mìneachadh: \"''$2''\".",
+       "titleprotected": "Chaidh an duilleag seo a dhìon o chruthachadh le [[User:$1|$1]].\nSeo am mìneachadh: \"<em>$2</em>\".",
        "filereadonlyerror": "Cha ghabh am faidhle \"$1\" atharrachadh a chionn 's gu bheil ionad-tasgaidh fhaidhlichean \"$2\" ri leughadh a-mhàin.\nThug an rianaire a ghlais e seachad an t-adhbhar a leanas: \"$3\".",
-       "invalidtitle-knownnamespace": "Tiotal mì-dhligheach leis an namespace \"$2\" agus an teacsa \"$3\"",
-       "invalidtitle-unknownnamespace": "Tiotal mì-dhligheach leis an àireamh namespace $1 agus an teacsa \"$2\"",
-       "exception-nologin": "Chan eil thu air clàradh a-steach",
-       "exception-nologin-text": "Feumaidh tu [[Special:Userlogin|clàradh a-steach]] mus fhaic thu an duilleag seo no mus urrainn dhut seo a dhèanamh.",
+       "invalidtitle-knownnamespace": "Tiotal mì-dhligheach leis an ainm-spàs \"$2\" agus an teacsa \"$3\"",
+       "invalidtitle-unknownnamespace": "Tiotal mì-dhligheach leis an àireamh ainm-spàis $1 agus an teacsa \"$2\"",
+       "exception-nologin": "Chan eil thu air logadh a-steach",
+       "exception-nologin-text": "Feumaidh tu [[Special:Userlogin|logadh a-steach]] mus fhaic thu an duilleag seo no mus urrainn dhut seo a dhèanamh.",
        "exception-nologin-text-manual": "Ma tha thu ag iarraidh cothrom air an duilleag no air a' ghnìomh seo, $1.",
-       "virus-badscanner": "Droch cho-dhealbhachd: sganair bhìorasan neo-aithnichte: ''$1''",
+       "virus-badscanner": "Droch cho-dhealbhachd: sganair bhìorasan neo-aithnichte: <em>$1</em>",
        "virus-scanfailed": "dh'fhàillig an sganadh (còd $1)",
        "virus-unknownscanner": "sganair bhìorasan neo-aithnichte:",
-       "logouttext": "'''Chaidh do chlàradh a-mach.'''\n\nThoir an aire gum bi coltas air cuid dhe na duilleagan mar gum biodh tu air clàradh a-steach gus am falamhaich thu tasgadan a' bhrabhsair agad.",
+       "logouttext": "<strong>Chaidh do logadh a-mach.</strong>\n\nThoir an aire gum bi coltas air cuid dhe na duilleagan mar gum biodh tu air logadh a-steach gus am falamhaich thu tasgadan a' bhrabhsair agad.",
        "welcomeuser": "Fàilte ort, $1",
        "welcomecreation-msg": "Chaidh an cunntas agad a chruthachadh.\nNa dìochuimhnich na [[Special:Preferences|roghainnean agad air {{SITENAME}}]] a ghleusadh dhut fhèin.",
        "yourname": "Ainm-cleachdaiche:",
        "userlogin-yourname": "Ainm-cleachdaiche",
        "userlogin-yourname-ph": "Cuir a-steach an t-ainm-cleachdaiche agad",
        "createacct-another-username-ph": "Cuir a-steach an t-ainm-cleachdaiche",
-       "yourpassword": "Am facal-faire agad",
+       "yourpassword": "Facal-faire:",
        "userlogin-yourpassword": "Facal-faire",
        "userlogin-yourpassword-ph": "Cuir a-steach am facal-faire agad",
        "createacct-yourpassword-ph": "Cuir a-steach facal-faire",
        "createacct-yourpasswordagain": "Dearbh am facal-faire",
        "createacct-yourpasswordagain-ph": "Cuir a-steach am facal-faire a-rithist",
        "remembermypassword": "Cuimhnich gu bheil mi air logadh a-steach air a' choimpiutair seo (suas gu $1 {{PLURAL:$1|latha|latha|làithean|latha}})",
-       "userlogin-remembermypassword": "Cum clàraichte a-staigh mi",
+       "userlogin-remembermypassword": "Cum air logadh a-steach mi",
        "userlogin-signwithsecure": "Cleachd ceangal tèarainte",
        "yourdomainname": "An àrainn-lìn agad:",
        "password-change-forbidden": "Chan urrainn dhut faclan-faire atharrachadh air an uicipeid seo.",
        "gotaccountlink": "Log a-steach",
        "userlogin-resetlink": "Na dhìochuimhnich thu d' ainm is facal-faire?",
        "userlogin-resetpassword-link": "Na dhìochuimhnich thu am facal-faire agad?",
-       "userlogin-helplink2": "Taic le clàradh a-steach",
-       "userlogin-loggedin": "Chaidh do chlàradh mar {{GENDER:$1|$1}} mu thràth.\nCleachd am foirm gu h-ìosal airson clàradh a-steach mar chleachdaiche eile.",
+       "userlogin-helplink2": "Taic le logadh a-steach",
+       "userlogin-loggedin": "Chaidh do logadh a-steach mar $1 mu thràth.\nCleachd am foirm gu h-ìosal airson logadh a-steach mar chleachdaiche eile.",
        "userlogin-createanother": "Cruthaich cunntas eile",
        "createacct-emailrequired": "Seòladh puist-d",
        "createacct-emailoptional": "Seòladh puist-d (roghainneil)",
        "createacct-submit": "Cruthaich an cunntas agad",
        "createacct-another-submit": "Cruthaich cunntas eile",
        "createacct-benefit-heading": "Tha {{SITENAME}} 'ga chruthachadh le daoine mar thu fhèin.",
-       "createacct-benefit-body1": "{{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|duilleag|dhuilleag|duilleagan|duilleag}}",
-       "createacct-benefit-body3": "{{PLURAL:$1|chom-pàirtiche|chom-pàirtiche|com-pàirtichean|com-pàirtiche}} o chionn goirid",
+       "createacct-benefit-body1": "{{PLURAL:$1|deasachadh|deasachaidhean}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|duilleag|duilleagan}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|deasaiche|deasaichean}} o chionn goirid",
        "badretype": "Chan eil an dà fhacal-faire a chuir thu a-steach a' freagairt ri chèile.",
        "userexists": "Tha an t-ainm-cleachdaiche a chuir thu a-steach 'ga chleachdadh mu thràth.\nNach tagh thu ainm eile?",
        "loginerror": "Mearachd log a-steach",
        "nocookiesnew": "Chaidh an cunntas a chruthachadh ach cha do rinn thu logadh a-steach.\nTha {{SITENAME}} a' cleachdadh briosgaidean gus daoine a logadh a-steach.\nChuir thu na briosgaidean à comas.\nCuir am comas iad agus log a-steach leis an ainm-chleachdaiche 's am facal-faire agad an uairsin.",
        "nocookieslogin": "Tha {{SITENAME}} a' cleachdadh briosgaidean gus daoine a logadh a-steach.\nChuir thu briosgaidean à comas.\nCuir an comas iad is feuch ris a-rithist.",
        "nocookiesfornew": "Cha deach an cunntas a chruthachadh oir cha b' urrainn dhuinn a thùs a dhearbhadh.\nDèan cinnteach gu bheil briosgaidean an comas, ath-luchdaich an duilleag seo 's feuch ris a-rithist.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "Cha do thagh thu ainm-cleachdaiche dligheach.",
        "loginsuccesstitle": "Rinn thu logadh a-steach",
-       "loginsuccess": "'''Rinn thu logadh a-steach air {{SITENAME}} mar \"$1\".'''",
+       "loginsuccess": "<strong>Rinn thu logadh a-steach air {{SITENAME}} mar \"$1\".</strong>",
        "nosuchuser": "Chan eil cleachdaiche ann air a bheil \"$1\".\nTha ainmean chleachdaichean mothaichail do litrichean mòra 's beaga.\nThoir sùil air an litreachadh no [[Special:UserLogin/signup|cruthaich cunntas ùr]].",
        "nosuchusershort": "Chan eil cleachdaiche ann leis an ainm \"$1\".\nCuir sùil air an litreachadh.",
        "nouserspecified": "Tha agad ri ainm-cleachdaiche a chur ann.",
        "password-login-forbidden": "Tha an t-ainm-cleachdaiche 's am facal-faire seo toirmisgte.",
        "mailmypassword": "Ath-shuidhich am facal-faire",
        "passwordremindertitle": "Facal-faire sealach ùr airson {{SITENAME}}",
-       "passwordremindertext": "Dh'iarr cuideigin ('s mathaid gun do dh'iarr thusa seo on t-seòladh IP $1) facal-faire ùr airson {{SITENAME}} ($4). Chaidh facal-faire sealach a chruthachadh airson \"$2\" a tha 'na \"$3\".\nMa bha sin fa-near dhut, bidh agad ri clàradh a-steach agus facal-faire ùr a thaghadh\nan-dràsta fhèin. Falbhaidh an ùine air an fhacal-fhaire sealach agad ann an {{PLURAL:$5|$5 latha|$5 latha|$5 làithean|$5 latha}}.\n\nMa dh'iarr cuideigin eile seo no ma chuimhnich thu am facal-faire agad 's mur eil thu\nairson atharrachadh tuilleadh, 's urrainn dhut an teachdaireachd seo a leigeil seachad\nagus leantainn ort leis an t-seann fhacal-faire.",
+       "passwordremindertext": "Dh'iarr cuideigin ('s mathaid gun do dh'iarr thusa seo on t-seòladh IP $1) facal-faire ùr airson {{SITENAME}} ($4). Chaidh facal-faire sealach a chruthachadh airson \"$2\" a tha 'na \"$3\".\nMa bha sin fa-near dhut, bidh agad ri logadh a-steach agus facal-faire ùr a thaghadh\nan-dràsta fhèin. Falbhaidh an ùine air an fhacal-fhaire sealach agad ann an {{PLURAL:$5|$5 latha|$5 latha|$5 làithean|$5 latha}}.\n\nMa dh'iarr cuideigin eile seo no ma chuimhnich thu am facal-faire agad 's mur eil thu\nairson atharrachadh tuilleadh, 's urrainn dhut an teachdaireachd seo a leigeil seachad\nagus leantainn ort leis an t-seann fhacal-faire.",
        "noemail": "Cha deach post-d a chlàradh airson a' chleachdaiche \"$1\".",
        "noemailcreate": "Feumaidh tu post-d dligheach a chur ann",
-       "passwordsent": "Chaidh facal-faire ùr a chur dhan phost-d a chaidh a chlàradh airson \"$1\".\nClàraich a-steach a-rithist nuair a gheibh thu e.",
+       "passwordsent": "Chaidh facal-faire ùr a chur dhan phost-d a chaidh a chlàradh airson \"$1\".\nDèan logadh a-steach a-rithist nuair a gheibh thu e.",
        "blocked-mailpassword": "Chaidh bacadh a chur air an t-seòladh IP agad 's chan eil cead deasachaidh agad agus chan urrainn dhut an gleus a chum aiseag an fhacail-fhaire a chleachdadh gus casg a chur air mì-ghnàthachadh.",
        "eauthentsent": "Chaidh post-d dearbhaidh a chur dhan phost-d a chaidh ainmeachadh.\nMus dèid post-d sam bith eile a chur dhan chunntas, feumaidh tu leantainn ris an stiùireadh sa phost-d mar dhearbhadh gur ann agadsa a tha an cunntas.",
-       "throttled-mailpassword": "Chaidh post-d a chur airson ath-shuidheachadh facail-fhaire mu thràth {{PLURAL:$1|uair|$1 uair|$1 uairean|$1 uair}} a thìde air ais.\nGus casg a chur air mì-ghnàthachadh, cha chuir sinn ach aon chuimhneachan facail-fhaire gach {{PLURAL:$1|uair|$1 uair|$1 uairean|$1 uair}} a thìde.",
+       "throttled-mailpassword": "Chaidh post-d a chur airson ath-shuidheachadh facail-fhaire mu thràth $1 {{PLURAL:$1|uair|uair|uairean|uair}} a thìde air ais.\nGus casg a chur air mì-ghnàthachadh, cha chuir sinn ach aon chuimhneachan facail-fhaire gach $1 {{PLURAL:$1|uair|uair|uairean|uair}} a thìde.",
        "mailerror": "Mearachd a' cur post: $1",
-       "acct_creation_throttle_hit": "Chruthaich na h-aoighean air an Uici seo {{PLURAL:$1|1 chunntas|$1 chunntas|$1 cunntasan|$1 cunntas}} fon IP agad an-dè agus sin an àireamh as motha a tha ceadaichte. Chan urrainn do dh'aoighean eile on IP seo barrachd chunntasan a chruthachadh air sgàth sin.",
+       "acct_creation_throttle_hit": "Chruthaich na h-aoighean air an uicidh seo {{PLURAL:$1|$1 chunntas|$1 chunntas|$1 cunntasan|$1 cunntas}} fon IP agad an-dè agus sin an àireamh as motha a tha ceadaichte. Chan urrainn do dh'aoighean eile on IP seo barrachd chunntasan a chruthachadh air sgàth sin.",
        "emailauthenticated": "Chaidh an seòladh puist-d agad a dhearbhadh $2 aig $3.",
        "emailnotauthenticated": "Cha deach am post-d agad a dhearbhadh fhathast.\nCha dèid post-d a chur airson gin dhe na feartan a leanas.",
        "noemailprefs": "Sònraich post-d sna roghainnean agad gus na feartan seo a chur an comas.",
        "cannotchangeemail": "Cha ghabh na puist-d a tha co-cheangailte ri cunntas atharrachadh air an uicipeid seo.",
        "emaildisabled": "Chan urrainn dhut puist-d a chur air an làrach seo.",
        "accountcreated": "Cunntas cruthaichte",
-       "accountcreatedtext": "Chaidh an cunntas cleachdaiche airson [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) a chruthachadh.",
+       "accountcreatedtext": "Chaidh an cunntas cleachdaiche airson [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|na deasbaireachd]]) a chruthachadh.",
        "createaccount-title": "Cruthachadh cunntais airson {{SITENAME}}",
-       "createaccount-text": "Chruthaich cuideigin cunntas airson a' phost-d agad air {{SITENAME}} ($4) air a bheil \"$2\", leis an fhacal-fhaire \"$3\".\nBu chòir dhut clàradh a-steach agus am facal-faire agad atharrachadh gu h-ìosal an-dràsta.\n\n'S urrainn dhut an teachdaireachd seo a leigeil seachad ma chaidh an cunntas a chruthachadh air mhearachd.",
-       "login-throttled": "Dh'fheuch thu ri clàradh a-steach ro thric o chionn ghoirid.\nFuirich ort $1 mus feuch thu ris a-rithist.",
-       "login-abort-generic": "Cha do shoirbhich leat leis a' chlàradh a-steach - Chaidh sgur dheth",
+       "createaccount-text": "Chruthaich cuideigin cunntas airson a' phost-d agad air {{SITENAME}} ($4) air a bheil \"$2\", leis an fhacal-fhaire \"$3\".\nBu chòir dhut logadh a-steach agus am facal-faire agad atharrachadh gu h-ìosal an-dràsta.\n\n'S urrainn dhut an teachdaireachd seo a leigeil seachad ma chaidh an cunntas a chruthachadh air mhearachd.",
+       "login-throttled": "Dh'fheuch thu ri logadh a-steach ro thric o chionn ghoirid.\nFuirich ort $1 mus feuch thu ris a-rithist.",
+       "login-abort-generic": "Cha do shoirbhich leat leis an logadh a-steach - Chaidh sgur dheth",
        "loginlanguagelabel": "Cànan: $1",
-       "suspicious-userlogout": "Chaidh d' iarrtas airson clàradh a-mach a dhiùltadh a chionn 's gu bheil coltas gun deach a chur le brabhsair briste no le progsaidh tasglannaidh.",
+       "suspicious-userlogout": "Chaidh d' iarrtas airson logadh a-mach a dhiùltadh a chionn 's gu bheil coltas gun deach a chur le brabhsair briste no le progsaidh tasglannaidh.",
        "createacct-another-realname-tip": "Cha leig thu leas innse dè am fìor-ainm a tha ort.\nMa bheir thu seachad e, thèid seo a chleachdadh gus urram a thoirt dha na h-ùghdaran airson an cuid obrach.",
        "pt-login": "Log a-steach",
        "pt-login-button": "Log a-steach",
        "user-mail-no-addy": "Cha do ghabh am post-d a chur leis nach robh seòladh puist-d ann.",
        "user-mail-no-body": "Bha bodhaig na teachdaireachd bàn no air leth goirid.",
        "changepassword": "Atharraich facal-faire",
-       "resetpass_announce": "Gus an clàradh a-steach a choileanadh, tha agad ri facal-faire ùr a shuidheachadh.",
+       "resetpass_announce": "Gus an logadh a-steach a choileanadh, tha agad ri facal-faire ùr a shuidheachadh.",
+       "resetpass_text": "<!-- Cuir teacsa an-seo -->",
        "resetpass_header": "Atharraich facal-faire a' chunntais",
        "oldpassword": "Seann fhacal-faire",
        "newpassword": "Facal-faire ùr",
        "retypenew": "Ath-sgrìobh am facal-faire ùr",
-       "resetpass_submit": "Suidhich am facal-faire 's clàraich a-steach",
+       "resetpass_submit": "Suidhich am facal-faire 's dèan logadh a-steach",
        "changepassword-success": "Chaidh am facal-faire agad atharrachadh!",
-       "changepassword-throttled": "Dh'fheuch thu ri clàradh a-steach ro thric o chionn ghoirid.\nFuirich ort $1 mus feuch thu ris a-rithist.",
+       "changepassword-throttled": "Dh'fheuch thu ri logadh a-steach ro thric o chionn ghoirid.\nFuirich ort $1 mus feuch thu ris a-rithist.",
        "resetpass_forbidden": "Cha ghabh na faclan-faire atharrachadh",
-       "resetpass-no-info": "Feumaidh tu clàradh a-steach mus dèan thu inntrigeadh dìreach dhan duilleag seo.",
+       "resetpass-no-info": "Feumaidh tu logadh a-steach mus dèan thu inntrigeadh dìreach dhan duilleag seo.",
        "resetpass-submit-loggedin": "Atharraich am facal-faire",
        "resetpass-submit-cancel": "Sguir dheth",
        "resetpass-wrong-oldpass": "Tha am facal-faire sealach no làithreach mì-dhligheach.\nSaoil an do dh'atharraich thu am facal-faire agad mu thràth no an do dh'iarr thu facal-faire sealach ùr?",
        "resetpass-recycled": "Tagh facal-faire ùr nach eil co-ionnann ris an fhacal-fhaire a tha agad an-dràsta.",
-       "resetpass-temp-emailed": "Rinn thu clàradh a-steach le còd sealach a fhuair thu air a' phost-d.\nAirson clàradh a-steach slàn a dhèanamh, feumaidh tu facal-faire ùr a shuidheachadh an-seo:",
+       "resetpass-temp-emailed": "Rinn thu logadh a-steach le còd sealach a fhuair thu air a' phost-d.\nAirson logadh a-steach slàn a dhèanamh, feumaidh tu facal-faire ùr a shuidheachadh an-seo:",
        "resetpass-temp-password": "Facal-faire sealach:",
        "resetpass-abort-generic": "Chuir leudachan crìoch air atharrachadh an fhacail-fhaire.",
-       "resetpass-expired": "Dh'fhalbh an ùine air an fhacal-fhaire agad. Suidhich facal-faire ùr airson clàradh a-steach.",
+       "resetpass-expired": "Dh'fhalbh an ùine air an fhacal-fhaire agad. Suidhich facal-faire ùr airson logadh a-steach.",
        "resetpass-expired-soft": "Dh'fhalbh an ùine air an fhacal-fhaire agad is feumaidh tu ath-shuidheachadh. Tagh fear ùr no briog air \"{{int:resetpass-submit-cancel}}\" gus ath-shuidheachadh às a dhèidh seo.",
        "resetpass-validity-soft": "Chan eil am facal-faire seo dligheach: $1\n\nTagh facal-faire ùr an-dràsta no briog air \"{{int:resetpass-submit-cancel}}\" gus ath-shuidheachadh às a dhèidh seo.",
        "passwordreset": "Ath-shuidhich am facal-faire",
        "passwordreset-text-one": "Lìon am foirm seo gus am facal-faire agad ath-shuidheachadh.",
-       "passwordreset-text-many": "{{PLURAL:$1|Lìon aon dhe na raointean gus facal-faire sealach fhaighinn ann am post-d.}}",
+       "passwordreset-text-many": "Lìon {{PLURAL:$1|an raon|aon dhe na raointean}} gus facal-faire sealach fhaighinn air a' phost-d.",
        "passwordreset-legend": "Ath-shuidhich am facal-faire",
-       "passwordreset-disabled": "Chaidh ath-shuidheachadh nam faclan-faire a chur à comas air an uicipeid seo.",
-       "passwordreset-emaildisabled": "Chaidh feartan a' phuist-d a chur à comas san uicipeid seo.",
+       "passwordreset-disabled": "Chaidh ath-shuidheachadh nam faclan-faire a chur à comas air an uicidh seo.",
+       "passwordreset-emaildisabled": "Chaidh feartan a' phuist-d a chur à comas san uicidh seo.",
        "passwordreset-username": "Ainm-cleachdaiche:",
        "passwordreset-domain": "Àrainn-lìn:",
        "passwordreset-capture": "A bheil thu airson coimhead air a' phost-d?",
        "passwordreset-capture-help": "Ma chuireas tu cromag sa bhogsa seo, chì thusa am post-d (leis an fhacal-fhaire sealach) agus gheibh an cleachdaiche e cuideachd.",
        "passwordreset-email": "Seòladh puist-d:",
        "passwordreset-emailtitle": "Dàta a' chunntais air {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Dh'iarr cuideigin (thu fhèin, 's mathaid, on t-seòladh IP $1) am facal-faire airson {{SITENAME}} ($4) ath-shuidheachadh. Tha {{PLURAL:$3|an cunntas|an dà chunntas|na $3 cunntasan|na $3 cunntas}} a leanas co-cheangailte ris a' phost-d seo:\n\n$2\n\nFalbhaidh an ùine air {{PLURAL:$3|an fhacal-fhaire|an $3 fhacal-faire|na $3 faclan-faire|na $3 facal-faire}} sealach seo ann an {{PLURAL:$5|latha|$5 latha|$5 làithean|$5 latha}}.\nBu chòir dhut clàradh a-steach agus facal-faire ùr a thaghadh an-dràsta. Ma dh'iarr cuideigin eile seo no ma chuimhnich thu air an fhacal-fhaire agad 's mur eil thu airson atharrachadh tuilleadh, leig seachad an teachdaireachd seo 's lean ort leis an t-seann fhacal-fhaire.",
-       "passwordreset-emailtext-user": "Dh'iarr an cleachdaiche $1 air {{SITENAME}} ath-shuidheachadh an fhacail-fhaire air {{SITENAME}} ($4). Tha {{PLURAL:$3|an cunntas-cleachdaiche|an $3 chunntas-cleachdaiche|na $3 cunntasan-cleachdaiche|na $3 cunntas-cleachdaiche}} a leanas co-cheangailte ris a' phost-d seo:\n\n$2\n\nFalbhaidh an ùine air {{PLURAL:$3|an fhacal-fhaire|an $3 fhacal-faire|na $3 faclan-faire|na $3 facal-faire}} sealach seo ann an {{PLURAL:$5|latha|$5 latha|$5 làithean|$5 latha}}.\nBu chòir dhut clàradh a-steach agus facal-faire ùr a thaghadh an-dràsta. Ma dh'iarr cuideigin eile seo no ma chuimhnich thu air an fhacal-fhaire agad 's mur eil thu airson atharrachadh tuilleadh, leig seachad an teachdaireachd seo 's lean ort leis an t-seann fhacal-fhaire.",
+       "passwordreset-emailtext-ip": "Dh'iarr cuideigin (thu fhèin, 's mathaid, on t-seòladh IP $1) am facal-faire airson {{SITENAME}} ($4) ath-shuidheachadh. Tha {{PLURAL:$3|an cunntas|na cunntasan}} a leanas co-cheangailte ris a' phost-d seo:\n\n$2\n\nFalbhaidh an ùine air {{PLURAL:$3|an fhacal-fhaire shealach|na faclan-faire sealach}} seo an ceann $5 {{PLURAL:$5|latha|latha|làithean|latha}}.\nBu chòir dhut logadh a-steach agus facal-faire ùr a thaghadh an-dràsta. Ma dh'iarr cuideigin eile seo no ma chuimhnich thu air an fhacal-fhaire agad 's mur eil thu airson atharrachadh tuilleadh, leig seachad an teachdaireachd seo 's lean ort leis an t-seann fhacal-fhaire.",
+       "passwordreset-emailtext-user": "Dh'iarr an cleachdaiche $1 air {{SITENAME}} ath-shuidheachadh an fhacail-fhaire air {{SITENAME}} ($4). Tha {{PLURAL:$3|an cunntas-cleachdaiche|na cunntasan-cleachdaiche}} a leanas co-cheangailte ris an t-seòladh puist-d seo:\n\n$2\n\nFalbhaidh an ùine air {{PLURAL:$3|an fhacal-fhaire shealach|na faclan-faire sealach}} seo an ceann $5 {{PLURAL:$5|latha|latha|làithean|latha}}.\nBu chòir dhut logadh a-steach agus facal-faire ùr a thaghadh an-dràsta. Ma dh'iarr cuideigin eile seo no ma chuimhnich thu air an fhacal-fhaire agad 's mur eil thu airson atharrachadh tuilleadh, leig seachad an teachdaireachd seo 's lean ort leis an t-seann fhacal-fhaire.",
        "passwordreset-emailelement": "Ainm-cleachdaiche: $1\nFacal-faire sealach: $2",
        "passwordreset-emailsent": "Chaidh post-d airson ath-shuidheachadh an fhacail-fhaire a chur.",
        "passwordreset-emailsent-capture": "Chaidh post-d a chum ath-shuidheachadh an fhacail-fhaire a chur agus chì thu sin gu h-ìosal.",
-       "passwordreset-emailerror-capture": "Chaidh post-d a chum ath-shuidheachadh an fhacail-fhaire a ghintinn agus chì thu sin gu h-ìosal ach cha b' urrainn dhuinn a chur dhan chleachdaiche {{GENDER:$2|user}}: $1",
+       "passwordreset-emailerror-capture": "Chaidh post-d a chum ath-shuidheachadh an fhacail-fhaire a ghintinn agus chì thu sin gu h-ìosal ach cha b' urrainn dhuinn a chur dhan chleachdaiche: $1",
        "changeemail": "Atharraich am post-d",
        "changeemail-header": "Atharraich cunntas a' phuist-d",
        "changeemail-text": "Lìon am foirm seo gus am post-d agad atharrachadh. Feumaidh tu am facal-faire agad a chur a-steach a-rithist gus a dhearbhadh.",
-       "changeemail-no-info": "Feumaidh tu clàradh a-steach mus dèan thu inntrigeadh dìreach dhan duilleag seo.",
+       "changeemail-no-info": "Feumaidh tu logadh a-steach mus dèan thu inntrigeadh dìreach dhan duilleag seo.",
        "changeemail-oldemail": "An seòladh puist-d làithreach:",
        "changeemail-newemail": "An seòladh puist-d ùr:",
        "changeemail-none": "(chan eil gin)",
        "changeemail-password": "Am facal-faire agad air {{SITENAME}}:",
        "changeemail-submit": "Atharraich am post-d",
        "changeemail-cancel": "Sguir dheth",
-       "changeemail-throttled": "Dh'fheuch thu ri clàradh a-steach ro thric.\nFuirich ort $1 mus feuch thu ris a-rithist.",
+       "changeemail-throttled": "Dh'fheuch thu ri logadh a-steach ro thric.\nFuirich ort $1 mus feuch thu ris a-rithist.",
        "resettokens": "Ath-shuidhich na tòcanan",
        "resettokens-text": "'S urrainn dhut tòcanan ath-shuidheachadh a bheir cothrom dhut air cuid a dhàta prìobhaideach a tha co-cheangailte ris a' chunntas agad.\n\nBu chòir dhut seo a dhèanamh ma thug thu do chuideigin e air mhearachd no ma bhris cuideigin a-steach air a' chunntas agad.",
        "resettokens-no-tokens": "Chan eil tòcan ann a ghabhas ath-shuidheachadh.",
        "headline_sample": "Teacsa ceann-loidhne",
        "headline_tip": "Ceann-loidhne ìre 2",
        "nowiki_sample": "Cuir a-steach teacsa gun fhòrmatadh an-seo",
-       "nowiki_tip": "Leig seachad fòrmatadh uici",
+       "nowiki_tip": "Leig seachad fòrmatadh uicidh",
        "image_sample": "Eisimpleir.jpg",
        "image_tip": "Faidhle air a leabachadh",
        "media_sample": "Eisimpleir.ogg",
        "preview": "Ro-shealladh",
        "showpreview": "Seall an ro-shealladh",
        "showdiff": "Seall na mùthaidhean",
-       "anoneditwarning": "'''Rabhadh:''' Chan eil thu air logadh a-steach.\nThèid an seòladh IP agad a chlàrachadh ann an eachdraidh na duilleige seo.",
-       "anonpreviewwarning": "''Chan eil thu air clàradh a-steach. Ma nì thu sàbhaladh, thèid an seòladh IP agad a chlàradh ann an eachdraidh deasachadh na duilleige seo.''",
-       "missingsummary": "'''Cuimhnich:''' Cha dug thu seachad gearr-chunntas air na dh'atharraich thu.\nMa bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais gearr-chunntais.",
+       "anoneditwarning": "<strong>Rabhadh:</strong> Chan eil thu air logadh a-steach.\nThèid an seòladh IP agad a chlàradh ann an eachdraidh na duilleige seo.",
+       "anonpreviewwarning": "<em>Chan eil thu air logadh a-steach. Ma nì thu sàbhaladh, thèid an seòladh IP agad a chlàradh ann an eachdraidh deasachadh na duilleige seo.</em>",
+       "missingsummary": "<strong>Cuimhnich:</strong> Cha dug thu seachad gearr-chunntas air na dh'atharraich thu.\nMa bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais gearr-chunntais.",
        "missingcommenttext": "Cuir a-steach beachd gu h-ìosal.",
-       "missingcommentheader": "'''Cuimhnich:''' Cha dug thu seachad cuspair/ceann airson a' bheachd seo.\nMa bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais.",
+       "missingcommentheader": "<strong>Cuimhnich:</strong> Cha dug thu seachad cuspair/ceann airson a' bheachd seo.\nMa bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais.",
        "summary-preview": "Ro-shealladh a' ghearr-chunntais:",
        "subject-preview": "Ro-shealladh air a' chuspair/air a' cheann:",
        "blockedtitle": "Tha an cleachdair air a bhacadh",
-       "blockedtext": "''Chaidh an t-ainm-cleachdaiche no an seòladh IP agad a bhacadh.'''\n\n'S e $1 a chur am bacadh seo ort.\nThug iad an cèill gun do rinn iad sinn air sgàth an adhbhair seo: ''$2''.\n\n* Toiseach a' bhacaidh: $8\n* Deireadh a' bhacaidh: $6\n* An neach air a bheil am bacadh: $7\n\n'S urrainn dhut fios a chur gu $1 no [[{{MediaWiki:Grouppage-sysop}}|rianair]] eile gus am bacadh seo a dheasbad.\nChan urrainn dhut am feart \"Cuir post-d dhan chleachdaiche seo\" a chleachdadh ach ma tha seòladh puist-d dligheach ann an [[Special:Preferences|roghainnean a' chunntais agad]] agus mura deach bacadh a chur air a chleachdadh.\n'S e $3 an seòladh IP làithreach agus agus 's e #$5 ID a' bhacaidh.\nThoir iomradh air a' mhion-fhiosrachadh gu h-àrd ma chuireas tu ceist sam bith mu dhèidhinn.",
-       "autoblockedtext": "''Chaidh an seòladh IP agad a bhacadh gu fèin-obrachail a chionn 's gun deach a chleachdadh le cuideigin eile a chaidh a bhacadh le $1.'''\nThug iad an cèill gun do rinn iad sinn air sgàth an adhbhair seo: \n\n:''$2''.\n\n* Toiseach a' bhacaidh: $8\n* Deireadh a' bhacaidh: $6\n* An neach air a bheil am bacadh: $7\n\n'S urrainn dhut fios a chur gu $1 no [[{{MediaWiki:Grouppage-sysop}}|rianair]] eile gus am bacadh seo a dheasbad.\n\nDh'fhaoidte nach urrainn dhut am feart \"Cuir post-d dhan chleachdaiche seo\" a chleachdadh ach ma tha seòladh puist-d dligheach ann an [[Special:Preferences|roghainnean a' chunntais agad]] agus mura deach bacadh a chur air a chleachdadh.\n\n'S e $3 an seòladh IP làithreach agus agus 's e #$5 ID a' bhacaidh.\nThoir iomradh air a' mhion-fhiosrachadh gu h-àrd ma chuireas tu ceist sam bith mu dhèidhinn.",
+       "blockedtext": "<strong>Chaidh an t-ainm-cleachdaiche no an seòladh IP agad a bhacadh.</strong>\n\n'S e $1 a chur am bacadh seo ort.\n{{GENDER:$1|Thug e|Thug i|Thugadh}} an cèill gun do {{GENDER:$1|rinn e|rinn i|rinneadh}} sin air sgàth an adhbhair seo: <em>$2</em>.\n\n* Toiseach a' bhacaidh: $8\n* Deireadh a' bhacaidh: $6\n* An neach air a bheil am bacadh: $7\n\n'S urrainn dhut fios a chur gu $1 no [[{{MediaWiki:Grouppage-sysop}}|rianair]] eile gus am bacadh seo a dheasbad.\nChan urrainn dhut am feart \"Cuir post-d dhan chleachdaiche seo\" a chleachdadh ach ma tha seòladh puist-d dligheach ann an [[Special:Preferences|roghainnean a' chunntais agad]] agus mura deach bacadh a chur air a chleachdadh.\n'S e $3 an seòladh IP làithreach agus agus 's e #$5 ID a' bhacaidh.\nThoir iomradh air a' mhion-fhiosrachadh gu h-àrd ma chuireas tu ceist sam bith mu dhèidhinn.",
+       "autoblockedtext": "Chaidh an seòladh IP agad a bhacadh gu fèin-obrachail a chionn 's gun deach a chleachdadh le cuideigin eile a chaidh a bhacadh le $1.\n{{GENDER:$1|Thug e|Thug i|Thugadh}} an cèill gun do {{GENDER:$1|rinn e|rinn i|rinneadh}} sin air sgàth an adhbhair seo: \n\n:<em>$2</em>.\n\n* Toiseach a' bhacaidh: $8\n* Deireadh a' bhacaidh: $6\n* An neach air a bheil am bacadh: $7\n\n'S urrainn dhut fios a chur gu $1 no [[{{MediaWiki:Grouppage-sysop}}|rianair]] eile gus am bacadh seo a dheasbad.\n\nDh'fhaoidte nach urrainn dhut am feart \"Cuir post-d dhan chleachdaiche seo\" a chleachdadh ach ma tha seòladh puist-d dligheach ann an [[Special:Preferences|roghainnean a' chunntais agad]] agus mura deach bacadh a chur air a chleachdadh.\n\n'S e $3 an seòladh IP làithreach agus agus 's e #$5 ID a' bhacaidh.\nThoir iomradh air a' mhion-fhiosrachadh gu h-àrd ma chuireas tu ceist sam bith mu dhèidhinn.",
        "blockednoreason": "cha deach adhbhar a shònrachadh",
        "whitelistedittext": "Feumaidh tu $1 mus urrainn dhut duilleagan a dheasachadh.",
        "confirmedittext": "Feumaidh tu am post-d agad a dhearbhadh mus urrainn dhut duilleagan a dheasachadh.\nSuidhich is dearbhaich am post-d agad ann an [[Special:Preferences|roghainnean a' chleachdaiche]]",
        "nosuchsectiontitle": "Cha ghabh an earrann a lorg",
        "nosuchsectiontext": "Dh'fheuch thu ri earrann a dheasachadh nach eil ann.\nDh'fhaoidte gun deach a ghluasad no a sguabadh às fhad 's a bha thu a' coimhead air an duilleag.",
-       "loginreqtitle": "Feumaidh tu clàradh a-steach",
+       "loginreqtitle": "Feumaidh tu logadh a-steach",
        "loginreqlink": "log a-steach",
        "loginreqpagetext": "Feumaidh tu $1 mus urrainn dhut coimhead air duilleagan eile.",
        "accmailtitle": "Facal-faire air a chur.",
-       "accmailtext": "Chaidh facal-faire a chruthachadh air thuaiream airson [[User talk:$1|$1]] 's a chur gu $2.\n\nGabhaidh am facal-faire airson a' chunntais ùir seo atharrachadh air an fo ''[[Special:ChangePassword|atharraich facal-faire]]'' as dèidh dhan chleachdaiche clàradh a-steach.",
+       "accmailtext": "Chaidh facal-faire a chruthachadh air thuaiream airson [[User talk:$1|$1]] 's a chur gu $2.\n\nGabhaidh am facal-faire airson a' chunntais ùir seo atharrachadh air an fo <em>[[Special:ChangePassword|atharraich facal-faire]]</em> às dèidh dhan chleachdaiche logadh a-steach.",
        "newarticle": "(Ùr)",
-       "newarticletext": "Lean thu ri ceangal gu duilleag nach eil ann fhathast.\nCuir teacs sa bhogsa gu h-ìosal gus an duilleag seo a chruthachadh (seall air [$1 duilleag na cobharach] airson barrachd fiosrachaidh).\nMura robh dùil agad ris an duilleag seo a ruigsinn, briog air a' phutan '''air ais''' 'nad bhrabhsair.",
-       "anontalkpagetext": "----''Seo an duilleag deasbaireachd aig cleachdaiche gun urra nach do chruthaich cunntas fhathast no nach eil 'ga chleachdadh.\nFeumaidh sinn an àireamh IP aca a chleachdadh air sgàth sin.\nFaodadh grunn chleachdaichean seòladh IP mar a chleachdadh còmhla.\nMas e cleachdaiche gun urra a tha annad 's ma tha thu dhen bheachd nach eil na beachdan seo a' buntainn riut, nach [[Special:UserLogin/signup|clàraich thu]] no [[Special:UserLogin|clàraich a-steach]] gus bùrach mar seo a sheachnadh san àm ri teachd?''",
+       "newarticletext": "Lean thu ri ceangal gu duilleag nach eil ann fhathast.\nCuir teacs sa bhogsa gu h-ìosal gus an duilleag seo a chruthachadh (seall air [$1 duilleag na cobharach] airson barrachd fiosrachaidh).\nMura robh dùil agad ris an duilleag seo a ruigsinn, briog air a' phutan <strong>air ais</strong> 'nad bhrabhsair.",
+       "anontalkpagetext": "----\n<em>Seo an duilleag deasbaireachd aig cleachdaiche gun urra nach do chruthaich cunntas fhathast no nach eil 'ga chleachdadh.</em>\nFeumaidh sinn an àireamh IP aca a chleachdadh air sgàth sin.\nFaodadh grunn chleachdaichean seòladh IP mar a chleachdadh còmhla.\nMas e cleachdaiche gun urra a tha annad 's ma tha thu dhen bheachd nach eil na beachdan seo a' buntainn riut, nach [[Special:UserLogin/signup|clàraich thu]] no nach dèan thu [[Special:UserLogin|logadh a-steach]] gus bùrach mar seo a sheachnadh san àm ri teachd?",
        "noarticletext": "Chan eil teacsa sam bith anns an duilleag seo an-dràsta.\n'S urrainn dhut [[Special:Search/{{PAGENAME}}|an tiotal seo a lorg]] ann an duilleagan eile,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} na logaichean co-cheangailte a rannsachadh],\nno [{{fullurl:{{FULLPAGENAME}}|action=edit}} an duilleag seo a dheasachadh]</span>.",
        "noarticletext-nopermission": "Chan eil teacsa sam bith san duilleag seo an-dràsta.\n'S urrainn dhut [[Special:Search/{{PAGENAME}}|tiotal na duilleige seo a lorg]] ann an duilleagan eile, no <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} na logaichean co-cheangailte a rannsachadh]</span> ach chan eil cead agad an duilleag seo a chruthachadh.",
        "missing-revision": "Chan eil mùthadh #$1 na duilleige \"{{FULLPAGENAME}}\" ann.\n\nMar is trice, tachraidh seo ma leanas tu ceangal san eachdraidh a tha fìor aosta 's a tha a' dol gu duilleag a chaidh a sguabadh às.\nGheibh thu mion-fhiosrachadh ann an [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} loga nan duilleagan a chaidh a sguabadh às].",
        "userpage-userdoesnotexist": "Chan e cunntas clàraichte a tha ann an \"$1\".\nDèan cinnteach gu bheil thu airson an duilleag seo a chruthachadh/dheasachadh.",
        "userpage-userdoesnotexist-view": "Cha deach an cunntas cleachdaiche \"$1\" a chlàradh.",
        "blocked-notice-logextract": "Tha an cleachdaiche seo air a bhacadh an-dràsta fhèin.\nChì thu loga a' bhacaidh mu dheireadh gu h-ìosal mar fhiosrachadh dhut:",
-       "clearyourcache": "'''An aire:''' As dèidh dhut sàbhaladh, 's mathaid gum bi agad tasgadan a' bhrabhsair agad a chur air gleus mus fhaic thu na dh'atharraich thu.\n* '''Firefox / Safari:''' Cum 'shìos 'Shift'' is briog air ''Ath-luchdaich' no brùth ''Ctrl-F5'' no ''Ctrl-R'' (''⌘-R'' air Mac)\n* '''Google Chrome:''' Brùth ''Ctrl-Shift-R'' (''⌘-Shift-R'' air Mac)\n* '''Internet Explorer:''' Cum shìos ''Ctrl'' is briog air ''Ath-nuadhaich'' no brùth ''Ctrl-F5''\n* '''Opera:''' Falamhaich an tasgadan ann an ''Innealan → Roghainnean''",
-       "usercssyoucanpreview": "'''Gliocas:''' Cleachd am putan \"{{int:showpreview}}\" airson an CSS agad a chur fo dheuchainn mus sàbhail thu e.",
-       "userjsyoucanpreview": "'''Gliocas:''' Cleachd am putan \"{{int:showpreview}}\" gus an JavaScript ùr agad a chur fo dheuchainn mus sàbhail thu e.",
-       "usercsspreview": "'''Cuimhnich nach e seo ach ro-shealladh air a' CSS chleachdaiche agad.'''\n'''Cha deach a shàbhaladh fhathast!''''",
-       "userjspreview": "'''Cuimhnich nach e seo ach ro-shealladh/deuchainn air a' JavaScript agad.'''\n'''Cha deach a shàbhaladh fhathast!''''",
-       "sitecsspreview": "'''Cuimhnich nach e seo ach ro-shealladh air a' CSS agad.'''\n'''Cha deach a shàbhaladh fhathast!''''",
-       "sitejspreview": "'''Cuimhnich nach e seo ach ro-shealladh air còd a' JavaScript agad.'''\n'''Cha deach a shàbhaladh fhathast!''''",
-       "userinvalidcssjstitle": "'''Rabhadh:''' Chan eil an craiceann \"$1\" ann.\nCleachdaidh duilleagan gnàthaichte .css agus .js tiotal ann an litrichean beaga, m.e. {{ns:user}}:Foo/vector.css seach {{ns:user}}:Foo/Vector.css.",
+       "clearyourcache": "<strong>An aire:</strong> As dèidh dhut sàbhaladh, 's mathaid gum bi agad tasgadan a' bhrabhsair agad a chur air gleus mus fhaic thu na dh'atharraich thu.\n* <strong>Firefox / Safari:</strong> Cum shìos <em>Shift</em> is briog air <em>Ath-luchdaich</em> no brùth <em>Ctrl-F5</em> no <em>Ctrl-R</em> (<em>⌘-R</em> air Mac)\n* <strong>Google Chrome:</strong> Brùth <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> air Mac)\n* <strong>Internet Explorer:</strong> Cum shìos <em>Ctrl</em> is briog air <em>Ath-nuadhaich</em> no brùth <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Falamhaich an tasgadan ann an <em>Innealan → Roghainnean</em>",
+       "usercssyoucanpreview": "<strong>Gliocas:</strong> Cleachd am putan \"{{int:showpreview}}\" airson an CSS agad a chur fo dheuchainn mus sàbhail thu e.",
+       "userjsyoucanpreview": "<strong>Gliocas:</strong> Cleachd am putan \"{{int:showpreview}}\" gus an JavaScript ùr agad a chur fo dheuchainn mus sàbhail thu e.",
+       "usercsspreview": "<strong>Cuimhnich nach e seo ach ro-shealladh air a' CSS chleachdaiche agad.\nCha deach a shàbhaladh fhathast!</strong>",
+       "userjspreview": "<strong>Cuimhnich nach e seo ach ro-shealladh/deuchainn air a' JavaScript agad.\nCha deach a shàbhaladh fhathast!</strong>",
+       "sitecsspreview": "<strong>Cuimhnich nach e seo ach ro-shealladh air a' CSS agad.\nCha deach a shàbhaladh fhathast!</strong>",
+       "sitejspreview": "<strong>Cuimhnich nach e seo ach ro-shealladh air còd a' JavaScript agad.\nCha deach a shàbhaladh fhathast!</strong>",
+       "userinvalidcssjstitle": "<strong>Rabhadh:</strong> Chan eil an craiceann \"$1\" ann.\nCleachdaidh duilleagan gnàthaichte .css agus .js tiotal ann an litrichean beaga, m.e. {{ns:user}}:Foo/vector.css seach {{ns:user}}:Foo/Vector.css.",
        "updated": "(Air ùrachadh)",
-       "note": "'''An aire:'''",
-       "previewnote": "'''Cuimhnich nach eil ann ach ro-shealladh.'''\nCha deach na mùthaidhean agad a shàbhaladh fhathast!",
+       "note": "<strong>An aire:</strong>",
+       "previewnote": "<strong>Cuimhnich nach eil ann ach ro-shealladh.</strong>\nCha deach na mùthaidhean agad a shàbhaladh fhathast!",
        "continue-editing": "Rach gun raon deasachaidh",
        "previewconflict": "Tha an ro-shealladh seo a' sealltainn dhut an teacsa san raon teacsa gu h-àrd mar a nochdas e ma shàbhaileas tu an-dràsta.",
-       "session_fail_preview": "'''Duilich! Cha b' urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.'''\nNach fheuch thu ris a-rithist?\nMur obraich e fhathast, feuch is [[Special:UserLogout|clàraich a-mach]] is a-steach a-rithist an uairsin.",
-       "session_fail_preview_html": "'''Duilich! Cha b' urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.'''\n\n''A chionn 's gun do chuir {{SITENAME}} HTML amh an comas, tha an ro-shealladh falaichte mar dhìon an aghaidh ionnsaighean JavaScript.''\n\n'''Mas e deasachadh dligheach a tha seo, feuch ris a-rithist.'''\nMur obraich e fhathast, feuch is [[Special:UserLogout|clàraich a-mach]] is a-steach a-rithist an uairsin.",
-       "token_suffix_mismatch": "'''Dhiùlt sinn na dheasaich thu a chionn 's gun do chuir an cliant agad na caractaran puingeachaidh tro chèile san tòcan deasachaidh.'''\nDhiùlt sinn na dheasaich thu air eagal 's gun coirbeadh e teacsa na duilleige.\nTachraidh seo uaireannan ma chleachdar seirbheis-lìn progsaidh gun urra a tha làn de mhearachdan.",
-       "edit_form_incomplete": "'''Cha do ràinig cuid dhen fhoirm deasachaidh am frithealaichte; dèan cinnteach gu bheil gach deasachadh agad slàn is feuch ris a-rithist.'''",
+       "session_fail_preview": "<strong>Duilich! Cha b' urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.</strong>\nNach fheuch thu ris a-rithist?\nMur obraich e fhathast, feuch is [[Special:UserLogout|log a-mach]] is a-steach a-rithist an uairsin.",
+       "session_fail_preview_html": "<strong>Duilich! Cha b' urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.</strong>\n\n<em>A chionn 's gun do chuir {{SITENAME}} còd HTML an comas, tha an ro-shealladh falaichte mar dhìon an aghaidh ionnsaighean JavaScript.</em>\n\n<strong>Mas e deasachadh dligheach a tha seo, feuch ris a-rithist.</strong>\nMur obraich e fhathast, feuch is dèan [[Special:UserLogout|logadh a-mach]] is a-steach a-rithist an uairsin.",
+       "token_suffix_mismatch": "<strong>Dhiùlt sinn na dheasaich thu a chionn 's gun do chuir an cliant agad na caractaran puingeachaidh tro chèile san tòcan deasachaidh.</strong>\nDhiùlt sinn na dheasaich thu air eagal 's gun coirbeadh e teacsa na duilleige.\nTachraidh seo uaireannan ma chleachdar seirbheis-lìn progsaidh gun urra a tha làn de mhearachdan.",
+       "edit_form_incomplete": "<strong>Cha do ràinig cuid dhen fhoirm deasachaidh am frithealaichte; dèan cinnteach gu bheil gach deasachadh agad slàn is feuch ris a-rithist.</strong>",
        "editing": "A' deasachadh $1",
        "creating": "A' cruthachadh $1",
        "editingsection": "A' deasachadh $1 (earrann)",
        "editingcomment": "A' deasachadh $1 (earrann ùr)",
        "editconflict": "Còmhstri deasachaidh: $1",
-       "explainconflict": "Tha cuideigin eile air an duilleag seo a mhùthadh on a thòisich thu fhèin air a dheasachadh.\nTha am bogsa teacsa gu h-àrd a' nochdadh na duilleige mar a tha i an-dràsta.\nTha na mùthaidhean agadsa sa bhogsa gu h-ìosal.\nBidh agad ris na mùthaidhean agad fhilleadh a-steach san teacsa làithreach.\nCha dèid '''ach an teacsa gu h-àrd''' a shàbhaladh nuair a bhriogas tu air \"{{int:savearticle}}\".",
+       "explainconflict": "Tha cuideigin eile air an duilleag seo a mhùthadh on a thòisich thu fhèin air a dheasachadh.\nTha am bogsa teacsa gu h-àrd a' nochdadh na duilleige mar a tha i an-dràsta.\nTha na mùthaidhean agadsa sa bhogsa gu h-ìosal.\nBidh agad ris na mùthaidhean agad a cho-aonachadh ris an teacsa làithreach.\nCha dèid <strong>ach an teacsa gu h-àrd</strong> a shàbhaladh nuair a bhriogas tu air \"{{int:savearticle}}\".",
        "yourtext": "An teacsa agad",
-       "storedversion": "Lethbhreac taisgte",
-       "nonunicodebrowser": "'''Rabhadh: Chan eil am brabhsair agad co-chòrdail le Unicode.'''\nChuir sinn gleus air dòigh dhut a nì cinnteach gun urrainn dhut duilleagan a shàbhaladh gu tèarainte: Nochdaidh caractaran taobh a-muigh ASCII mar chòd sia-dheicheach sa bhogsa deasachaidh.",
-       "editingold": "'''RABHADH: Tha thu a' deasachadh lethbhreac seann-aimsireil na duilleige seo.\nMa shàbhalas tu seo, thèid gach mùthadh air chall a rinneadh a-mach on mhùthadh seo.'''",
-       "yourdiff": "Caochlaidhean",
-       "copyrightwarning": "Thoir an aire gu bheilear a' tuigsinn gu bheil gach rud a chuireas tu ri {{SITENAME}} air a leigeil mu sgaoil fo $2 (see $1 airson mion-fhiosrachadh).\nMura bi thu toilichte 's daoine eile a' deasachadh gun tròcair na sgrìobh tu 's 'ga sgaoileadh mar a thogras iad, na cuir an-seo e.<br />\nTha thu a' toirt geall cuideachd gun do sgrìobh thu fhèin seo no gun do rinn thu lethbhreac dheth o àrainn phoblach no tùs saor coltach ris.\n'''Na cuir ann rudan fo chòir lethbhric gun chead!'''",
-       "copyrightwarning2": "Ged a thatar gur moladh {{SITENAME}} a chruthachadh, a mheudachadh, is a leasachadh, thèid droch dheasaicheidhean a chur air imrich gu luath.\nMur eil thu ag iarraidh an sgrìobhaidh agad a dheasaichear is a sgaoilear le càch, na cuir e.<br />\nMa dh'fhoilleachas tu rudeigin an seo, bidh tu a' dearbhadh gun do sgrìobh thu fhèin e, no gur ann às an raon phòballach a thàinig e; thoir aire '''nach eil''' sin a' gabhail a-staigh duilleagan-lìn mar as àbhaist (seall $1 airson barrachd fiosrachaidh). <br />\n'''NA CLEACHDAIBH SAOTHAIR FO DHLIGHE-SGRÌOBHAIDH GUN CHEAD!'''",
-       "longpageerror": "Mearachd: Tha an teacsa a chur thu thugainn {{PLURAL:$1 kilobyte|$1 kilobytes}} a dh'fhaid is tha sin nas fhaide na tha ceadaichte ({{PLURAL:$2 kilobyte|$2 kilobytes}}).'''\nCha ghabh a shàbhaladh.",
-       "readonlywarning": "'''Rabhadh: Chaidh an stòr-dàta a ghlasadh a chum obair-ghlèidhidh agus chan urrainn dhut na dheasaich thu a shàbhaladh an-dràsta fhèin.'''\n'S mathaid gum b' fheairrde dhut lethbhreac a dhèanamh dhen teacsa agus a shàbhaladh ann am faidhle ach an urrainn dhut a chleachdadh as a dhèidh seo.\n\nSeo am mìneachadh a thug an rianaire a ghlais e: $1",
-       "protectedpagewarning": "'''Rabhadh: Chaidh an duilleag seo a dhìon 's chan urrainn ach dhan fheadhainn aig a bheil ùghdarras rianaire a dheasachadh.'''\nChì thu an clàr mu dheireadh san loga mar fhiosrachadh dhut gu h-ìosal:",
-       "semiprotectedpagewarning": "'''An aire:''' Chaidh an duilleag seo a dhìon 's chan fhaod ach cleachdaichean clàraichte a dheasachadh.\nSeo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
-       "cascadeprotectedwarning": "'''Rabhadh:''' Chaidh an duilleag seo a dhìon 's chan fhaod ach rianairean a dheasachadh a chionn 's gun robh e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a tha cascade-protected.",
-       "titleprotectedwarning": "'''Rabhadh: Chaidh an duilleag seo a dhìon 's feumar [[Special:ListGroupRights|còraichean sònraichte]] gus a dheasachadh.'''\nSeo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
-       "templatesused": "Tha {{PLURAL:$1|teamplaid|theamplaid|teamplaidean|teamplaid}} 'gan cleachdadh air an duilleag seo:",
-       "templatesusedpreview": "Tha {{PLURAL:$1|1 teamplaid 'ga cleachdadh|$1 theamplaid 'gan cleachdadh|$1 teamplaidean 'gan cleachdadh|$1 teamplaid 'gan cleachdadh}} san ro-shealladh seo:",
-       "templatesusedsection": "Tha {{PLURAL:$1|$1 teamplaid 'ga cleachdadh|$1 theamplaid 'gan cleachdadh|$1 teamplaidean 'gan cleachdadh|$1 teamplaid 'gan cleachdadh}} san earrann seo:",
+       "storedversion": "Mùthadh taisgte",
+       "nonunicodebrowser": "<strong>Rabhadh: Chan eil am brabhsair agad co-chòrdail le Unicode.</strong>\nChuir sinn gleus air dòigh dhut a nì cinnteach gun urrainn dhut duilleagan a shàbhaladh gu tèarainte: Nochdaidh caractaran taobh a-muigh ASCII mar chòd sia-dheicheach sa bhogsa deasachaidh.",
+       "editingold": "<strong>RABHADH: Tha thu a' deasachadh seann-mhùthadh na duilleige seo.</strong>\nMa shàbhaileas tu seo, thèid gach atharrachadh air chall a rinneadh a-mach on mhùthadh seo.",
+       "yourdiff": "Diofaran",
+       "copyrightwarning": "Thoir an aire gu bheilear a' tuigsinn gu bheil gach obair a chuireas tu ri {{SITENAME}} air a leigeil mu sgaoil fo $2 (see $1 airson mion-fhiosrachadh).\nMura bi thu toilichte 's daoine eile a' deasachadh gun tròcair na sgrìobh tu 's 'ga sgaoileadh mar a thogras iad, na cuir an-seo e.<br />\nTha thu a' toirt geall cuideachd gun do sgrìobh thu fhèin seo no gun do rinn thu lethbhreac dheth o àrainn phoblach no tùs saor coltach ris.\n<strong>Na cuir ann rudan fo chòir-lethbhreac gun chead!</strong>",
+       "copyrightwarning2": "Thoir an aire gum faod deasaichean eile gach obair a chuireas tu ri {{SITENAME}} a dheasachadh, atharrachadh no a thoirt air falbh.\nMur eil thu ag iarraidh gun deasaich cuideigin eile na sgrìobh thu gun truas, na cuir a-null e.<br />\nNì thu gealladh dhuinn cuideachd gur e thu fhèin a sgrìobh e no gun do rinn thu lethbhreac dheth o Public Domain no stòras saor dhen leithid (faic $1 airson barrachd fiosrachaidh). <br />\n<strong>Na cuir a-null obair a tha fo chòir-lethbhreac gun chead!</strong>",
+       "longpageerror": "<strong>Mearachd: Tha an teacsa a chur thu thugainn $1 {{PLURAL:$1|chileabaidht|chileabaidht|cileabaidhtichean|cileabaidht}} a dh'fhaid is tha sin nas fhaide na tha ceadaichte ($2 {{PLURAL:$2|chileabaidht|chileabaidht|cileabaidhtichean|cileabaidht}}).</strong>\nCha ghabh a shàbhaladh.",
+       "readonlywarning": "<strong>Rabhadh: Chaidh an stòr-dàta a ghlasadh a chum obair-ghlèidhidh agus chan urrainn dhut na dheasaich thu a shàbhaladh an-dràsta fhèin.</strong>\n'S mathaid gum b' fheairrde dhut lethbhreac a dhèanamh dhen teacsa agus a shàbhaladh ann am faidhle ach an urrainn dhut a chleachdadh as a dhèidh seo.\n\nSeo am mìneachadh a thug an rianaire a ghlais e: $1",
+       "protectedpagewarning": "<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|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:",
        "template-protected": "(air a dhìon)",
        "template-semiprotected": "(air a leth-dhìon)",
-       "hiddencategories": "Tha an duilleag seo 'na ball de {{PLURAL:$1|1 roinn-seòrsa fhalaichte|$1 roinn-seòrsa fhalaichte|$1 roinnean-seòrsa falaichte|$1 roinn-seòrsa fhalaichte}}:",
-       "nocreatetext": "Chuir {{SITENAME}} bacadh air cruthachadh de dhuilleagan ùra.\n'S urrainn dhut tilleadh is duilleag a tha ann mu thràth a dheasachadh no [[Special:UserLogin|clàradh a-steach no cunntas a chruthachadh]].",
+       "hiddencategories": "Tha an duilleag seo 'na ball de {{PLURAL:$1|$1 roinn-seòrsa fhalaichte|$1 roinn-seòrsa fhalaichte|$1 roinnean-seòrsa falaichte|$1 roinn-seòrsa fhalaichte}}:",
+       "edittools": "<!-- Nochdaidh an teacsa seo fo fhoirmean deasachaidh 's luchdaidh suas. -->",
+       "edittools-upload": "-",
+       "nocreatetext": "Chuir {{SITENAME}} bacadh air cruthachadh de dhuilleagan ùra.\n'S urrainn dhut tilleadh is duilleag a tha ann mu thràth a dheasachadh no [[Special:UserLogin|logadh a-steach no cunntas a chruthachadh]].",
        "nocreate-loggedin": "Chan eil cead agad duilleagan ùra a chruthachadh.",
        "sectioneditnotsupported-title": "Chan eil taic ri deasachadh earrannan",
        "sectioneditnotsupported-text": "Chan eil taic ri deasachadh earrannan air an duilleag seo.",
        "permissionserrors": "Mearachd leis a' chead",
-       "permissionserrorstext": "Chan eil cead agad sin a dhèanamh air sgàth {{PLURAL:$1|an adhbhair|an $1 adhbhar|nan $1 adhbharan|nan $1 adhbhar}} a leanas:",
-       "permissionserrorstext-withaction": "Chan eil cead agad airson \"$2\" air sgàth {{PLURAL:$1|an $1 adhbhair|an $1 adhbhar|nan $1 adhbharan|nan $1 adhbhar}} a leanas:",
-       "recreate-moveddeleted-warn": "'''Rabhadh: Tha thu gu bhith ath-chruthachadh duilleag a chaidh a sguabadh às roimhe.'''\n\nSaoil am bu chòir dhut leantainn air adhart le deasachadh na duilleige?.\nSeo dhut loga an sguabaidh às agus a' ghluasaid mar fhiosrachadh dhut:",
+       "permissionserrorstext": "Chan eil cead agad sin a dhèanamh air sgàth {{PLURAL:$1|an adhbhair|nan adhbharan}} a leanas:",
+       "permissionserrorstext-withaction": "Chan eil cead agad airson \"$2\" air sgàth {{PLURAL:$1|an adhbhair|nan adhbharan}} a leanas:",
+       "recreate-moveddeleted-warn": "<strong>Rabhadh: Tha thu gu bhith ath-chruthachadh duilleag a chaidh a sguabadh às roimhe.</strong>\n\nSaoil am bu chòir dhut leantainn air adhart le deasachadh na duilleige?.\nSeo dhut loga an sguabaidh às agus a' ghluasaid mar fhiosrachadh dhut:",
        "moveddeleted-notice": "Chaidh an duilleag seo a sguabadh às.\nChì thu loga an sguabaidh às agus a' ghluasaid gu h-ìosal mar fhiosrachadh dhut.",
        "log-fulllog": "Seall an loga slàn",
        "edit-hook-aborted": "Sguireadh dhen deasachadh ri linn dubhan.\nCha deach adhbhar a thoirt seachad.",
        "content-model-text": "teacsa lom",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "expensive-parserfunction-warning": "'''Rabhadh:''' Tha cus expensive parser function calls san duilleag seo.\n\nBu chòir nas lugha na $2 {{PLURAL:$2|call|calls}} a bhith ann ach tha {{PLURAL:$1|$1 call|$1 calls}} ann.",
+       "expensive-parserfunction-warning": "<strong>Rabhadh:</strong> Tha cus gairmean a' pharsair cosgail san duilleag seo.\n\nBu chòir nas lugha na $2 {{PLURAL:$2|ghairm|ghairm|gairmean|gairm}} a bhith ann ach tha $1 {{PLURAL:$1|ghairm|ghairm|gairmean|gairm}} ann.",
        "expensive-parserfunction-category": "Duilleagan le cus expensive parser function calls",
-       "post-expand-template-inclusion-warning": "'''Rabhadh:''' Tha meud na teamplaide ro mhòr.\nCha dèid cuid dhith a ghabhail a-steach.",
+       "post-expand-template-inclusion-warning": "<strong>Rabhadh:</strong> Tha meud na teamplaide ro mhòr.\nCha dèid cuid dhith a ghabhail a-steach.",
        "post-expand-template-inclusion-category": "Duilleagan far a bheil meud nan teamplaidean a' dol thairis air na tha ceadaichte",
-       "post-expand-template-argument-warning": "'''Rabhadh:''' Tha aon argamaid teamplaid air a' char as lugha air an duilleag seo aig a bheil meud leudachaidh ro mhòr.\nChaidh na h-argamaidean sinn a leigeil seachad.",
+       "post-expand-template-argument-warning": "<strong>Rabhadh:</strong> Tha aon argamaid teamplaid air a' char as lugha air an duilleag seo aig a bheil meud leudachaidh ro mhòr.\nChaidh na h-argamaidean sinn a leigeil seachad.",
        "post-expand-template-argument-category": "Duilleagan air an deach argamaidean teamplaidean fhàgail às",
        "parser-template-loop-warning": "Mhothaicheadh do lùb teamplaid: [[$1]]",
        "parser-template-recursion-depth-warning": "Chaidh thu thairis air crìoch doimhne nan ath-chùrsaidhean teamplaid ($1)",
        "undo-failure": "Cha b' urrainn dhuinn an deasachadh a neo-dhèanamh air sgàth 's gun robh deasachaidhean eile sa mheadhan.",
        "undo-norev": "Cha b' urrainn dhuinn an deasachadh a neo-dhèanamh a chionn 's nach robh e ann no gun deach a sguabadh às.",
        "undo-nochange": "Tha coltas gun deach am mùthadh seo a neo-dhèanamh mu thràth.",
-       "undo-summary": "Neo-dhèan mùthadh $1 le [[Special:Contributions/$2|$2]] ([[User talk:$2|Deasbaireachd]])",
+       "undo-summary": "Neo-dhèan mùthadh $1 leis [[Special:Contributions/$2|$2]] ([[User talk:$2|an deasbaireachd]])",
        "undo-summary-username-hidden": "Neo-dhèan am mùthadh $1 le cleachdaiche falaichte",
        "cantcreateaccounttitle": "Cha ghabh an cunntas a chruthachadh",
-       "cantcreateaccount-text": "Chuir [[User:$3|$3]] bacadh air cruthachadh chunntasan on t-seòladh IP seo ('''$1''').\n\nDh'innise $3 gun do rinn iad seo air sgàth: ''$2''",
-       "cantcreateaccount-range-text": "Chuir [[User:$3|$3]] casg air daoine a tha airson cunntasan a chruthachadh on sheòlaidhean IP taobh a-staigh na rainse '''$1''' agus tha sin a' gabhail a-steach an t-seòlaidh IP agad-sa ('''$4''').\n\nThuir $3 gun do rinn iad seo air sgàth an adhbhair seo: ''$2''",
+       "cantcreateaccount-text": "Chuir [[User:$3|$3]] bacadh air cruthachadh chunntasan on t-seòladh IP seo (<strong>$1</strong>).\n\nDh'innis $3 gun do rinn {{GENDER:$3|e|i}} seo air sgàth: <em>$2</em>",
+       "cantcreateaccount-range-text": "Chuir [[User:$3|$3]] casg air daoine a tha airson cunntasan a chruthachadh on sheòlaidhean IP taobh a-staigh na rainse '''$1''' agus tha sin a' gabhail a-steach an t-seòlaidh IP agad-sa ('''$4''').\n\nDh'innis $3 gun do {{GENDER:$1|rinn e|rinn i|rinneadh}} seo air sgàth an adhbhair seo: ''$2''",
        "viewpagelogs": "Seall logaichean na duilleige seo",
        "nohistory": "Chan eil eachdraidh deasachaidh aig an duilleag seo.",
-       "currentrev": "Lethbhreac làithreach",
+       "currentrev": "Am mùthadh mu dheireadh",
        "currentrev-asof": "Am mùthadh mu dheireadh on $1",
        "revisionasof": "Mùthadh on $1",
-       "revision-info": "Lèirmheas mar a bha e $1 le $2",
+       "revision-info": "Am mùthadh mar a bha e $1 le $2 $7",
        "previousrevision": "← Mùthadh nas sine",
        "nextrevision": "Mùthadh nas ùire →",
        "currentrevisionlink": "Am mùthadh mu dheireadh",
        "last": "roimhe",
        "page_first": "Toiseach",
        "page_last": "Deireadh",
-       "histlegend": "Taghadh nan diofar: comharraich bogsaichean rèidio nam mùthaidhean gus coimeas a dhèanamh agus put Enter no am putan gu h-ìosal.<br />\nMìneachadh: '''({{int:cur}})''' = an diofar eadar e 's am mùthadh as ùire, '''({{int:last}})''' = an diofar eadar e 's am mùthadh roimhe, '''{{int:minoreditletter}}''' = deasachadh beag.",
+       "histlegend": "Taghadh nan diofar: comharraich bogsaichean rèidio nam mùthaidhean gus coimeas a dhèanamh agus put Enter no am putan gu h-ìosal.<br />\nTreòir: <strong>({{int:cur}})</strong> = an diofar eadar e 's am mùthadh as ùire, <strong>({{int:last}})</strong> = an diofar eadar e 's am mùthadh roimhe, <strong>{{int:minoreditletter}}</strong> = deasachadh beag.",
        "history-fieldset-title": "An eachdraidh brabhsaidh",
        "history-show-deleted": "Na chaidh sguabadh às a-mhàin",
        "histfirst": "as sine",
        "histlast": "as ùire",
-       "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
+       "historysize": "(%1 {{PLURAL:$1|bhaidht|bhaidht|baidhtichean|baidht}})",
        "historyempty": "(falamh)",
        "history-feed-title": "Eachdraidh nam mùthaidhean",
-       "history-feed-description": "Eachdraidh nam mùthaidhean airson na duilleige seo air an uici",
+       "history-feed-description": "Eachdraidh nam mùthaidhean airson na duilleige seo air an uicidh",
        "history-feed-item-nocomment": "$1 $2",
-       "history-feed-empty": "Chan eil an duilleag a dh'iarr thu ann.\nDh'fhaoidte gun deach a sguabadh às an uici no gun deach ainm ùr a chur air.\nFeuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uici]]",
+       "history-feed-empty": "Chan eil an duilleag a dh'iarr thu ann.\nDh'fhaoidte gun deach a sguabadh às an uicidh no gun deach ainm ùr a chur air.\nFeuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uicidh]]",
        "rev-deleted-comment": "(chaidh gearr-chunntas an deasachaidh a thoirt air falbh)",
        "rev-deleted-user": "(chaidh an t-ainm-cleachdaiche a thoirt air falbh)",
        "rev-deleted-event": "(chaidh gnìomh an loga a thoirt air falbh)",
-       "rev-deleted-user-contribs": "[chaidh an t-ainm-cleachdaiche no an seòladh IP a thoirt air falbh - chan fhaic na com-pàirtichean an deasachadh]",
-       "rev-deleted-text-permission": "Chaidh mùthadh na duilleige seo '''a sguabadh às'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
-       "rev-deleted-text-unhide": "Chaidh mùthadh na duilleige seo '''a sguabadh às'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].\n'S urrainn dhut [$1 am mùthadh seo fhaicinn fhathast] ma tha thu airson leantainn air adhart.",
-       "rev-suppressed-text-unhide": "Chaidh mùthadh na duilleige seo '''a mhùchadh'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].\n'S urrainn dhut [$1 am mùthadh seo fhaicinn fhathast] ma tha thu airson leantainn air adhart.",
-       "rev-deleted-text-view": "Chaidh mùthadh na duilleige seo '''a sguabadh às'''.\n'S urrainn dhut coimhead air, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
-       "rev-suppressed-text-view": "Chaidh mùthadh na duilleige seo '''a mhùchadh'''.\n'S urrainn dhut coimhead air, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].",
-       "rev-deleted-no-diff": "Chan fhaic thu an diff seo a chionn 's gun deach aon dhe na mùthaidhean '''a sguabadh às'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
-       "rev-suppressed-no-diff": "Chan fhaic thu an diff seo a chionn 's gun deach aon dhe na mùthaidhean '''a sguabadh às'''.",
-       "rev-deleted-unhide-diff": "Chaidh mùthadh dhen diff seo '''a sguabadh às'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].\n'S urrainn dhut [$1 coimhead air an diff seo fhathast] ma tha thu airson leantainn air adhart.",
-       "rev-suppressed-unhide-diff": "Chaidh mùthadh an diff seo '''a mhùchadh'''.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].\n'S urrainn dhut [$1 coimhead air an diff seo fhathast] ma tha thu airson leantainn air adhart.",
-       "rev-deleted-diff-view": "Chaidh mùthadh an diff seo '''a sguabadh às'''.\n'S urrainn dhut coimhead air an diff seo, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
-       "rev-suppressed-diff-view": "Chaidh mùthadh an diff seo '''a mhùchadh'''.\n'S urrainn dhut coimhead air an diff seo, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].",
+       "rev-deleted-user-contribs": "[chaidh an t-ainm-cleachdaiche no an seòladh IP a thoirt air falbh - chaidh an deasachadh fhalach o liosta na h-obrach]",
+       "rev-deleted-text-permission": "Chaidh mùthadh na duilleige seo <strong>a sguabadh às</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
+       "rev-deleted-text-unhide": "Chaidh mùthadh na duilleige seo <strong>a sguabadh às</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].\n'S urrainn dhut [$1 am mùthadh seo fhaicinn fhathast] ma tha thu airson leantainn air adhart.",
+       "rev-suppressed-text-unhide": "Chaidh mùthadh na duilleige seo <strong>a mhùchadh</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].\n'S urrainn dhut [$1 am mùthadh seo fhaicinn fhathast] ma tha thu airson leantainn air adhart.",
+       "rev-deleted-text-view": "Chaidh mùthadh na duilleige seo <strong>a sguabadh às</strong>.\n'S urrainn dhut coimhead air, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
+       "rev-suppressed-text-view": "Chaidh mùthadh na duilleige seo <strong>a mhùchadh</strong>.\n'S urrainn dhut coimhead air, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].",
+       "rev-deleted-no-diff": "Chan fhaic thu an diofar seo a chionn 's gun deach aon dhe na mùthaidhean <strong>a sguabadh às</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
+       "rev-suppressed-no-diff": "Chan fhaic thu an diofar seo a chionn 's gun deach aon dhe na mùthaidhean <strong>a sguabadh às</strong>.",
+       "rev-deleted-unhide-diff": "Chaidh mùthadh an diofair seo <strong>a sguabadh às</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].\n'S urrainn dhut [$1 coimhead air an diofar seo fhathast] ma tha thu airson leantainn air adhart.",
+       "rev-suppressed-unhide-diff": "Chaidh mùthadh an diofair seo <strong>a mhùchadh</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].\n'S urrainn dhut [$1 coimhead air an diofar seo fhathast] ma tha thu airson leantainn air adhart.",
+       "rev-deleted-diff-view": "Chaidh mùthadh an diofair seo <strong>a sguabadh às</strong>.\n'S urrainn dhut coimhead air an diofar seo, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
+       "rev-suppressed-diff-view": "Chaidh mùthadh an diofair seo <strong>a mhùchadh</strong>.\n'S urrainn dhut coimhead air an diofar seo, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].",
        "rev-delundel": "seall/falaich",
        "rev-showdeleted": "seall",
-       "revisiondelete": "Sguab às/neo-dhèan sguabadh às mhùthaidhean",
+       "revisiondelete": "Sguab às/neo-dhèan sguabadh às mùthaidhean",
        "revdelete-nooldid-title": "Tha am mùthadh seo mì-dhligheach",
        "revdelete-nooldid-text": "Cha do shònraich thu mùthadh airson seo a dhèanamh, chan eil e ann no tha thu a' feuchainn ris am mùthadh làithreach a chur am falach.",
        "revdelete-no-file": "Chan eil am faidhle a shònraich thu ann.",
        "revdelete-show-file-confirm": "A bheil thu cinnteach gu bheil thu airson coimhead air mùthadh an fhaidhle \"<nowiki>$1</nowiki>\" a chaidh a sguabadh às $2 aig $3?",
        "revdelete-show-file-submit": "Tha",
-       "revdelete-selected-text": "{{PLURAL:$1|Lèirmheas|Lèirmheas|Lèirmheas|Lèirmheas|Lèirmheasan|Lèirmheas}} de [[:$2]] a thagh thu:",
-       "revdelete-selected-file": "{{PLURAL:$1|Tionndadh an fhaidhle|Tionndadh nam faidhlichean|Tionndadh nam faidhlichean|Tionndadh nam faidhlichean|Tionndadh nam faidhlichean|Tionndadh nam faidhlichean}} a thagh thu à [[:$2]]:",
+       "revdelete-selected-text": "{{PLURAL:$1|Am mùthadh|Na mùthaidhean}} air [[:$2]] a thagh thu:",
+       "revdelete-selected-file": "Tionndadh {{PLURAL:$1|an fhaidhle|nam faidhlichean}} a thagh thu airson [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|An tachartas loga|Na tachartasan loga}} a thagh thu:",
        "revdelete-text-text": "Nochdaidh mùthaidhean a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
        "revdelete-text-file": "Nochdaidh tionndaidhean dhen fhaidhle a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
        "logdelete-text": "Nochdaidh tachartasan san loga a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
        "revdelete-text-others": "Gheibh rianairean eile air {{SITENAME}} cothrom air an t-susbaint fhalaichte fhathast agus is urrainn dhaibh an sguabadh às a neo-dhèanamh san dearbh eadar-aghaidh mur an deach cuingeachaidhean a bharrachd a chur orra.",
        "revdelete-confirm": "Dearbh gu bheil thu airson seo a dhèanamh, gu bheil thu a' tuigsinn na thachras ri linn agus gu bheil thu a' dèanamh seo a-rèir [[{{MediaWiki:Policy-url}}|a' phoileasaidh]].",
-       "revdelete-suppress-text": "Cha bu chòir dhut mùchadh a chleachdadh '''ach''' ann an suidheachaidhean mar seo:\n* Fiosrachadh a dh'fhaodadh a bhith dìteachail\n* Fiosrachadh pearsanta a tha cearr\n*: ''seòladh taige, àireamhan fòn, àireamhan NI is msaa.''",
+       "revdelete-suppress-text": "Cha bu chòir dhut mùchadh a chleachdadh <strong>ach</strong> ann an suidheachaidhean mar seo:\n* Fiosrachadh a dh'fhaodadh a bhith dìteachail\n* Fiosrachadh pearsanta a tha cearr\n*: <em>seòladh taighe, àireamhan fòn, àireamhan NI is msaa.</em>",
        "revdelete-legend": "Suidhich cuingeachaidhean na faicsinneachd",
        "revdelete-hide-text": "Teacsa a' mhùthaidh",
        "revdelete-hide-image": "Falaich susbaint an fhaidhle",
        "revdelete-suppress": "Mùch dàta o rianairean agus càch",
        "revdelete-unsuppress": "Thoir air falbh na bacaidhean air mùthaidhean a chaidh aiseag",
        "revdelete-log": "Adhbhar:",
-       "revdelete-submit": "Cuir air {{PLURAL:$1|an lèirmheas|na lèirmheasan}} a thagh thu",
-       "revdelete-success": "'''Chaidh so-fhaicsinneachd a' mhùthaidh ùrachadh.'''",
-       "revdelete-failure": "'''Cha b' urrainn dhuinn so-fhaicsinneachd a' mhùthaidh ùrachadh:'''\n$1",
-       "logdelete-success": "'''Chaidh faicsinneachd an loga a shuidheachadh.'''",
-       "logdelete-failure": "'''Cha b' urrainn dhuinn faicsinneachd an loga a shuidheachadh:'''\n$1",
+       "revdelete-submit": "Cuir an sàs e air {{PLURAL:$1|am mùthadh|na mùthaidhean}} a thagh thu",
+       "revdelete-success": "<strong>Chaidh so-fhaicsinneachd a' mhùthaidh ùrachadh.</strong>",
+       "revdelete-failure": "<strong>Cha b' urrainn dhuinn so-fhaicsinneachd a' mhùthaidh ùrachadh:</strong>\n$1",
+       "logdelete-success": "<strong>Chaidh faicsinneachd an loga a shuidheachadh.</strong>",
+       "logdelete-failure": "<strong>Cha b' urrainn dhuinn faicsinneachd an loga a shuidheachadh:</strong>\n$1",
        "revdel-restore": "mùth follaiseachd",
        "pagehist": "Eachdraidh na duilleige",
        "deletedhist": "Eachdraidh a chaidh a sguabadh às",
-       "revdelete-hide-current": "Mearachd a' cur am falach an nì dhen $2, $1: Seo an lèirmheas làithreach. Cha ghabh a chur am falach.",
+       "revdelete-hide-current": "Mearachd a' cur am falach an nì dhen $2, $1: Seo am mùthadh làithreach. Cha ghabh a chur am falach.",
        "revdelete-show-no-access": "Mearachd a' sealltainn an nì on $2, $1: Tha comharra ann a dh'innseas gu bheil e \"cuingichte\".\nChan eil cothrom agad air.",
        "revdelete-modify-no-access": "Mearachd ag atharrachadh an nì on $2, $1: Tha comharra ann a dh'innseas gu bheil e \"cuingichte\".\nChan eil cothrom agad air.",
        "revdelete-modify-missing": "Mearachd ag atharrachadh an nì leis an ID $1: Chan eil e san stòr-dàta!",
-       "revdelete-no-change": "'''Rabhadh:''' Bha na roghainnean faicsinneachd a dh'iarr thu aig an nì dhen $2, $1 mu thràth.",
+       "revdelete-no-change": "<strong>Rabhadh:</strong> Bha na roghainnean faicsinneachd a dh'iarr thu aig an nì dhen $2, $1 mu thràth.",
        "revdelete-concurrent-change": "Mearachd ag atharrachadh an nì on $2, $1: Tha coltas gun deach a staid atharrachadh le cuideigin dìreach nuair a dh'fheuch thusa ri atharrachadh.\nThoir sùil air na logaichean.",
        "revdelete-only-restricted": "Mearachd a' cur an nì on $2, $1 am falach: Chan urrainn dhut nithean le rianairean a mhùchadh gun a bhith a' taghadh aon dhe na roghainnean faicsinneachd eile cuideachd.",
        "revdelete-reason-dropdown": "*Adhbharan cumanta airson sguabadh às rudan\n** Briseadh còrach-lethbhreac\n** Beachd no fiosrachadh pearsanta mì-iomchaidh\n** Ainm-cleachdaiche mì-iomchaidh\n** Fiosrachadh a dh'fhaodadh a bhith dìteachail",
        "revdelete-offender": "Ùghdar a' mhùthaidh:",
        "suppressionlog": "Loga nam mùchaidhean",
        "suppressionlogtext": "Chì thu liosta nan rudan a chaidh a sguabadh às agus a bhacadh gu h-ìosal, a' gabhail a-steach stuth a chaidh fhalach o rianairean. Faic [[Special:BlockList|liosta nam bacaidhean]] airson liosta nan toirmeasgan is bacaidhean beò.",
-       "mergehistory": "Co-aonaich eachdraidhean na duilleige",
-       "mergehistory-header": "Leigidh an duilleag seo leat na lèirmheasan aig aon duilleag a cho-aonadh le duilleag nas ùire.\nDèan cinnteach gun glèidh an t-atharrachadh seo leantainneachd eachdraidh na duilleige.",
-       "mergehistory-box": "Co-aonaich na lèirmheasan aig dà dhuilleag:",
+       "mergehistory": "Co-aonaich eachdraidhean nan duilleag",
+       "mergehistory-header": "Leigidh an duilleag seo leat na mùthaidhean aig aon duilleag a cho-aonadh le duilleag nas ùire.\nDèan cinnteach gun glèidh an t-atharrachadh seo leantainneachd eachdraidh na duilleige.",
+       "mergehistory-box": "Co-aonaich na mùthaidhean aig dà dhuilleag:",
        "mergehistory-from": "An duilleag thùsail:",
        "mergehistory-into": "An duilleag targaide:",
        "mergehistory-list": "Eachdraidh nan deasachaidhean a ghabhas a cho-aonadh",
-       "mergehistory-merge": "Gabhaidh na lèirmheasan a leanas aig [[:$1]] a cho-aonadh le [[:$2]].\nCleachd colbh nam putanan-rèidio gus dìreach na lèirmheasan a cho-aonadh a chaidh a chruthachadh aig an àm a chaidh a shònrachadh no roimhe sin.\nThoir an aire gun dèid an colbh seo ath-shuidheachadh ma chleachdas tu ceanglaichean na seòladaireachd.",
+       "mergehistory-merge": "Gabhaidh na mùthaidhean a leanas aig [[:$1]] a cho-aonadh le [[:$2]].\nCleachd colbh nam putanan-rèidio gus dìreach na mùthaidhean a cho-aonadh a chaidh a chruthachadh aig an àm a chaidh a shònrachadh no roimhe sin.\nThoir an aire gun dèid an colbh seo ath-shuidheachadh ma chleachdas tu ceanglaichean na seòladaireachd.",
        "mergehistory-go": "Seall na deasachaidhean a ghabhas a cho-aonadh",
-       "mergehistory-submit": "Co-aonaich na lèirmheasan",
-       "mergehistory-empty": "Chan eil lèirmheas sam bith ann a ghabhas a cho-aonadh.",
-       "mergehistory-success": "Chaidh $3 {{PLURAL:$3|lèirmheas|lèirmheas|lèirmheasan|lèirmheas}} de [[:$1]] a cho-aonadh dha [[:$2]].",
+       "mergehistory-submit": "Co-aonaich na mùthaidhean",
+       "mergehistory-empty": "Chan eil mùthadh sam bith ann a ghabhas a cho-aonadh.",
+       "mergehistory-success": "Chaidh $3 {{PLURAL:$3|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} 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.",
        "mergehistory-comment": "Chaidh [[:$1]] a cho-aonadh dha [[:$2]]: $3",
        "mergehistory-same-destination": "Chan fhaod an tùs-duilleag is an duilleag targaide a bhith co-ionnann",
        "mergehistory-reason": "Adhbhar:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Loga a' cho-aonaidh",
-       "pagemerge-logentry": "chaidh [[$1]] a cho-aonadh dha [[$2]] (lèirmheasan suas ri $3)",
-       "revertmerge": "Dì-aontaich",
+       "pagemerge-logentry": "chaidh [[$1]] a cho-aonadh dha [[$2]] (mùthaidhean suas ri $3)",
+       "revertmerge": "Dì-aonaich",
        "mergelogpagetext": "Chì thu liosta nan co-aonaidhean as ùire eadar eachdraidh dhuilleagan gu h-ìosail.",
        "history-title": "Eachdraidh nam mùthaidhean aig \"$1\"",
-       "difference-title": "An diofar eadar na lèirmheasan a rinneadh air \"$1\"",
+       "difference-title": "An diofar eadar na mùthaidhean a rinneadh air \"$1\"",
        "difference-title-multipage": "An diofar eadar an dà dhuilleag \"$1\" agus \"$2\"",
        "difference-multipage": "(An diofar eadar na duilleagan)",
        "lineno": "Loidhne $1:",
        "compareselectedversions": "Dèan coimeas eadar na mùthaidhean a thagh thu",
-       "showhideselectedversions": "Seall/Falaich na lèirmheasan a thagh thu",
+       "showhideselectedversions": "Seall/Falaich na mùthaidhean a thagh thu",
        "editundo": "neo-dhèan",
        "diff-empty": "(Gun diofar eatarra)",
-       "diff-multi-sameuser": "(Rinn an cleachdaiche {{PLURAL:$1|$1 lèirmheas eadar-mheadhanach|$1 lèirmheas eadar-mheadhanach|$1 lèirmheas eadar-mheadhanach|$1 lèirmheas eadar-mheadhanach|$1 lèirmheasan eadar-mheadhanach|$1 lèirmheas eadar-mheadhanach}}nach eil 'gan sealltainn)",
-       "diff-multi-otherusers": "({{PLURAL:$1|$1 lèirmheas eadar-mheadhanach|$1 lèirmheas eadar-mheadhanach|$1 lèirmheas eadar-mheadhanach|$1 lèirmheas eadar-mheadhanach|$1 lèirmheasan eadar-mheadhanach|$1 lèirmheas eadar-mheadhanach}} le {{PLURAL:$2|$2 chleachdaiche|$2 chleachdaiche|$2 chleachdaiche|$2 chleachdaiche|$2 cleachdaichean|$2 cleachdaiche}} eile nach eil 'gan sealltainn)",
-       "diff-multi-manyusers": "({{PLURAL:$1|Aon lèirmheas eadar-mheadhanach||$1 lèirmheasan eadar-mheadhanach|$1 lèirmheas eadar-mheadhanach}} le {{PLURAL:$2|aon chleachdaiche|$2 chleachdaiche|$2 cleachdaichean|$2 cleachdaiche}} gun sealltainn)",
-       "difference-missing-revision": "Cha deach {{PLURAL:$2|$2 lèirmheas|$2 lèirmheas|$2 lèirmheas|$2 lèirmheas|$2 lèirmheasan|$2 lèirmheas}} dhen diofar seo ($1) a lorg.\n\nMar is trice, tachraidh seo ma leanas tu ceangal gu diff air duilleag a chaidh a sguabadh às.\nGheibh thu mion-fhiosrachadh ann an [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} loga nan duilleagan a chaidh a sguabadh às].",
+       "diff-multi-sameuser": "(Rinn an cleachdaiche {{PLURAL:$1|$1 mhùthadh|$1 mhùthadh|$1 mùthaidhean|$1 mùthadh}} eadar-mheadhanach nach eil {{PLURAL:$1|'ga shealltainn|$1 'gan sealltainn}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|$1 mhùthadh|$1 mhùthadh|$1 mùthaidhean|$1 mùthadh}} eadar-mheadhanach le {{PLURAL:$2|$2 chleachdaiche|$2 chleachdaiche|$2 cleachdaichean|$2 cleachdaiche}} eile nach eil {{PLURAL:$1|'ga shealltainn|$1 'gan sealltainn}})",
+       "diff-multi-manyusers": "({{PLURAL:$1|$1 mhùthadh|$1 mhùthadh|$1 mùthaidhean|$1 mùthadh}} eadar-mheadhanach le barrachd air {{PLURAL:$2|$2 chleachdaiche|$2 chleachdaiche|$2 cleachdaichean|$2 cleachdaiche}} nach eil {{PLURAL:$1|'ga shealltainn|$1 'gan sealltainn}})",
+       "difference-missing-revision": "Tha {{PLURAL:$2|$2 mhùthadh|$2 mhùthadh|$2 mùthaidhean|$2 mùthadh}} san diofar seo ($1) nach deach a lorg.\n\nMar is trice, tachraidh seo ma leanas tu air ceangal gu diofar air duilleag a chaidh a sguabadh às.\nGheibh thu mion-fhiosrachadh ann an [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} loga nan duilleagan a chaidh a sguabadh às].",
        "searchresults": "Toraidhean rannsachaidh",
        "searchresults-title": "Lorg \"$1\" am broinn nan toraidhean",
-       "toomanymatches": "Fhuaras cus thoraidhean, feuch ceist eile",
        "titlematches": "Tiotalan dhuilleagan a tha a' maidseadh",
        "textmatches": "Teacsa sna duilleagan a tha co-ionnann",
        "notextmatches": "Chan eil tiotal de dhuilleag sam bith a' freagairt ris",
        "prevn": "an {{PLURAL:$1|$1}} roimhe",
        "nextn": "an ath {{PLURAL:$1|$1}}",
-       "prevn-title": "$1 {{PLURAL:$1|toradh|thoradh|toraidhean|toradh}} roimhe",
+       "prevn-title": "{{PLURAL:$1|an $1 toradh|an $1 thoradh|na $1 toraidhean|am $1 toradh}} roimhe",
        "nextn-title": "An ath $1 {{PLURAL:$1|toradh|thoradh|toraidhean|toradh}}",
        "shown-title": "Seall $1 {{PLURAL:$1|toradh|thoradh|toraidhean|toradh}} air gach duilleag",
        "viewprevnext": "Seall ($1 {{int:pipe-separator}} $2) ($3).",
-       "searchmenu-exists": "'''Tha duilleag air a bheil \"[[:$1]]\" air an uicipeid seo.'''",
-       "searchmenu-new": "<strong>Cruthaich an duilleag \"[[:$1]]\" air an uicipeid seo!</strong> {{PLURAL:$2|0=|Seall an duilleag a chaidh a lorg ri linn na lorg thu.|Seall na duilleagan a chaidh a lorg ri linn na lorg thu.|Seall na duilleagan a chaidh a lorg ri linn na lorg thu.|Seall na duilleagan a chaidh a lorg ri linn na lorg thu.|Seall na duilleagan a chaidh a lorg ri linn na lorg thu.|Seall na duilleagan a chaidh a lorg ri linn na lorg thu.}}'",
+       "searchmenu-exists": "<strong>Tha duilleag air a bheil \"[[:$1]]\" air an uicidh seo.</strong> {{PLURAL:$2|0=|Seall na toraidhean luirg eile cuideachd.}}",
+       "searchmenu-new": "<strong>Cruthaich an duilleag \"[[:$1]]\" air an uicidh seo!</strong> {{PLURAL:$2|0=|Faic an duilleag a chaidh a lorg ri linn na lorg thu cuideachd.|Faic na toraidhean luirg cuideachd.}}",
        "searchprofile-articles": "Duilleagan susbainte",
        "searchprofile-images": "Ioma-mheadhanan",
        "searchprofile-everything": "Gach rud",
        "searchprofile-images-tooltip": "Lorg faidhlichean",
        "searchprofile-everything-tooltip": "Lorg am broinn susbaint sam bith (a' gabhail a-steach nan duilleagan deasbaireachd)",
        "searchprofile-advanced-tooltip": "Lorg am broinn ainm-spàsan gnàthaichte",
-       "search-result-size": "$1 ({{PLURAL:$2 fhacal|$2 fhacal|$2 faclan|$2 facal}})",
-       "search-result-category-size": "{{PLURAL:$1|1 bhall|$1 bhall|$1 bhuill|$1 ball}} ({{PLURAL:$2|1 fho-roinn|$2 fho-roinn|$2 fo-roinnean|$2 fo-roinn}}, {{PLURAL:$3|1 fhaidhle|$3 fhaidhle|$3 faidhlichean|$3 faidhle}})",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 fhacal|$2 fhacal|$2 faclan|$2 facal}})",
+       "search-result-category-size": "{{PLURAL:$1|$1 bhall|$1 bhall|$1 bhuill|$1 ball}} ({{PLURAL:$2|$2 fho-roinn-seòrsa|$2 fho-roinn-seòrsa|$2 fo-roinnean-seòrsa|$2 fo-roinn-seòrsa}}, {{PLURAL:$3|$3 fhaidhle|$3 fhaidhle|$3 faidhlichean|$3 faidhle}})",
        "search-result-score": "Buntainneas: $1%",
        "search-redirect": "(ag ath-sheòladh $1)",
        "search-section": "(earrann $1)",
        "search-relatedarticle": "Co-cheangailte",
        "searchrelated": "co-cheangailte",
        "searchall": "a h-uile",
-       "showingresults": "A' nochdadh suas gu $1 {{PLURAL:$1|$1 toradh|$1 thoradh|$1 toraidhean|$1 toradh}} gu h-ìosal a' tòiseachadh le #'''$2'''.",
-       "showingresultsinrange": "A' sealltainn suas ri {{PLURAL:$1|<strong>$1</strong> toradh|<strong>$1</strong> toradh|<strong>$1</strong> toradh|<strong>$1</strong> toradh|<strong>$1</strong> toraidhean|<strong>$1</strong> toradh}} san rainse eadar #<strong>$2</strong> is #<strong>$3</strong>.",
-       "showingresultsnum": "A' nochdadh '''$3''' {{PLURAL:$3|$3 toradh|$3 thoradh|$3 toraidhean|$3 toradh}} gu h-ìosal a' tòiseachadh le #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Toradh '''$1''' à '''$3'''|Toraidhean '''$1 - $2''' of '''$3'''}} airson '''$4'''",
+       "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>.",
+       "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",
-       "powersearch-ns": "Lorg ann an namespaces:",
+       "powersearch-ns": "Lorg ann an ainm-spàsan:",
        "powersearch-togglelabel": "Sgrùd:",
        "powersearch-toggleall": "Na h-uile",
        "powersearch-togglenone": "Chan eil gin",
+       "powersearch-remember": "Cuir na thagh thu sa chuimhne airson lorg ri teachd",
        "search-external": "Lorg air an taobh a-muigh",
        "searchdisabled": "Tha lorg air {{SITENAME}} à comas.\n'S urrainn dhut lorg a dhèanamh air Google san eadar-àm.\nFaodaidh gum bi inneacsan susbaint {{SITENAME}} tuilleadh 's sean ge-tà.",
        "search-error": "Thachair mearachd fhad 's a bha sinn a' lorg an-seo: $1",
        "datedefault": "Gun roghainnean",
        "prefs-labs": "Feartan nan deuchainn-lannan",
        "prefs-user-pages": "Duilleagan a' chleachdaiche",
-       "prefs-personal": "Pròifil a' chleachdaiche",
+       "prefs-personal": "Pròifil",
        "prefs-rc": "Mùthaidhean ùra",
        "prefs-watchlist": "An clàr-faire",
        "prefs-watchlist-days": "Co mheud latha a sheallar air a' chlàr-fhaire:",
-       "prefs-watchlist-days-max": "{{PLURAL:$1|latha|latha|làithean|latha}} air a' char as motha",
+       "prefs-watchlist-days-max": "$1 {{PLURAL:$1|latha|latha|làithean|latha}} air a' char as motha",
        "prefs-watchlist-edits": "An àireamh as motha de mhùthaidhean a thèid a shealltainn air a' chlàr-fhaire leudaichte:",
        "prefs-watchlist-edits-max": "Àireamh as motha: 1000",
        "prefs-watchlist-token": "Tòcan a' chlàir-fhaire:",
        "prefs-rendering": "Coltas",
        "saveprefs": "Sàbhail",
        "restoreprefs": "Aisig na roghainnean bunaiteach uile (anns gach earrann)",
-       "prefs-editing": "A' deasachadh",
+       "prefs-editing": "Deasachadh",
        "rows": "Sreathan",
        "columns": "Colbhan",
        "searchresultshead": "Lorg",
        "stub-threshold": "An stairsneach airson fòrmatadh <a href=\"#\" class=\"stub\">cheanglaichean nam bun</a> (bytes):",
        "stub-threshold-disabled": "À comas",
        "recentchangesdays": "Co mheud latha a thèid a shealltainn sna mùthaidhean ùra:",
-       "recentchangesdays-max": "{{PLURAL:$1|latha|latha|làithean|latha}} air a' char as motha",
+       "recentchangesdays-max": "$1 {{PLURAL:$1|latha|latha|làithean|latha}} air a' char as motha",
        "recentchangescount": "Uiread a dheasachaidhean a thèid a shealltainn a ghnàth:",
        "prefs-help-recentchangescount": "Tha seo a' gabhail a-steach mùthaidhean ùra, eachdraidhean nan duilleagan is logaichean.",
+       "prefs-help-watchlist-token2": "Seo an iuchair dhìomhair airson inbhir-lìn a' chlàir-fhaire agad.\n'S urrainn do dhuine sam bith a bhios eòlach air an clàr-faire agad a leughadh, mar sin na co-roinn e.\n'S urrainn dhut [[Special:ResetTokens|ath-shuidheachadh]] ma bhios feum agad air seo.",
        "savedprefs": "Tha na roghainnean agad air an sàbhaladh.",
        "timezonelegend": "Roinn-tìde:",
        "localtime": "An t-àm ionadail:",
-       "timezoneuseserverdefault": "Cleachd bun-roghainn na h-Uicipeid ($1)",
-       "servertime": "Àm an fhrithealaichte:",
+       "timezoneuseserverdefault": "Cleachd bun-roghainn na h-uicidh ($1)",
+       "timezoneuseoffset": "Eile (sònraich an fhrith-àireamh)",
+       "servertime": "Àm an fhrithealaiche:",
        "guesstimezone": "Lìon on bhrabhsair",
        "timezoneregion-africa": "Afraga",
        "timezoneregion-america": "Aimeireaga",
        "timezoneregion-pacific": "An Cuan Sèimh",
        "allowemail": "Ceadaich post-d o chleachdaichean eile",
        "prefs-searchoptions": "Lorg",
-       "prefs-namespaces": "Namespaces",
+       "prefs-namespaces": "Ainm-spàsan",
        "default": "an roghainn bhunaiteach",
        "prefs-files": "Faidhlichean",
        "prefs-custom-css": "CSS gnàthaichte",
        "prefs-emailconfirm-label": "Dearbhadh puist-d:",
        "youremail": "Post-dealain:",
        "username": "{{GENDER:$1|Ainm-cleachdaiche}}:",
-       "prefs-memberingroups": "{{GENDER:$2|Ball}} ann an {{PLURAL:$1|bhuidheann|bhuidheann|buidhnean|buidheann}}:",
+       "prefs-memberingroups": "{{GENDER:$2|'Na bhall|'Na ball}} {{PLURAL:$1|sa bhuidheann|sna buidhnean}}:",
+       "prefs-memberingroups-type": "$1",
        "prefs-registration": "Àm clàraidh:",
-       "yourrealname": "An dearbh ainm a th' ort:",
+       "prefs-registration-date-time": "$1",
+       "yourrealname": "D' fhìor-ainm:",
        "yourlanguage": "Cànan:",
        "yourvariant": "Eug-samhail cànan na susbaint:",
        "prefs-help-variant": "Do roghainn eug-samhail sgrìobhaidh a thèid duilleagan na h-uicipeid seo a shealltainn innte.",
        "prefs-help-signature": "Bu chòir dhut d' ainm a chur ri beachdan air duilleagan deasbaireachd le \"<nowiki>~~~~</nowiki>\" agus chithear d' ainm agus stampa ama 'na àite an uairsin.",
        "badsig": "Tha co-chàradh an t-soidhnidh mì-dhligheach.\nThoir sùil air na tagaichean HTML.",
        "badsiglength": "Tha an t-earr-sgrìobhadh agad ro fhada.\nChan fhaod e a bhith nas fhaide na $1 {{PLURAL:$1|charactar|charactar|caractaran|caractar}}.",
-       "yourgender": "Dè a' ghnè a tha annad:",
+       "yourgender": "Do ghnè:",
        "gender-unknown": "B' fhearr leam gun a bhith 'ga leigeil ris",
-       "gender-male": "Deasaichidh e duilleagan na h-Uicipeid",
+       "gender-male": "Deasaichidh e duilleagan na h-uicidh",
        "gender-female": "Deasaichidh i duilleagan na h-Uicipeid",
+       "prefs-help-gender": "Cha leig thu leas an roghainn seo a shuidheachadh.\nCleachdaidh am bathar-bog an luach aice gus bruidhinn riut le d' ainm 's iomradh a thoirt ort gu càch leis a' ghnè ghramataigeach iomchaidh.\nBidh am fiosrachadh seo poblach.",
        "email": "Post-d:",
+       "prefs-help-realname": "Cha leig thu leas innse dè am fìor-ainm a tha ort.\nMa bheir thu seachad e, thèid seo a chleachdadh gus urram a thoirt dhut airson do chuid obrach.",
        "prefs-help-email": "Chan leig thu leas post-dealain a chur ann ach bidh feum air ma dhìochuimhnicheas tu am facal-faire agad 's ma dh'iarras tu fear ùr.",
-       "prefs-help-email-others": "'S urrainn dhut leigeil le daoine eile post-dealain a chur thugad tro cheangal air an duilleag agad.\nChan fhaicear an seòladh fhèin nuair a chuireas cuideigin post-dealain thugad.",
+       "prefs-help-email-others": "'S urrainn dhut leigeil le daoine eile post-dealain a chur thugad tro cheangal air duilleag a' chleachdaiche no deasbaireachd agad.\nChan fhaicear an seòladh fhèin nuair a chuireas cuideigin post-dealain thugad.",
        "prefs-help-email-required": "Tha feum air seòladh puist-d.",
        "prefs-info": "Fiosrachadh bunasach",
        "prefs-i18n": "Cànan",
        "prefs-displayrc": "Roghainnean taisbeanaidh",
        "prefs-displaywatchlist": "Roghainnean taisbeanaidh",
        "prefs-tokenwatchlist": "Tòcan",
-       "prefs-diffs": "Diffs",
+       "prefs-diffs": "Diofaran",
+       "prefs-help-prefershttps": "Thèid an roghainn seo a chur an sàs an ath thuras a nì thu logadh a-steach.",
+       "prefs-tabs-navigation-hint": "Gliocas: 'S urrainn dhut na h-iuchraichean saighde chlì 's dheas a chleachdadh gus leum a ghearradh o thaba gu taba air liosta nan taba.",
        "email-address-validity-valid": "Tha coltas gu bheil am post-d dligheach",
        "email-address-validity-invalid": "Cuir a-steach post-d dligheach",
        "userrights": "Stiùireadh ceadan a' chleachdaiche",
        "userrights-lookup-user": "Stiùirich na buidhnean chleachdaichean",
        "userrights-user-editname": "Cuir a-steach ainm-cleachdaiche:",
        "editusergroup": "Deasaich na buidhnean chleachdaichean",
-       "editinguser": "Ag atharrachadh ceadan a' chleachdaiche '''[[User:$1|$1]]''' $2",
+       "editinguser": "Ag atharrachadh ceadan a' chleachdaiche <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Deasaich na buidhnean chleachdaichean",
        "saveusergroups": "Sàbhail na buidhnean chleachdaichean",
        "userrights-groupsmember": "Ball de:",
        "userrights-groupsmember-auto": "Ball fèin-obrachail de:",
+       "userrights-groupsmember-type": "$1",
+       "userrights-groups-help": "'S urrainn dhut na buidhnean sa bheil an cleachdaiche seo 'na bhall atharrachadh:\n* Is ciall dha chromag sa bhogsa gu bheil an cleachdaiche seo 'na bhall sa buidheann.\n* Is ciall dha bhogsa gun chromag ris nach eil an cleachdaiche seo 'na bhall sa buidheann.\n* Innsidh * dhut nach urrainn dhut am buidheann a thoirt air falbh nuair a bhios tu air a chur ris no an caochladh.",
        "userrights-reason": "Adhbhar:",
-       "userrights-no-interwiki": "Chan eil cead agad ceadan chleachdaichean a dheasachadh air uicipeidean eile.",
+       "userrights-no-interwiki": "Chan eil cead agad ceadan chleachdaichean a dheasachadh air uicidhean eile.",
        "userrights-nodatabase": "Chan eil an stòr-dàta $1 ann no chan e fear ionadail a tha ann.",
+       "userrights-nologin": "Feumaidh tu [[Special:UserLogin|logadh a-steach]] le cunntas rianaire ach an toir thu ceadan nam ball seachad.",
+       "userrights-notallowed": "Chan eil cead agad gus ceadan nam ball a chur ris no a thoirt air falbh.",
        "userrights-changeable-col": "Buidhnean as urrainn dhut atharrachadh",
+       "userrights-unchangeable-col": "Buidhnean nach urrainn dhut atharrachadh",
+       "userrights-irreversible-marker": "$1*",
+       "userrights-conflict": "Tha còmhstri le atharraichean air ceadan nam ball! Thoir sùil air a-rithist 's dearbhaich na h-atharraichean agad.",
+       "userrights-removed-self": "Tha thu air na ceadan agad fhèin a thoirt air falbh. Mar sin, chan eil cead agad tuilleadh gus an duilleag seo inntrigeadh.",
        "group": "Buidheann:",
        "group-user": "Cleachdaichean",
+       "group-autoconfirmed": "Cleachdaichean fèin-dearbhte",
        "group-bot": "Bots",
        "group-sysop": "Rianadairean",
        "group-bureaucrat": "Biurocratan",
+       "group-suppress": "Marasgalan",
        "group-all": "(na h-uile)",
-       "group-user-member": "{{GENDER:$1|cleachdaiche}}",
-       "group-bot-member": "{{GENDER:$1|bot}}",
-       "group-sysop-member": "{{GENDER:$1|rianaire}}",
-       "group-bureaucrat-member": "{{GENDER:$1|biùrocrat}}",
+       "group-user-member": "cleachdaiche",
+       "group-autoconfirmed-member": "cleachdaiche fèin-dearbhte",
+       "group-bot-member": "bot",
+       "group-sysop-member": "rianaire",
+       "group-bureaucrat-member": "biùrocrat",
+       "group-suppress-member": "marasgal",
        "grouppage-user": "{{ns:project}}:Cleachdaichean",
        "grouppage-autoconfirmed": "{{ns:project}}:Cleachdaichean fèin-dearbhte",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Rianadairean",
        "grouppage-bureaucrat": "{{ns:project}}:Biurocratan",
+       "grouppage-suppress": "{{ns:project}}:Marasgal",
        "right-read": "Cead-leughaidh",
        "right-edit": "Cead-deasachaidh",
        "right-createpage": "Cead-cruthachaidh (de dhuilleagan nach eil 'nan duilleagan deasbaireachd)",
        "right-createtalk": "Cead duilleagan deasbaireachd a chruthachadh",
        "right-createaccount": "Cead cunntasan ùra a chruthachadh",
+       "right-minoredit": "Cead comharra a chur nach e ach deasachadh beag a th' ann",
        "right-move": "Cead duilleagan a ghluasad",
        "right-move-subpages": "Cead duilleagan a ghluasad leis na fo-dhuilleagan aca",
        "right-move-rootuserpages": "Cead duilleagan chleachdaichean root a ghluasad",
+       "right-move-categorypages": "Cead duilleagan roinn-seòrsa a ghluasad",
        "right-movefile": "Cead faidhlichean a ghluasad",
+       "right-suppressredirect": "Cead gun a bhith a' cruthachadh ath-stiùiridhean o na duilleagan tùsail nuair a ghluaisear duilleag",
        "right-upload": "Cead faidhlichean a luchdadh suas",
        "right-reupload": "Cead sgrìobhadh thairis air duilleagan a tha ann",
-       "right-upload_by_url": "Faidhlichean a luchdadh suas o URL",
-       "newuserlogpage": "Loga cruthachaidh de chleachdaichean",
-       "rightslog": "Loga còraichean a' chleachdaiche",
+       "right-reupload-own": "Cead sgrìobhadh thairis air faidhlichean a tha ann ma a chaidh an luchdadh suas leis an dearbh neach",
+       "right-reupload-shared": "Cead faidhlichean a thar-àithneadh gu h-ionadail a tha san ionad-tasgaidh nam meadhanan co-roinnte",
+       "right-upload_by_url": "Cead faidhlichean a luchdadh suas o URL",
+       "right-purge": "Cead tasgadan an làraich airson duilleag a ghlanadh gun dearbhadh",
+       "right-autoconfirmed": "Gun chuingeachadh air tricead nan gnìomhan a-rèir IP",
+       "right-bot": "Ceadan pròiseis fèin-obrachail aige",
+       "right-nominornewtalk": "Cead deasachaidhean beaga a dhèanamh air duilleagan deasbaid gun bhrodadh airson teachdaireachdan ùra a chruthachadh",
+       "right-apihighlimits": "Cead crìochan as àirde le ceistean API a chleachdadh",
+       "right-writeapi": "Cead API sgrìobhaidh a chleachdadh",
+       "right-delete": "Cead duilleagan a sguabadh às",
+       "right-bigdelete": "Cead duilleagan aig a bheil eachdraidh mòr a sguabadh às",
+       "right-deletelogentry": "Cead nithean sònraichte an loga a sguabadh às 's aiseag",
+       "right-deleterevision": "Cead mùthaidhean sònraichte aig duilleagan a sguabadh às 's aiseag",
+       "right-deletedhistory": "Cead nithean an eachdraidh a chaidh a sguabadh às a shealltainn gun an teacsa ceangailte riutha",
+       "right-deletedtext": "Cead teacsa 's atharraichean eadar mùthaidhean air an sguabadh às a shealltainn",
+       "right-browsearchive": "Cead lorg sna duilleagan air an sguabadh às",
+       "right-undelete": "Cead duilleagan air an sguabadh às aiseag",
+       "right-suppressrevision": "Cead sùil a thoirt air mùthaidhean a chaidh a sguabadh às 's am falach o na rianairean 's an aiseag",
+       "right-suppressionlog": "Cead logaichean prìobhaideach a shealltainn",
+       "right-block": "Cead càch a bhacadh o dheasachadh",
+       "right-blockemail": "Cead cleachdaiche a bhacadh o chur phost-d",
+       "right-hideuser": "Cead ainm-chleachdaiche a bhacadh 's fhalach on t-sealladh phoblach",
+       "right-ipblock-exempt": "Cead bacaidhean IP, bacaidhean fèin-obrachail 's bacaidhean rainse a leigeil seachad",
+       "right-proxyunbannable": "Cead bacadh fèin-obrachail phrogsaidhean a leigeil seachad",
+       "right-unblockself": "Cead bacadh a thoirt uaithe fhèin",
+       "right-protect": "Cead leibheilean an dìona atharrachadh 's duilleagan le dìon o bhith mar eas a dheasachadh",
+       "right-editprotected": "Cead gus duilleagan le dìon \"{{int:protect-level-sysop}}\" a dheasachadh",
+       "right-editsemiprotected": "Cead gus duilleagan le dìon \"{{int:protect-level-autoconfirmed}}\" a dheasachadh",
+       "right-editinterface": "Cead gus eadar-aghaidh nan cleachdaichean a dheasachadh",
+       "right-editusercssjs": "Cead gus faidhlichean CSS 's JavaScript càich a dheasachadh",
+       "right-editusercss": "Cead gus faidhlichean CSS càich a dheasachadh",
+       "right-edituserjs": "Cead gus faidhlichean JavaScript càich a dheasachadh",
+       "right-editmyusercss": "Cead gus faidhlichean CSS agad fhèin a dheasachadh",
+       "right-editmyuserjs": "Cead gus faidhlichean JavaScript agad fhèin a dheasachadh",
+       "right-viewmywatchlist": "Cead an clàr-faire agad fhèin a shealltainn",
+       "right-editmywatchlist": "Cead an clàr-faire agad fhèin a dheasachadh. Thoir an aire gun cuir cuid a gnìomhan duilleagan ris fiù 's mur eil an cead seo agad.",
+       "right-viewmyprivateinfo": "Cead an dàta prìobhaideach agad fhèin (m.e. seòladh puist-d, fìor-ainm) a shealltainn",
+       "right-editmyprivateinfo": "Cead an dàta prìobhaideach agad fhèin (m.e. seòladh puist-d, fìor-ainm) a dheasachadh",
+       "right-editmyoptions": "Cead na roghainnean agad fhèin a dheasachadh",
+       "right-rollback": "Cead gus na h-atharraichean leis a' chleachdaiche mu dheireadh air duilleag sònraichte a roladh air ais gu luath",
+       "right-markbotedits": "Cead dèiligeadh ri deasachaidhean rolaidh air ais 'nan deasachaidhean bota",
+       "right-noratelimit": "Gun chuingeachadh air tricead nan gnìomhan",
+       "right-import": "Cead duilleagan ion-phortadh o uicidhean eile",
+       "right-importupload": "Cead duilleagan ion-phortadh o luchdadh suas faidhle",
+       "right-patrol": "Cead comharra freiceadain a chur ri deasachaidhean càich",
+       "right-autopatrol": "Cead gun dèid comharra freiceadain a chur ris na deasachaidhean agad fhèin gu fèin-obrachail",
+       "right-patrolmarks": "Cead gus na comharran freiceadain o chionn goirid a shealltainn",
+       "right-unwatchedpages": "Cead duilleagan air an toirt far a' chlàir-fhaire a shealltainn",
+       "right-mergehistory": "Cead eachdraidh nan duilleagan a cho-aonachadh",
+       "right-userrights": "Cead gus gach cead cleachdaiche a dheasachadh",
+       "right-userrights-interwiki": "Cead gus ceadan nan chleachdaichean aig uicidhean eile a dheasachadh",
+       "right-siteadmin": "Cead gus an stòr-dàta a glasadh 's a' ghlas a thoirt fo bharr",
+       "right-override-export-depth": "Cead gus duilleagan às-phortadh, a' gabhail a-seach duilleagan ceangailte suas ri doimhneachd de 5",
+       "right-sendemail": "Cead gus puist-d a chur gu cleachdaichean eile",
+       "right-passwordreset": "Cead gus puist-d ath-shuidheachadh nam facal-faire a shealltainn",
+       "newuserlogpage": "Loga cruthachadh nan cleachdaichean",
+       "newuserlogpagetext": "Seo loga nan cleachdaichean a chaidh a chruthachadh.",
+       "rightslog": "Loga ceadan a' chleachdaiche",
+       "rightslogtext": "Seo loga nan atharraichean air ceadan nan cleachdaichean.",
+       "action-read": "leugh an duilleag seo",
        "action-edit": "deasaich an duilleag seo",
+       "action-createpage": "cruthaich duilleagan",
+       "action-createtalk": "cruthaich duilleagan deasbaireachd",
+       "action-createaccount": "cruthaich an cunntas cleachdaiche seo",
+       "action-history": "seall eachdraidh na duilleige seo",
+       "action-minoredit": "cuir comharra nach e ach deasachadh beag a th' ann",
        "action-move": "gluais an duilleag seo",
-       "nchanges": "{{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}",
+       "action-move-subpages": "gluais an duilleag seo 's a fo-dhuilleagan",
+       "action-move-rootuserpages": "gluais duilleagan chleachdaichean root",
+       "action-move-categorypages": "gluais duilleagan roinn-seòrsa",
+       "action-movefile": "gluais am faidhle seo",
+       "action-upload": "luchdaich suas am faidhle seo",
+       "action-reupload": "sgrìobh thairis air an fhaidhle seo a tha ann",
+       "action-reupload-shared": "tar-àithn am faidhle seo ann an ionad-tasgaidh co-roinnte",
+       "action-upload_by_url": "luchdaich suas am faidhle seo o URL",
+       "action-writeapi": "cleachd API sgrìobhaidh",
+       "action-delete": "sguab às an duilleag seo",
+       "action-deleterevision": "sguab às am mùthadh seo",
+       "action-deletedhistory": "seall eachdraidh an sguabaidh às aig an duilleag seo",
+       "action-browsearchive": "lorg sna duilleagan air an sguabadh às",
+       "action-undelete": "neo-dhèan sguabadh às na duilleige seo",
+       "action-suppressrevision": "thoir sùil air a' mhùthadh fhalaichte seo 's aisig e",
+       "action-suppressionlog": "seall an loga prìobhaideach seo",
+       "action-block": "bac an cleachdaiche seo o dheasachadh",
+       "action-protect": "atharraich leibheil dìon na duilleige seo",
+       "action-rollback": "roilig na h-atharraichean leis a' chleachdaiche mu dheireadh air duilleag sònraichte a  air ais gu luath",
+       "action-import": "ion-phortaich duilleagan o uicidh eile",
+       "action-importupload": "ion-phortaich duilleagan o luchdadh suas faidhle",
+       "action-patrol": "cuir comharra freiceadain ri deasachaidhean càich",
+       "action-autopatrol": "faigh comharra freiceadain fèin-obrachail air na dheasaich thu",
+       "action-unwatchedpages": "seall na duilleagan air an toirt far a' chlàir-fhaire",
+       "action-mergehistory": "co-aonaich eachdraidh nan duilleagan",
+       "action-userrights": "deasaich gach cead cleachdaiche",
+       "action-userrights-interwiki": "deasaich ceadan nan chleachdaichean aig uici eile",
+       "action-siteadmin": "glais an stòr-dàta no thoir a' ghlas fo bharr",
+       "action-sendemail": "cuir puist-d",
+       "action-editmywatchlist": "deasaich an clàr-faire agad",
+       "action-viewmywatchlist": "seall an clàr-faire agad",
+       "action-viewmyprivateinfo": "seall am fiosrachadh prìobhaideach agad",
+       "action-editmyprivateinfo": "deasaich am fiosrachadh prìobhaideach agad",
+       "nchanges": "$1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}",
+       "enhancedrc-since-last-visit": "$1 on tadhal mu dheireadh",
+       "enhancedrc-history": "eachdraidh",
        "recentchanges": "Mùthaidhean ùra",
        "recentchanges-legend": "Roghainnean nam mùthaidhean ùra",
-       "recentchanges-summary": "Cum sùil air na mùthaidhean as ùire a nithear air an uici air an duilleag seo.",
-       "recentchanges-feed-description": "Cum sùil air na mùthaidhean as ùire a nithear air an uici seo san inbhir seo.",
+       "recentchanges-summary": "Cum sùil air na mùthaidhean as ùire a nithear air an uicidh air an duilleag seo.",
+       "recentchanges-noresult": "Cha fhreagair atharrachadh sam bith san ùine seo ris na cuspairean-deuchainn seo.",
+       "recentchanges-feed-description": "Cum sùil air na mùthaidhean as ùire a nithear air an uicidh seo san inbhir seo.",
        "recentchanges-label-newpage": "Chruthaich thu duilleag ùr leis a sin",
        "recentchanges-label-minor": "Seo mùthadh beag",
        "recentchanges-label-bot": "'S e bot a rinn an deasachadh seo",
-       "recentchanges-label-unpatrolled": "Cha deach freiceadan tron deasachadh seo fhathast",
+       "recentchanges-label-unpatrolled": "Cha do chuir freiceadan comharra ris an deasachadh seo fhathast",
        "recentchanges-label-plusminus": "Seo meud atharrachadh na duilleige ann am byte",
+       "recentchanges-legend-heading": "'''Treòir:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (faic [[Special:NewPages|liosta nan duilleagan ùra]] cuideachd)",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "Gheibhear na mùthaidhean a-mach o <strong>$2</strong> (gu ruige <strong>$1</strong>) gu h-ìosal.",
        "rclistfrom": "Seall na mùthaidhean ùra a-mach o $3 $2",
        "rcshowhideminor": "$1 mùthaidhean beaga",
+       "rcshowhideminor-show": "Seall",
+       "rcshowhideminor-hide": "Falaich",
        "rcshowhidebots": "$1 botaichean",
-       "rcshowhideliu": "$1 neach-cleachdaidh clàraichte",
-       "rcshowhideanons": "$1 luchd-cleachdaidh gun ainm",
+       "rcshowhidebots-show": "Seall",
+       "rcshowhidebots-hide": "Falaich",
+       "rcshowhideliu": "$1 na cleachdaichean clàraichte",
+       "rcshowhideliu-show": "Seall",
+       "rcshowhideliu-hide": "Falaich",
+       "rcshowhideanons": "$1 na cleachdaichean gun ainm",
+       "rcshowhideanons-show": "Seall",
+       "rcshowhideanons-hide": "Falaich",
        "rcshowhidepatr": "$1 na deasachaidhean fo aire freiceadain",
+       "rcshowhidepatr-show": "Seall",
+       "rcshowhidepatr-hide": "Falaich",
        "rcshowhidemine": "$1 na mùthaidhean agam",
-       "rclinks": "Seall na $1 mùthaidhean mu dheireadh thairis air na $2 làithean mu dheireadh<br />$3",
-       "diff": "diof",
+       "rcshowhidemine-show": "Seall",
+       "rcshowhidemine-hide": "Falaich",
+       "rclinks": "Seall {{PLURAL:$1|an $1 mhùthadh|an $1 mhùthadh|na $1 mùthaidhean|am $1 mùthadh}} mu dheireadh thairis air {{PLURAL:$2|an $2 latha|an $2 latha|na $2 làithean|am $2 latha}} mu dheireadh<br />$3",
+       "diff": "diofar",
        "hist": "eachd",
        "hide": "Falaich",
        "show": "Seall",
        "minoreditletter": "b",
        "newpageletter": "Ù",
        "boteditletter": "bt",
+       "unpatrolledletter": "!",
+       "number_of_watching_users_pageview": "[Tha $1 {{PLURAL:$1|chleachdaiche|chleachdaiche|cleachdaichean|cleachdaiche}} a' cumail sùil air]",
+       "rc_categories": "Cuingich gu roinnean-seòrsa (sgaraich le \"|\")",
+       "rc_categories_any": "Roinn-seòrsa sam bith",
+       "rc-change-size": "$1",
+       "rc-change-size-new": "$1 {{PLURAL:$1|bhaidht|bhaidht|baidhtichean|baidht}} às dèidh an atharrachaidh",
+       "newsectionsummary": "Earrann ùr /* $1 */",
        "rc-enhanced-expand": "Seall am mion-fhiosrachadh",
        "rc-enhanced-hide": "Cuir am mion-fhiosrachadh am falach",
+       "rc-old-title": "Chaidh a chruthachadh mar \"$1\" o thùs",
        "recentchangeslinked": "Mùthaidhean co-cheangailte",
        "recentchangeslinked-feed": "Mùthaidhean buntainneach",
        "recentchangeslinked-toolbox": "Mùthaidhean buntainneach",
        "recentchangeslinked-title": "Mùthaidhean co-cheangailte ri \"$1\"",
-       "recentchangeslinked-summary": "Seo liosta nam mùthaidhean a chaidh a chur air duilleagan a tha a' ceangal o dhuilleag shònraichte (no ri buill de roinn shònraichte).\nTha duilleagan air [[Special:Watchlist|do chlàr-faire]] ann an litrichean '''troma'''.",
+       "recentchangeslinked-summary": "Seo liosta nam mùthaidhean a chaidh a chur air duilleagan a tha a' ceangal o dhuilleag shònraichte (no ri buill ann an roinn-seòrsa sònraichte).\nTha duilleagan air [[Special:Watchlist|do chlàr-faire]] ann an litrichean <strong>troma</strong>.",
        "recentchangeslinked-page": "Ainm na duilleige:",
        "recentchangeslinked-to": "Seall mùthaidhean nan duilleagan a tha a' ceangal ris an duilleag sin 'na àite",
        "upload": "Luchdaich suas faidhle",
        "uploadbtn": "Luchdaich suas faidhle",
+       "reuploaddesc": "Sgur dhen luchdadh suas 's till dhan fhoirm luchdaidh suas",
+       "upload-tryagain": "Cuir tuairisgeul atharraichte an fhaidhle a-null",
+       "uploadnologin": "Chan eil thu air logadh a-steach",
+       "uploadnologintext": "$1 gus faidhlichean a luchdadh suas.",
+       "upload_directory_missing": "Tha pasgan an luchdaidh suas ($1) a dhìth 's cha b' urrainn dhan fhrithealaiche-lìn fear a chruthachadh.",
+       "upload_directory_read_only": "Chan urrainn dhan fhrithealaiche-lìn sgrìobhadh sa phasgan luchdaidh suas ($1).",
+       "uploaderror": "Mearachd leis an luchdadh suas",
+       "upload-recreate-warning": "<strong>Rabhadh: Chaidh faidhle air a bheil an t-ainm seo a sguabadh às no a ghluasad.</strong>\n\nSeo dhut loga an sguabaidh às 's nan gluasad airson na duilleige seo:",
+       "uploadtext": "Cleachd am foirm gu h-ìosal gus faidhlichean a luchdadh suas.\nGus na faidhlichean a chaidh a luchdadh suas roimhe a shealltainn no a lorg annta, rach gu [[Special:FileList|liosta nam faidhlichean air an luchdadh suas]], thèid (ath-)luchdaidhean suas a chur ri [[Special:Log/upload|loga nan luchdaidhean suas]] cuideachd 's na chaidh a sguabadh às ri [[Special:Log/delete|loga nan sguabaidhean às]].\n\nCleachd ceangal ann an aon dhe na cruthan seo gus faidhle a chur am broinn duilleige:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> gus an tionndadh slàn dhen fhaidhle a chleachdadh\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|teacsa alt]]</nowiki></code></strong> cus dreach a tha 200 piogsail a leud a chleachdadh a nochdas ann am bogsa air a' mharghan chlì le \"teacsa alt\" mar thuairisgeul\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> gus ceangal a dhèanamh ris an fhaidhle gu dìreach gun a bhith a' sealltainn an fhaidhle",
+       "upload-permitted": "Seòrsaichean faidhle a tha ceadaichte: $1.",
+       "upload-preferred": "Seòrsaichean faidhle as docha leinn: $1.",
+       "upload-prohibited": "Seòrsaichean faidhle nach eil ceadaichte: $1.",
        "uploadlogpage": "Loga an luchdaidh suas",
+       "uploadlogpagetext": "Chì thu na faidhlichean a chaidh a luchdadh suas o chionn goirid gu h-ìosal.\nSeall [[Special:NewFiles|gailearaidh nam faidhlichean ùra]] airson foir-shealladh nas lèirsinniche.",
        "filename": "Ainm-faidhle",
        "filedesc": "Gearr-chunntas",
        "fileuploadsummary": "Gearr-chunntas:",
-       "filestatus": "Cor dlighe-sgrìobhaidh:",
+       "filereuploadsummary": "Atharraichean air an fhaidhle:",
+       "filestatus": "Staid còrach-lethbhreac:",
+       "filesource": "Tùs:",
        "ignorewarning": "Leig seachad an rabhadh agus sàbhail am faidhle co-dhiù",
+       "ignorewarnings": "Leig seachad rabhadh sam bith",
+       "minlength1": "Feumaidh co-dhiù aon litir a bhith ann an ainm faidhle.",
+       "illegalfilename": "Tha caractaran san ainm faidhle \"$1\" nach eil ceadaichte ann an tiotal duilleige.\nthoir ainm ùr air an fhaidhle 's feuch ris an luchdadh suas a-rithist.",
+       "filename-toolong": "Chan fhaod barrachd air 240 baidht a bhith ann an ainm faidhle.",
        "badfilename": "Ainm ìomhaigh air atharrachadh ri \"$1\".",
-       "fileexists": "Tha faidhle ann mu thràth air a bheil an t-ainm seo, cuir sùil air <strong>[[:$1]]</strong> mur eil thu buileach cinntach a bheil thu airson atharrachadh.\n[[$1|thumb]]",
+       "filetype-mime-mismatch": "Chan fhreagair leudachan \".$1\" an fhaidhle ris an seòrsa MIME a mhothaich sinn airson an fhaidhle ($2).",
+       "filetype-badmime": "Chan fhaod thu faidhlichean dhen t-seòrsa MIME \"$1\" a luchdadh suas.",
+       "filetype-bad-ie-mime": "Chan fhaod thu am faidhle seo a luchdadh suas on a mhothaicheadh Internet Explorer dha mar \"$1\" nach eil 'na sheòrsa faidhle ceadaichte 's a dh'fhaodadh a bhith cunnartach.",
+       "filetype-unwanted-type": "Cha ghabh sinn ris an seòrsa faidhle <strong>\".$1\"</strong>.\nIs docha leinn {{PLURAL:$3|an seòrsa faidhle|na seòrsaichean faidhle}} $2.",
+       "filetype-banned-type": "Chan eil <strong>\".$1\"</strong> {{PLURAL:$4|'na seòrsa faidhle|'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": "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.",
+       "hookaborted": "Chaidh sgur dhen atharrachadh a dh'fheuch thu ri dèanamh le leudachan.",
+       "illegal-filename": "Chan eil ainm an fhaidhle ceadaichte.",
+       "overwrite": "Chan fhaod thu sgrìobhadh thairis air faidhle a tha ann mar-thà.",
+       "unknown-error": "Thachair mearachd neo-aithnichte.",
+       "tmp-create-error": "Cha deach leinn faidhle sealach a chruthachadh.",
+       "tmp-write-error": "Mearachd le sgrìobhadh an fhaidhle shealaich.",
+       "large-file": "Mholamaid nach bi faidhlichean nas motha na $1;\ntha am faidhle seo $2 a mheud.",
+       "largefileserver": "Tha am faidhle seo nas motha na tha ceadaichte a-rèir rèiteachadh an fhrithealaiche.",
+       "emptyfile": "Tha am faidhle a luchdaich thu suas falamh a-rèir coltais.\n'S dòcha gu bheil mearachd sgrìobhaidh ann an ainm an fhaidhle.\nDearbhaich an e seo am faidhle a tha thu airson luchdadh suas.",
+       "windows-nonascii-filename": "Cha chuir an uicidh seo taic ri ainm faidhle sa bheil caractaran sònraichte.",
+       "fileexists": "Tha faidhle ann mu thràth air a bheil an t-ainm seo, thoir sùil air <strong>[[:$1]]</strong> mur eil thu buileach cinnteach a bheil thu airson atharrachadh.\n[[$1|thumb]]",
+       "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>\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]]",
+       "fileexists-shared-forbidden": "Tha faidhle air a bheil an t-ainm seo ann mar-thà ann an ionad-tasgaidh nam faidhlichean co-roinnte.\nMa tha thu airson am faidhle agad a luchdadh suas fhathast, rach air ais 's cleachd ainm ùr.\n[[File:$1|thumb|center|$1]]",
+       "file-exists-duplicate": "Is dùblachadh {{PLURAL:$1| dhen fhaidhle| dhe na faidhlichean}} a leanas a tha san fhaidhle seo:",
+       "file-deleted-duplicate": "Chaidh faidhle a tha co.ionnann ris an fhear seo ([[:$1]]) a sguabadh às roimhe.\nThoir sùil air eachdraidh sguabaidh às an fhaidhle ud mus luchdaich thu suas a-rithist e.",
+       "file-deleted-duplicate-notitle": "Chaidh faidhle a tha co-ionnann ris an fhear seo a sguabadh às roimhe 's chaidh an tiotal a th' air a mhùchadh.\nBu coir dhut faighneachd air cuideigin a chì dàta faidhle mùchte ach an toir e sùil air an t-suidheachadh mus luchdaich thu suas a-rithist e.",
+       "uploadwarning": "Rabhadh luchdaidh suas",
+       "uploadwarning-text": "Atharraich tuairisgeul an fhaidhle gu h-ìosal 's feuch ris a-rithist.",
        "savefile": "Sàbhail faidhle",
        "uploadedimage": "a luchdaich suas \"[[$1]]\"",
+       "overwroteimage": "luchdaich suas tionndadh ùr de \"[[$1]]\"",
+       "uploaddisabled": "Tha an luchdadh suas à comas.",
+       "copyuploaddisabled": "Tha an luchdadh suas o URL à comas.",
+       "uploaddisabledtext": "Tha luchdadh suas fhaidhlichean à comas.",
+       "php-uploaddisabledtext": "Tha luchdadh suas fhaidhlichean à comas ann am PHP.\nThoir sùil air an roghainn file_uploads.",
+       "uploadscripted": "Tha còd HTML no sgriobt san fhaidhle seo a b' urrainn do bhrabhsair-lìn a ruith le mearachd.",
+       "uploadscriptednamespace": "Tha ainm-spàs \"$1\" mì-dhligheach san fhaidhle SVG seo.",
+       "uploadinvalidxml": "Cha b' urrainn dhuinn an XML san fhaidhle air a luchdadh suas a pharsadh.",
+       "uploadvirus": "Tha bhìoras san fhaidhle!\nFiosrachadh: $1",
+       "uploadjava": "Tha am faidhle seo 'na fhaidhle ZIP sa bheil faidhle .class Java.\nChan fhaod thu faidhlichean Java a luchdadh suas on a b' urrainn dhaibh cuingeachaidhean na tèarainteachd a leigeil seachad.",
+       "upload-source": "Am faidhle tùsail:",
+       "sourcefilename": "Ainm an fhaidhle thùsail:",
+       "sourceurl": "An URL tùsail:",
+       "destfilename": "Ainm an fhaidhle-uidhe:",
+       "upload-maxfilesize": "Meud as motha an fhaidhle: $1",
+       "upload-description": "Tuairisgeul an fhaidhle",
+       "upload-options": "Roghainnean an luchdaidh duas",
+       "watchthisupload": "Cum sùil air an fhaidhle seo",
+       "filewasdeleted": "Chaidh faidhle air a bheil an t-ainm seo a luchdadh suas roimhe 's a sguabadh às an uairsin.\nBu chòir dhut sùil a thoirt air $1 mur luchdaich thu suas e a-rithist.",
+       "filename-bad-prefix": "Tha ainm an fhaidhle a tha thu a' luchdadh suas a' tòiseachadh le <strong>\"$1\"</strong> na tha 'na ainm fhaidhle gun mhìneachadh a chruthaicheas camara digiteach gu fèin-obrachail mar as trice.\nFeuch an tagh thu ainm eile airson an fhaidhle agad a mhìnicheas dè th' ann.",
+       "filename-prefix-blacklist": " #<!-- fàg an loidhne seo dìreach mar a tha i --> <pre>\n# Seo an co-chàradh:\n#   * 'Se facal-mìneachaidh a th' anns gach rud on charactar \"#\" gu deireadh na loidhne\n#   * Tha gach loidhne nach eil bàn 'na ro-leasachan airson ainm faidhle àbhaisteach a thèid a thoirt seachad le camara digiteach gu fèin-obrachail\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # cuid a dh'fhònaichean-làimhe\nIMG # coitcheann\nJD # Jenoptik\nMGP # Pentax\nPICT # measgaichte\n #</pre> <!-- fàg an loidhne seo dìreach mar a tha i -->",
+       "upload-success-subj": "Shoirbhich leis an luchdadh suas",
+       "upload-success-msg": "Shoirbhich leis an luchdadh suas agad o [$2]. Seo far a bheil e ri làimh: [[:{{ns:file}}:$1]]",
+       "upload-failure-subj": "Duilgheadas leis an luchdadh suas",
+       "upload-failure-msg": "Thachair duilgheadas leis an luchdadh suas agad o [$2]:\n\n$1",
+       "upload-warning-subj": "Rabhadh luchdaidh suas",
+       "upload-warning-msg": "Thachair duilgheadas leis an luchdadh suas agad o [$2]. 'S urrainn dhut tilleadh gu [[Special:Upload/stash/$1|foirm an luchdaidh suas]] gus an duilgheadas seo a chàradh.",
+       "upload-proto-error": "Pròtacal nach eil mar bu chòir",
+       "upload-proto-error-text": "Iarraidh an luchdadh suas cèin URLan a thòisicheas le <code>http://</code> no <code>ftp://</code>.",
+       "upload-file-error": "Mearachd inntearnail",
+       "upload-file-error-text": "Thachair mearachd inntearnail fhad 's a bha sinn a' feuchainn ri faidhle sealach a chruthachadh air an fhrithealaiche.\nAn cuir thu fios gu [[Special:ListUsers/sysop|rianaire]]?",
+       "upload-misc-error": "Mearachd neo-aithnichte leis an luchdadh suas",
+       "upload-misc-error-text": "Thachair mearachd neo-aithnichte rè an luchdaidh suas\nDearbhaich gu bheil an URL dligheach 's gun gabh a ruigsinn 's feuch ris a-rithist.\nMa mhaireas an duilgheadas, cuir fios gu [[Special:ListUsers/sysop|rianaire]].",
+       "upload-too-many-redirects": "Bha cus ath-stiùiridhean am broinn an URL",
+       "upload-http-error": "Thachair mearachd HTTP: $1",
+       "upload-copy-upload-invalid-domain": "Chan eil luchdaidhean suas le lethbhreac ri làimh on àrainn seo.",
+       "backend-fail-stream": "Cha b' urrainn dhuinn am faidhle \"$1\" a shruthadh.",
+       "backend-fail-backup": "Cha b' urrainn dhuinn lethbhreac-glèidhidh a dhèanamh dhen fhaidhle \"$1\".",
+       "backend-fail-notexists": "Chan eil am faidhle $1 ann.",
+       "backend-fail-hashes": "Cha b' urrainn dhuinn hais nam faidhlichean fhaighinn gus an coimeas.",
+       "backend-fail-notsame": "Cha faidhle air \"$1\" ann mar-thà nach eil co-ionnann.",
+       "backend-fail-invalidpath": "Chan e \"$1\" 'na slighe stòraidh dligheach.",
+       "backend-fail-delete": "Cha b' urrainn dhuinn am faidhle \"$1\" a sguabadh às.",
+       "backend-fail-describe": "cha b' urrainn dhuinn am meata-dàta atharrachadh airson an fhaidhle \"$1\".",
+       "backend-fail-alreadyexists": "Tha am faidhle \"$1\" ann mar-thà.",
+       "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-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": "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\".",
+       "backend-fail-batchsize": "Chaidh batch de $1 {{PLURAL:$1|obrachadh|obrachadh|obrachaidhean|obrachadh}} faidhle a thoirt gu backend an stòraidh; chan eil ach $2 {{PLURAL:$2|obrachadh|obrachadh|obrachaidhean|obrachadh}} ceadaiche air a char as motha.",
+       "backend-fail-usable": "Cha deach leinn am faidhle \"$1\" a leughadh no a sgrìobhadh ann on a bheil cead no pasgan/soitheach a dhìth.",
+       "filejournal-fail-dbconnect": "Cha deach leinn ceangal ris an stòr-dàta leabhair-latha airson backend an stòrais \"$1\".",
+       "filejournal-fail-dbquery": "Cha deach leinn an stòr-dàta leabhair-latha airson backend an stòrais \"$1\" ùrachadh.",
+       "lockmanager-notlocked": "Cha deach leinn a' ghlas a thoirt far \"$1\" o nach eil e glaiste.",
+       "lockmanager-fail-closelock": "Cha deach leinn am faidhle glasaidh airson \"$1\" a dhùnadh.",
+       "lockmanager-fail-deletelock": "Cha deach leinn am faidhle glasaidh airson \"$1\" a sguabadh às.",
+       "lockmanager-fail-acquirelock": "Cha deach leinn a' ghlas fhaighinn airson \"$1\".",
+       "lockmanager-fail-openlock": "Cha deach leinn am faidhle glasaidh airson \"$1\" fhosgladh.",
+       "lockmanager-fail-releaselock": "Cha deach leinn a' ghlas fhosgladh airson \"$1\".",
+       "lockmanager-fail-db-bucket": "Cha deach leinn conaltradh ris na dh'fhoghnadh de stòran-dàta glasaidh sa bhucaid $1.",
+       "lockmanager-fail-db-release": "Cha deach leinn na glasan fhosgladh air an stòr-dàta $1.",
+       "lockmanager-fail-svr-acquire": "Cha deach leinn na glasan fhaighinn air an fhrithealaiche \"$1\".",
+       "lockmanager-fail-svr-release": "Cha deach leinn na glasan fhosgladh air an fhrithealaiche \"$1\".",
+       "zip-file-open-error": "Thachair mearachd le fosgladh an fhaidhle airson dearbhadh ZIP.",
+       "zip-wrong-format": "Chan eil am faidhle sònraichte 'na fhaidhle ZIP.",
+       "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",
+       "license-nopreview": "(Chan eil ro-shealladh ri làimh)",
+       "upload_source_url": "(URL dligheach a ghabhas inntrigeadh gu poblach)",
+       "upload_source_file": "(faidhle air a' choimpiutair agad)",
+       "listfiles-summary": "Seallaidh an duilleag shònraichte seo gach faidhle a chaidh a luchdadh suas.",
+       "listfiles_search_for": "Lorg airson ainm a' mheadhain:",
+       "imgfile": "faidhle",
        "listfiles": "Liosta nan ìomhaigh",
-       "file-anchor-link": "Ìomhaigh",
+       "listfiles_thumb": "Dealbhag",
+       "listfiles_date": "Ceann-là",
+       "listfiles_name": "Ainm",
+       "listfiles_user": "Cleachdaiche",
+       "listfiles_size": "Meud",
+       "listfiles_description": "Tuairisgeul",
+       "listfiles_count": "Tionndaidhean",
+       "listfiles-show-all": "Gabh a-steach seann-tionndaidhean de dhealbhan",
+       "listfiles-latestversion": "An tionndadh làithreach",
+       "listfiles-latestversion-yes": "Tha",
+       "listfiles-latestversion-no": "Chan eil",
+       "file-anchor-link": "Faidhle",
        "filehist": "Eachdraidh an fhaidhle",
-       "filehist-help": "Briog air ceann-là/àm gus am faidhle fhaicinn mar a nochd e aig an àm sin.",
+       "filehist-help": "Briog air ceann-là/àm gus am faidhle a shealltainn mar a nochd e aig an àm sin.",
+       "filehist-deleteall": "sguab às na h-uile",
+       "filehist-deleteone": "sguab às",
        "filehist-revert": "till",
        "filehist-current": "làithreach",
        "filehist-datetime": "Ceann-là/Àm",
-       "filehist-thumb": "Meanbh-dhealbh",
-       "filehist-thumbtext": "Meanbh-dhealbh airson an tionndaidh on $1",
-       "filehist-user": "Neach-cleachdaidh",
+       "filehist-thumb": "Dealbhag",
+       "filehist-thumbtext": "Dealbhag airson an tionndaidh on $1",
+       "filehist-nothumb": "Gun dealbhag",
+       "filehist-user": "Cleachdaiche",
        "filehist-dimensions": "Meud",
+       "filehist-filesize": "Meud an fhaidhle",
        "filehist-comment": "Beachd",
        "imagelinks": "Cleachdadh an fhaidhle",
-       "linkstoimage": "Tha {{PLURAL:$1|an duilleag|an $1 dhuilleag|na $1 duilleagan|na $1 duilleag}} a leanas a' ceangal ris an fhaidhle seo:",
+       "linkstoimage": "Tha ceangal ris an fhaidhle seo {{PLURAL:$1|san duilleag|sna duilleagan}} a leanas:",
+       "linkstoimage-more": "Tha ceangal ris an fhaidhle seo ann am barrachd air $1 {{PLURAL:$1|duilleag|dhuilleag|duilleagan|duilleag}}.\nCha sheall an liosta a leanas ach a' chiad $1 {{PLURAL:$1|duilleag|dhuilleag|duilleagan|duilleag}} sa bheil ceangal ris an fhaidhle seo.\nTha [[Special:WhatLinksHere/$2|liosta shlàn]] ri fhaighinn.",
        "nolinkstoimage": "Chan eil duilleag sam bith a' ceangal an-seo.",
+       "morelinkstoimage": "Seall [[Special:WhatLinksHere/$1|barrachd cheanglaichean]] gun fhaidhle seo.",
+       "linkstoimage-redirect": "$1 (ath-stiùireadh faidhle) $2",
+       "duplicatesoffile": "Tha {{PLURAL:$1|an $1 faidhle a leanas 'na dhùblachadh|an $1 fhaidhle a leanas 'nan dùblachadh|na $1 faidhlichean a leanas 'nan dùblachadh|am $1 faidhle a leanas 'nan dùblachadh}} dhen fhaidhle seo ([[Special:FileDuplicateSearch/$2|barrachd fiosrachaidh]]):",
        "sharedupload": "Tha am faidhle seo o $1 agus faodaidh pròiseactan eile a chleachdadh.",
-       "sharedupload-desc-here": "'S ann à $1 a tha am faidhle seo agus faodaidh gu bheil pròiseactan eile 'ga chleachdadh.\nChithear an tuairisgeul a tha aice air [duilleag tuairisgeul an fhaidhle $2] gu h-ìosal.",
+       "sharedupload-desc-there": "'S ann à $1 a tha am faidhle seo agus faodaidh gu bheil pròiseactan eile 'ga chleachdadh.\nFaic [duilleag tuairisgeul an fhaidhle $2] airson barrachd fiosrachaidh.",
+       "sharedupload-desc-here": "'S ann à $1 a tha am faidhle seo agus faodaidh gu bheil pròiseactan eile 'ga chleachdadh.\nChì thu an tuairisgeul a tha aice air [duilleag tuairisgeul an fhaidhle $2] gu h-ìosal.",
+       "sharedupload-desc-edit": "'S ann à $1 a tha am faidhle seo agus faodaidh gu bheil pròiseactan eile 'ga chleachdadh.\n'S dòcha gu bheil thu airson an tuairisgeul a tha aice a dheasachadh air [duilleag tuairisgeul an fhaidhle $2].",
+       "sharedupload-desc-create": "'S ann à $1 a tha am faidhle seo agus faodaidh gu bheil pròiseactan eile 'ga chleachdadh.\n'S dòcha gu bheil thu airson an tuairisgeul a tha aice a dheasachadh air [duilleag tuairisgeul an fhaidhle $2].",
+       "filepage-nofile": "Chan eil faidhle air a bheil an t-ainm seo ann.",
+       "filepage-nofile-link": "Chan eil faidhle air a bheil an t-ainm seo ann ach 's urrainn dhut [$1 fear a luchdadh suas].",
        "uploadnewversion-linktext": "Luchdaich suas tionndadh ùr dhen fhaidhle seo",
+       "shared-repo-from": "o $1",
+       "shared-repo": "ionad-tasgaidh co-roinnte",
+       "shared-repo-name-wikimediacommons": "Wikimedia Commons",
+       "filepage.css": "/* Thèid an CSS a chuireas tu an-seo a ghabhail a-steach air duilleag tuairisgeul an fhaidhle 's air uicidhean aig cliantan cèine */",
+       "upload-disallowed-here": "Chan urrainn dhut sgrìobhadh thairis air an fhaidhle seo.",
+       "filerevert": "Till $1",
+       "filerevert-legend": "Till am faidhle",
+       "filerevert-intro": "Tha thu an impis am faidhle <strong>[[Media:$1|$1]]</strong> a thilleadh dhan [$4 tionndadh on $2 $3].",
+       "filerevert-comment": "Adhbhar:",
+       "filerevert-defaultcomment": "Air a thilleadh gun tionndadh on $1 $2",
+       "filerevert-submit": "Till",
+       "filerevert-success": "Chaidh <strong>[[Media:$1|$1]]</strong> a thilleadh gun [$4 tionndadh on $2 $3].",
+       "filerevert-badversion": "Chan eil tionndadh ionadail an fhaidhle ann air a bheil an stampa-tìde a chaidh a thoirt seachad.",
+       "filedelete": "Sguab às $1",
+       "filedelete-legend": "Sguab às am faidhle",
+       "filedelete-intro": "Tha thu an impis am faidhle <strong>[[Media:$1|$1]]</strong> a sguabadh às cho math ris an eachdraidh shlàn aige.",
+       "filedelete-intro-old": "Tha thu a' sguabadh às an tionndadh de <strong>[[Media:$1|$1]]</strong> on [$4 $2 $3].",
+       "filedelete-comment": "Adhbhar:",
+       "filedelete-submit": "Sguab às",
+       "filedelete-success": "Chaidh <strong>$1</strong> a sguabadh às.",
+       "filedelete-success-old": "Chaidh an tionndadh de <strong>[[Media:$1|$1]]</strong> on $2 $3 a sguabadh às.",
+       "filedelete-nofile": "Chan eil <strong>$1</strong> ann.",
+       "filedelete-nofile-old": "Chan eil tionndadh de <strong>$1</strong> san tasglann air a bheil na buadhan sònraichte.",
+       "filedelete-otherreason": "Adhbhar eile/a bharrachd:",
+       "filedelete-reason-otherlist": "Adhbhar eile",
        "filedelete-reason-dropdown": "*Adhbharan cumanta airson sguabadh às\n** Tha e a' briseadh na còrach-lethbhreac\n** Faidhle air a dhùblachadh",
-       "randompage": "Duilleag thuairmeach",
-       "statistics": "Staitistearachd",
+       "filedelete-edit-reasonlist": "Deasaich adhbharan an sguabaidh às",
+       "filedelete-maintenance": "Chaidh sguabadh às 's aiseag nam faidhlichean a chur à comas rè obair-glèidhidh gu sealach.",
+       "filedelete-maintenance-title": "Cha ghabh am faidhle a sguabadh às",
+       "mimesearch": "Lorg MIME",
+       "mimesearch-summary": "Leigidh an duilleag seo leat faidhlichean a chriathradh a-rèir an t-seòrsa MIME a th' orra.\nIon-chur: seòrsa-na-susbainte/fo-sheòrsa, m.e. <code>image/jpeg</code>.",
+       "mimetype": "Seòrsa MIME:",
+       "download": "luchdaich a-nuas",
+       "unwatchedpages": "Duilleagan air an toirt far a' chlàir-fhaire",
+       "listredirects": "Liosta nan ath-stiùiridhean",
+       "listduplicatedfiles": "Liosta nam faidhlichean aig a bheil dùblachadh",
+       "listduplicatedfiles-summary": "Seo liosta nam faidhlichean 's an tionndadh as ùire dhiubh 'na dhùblachadh aig an tionndadh as ùire de dh'fhaidhle air choireigin eile. Chan fhaic thu ach faidhlichean ionadail.",
+       "listduplicatedfiles-entry": "Tha $2 [[$3|{{PLURAL:$2|dùblachadh|dhùblachadh|dùblachaidhean|dùblachadh}}]] aig [[:File:$1|$1]].",
+       "unusedtemplates": "Teamplaidean gun chleachdadh",
+       "unusedtemplatestext": "Seallaidh an duilleag seo a h-uile duilleag dhut a tha san ainm-spàs {{ns:template}} 's nach deach a ghabhail a-steach ann an duilleag eile.\nThoir an aire gum b' fheairrde thu sùil a thoirt airson ceanglaichean eile dha na teamplaidean mus sguab thu às dhaibh.",
+       "unusedtemplateswlh": "ceanglaichean eile",
+       "randompage": "Duilleag air thuaiream",
+       "randompage-nopages": "Chan eil duilleag {{PLURAL:$2|san ainm-spàs|sna h-ainm-spàsan}} a leanas: $1.",
+       "randomincategory": "Duilleag air thuaiream san roinn-seòrsa",
+       "randomincategory-invalidcategory": "Chan e \"$1\" 'na ainm roinn-seòrsa dligheach.",
+       "randomincategory-nopages": "Chan eil duilleag san roinn-seòrsa [[:Category:$1|$1]].",
+       "randomincategory-selectcategory": "Faigh duilleag air thuaiream a tha san roinn-seòrsa: $1 $2.",
+       "randomincategory-selectcategory-submit": "Siuthad",
+       "randomredirect": "Ath-stiùireadh air thuaiream",
+       "randomredirect-nopages": "Chan eil ath-stiùireadh san ainm-spàs \"$1\".",
+       "statistics": "Stadastaireachd",
+       "statistics-header-pages": "Stadastaireachd nan duilleagan",
+       "statistics-header-edits": "Deasaich an stadastaireachd",
+       "statistics-header-views": "Seall an stadastaireachd",
+       "statistics-header-users": "Stadastaireachd a' chleachdaiche",
+       "statistics-header-hooks": "Stadastaireachd eile",
+       "statistics-articles": "Duilleagan susbainte",
+       "statistics-pages": "Duilleagan",
+       "statistics-pages-desc": "A h-uile duilleag san uicidh, a' gabhail a-steach nan duilleagan deasbaireachd, ath-stiùiridhean agus msaa.",
+       "statistics-files": "Faidhlichean a chaidh a luchdadh suas",
+       "statistics-edits": "Deasachaidhean air duilleagan on a chaidh {{SITENAME}} a stèidheachadh",
+       "statistics-edits-average": "Deasachaidhean cuibheasach air duilleag",
+       "statistics-views-total": "Seallaidhean iomlan",
+       "statistics-views-total-desc": "Chan fhaic thu na seallaidhean air duilleagan nach eil ann no air duilleag shònraichte",
+       "statistics-views-peredit": "Seallaidhean air gach deasachadh",
+       "statistics-users": "[[Special:ListUsers|Cleachdaichean]] clàraichte",
+       "statistics-users-active": "Cleachdaichean gnìomhach",
+       "statistics-users-active-desc": "Cleachdaichean a rinn gnìomh rè {{PLURAL:$1|an $1 latha|an $1 latha|nan $1 làithean|an $1 latha}} mu dheireadh",
+       "statistics-mostpopular": "Na duilleagan air an deach sealltainn as trice",
+       "pageswithprop": "Duilleagan le buadh duilleige",
+       "pageswithprop-legend": "Duilleagan le buadh duilleige",
+       "pageswithprop-text": "Seallaidh an duilleag seo duilleagan dhut air a bheil buadh duilleige shònraichte.",
+       "pageswithprop-prop": "Ainm na buaidhe:",
+       "pageswithprop-submit": "Siuthad",
+       "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",
-       "brokenredirects": "Ath-stiùireidhean briste",
-       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
+       "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",
+       "brokenredirects": "Ath-stiùiridhean briste",
+       "brokenredirectstext": "Nì na h-ath-stiùiridhean seo ceangal gu duilleag nach eil ann:",
+       "brokenredirects-edit": "deasaich",
+       "brokenredirects-delete": "sguab às",
+       "withoutinterwiki": "Duilleagan gun cheangal cànain",
+       "withoutinterwiki-summary": "Cha dèan na duilleagan seo ceangal gun tionndadh aig cànan eile:",
+       "withoutinterwiki-legend": "Ro-leasachan",
+       "withoutinterwiki-submit": "Seall",
+       "fewestrevisions": "Duilleagan air a bheil an àireamh as lugha de mhùthaidhean",
+       "nbytes": "$1 {{PLURAL:$1|bhaidht|bhaidht|baidhtichean|baidht}}",
+       "ncategories": "$1 {{PLURAL:$1|roinn-seòrsa|roinn-seòrsa|roinnean-seòrsa|roinn-seòrsa}}",
+       "ninterwikis": "$1 {{PLURAL:$1|eadar-uicidh|eadar-uicidhean}}",
+       "nlinks": "$1 {{PLURAL:$1|cheangal|cheangal|ceanglaichean|ceangal}}",
        "nmembers": "$1 {{PLURAL:$1|bhall|bhall|buill|ball}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|bhall|bhall|buill|ball}}",
+       "nrevisions": "$1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}",
        "nviews": "$1 {{PLURAL:$1|sealladh|shealladh|seallaidhean|sealladh}}",
+       "nimagelinks": "'Ga chleachdadh air $1 {{PLURAL:$1|duilleag|dhuilleag|duilleagan|duilleag}}",
+       "ntransclusions": "'ga chleachdadh air $1 {{PLURAL:$1|duilleag|dhuilleag|duilleagan|duilleag}}",
+       "specialpage-empty": "Chan eil toradh ann airson na h-aithris seo.",
+       "lonelypages": "Duilleagan 'nan dìlleachdan",
+       "lonelypagestext": "Chan eil ceangal gu na duilleagan seo o dhuilleag eile no an gabhail a-steach 'nan iomradh ann an duilleag eile air {{SITENAME}}.",
        "uncategorizedpages": "Duilleagan gun roinn-seòrsa",
        "uncategorizedcategories": "Roinnean-seòrsa gun roinn-seòrsa",
+       "uncategorizedimages": "Faidhlichean gun roinn-seòrsa",
+       "uncategorizedtemplates": "Teamplaidean gun roinn-seòrsa",
+       "unusedcategories": "Roinnean-seòrsa gun chleachdadh",
        "unusedimages": "Faidhlichean gun chleachdadh",
+       "popularpages": "Duilleagan air a bheil fèill mhòr",
+       "wantedcategories": "Roinnean-seòrsa a thathar 'gan iarraidh",
+       "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",
+       "mostlinkedtemplates": "Na duilleagan a chaidh a ghabhal a-steach 'nan iomradh an àireamh as motha",
+       "mostcategories": "Na duilleagan aig a bheil an àireamh as motha de roinnean-seòrsa",
+       "mostimages": "Na faidhlichean ris a bheil an àireamh as motha de cheanglaichean",
+       "mostinterwikis": "Na duilleagan aig a bheil an àireamh as motha de eadar-uicidhean",
+       "mostrevisions": "Duilleagan air a bheil an àireamh as motha de mhùthaidhean",
        "prefixindex": "A h-uile duilleag le ro-leasachan",
+       "prefixindex-namespace": "A h-uile duilleag le ro-leasachan (ainm-spàs $1)",
+       "prefixindex-strip": "Ro-leasachan sreinge air an liosta",
        "shortpages": "Duilleagan goirid",
        "longpages": "Duilleagan fada",
+       "deadendpages": "Duilleagan cùile-dùinte",
+       "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",
-       "usercreated": "Air a chruthachadh le {{GENDER:$3|}} $1 aig $2",
+       "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",
+       "newpages-username": "Ainm-cleachdaiche:",
        "ancientpages": "Duilleagan as sìne",
        "move": "Gluais",
        "movethispage": "Gluais an duilleag seo",
-       "pager-newer-n": "{{PLURAL:$1|1 nas ùire|$1 nas ùire}}",
-       "pager-older-n": "{{PLURAL:$1|1 nas sine|$1 nas sine}}",
+       "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 roinntean-seòrsa|}} a leanas.\nChan fhaicear [[Special:UnusedCategories|roinntean-seòrsa gun chleachdadh an-seo]].\nThoir sùil air na [[Special:WantedCategories|roinntean-seòrsa a thathar 'gan iarraidh cuideachd]].",
-       "deletedcontributions": "Obair a' chleachdaiche a chaidh a sguabadh às",
+       "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 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-ns": "Namespace:",
+       "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.",
        "removewatch": "Thoir air falbh on chlàr-fhaire",
        "removedwatchtext": "Chaidh an duilleag \"[[:$1]]\" a thoirt air falbh o [[Special:Watchlist|do chlàr-faire]].",
+       "removedwatchtext-short": "Chaidh an duilleag \"$1\" a thoirt ait falbh on chlàr-fhaire agad.",
        "watch": "Cum sùil air",
        "watchthispage": "Cum sùil air an duilleag seo",
-       "unwatch": "Na cum sùil tuilleadh",
+       "unwatch": "Thoir far a' chlàir-fhaire",
        "unwatchthispage": "Na cum sùil tuilleadh",
        "notanarticle": "Chan e duilleag susbaint a tha ann",
+       "notvisiblerev": "Chaidh am mùthadh mu dheireadh le cleachdaiche eile a sguabadh às",
        "watchlist-details": "Tha {{PLURAL:$1|$1 duilleag|$1 dhuilleag|$1 duilleagan|$1 duilleag}} air a' chlàr-fhaire agad, gun luaidh air na duilleagan deasbaireachd.",
-       "wlheader-showupdated": "Tha clò '''trom''' air duilleagan a chaidh atharrachadh on turas mu dheireadh a thadhail thu orra.",
-       "wlnote2": "Chì thu na h-atharraichean {{PLURAL:$1|san uair|san <strong>$1</strong> uair|san <strong>$1</strong> uair|san <strong>$1</strong> uair|sna <strong>$1</strong> uairean|sna <strong>$1</strong> uair}} a thìde seo chaidh aig $3 air $2.",
+       "wlheader-enotif": "Tha brathan-naidheachd air a' phost-d an comas.",
+       "wlheader-showupdated": "Tha clò <strong>trom</strong> air duilleagan a chaidh atharrachadh on turas mu dheireadh a thadhail thu orra.",
+       "wlnote2": "Chì thu na h-atharraichean {{PLURAL:$1|san <strong>$1</strong> uair|san <strong>$1</strong> uair|sna <strong>$1</strong> uairean|san <strong>$1</strong> uair}} a thìde seo chaidh aig $3 air $2.",
        "wlshowlast": "Seall na $1 uairean a thìde mu dheireadh $2 làithean mu dheireadh $3",
        "watchlist-options": "Roghainnean mo chlàir-faire",
        "watching": "'Ga chur air a' chlàr-fhaire...",
        "unwatching": "A' toirt far a' chlàir-fhaire...",
+       "watcherrortext": "Thachair mearachd le atharrachadh nan roghainnean airson \"$1\" airson a' chlàr-fhaire agad.",
        "enotif_reset": "Comharraich gun do thadhladh air gach duilleag",
+       "enotif_impersonal_salutation": "Cleachdaiche {{SITENAME}}",
+       "enotif_subject_deleted": "Chaidh duilleag $1 air {{SITENAME}} a sguabadh às le $2",
+       "enotif_subject_created": "Chaidh duilleag $1 air {{SITENAME}} a chruthachadh le $2",
+       "enotif_subject_moved": "Chaidh duilleag $1 air {{SITENAME}} a ghluasad le $2",
+       "enotif_subject_restored": "Chaidh an duilleag $1 air {{SITENAME}} aiseag le $2",
+       "enotif_subject_changed": "Chaidh duilleag $1 air {{SITENAME}} atharrachadh le $2",
+       "enotif_body_intro_deleted": "Chaidh duilleag $1 air {{SITENAME}} a sguabadh às le $2 $PAGEEDITDATE, faic $3.",
+       "enotif_body_intro_created": "Chaidh duilleag $1 air {{SITENAME}} a chruthachadh le $2 $PAGEEDITDATE, faic $3 airson a' mhùthaidh làithrich.",
+       "enotif_body_intro_moved": "Chaidh duilleag $1 air {{SITENAME}} a ghluasad le $2 $PAGEEDITDATE, faic $3 airson a' mhùthaidh làithrich.",
+       "enotif_body_intro_restored": "Chaidh duilleag $1 air {{SITENAME}} aiseag le $2 $PAGEEDITDATE, faic $3 airson a' mhùthaidh làithrich.",
+       "enotif_body_intro_changed": "Chaidh duilleag $1 air {{SITENAME}} atharrachadh le $2 $PAGEEDITDATE, faic $3 airson a' mhùthaidh làithrich.",
+       "enotif_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}}:",
        "confirmdeletetext": "Tha thu an impis duilleag a sguabadh às agus a h-eachdraidh uile gu lèir.\nDearbhaich gu bheil thu airson seo a dhèanamh 's gun tuig thu a' bhuaidh a bhios ann agus gu bheil thu a' dèanamh seo a-rèir [[{{MediaWiki:Policy-url}}|a' phoileasaidh]].",
        "actioncomplete": "Gnìomh deiseil",
        "actionfailed": "Dh'fhàillig ort",
        "deletedtext": "Chaidh \"$1\" a sguabadh às.\nSeall air $2 airson clàr de dhuilleagan a chaidh a sguabadh às o chionn ghoirid.",
        "dellogpage": "Loga an sguabaidh às",
-       "reverted": "Air aiseag gu tionndadh nas sine",
+       "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:",
        "deletereasonotherlist": "Adhbhar eile",
        "deletereason-dropdown": "*Adhbharan cumanta airson sguabadh às\n** Spama\n** Milleadh\n** Tha e a' briseadh na còrach-lethbhreac\n** Dh'iarr an t-ùghdar e\n** Ath-threòrachadh briste",
        "delete-edit-reasonlist": "Deasaich adhbharan sguabadh às",
+       "delete-toobig": "Tha eachdraidh deasachaidh mòr aig an duilleag seo sa bheil barrachd air $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}.\nChaidh sguabadh às nan duilleagan dhen leithid a chuingeachadh ach na dèid cron a dhèanamh air {{SITENAME}} le mearachd.",
+       "delete-warning-toobig": "Tha eachdraidh deasachaidh mòr aig an duilleag seo sa bheil barrachd air $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}.\nMa sguabas tu às dhi, dh'fhaoidte gun dèan thu cron air na gnìomhan stòr-dàta aig {{SITENAME}}; mar sin, thoir an aire.",
+       "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",
+       "rollbacklinkcount": "roilig $1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} air ais",
+       "rollbacklinkcount-morethan": "roilig barrachd air $1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} air ais",
+       "rollbackfailed": "Dh'fhàillig leis an roladh air ais",
+       "cantrollback": "Cha ghabh na chaidh a dheasachadh a thilleadh;\nis an deasaiche mu dheireadh an aon ùghdar aig an duilleag seo.",
+       "alreadyrolled": "Cha ghabh an deasachadh mu dheireadh air [[:$1]] leis [[User:$2|$2]] ([[User talk:$2|an deasbaireachd]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) a roladh air ais on a rinn cuideigin eile deasachadh no roladh air ais air an duilleag mar-thà.\n\nChaidh an duilleag a dheasachadh an turas mu dheireadh leis [[User:$3|$3]] ([[User talk:$3|an deasbaireachd]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Seo gearr-chunntas an deasachaidh: \"''$1''\".",
-       "revertpage": "Deasachaidhean a chaidh a thilleadh le [[Special:Contributions/$2|$2]] ([[User talk:$2|deasbaireachd]]) dhan mhùthadh mu dheireadh le [[User:$1|$1]]",
+       "revertpage": "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-text": "Chì thu an ìre dìon dhen duilleag '''$1''' an-seo agus is urrainn dhut atharrachadh an-seo.",
-       "protect-locked-access": "Chan eil cead aig a' chunntas agad an ìre dìon de dhuilleag atharrachadh.\nSeo roghainnean làithreach na duilleige '''$1''':",
-       "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 easach air.\n'S urrainn dhut ìre dìon na duilleige seo atharrachadh ach cha bhi buaidh air an dìon easach.",
+       "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",
        "protect-fallback": "Na ceadaich ach do chleachdaichean aig a bheil cead \"$1\"",
        "protect-level-autoconfirmed": "Na ceadaich ach cleachdaichean a chaidh an dearbhadh gu fèin-obrachail",
        "protect-level-sysop": "Na ceadaich ach rianadairean",
+       "protect-summary-desc": "[$1=$2] ($3)",
        "protect-summary-cascade": "mar eas",
        "protect-expiring": "falbhaidh an ùine air $1 (UTC)",
        "protect-expiring-local": "falbhaidh an ùine air $1",
        "protect-expiry-indefinite": "buan",
-       "protect-cascade": "Dìon duilleagan a tha 'gan gabhail a-steach san duilleag seo (dìon mar eas)",
+       "protect-cascade": "Dìon duilleagan a tha 'gan gabhail a-steach san duilleag seo (dìon o bhith mar eas)",
        "protect-cantedit": "Chan urrainn dhut ìre dìon na duilleige seo atharrachadh a chionn 's nach eil cead deasachaidh agad air.",
        "protect-othertime": "Àm eile:",
        "protect-othertime-op": "àm eile",
+       "protect-existing-expiry": "Falbhaidh an ùine air mar-thà: $2 $3",
+       "protect-otherreason": "Adhbhar eile/a bharrachd:",
+       "protect-otherreason-op": "Adhbhar eile",
+       "protect-dropdown": "*Na h-adhbharan dìona as cumanta\n** Cus bhandalachd\n** Cus spama\n** Còmhstrithean deasachaidh nach eil torrach\n** Duilleag air a bheil trafaig mhòr",
+       "protect-edit-reasonlist": "Deasaich adhbharan dìona o dheasachadh",
+       "protect-expiry-options": "1 uair a thìde:1 hour, 1 latha:1 day, 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",
        "restriction-type": "Cead:",
        "restriction-level": "Ìre bacaidh:",
-       "undeleterevisions": "Chaidh {{PLURAL:$1|$1 leth-bhreac|$1 leth-bhreac|$1 leth-bhreacan|$1 leth-bhreac}} a chur san tasg-lann",
+       "minimum-size": "Meud as lugha",
+       "maximum-size": "Meud as motha:",
+       "pagesize": "(baidhtichean)",
+       "restriction-edit": "Deasaich",
+       "restriction-move": "Gluais",
+       "restriction-create": "Cruthaich",
+       "restriction-upload": "Luchdaich suas",
+       "restriction-level-sysop": "le dìon slàn air",
+       "restriction-level-autoconfirmed": "le leth-dhìon air",
+       "restriction-level-all": "ìre sam bith",
+       "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",
-       "namespace": "Namespace:",
+       "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",
-       "namespace_association": "Namespace co-cheangailte ris",
+       "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)",
+       "namespace_association": "An t-ainm-spàs co-cheangailte ris",
+       "tooltip-namespace_association": "Cuir cromag sa bhogsa ach an dèid ainm-spàs na deasbaireachd no nan cuspairean a tha ceangailte ris an ainm-spàs a thagh thu a ghabhail a-steach",
        "blanknamespace": "(Prìomh)",
-       "contributions": "Mùthaidhean a' {{GENDER:$1|chleachdaiche}}",
-       "contributions-title": "Mùthaidhean a rinn $1",
-       "mycontris": "Mùthaidhean",
-       "contribsub2": "Airson {{GENDER:$3|$1}} ($2)",
+       "contributions": "Obair a' chleachdaiche",
+       "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 mùthaidhean le cunntasan ùra a-mhàin",
+       "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-deleted": "obair air a sguabadh às",
        "sp-contributions-uploads": "a' luchdadh suas",
        "sp-contributions-logs": "logaichean",
        "sp-contributions-talk": "deasbaireachd",
-       "sp-contributions-search": "Lorg mùthaidhean leis",
+       "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 lèirmheasan as ùire",
+       "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-page": "Duilleag:",
-       "linkshere": "Tha na duilleagan a leanas a' ceangal ri '''[[:$1]]''':",
-       "nolinkshere": "Chan eil ceangal air duilleag sam bith a tha a' dol gu '''[[:$1]]'''.",
+       "linkshere": "Tha na duilleagan a leanas a' ceangal ri <strong>[[:$1]]</strong>:",
+       "nolinkshere": "Chan eil ceangal air duilleag sam bith a tha a' dol gu <strong>[[:$1]]</strong>.",
+       "nolinkshere-ns": "Chan eil ceangal gu <strong>[[:$1]]</strong> ann an duilleag sam bith san ainm-spàs a thagh thu.",
        "isredirect": "duilleag ath-sheòlaidh",
        "istemplate": "transclusion",
        "isimage": "ceangal faidhle",
-       "whatlinkshere-prev": "{{PLURAL:$1|roimhe|$1 roimhe}}",
-       "whatlinkshere-next": "{{PLURAL:$1|an ath|an ath $1|na ath $1|an ath $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|an $1 roimhe|an $1 roimhe|na $1 roimhe|am $1 roimhe}}",
+       "whatlinkshere-next": "{{PLURAL:$1|an ath $1|an ath $1|na ath $1|an ath $1}}",
        "whatlinkshere-links": "← ceanglaichean",
        "whatlinkshere-hideredirs": "$1 ath-sheòlaidhean",
        "whatlinkshere-hidetrans": "$1 transclusions",
        "whatlinkshere-hidelinks": "$1 ceanglaichean",
        "whatlinkshere-hideimages": "$1 ceanglaichean nam faidhlichean",
        "whatlinkshere-filters": "Criathairean",
-       "blockip": "Bac cleachdaiche",
+       "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",
-       "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,neo-chrìochnach:infinite",
+       "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 '''nach dèid''' an duilleag a ghluasad ma tha duilleag air an tiotal ùr mu thràth ach ma bhios e falamh no 'na ath-sheòladh 's mur eil eachdraidh deasachaidh ann.\n'S ciall dha seo gun urrainn dhut ainm duilleige a thilleadh dhan ainm a bha air roimhe ma rinn thu mearachd agus nach urrainn dhut sgrìobhadh thairis air duilleag a tha ann.\n\n'''Rabhadh!'''\nFaodaidh seo a bhith 'na atharrachadh mòr ris nach bi dùil air duilleag air a bheil fèill mhòr;\ndèan cinnteach gu bheil thu a' tuigsinn dè a' bhuaidh a bhios agad mus dèid thu air adhart.",
-       "movepagetalktext": "Thèid an duilleag deasbaireachd a tha co-cheangailte ris a ghluasad 'na cois '''ach:'''\n*Ma tha duilleag deasbaireachd nach eil falamh aig an ainm ùr mu thràth, no\n*Ma bheir thu air falbh a' chromag on bhogsa gu h-ìosal\n\nMa thachras seo, feumaidh to an duilleag a ghluasad no cho-aontachadh a làimh, ma tha sin fa-near dhut.",
+       "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:",
+       "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:",
        "move-watch": "Cum sùil air an duilleag thùsail agus an duilleag thairgaideach",
        "movepagebtn": "Gluais duilleag",
        "pagemovedsub": "Shoirbhich leat leis a' ghluasad",
-       "movepage-moved": "'''Chaidh \"$1\" a ghluasad a \"$2\"'''",
+       "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",
-       "allmessagestext": "Seo liosta de theachdaireachdan an t-siostaim a tha ri làimh ann an namespace 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.",
+       "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 h-ìomhaigheige: $1",
+       "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-mytalk": "Duilleag do chonaltraidh",
+       "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 do mhùthaidhean",
+       "tooltip-pt-mycontris": "Liosta na h-obrach a rinn thu",
        "tooltip-pt-login": "Mholamaidh dhut logadh a-steach; ge-tà, cha leig thu leas seo a dhèanamh",
        "tooltip-pt-logout": "Log a-mach",
        "tooltip-ca-talk": "Deasbad mu dhuilleag na susbainte",
        "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-n-mainpage-description": "Tadhail air an duilleag mhòr",
        "tooltip-n-portal": "Mun phròiseact, nas urrainn dhut dèanamh is far an lorg thu nithean",
        "tooltip-n-currentevents": "Lorg fiosrachadh a bharrachd mu thachartasan an latha",
-       "tooltip-n-recentchanges": "Liosta nam mùthaidhean ùra aig an uici.",
+       "tooltip-n-recentchanges": "Liosta nam mùthaidhean ùra aig an uicidh.",
        "tooltip-n-randompage": "Luchdaich duilleag air thuaiream",
        "tooltip-n-help": "Far am faigh thu fiosrachadh",
-       "tooltip-t-whatlinkshere": "Liosta de gach duilleag uici a tha a' ceangal ris an duilleag seo",
+       "tooltip-t-whatlinkshere": "Liosta de gach duilleag uicidh a tha a' ceangal ris an duilleag seo",
        "tooltip-t-recentchangeslinked": "Mùthaidhean a rinneadh o chionn ghoirid air duilleagan a tha ceangal ann thuca on duilleag seo",
        "tooltip-feed-rss": "Inbhir RSS airson na duilleige seo",
        "tooltip-feed-atom": "Inbhir Atom airson na duilleige seo",
-       "tooltip-t-contributions": "Seall liosta nam mùthaidhean a rinn a' chleachdaiche seo",
+       "tooltip-t-contributions": "Seall liosta na h-obrach a rinn an cleachdaiche seo",
        "tooltip-t-emailuser": "Cuir post-dealain dhan chleachdaiche seo",
        "tooltip-t-upload": "Luchdaich suas faidhle",
        "tooltip-t-specialpages": "Liosta de gach duilleag shònraichte",
        "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-category": "Seall duilleag na roinne",
+       "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-preview": "Ro-sheall na mùthaidhean agad; saoil an cleachd thu seo mus sàbhail thu iad?",
        "tooltip-diff": "Seall na mùthaidhean a chuir mi air an teacs",
        "tooltip-compareselectedversions": "Seall an diofar eadar an dà mhùthadh dhen duilleag seo a thagh thu",
        "tooltip-watch": "Cuir an duilleag seo air do chlàr-faire",
+       "tooltip-watchlistedit-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",
-       "anonymous": "{{PLURAL:$1|cleachdaiche|cleachdaichean}} gun ainm o {{SITENAME}}",
+       "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",
+       "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",
+       "markedaspatrolledtext": "Chaidh comharra freiceadain a chur ris a' mhùthadh de [[:$1]] a thagh thu.",
+       "rcpatroldisabled": "Chaidh feart nam freiceadan airson atharraichean o chionn goirid a chur à comas",
+       "rcpatroldisabledtext": "Tha feart nam freiceadan airson atharraichean o chionn goirid à comas an-dràsta.",
+       "markedaspatrollederror": "Cha ghabh comharra freiceadain a chur ris",
+       "markedaspatrollederrortext": "Feumaidh tu mùthadh a shònrachadh gus comharra freiceadain a chur ris.",
+       "markedaspatrollederror-noautopatrol": "Chan fhaod thu comharra freiceadain a chur ris na h-atharraichean agad fhèin.",
+       "markedaspatrollednotify": "Chaidh comharra freiceadain a cur ris an atharrachadh seo air $1.",
+       "markedaspatrollederrornotify": "Cha b' urrainn dhuinn comharra freiceadain a chur ris.",
+       "patrol-log-page": "Loga nam freiceadan",
+       "patrol-log-header": "Seo loga nam mùthaidhean le comharra freiceadain riutha.",
+       "log-show-hide-patrol": "$1 loga nam freiceadan",
+       "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",
-       "watchlistall2": "a h-uile",
-       "namespacesall": "uile",
-       "monthsall": "uile",
+       "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-jpeginterchangeformat": "Frith-àireamh gu JPEG SOI",
+       "exif-jpeginterchangeformatlength": "Baidhtichean de dhàta JPEG",
+       "exif-ycbcrcoefficients": "Co-èifeachdan a' mheatraigs atharrachaidh airson an spàs datha",
+       "exif-referenceblackwhite": "Càraid de luachan iomraidh dubh is geal",
+       "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-colorspace": "Spàs datha",
+       "exif-componentsconfiguration": "Ciall aig gach co-phàirt",
+       "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-subsectime": "Fo-dhiogan cinn-là 's ama",
+       "exif-subsectimeoriginal": "Fo-dhiogan cinn-là 's ama thùsail",
+       "exif-subsectimedigitized": "Fo-dhiogan cinn-là 's ama an dreach digitich",
+       "exif-exposuretime": "Ùine deisearais",
+       "exif-exposuretime-format": "$1 diog ($2)",
+       "exif-fnumber": "Àireamh F",
+       "exif-fnumber-format": "f/$1",
+       "exif-exposureprogram": "Prògram deisearais",
+       "exif-spectralsensitivity": "Mothalachd speictreach",
+       "exif-isospeedratings": "Rangachadh astar ISO",
+       "exif-shutterspeedvalue": "Luaths siutair APEX",
+       "exif-aperturevalue": "Fosgladh APEX",
+       "exif-brightnessvalue": "Soilleireachd APEX",
+       "exif-exposurebiasvalue": "Claonadh deisearais APEX",
+       "exif-subjectdistance": "Astar a' chuspair",
+       "exif-meteringmode": "Modh meidheachaidh",
+       "exif-lightsource": "Tùs an t-solais",
+       "exif-flash": "Solas-boillsgidh",
+       "exif-focallength": "Faid fòcas an lionsa",
+       "exif-focallength-format": "$1 mm",
+       "exif-subjectarea": "Raon a' chuspair",
+       "exif-flashenergy": "Lùths an t-solais boillsgidh",
+       "exif-focalplanexresolution": "Dùmhlachd-bhreacaidh X aig plèana an fhòcais",
+       "exif-focalplaneyresolution": "Dùmhlachd-bhreacaidh Y aig plèana an fhòcais",
+       "exif-focalplaneresolutionunit": "Aonad dùmhlachd-breacaidh aig plèana an fhòcais",
+       "exif-subjectlocation": "Ionad a' chuspair",
+       "exif-exposureindex": "Inneacs deisearais",
+       "exif-sensingmethod": "Dòigh a' mhothaicheir",
+       "exif-filesource": "Tùs an fhaidhle",
+       "exif-scenetype": "Seòrsa an t-seallaidh",
+       "exif-customrendered": "Pròiseasadh gnàthaichte an deilbh",
+       "exif-exposuremode": "Modh deisearais",
+       "exif-whitebalance": "Meidh na gile",
+       "exif-digitalzoomratio": "Co-mheas an t-sùma dhigitich",
+       "exif-focallengthin35mmfilm": "Faid fòcas an am film 35 mm",
+       "exif-scenecapturetype": "Seòrsa glacaidh-sgrìn",
+       "exif-gaincontrol": "Smachd air an t-seallaidh",
+       "exif-contrast": "Iomsgaradh",
+       "exif-saturation": "Sàthachd",
+       "exif-sharpness": "Geurad",
+       "exif-devicesettingdescription": "Tuairisgeul aig roghainnean an uidheim",
+       "exif-subjectdistancerange": "Rainse astar a' chuspair",
+       "exif-imageuniqueid": "ID fa leth an deilbh",
+       "exif-gpsversionid": "Tionndadh dhen taga GPS",
+       "exif-gpslatituderef": "Domhan-leud tuath no deas",
+       "exif-gpslatitude": "Domhan-leud",
+       "exif-gpslongituderef": "Domhan-fhad ear no siar",
+       "exif-gpslongitude": "Domhan-fhad",
+       "exif-gpsaltituderef": "Iomradh na h-àirde",
+       "exif-gpsaltitude": "Àirde",
+       "exif-gpstimestamp": "Àm GPS (uaireadair atomach)",
+       "exif-gpssatellites": "Saidealan a chaidh a chleachdadh airson an tomhais",
+       "exif-gpsstatus": "Staid a' ghlacadair",
+       "exif-gpsmeasuremode": "Modh an tomhais",
+       "exif-gpsdop": "Pongalachd an tomhais",
+       "exif-gpsspeedref": "Aonad an luaiths",
+       "exif-gpsspeed": "Luaths a' ghlacadair GPS",
+       "exif-gpstrackref": "Iomradh airson comhair a' ghluasaid",
+       "exif-gpstrack": "Comhair a' ghluasaid",
+       "exif-gpsimgdirectionref": "Iomradh airson comhair an deilbh",
+       "exif-gpsimgdirection": "Comhair an deilbh",
+       "exif-gpsdestlatituderef": "Iomradh airson domhan-leud a' chinn-uidhe",
+       "exif-gpsdestlatitude": "Domhan-leud a' chinn-uidhe",
+       "exif-gpsdestlongituderef": "Iomradh airson domhan-fhad a' chinn-uidhe",
+       "exif-gpsdestlongitude": "Domhan-fhad a' chinn-uidhe",
+       "exif-gpsdestbearingref": "Iomradh airson comhair a' chinn-uidhe",
+       "exif-gpsdestbearing": "Comhair a' chinn-uidhe",
+       "exif-gpsdestdistanceref": "Iomradh airson astar on cheann-uidhe",
+       "exif-gpsdestdistance": "Astar on cheann-uidhe",
+       "exif-gpsprocessingmethod": "Ainm air modh pròiseasadh GPS",
+       "exif-gpsareainformation": "Ainm raon GPS",
+       "exif-gpsdatestamp": "Ceann-là GPS",
+       "exif-gpsdifferential": "Ceartachadh diofarail GPS",
+       "exif-coordinate-format": "$1° $2′ $3″ $4",
+       "exif-jpegfilecomment": "Beachd faidhle JPEG",
+       "exif-keywords": "Facalan-luirg",
+       "exif-worldregioncreated": "An roinn-dùthcha san deach an dealbh a thogail",
+       "exif-countrycreated": "An dùthaich san deach an dealbh a thogail",
+       "exif-countrycodecreated": "Còd na dùthcha san deach an dealbh a thogail",
+       "exif-provinceorstatecreated": "An t-siorrachd no còigeamh san deach an dealbh a thogail",
+       "exif-citycreated": "Am baile san deach an dealbh a thogail",
+       "exif-sublocationcreated": "An t-ionad sa bhaile san deach an dealbh a thogail",
+       "exif-worldregiondest": "Tha an roinn-dùthcha 'ga sealltainn",
+       "exif-countrydest": "Tha an dùthaich 'ga sealltainn",
+       "exif-countrycodedest": "Tha còd na dùthcha air 'ga sealltainn",
+       "exif-provinceorstatedest": "Tha an t-siorrachd no còigeamh 'ga sealltainn",
+       "exif-citydest": "Tha am baile 'ga shealltainn",
+       "exif-sublocationdest": "Tha an t-ionad sa bhaile 'ga shealltainn",
+       "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-urgency": "Èiginneachd",
+       "exif-fixtureidentifier": "Ainm nì shocraichte",
+       "exif-locationdest": "An t-ionad san dealbh",
+       "exif-locationdestcode": "Còs an ionaid san dealbh",
+       "exif-objectcycle": "Àm an latha iomchaidh airson a' mheadhain",
+       "exif-contact": "Fiosrachadh conaltraidh",
+       "exif-writer": "Sgrìobhadair",
+       "exif-languagecode": "Cànan",
+       "exif-iimversion": "Tionndadh de IIM",
+       "exif-iimcategory": "Roinn-seòrsa",
+       "exif-iimsupplementalcategory": "Roinnean-seòrsa foirlionach",
+       "exif-datetimeexpires": "Na cleachd às dèidh",
+       "exif-datetimereleased": "'Ga sgaoileadh o",
+       "exif-originaltransmissionref": "Còd ionaid tùsail an tar-chuir",
+       "exif-identifier": "Aithnichear",
+       "exif-lens": "An lionsa a chaidh a chleachdadh",
+       "exif-serialnumber": "Àireamh shreathach a' chamara",
+       "exif-cameraownername": "Seilbheadair a' chamara",
+       "exif-label": "Leubail",
+       "exif-datetimemetadata": "An ceann-là a chaidh am meata-dàta atharrachadh an turas mu dheireadh",
+       "exif-nickname": "Ainm neo-fhoirmeil an deilbh",
+       "exif-rating": "Rangachadh (a-mach à 5)",
+       "exif-rightscertificate": "Teisteanas rianachd chòraichean",
+       "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-subjectnewscode": "Còd a' chuspair",
+       "exif-scenecode": "Còd seallaidh IPTC",
+       "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-compression-3": "Còdachadh facs CCITT Group 3",
+       "exif-compression-4": "Còdachadh facs CCITT Group 4",
+       "exif-compression-5": "LZW",
+       "exif-compression-6": "JPEG (sean)",
+       "exif-compression-7": "JPEG",
+       "exif-compression-8": "Deflate (Adobe)",
+       "exif-compression-32773": "PackBits (Macintosh RLE)",
+       "exif-compression-32946": "Deflate (PKZIP)",
+       "exif-compression-34712": "JPEG2000",
+       "exif-copyrighted-true": "Fo chòir-lethbhreac",
+       "exif-copyrighted-false": "Cha deach staid na còrach-lethbhreac a shuidheachadh",
+       "exif-photometricinterpretation-2": "RGB",
+       "exif-photometricinterpretation-6": "YCbCr",
+       "exif-unknowndate": "Gun fhios air a' cheann-là",
+       "exif-orientation-1": "Àbhaisteach",
+       "exif-orientation-2": "Air a fhlipeadh air a' chòmhnard",
+       "exif-orientation-3": "Cuairtichte le 180°",
+       "exif-orientation-4": "Air a fhlipeadh gu h-inghearach",
+       "exif-orientation-5": "Cuairtichte le 90° gu tuathail 's air a fhlipeadh gu h-inghearach",
+       "exif-orientation-6": "Cuairtichte le 90° gu tuathail",
+       "exif-orientation-7": "Cuairtichte le 90° gu deiseil 's air a fhlipeadh gu h-inghearach",
+       "exif-orientation-8": "Cuairtichte le 90° gu deiseil",
+       "exif-xyresolution-i": "$1 dpi",
+       "exif-xyresolution-c": "$1 dpc",
+       "exif-colorspace-1": "sRGB",
+       "exif-colorspace-65535": "Gun chailbhreachadh",
+       "exif-componentsconfiguration-0": "chan eil e ann",
+       "exif-componentsconfiguration-1": "Y",
+       "exif-componentsconfiguration-2": "Cb",
+       "exif-componentsconfiguration-3": "Cr",
+       "exif-componentsconfiguration-4": "R",
+       "exif-componentsconfiguration-5": "G",
+       "exif-componentsconfiguration-6": "B",
+       "exif-exposureprogram-0": "Gun mhìneachadh",
+       "exif-exposureprogram-1": "A làimh",
+       "exif-exposureprogram-2": "Prògram àbhaisteach",
+       "exif-exposureprogram-3": "Prìomhachas fosglaidh",
+       "exif-exposureprogram-4": "Prìomhachas siutair",
+       "exif-exposureprogram-5": "Prògram cruthachail (le claonadh gu doimhne an raoin)",
+       "exif-exposureprogram-6": "Prògram gluasaid (le claonadh gu siutair luath)",
+       "exif-exposureprogram-7": "Modh portraid (airson dealbhan faisg gun fhòcas air a' chùlaibh)",
+       "exif-exposureprogram-8": "Modh crutha-tìre (airson dealbhan crutha-tìre le fòcas air a' chùlaibh)",
+       "exif-subjectdistance-value": "$1 {{PLURAL:$1|mheatair|mheatair|meatairean|meatair}}",
+       "exif-meteringmode-0": "Chan eil fhios",
+       "exif-meteringmode-1": "Cuibheasach",
+       "exif-meteringmode-2": "Cuibheas le cuideam sa bheadhan",
+       "exif-meteringmode-3": "Spot",
+       "exif-meteringmode-4": "Iomadh-spot",
+       "exif-meteringmode-5": "Pàtran",
+       "exif-meteringmode-6": "Leth-phàirteach",
+       "exif-meteringmode-255": "Eile",
+       "exif-lightsource-0": "Chan eil fhios",
+       "exif-lightsource-1": "Eile",
+       "exif-lightsource-2": "Fluaraiseach",
+       "exif-lightsource-3": "Tungstan (solas-dealain)",
+       "exif-lightsource-4": "Solas-boillsgidh",
+       "exif-lightsource-9": "Deagh shìde",
+       "exif-lightsource-10": "Sìde neulach",
+       "exif-lightsource-11": "Sgàil",
+       "exif-lightsource-12": "Fluaraiseach solas an latha (D 5700 – 7100K)",
+       "exif-lightsource-13": "Fluaraiseach geal an latha (N 4600 – 5400K)",
+       "exif-lightsource-14": "Fluaraiseach geal fuair (W 3900 – 4500K)",
+       "exif-lightsource-15": "Fluaraiseach geal (WW 3200 – 3700K)",
+       "exif-lightsource-17": "Solas stannardach A",
+       "exif-lightsource-18": "Solas stannardach B",
+       "exif-lightsource-19": "Solas stannardach C",
+       "exif-lightsource-20": "D55",
+       "exif-lightsource-21": "D65",
+       "exif-lightsource-22": "D75",
+       "exif-lightsource-23": "D50",
+       "exif-lightsource-24": "Tungstan stiùideo ISO",
+       "exif-lightsource-255": "Tùs solais eile",
+       "exif-flash-fired-0": "Cha deach an solas-boillsgidh air",
+       "exif-flash-fired-1": "Chaidh an solas-boillsgidh air",
+       "exif-flash-return-0": "gun fhoincsean mothachaidh airson an t-solais-bhoillsgidh",
+       "exif-flash-return-2": "cha deach solas-boillsgidh a mhothachadh",
+       "exif-flash-return-3": "chaidh solas-boillsgidh a mhothachadh",
+       "exif-flash-mode-1": "solas-boillsgidh riatanach",
+       "exif-flash-mode-2": "bacadh riatanach air an t-solas-bhoillsgidh",
+       "exif-flash-mode-3": "modh fèin-obrachail",
+       "exif-flash-function-1": "Gun solas-boillsgidh",
+       "exif-flash-redeye-1": "modh lùghdachadh nan sùilean dearga",
+       "exif-focalplaneresolutionunit-2": "òirleach",
+       "exif-sensingmethod-1": "Gun mhìneachadh",
+       "exif-sensingmethod-2": "Mothaichear raon datha aon-sgeilbe",
+       "exif-sensingmethod-3": "Mothaichear raon datha dà-sgeilbe",
+       "exif-sensingmethod-4": "Mothaichear raon datha trì-sgeilbe",
+       "exif-sensingmethod-5": "Mothaichear raon datha sreathach",
+       "exif-sensingmethod-7": "Mothaichear trì-loidhneach",
+       "exif-sensingmethod-8": "Mothaichear datha sreathach loidhneach",
+       "exif-filesource-3": "Camara dhealbhan digiteach",
+       "exif-scenetype-1": "Dealbh a chaidh a thogail gu dìreach",
+       "exif-customrendered-0": "Pròiseas àbhaisteach",
+       "exif-customrendered-1": "Pròiseas gnàthaichte",
+       "exif-exposuremode-0": "Deisearas fèin-obrachail",
+       "exif-exposuremode-1": "Deisearas a làimh",
+       "exif-exposuremode-2": "Bracaid fèin-obrachail",
+       "exif-whitebalance-0": "Meidh na gile fèin-obrachail",
+       "exif-whitebalance-1": "Meidh na gile a làimh",
+       "exif-scenecapturetype-0": "Stannardach",
+       "exif-scenecapturetype-1": "Dreach-tìre",
+       "exif-scenecapturetype-2": "Portraid",
+       "exif-scenecapturetype-3": "Sealladh oidhche",
+       "exif-gaincontrol-0": "Chan eil gin",
+       "exif-gaincontrol-1": "Buannachd ìosal suas",
+       "exif-gaincontrol-2": "Buannachd àrd suas",
+       "exif-gaincontrol-3": "Buannachd ìosal sìos",
+       "exif-gaincontrol-4": "Buannachd àrd sìos",
+       "exif-contrast-0": "Àbhaisteach",
+       "exif-contrast-1": "Lag",
+       "exif-contrast-2": "Cruaidh",
+       "exif-saturation-0": "Àbhaisteach",
+       "exif-saturation-1": "Sàthachd ìosal",
+       "exif-saturation-2": "Sàthachd àrd",
+       "exif-sharpness-0": "Àbhaisteach",
+       "exif-sharpness-1": "Lag",
+       "exif-sharpness-2": "Cruaidh",
+       "exif-subjectdistancerange-0": "Chan eil fios",
+       "exif-subjectdistancerange-1": "Macro",
+       "exif-subjectdistancerange-2": "Sealladh dlùth",
+       "exif-subjectdistancerange-3": "Sealladh aig astar",
+       "exif-gpslatitude-n": "Domhan-leud tuath",
+       "exif-gpslatitude-s": "Domhan-leud deas",
+       "exif-gpslongitude-e": "Domhan-fhad ear",
+       "exif-gpslongitude-w": "Domhan-fhad siar",
+       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|mheatair|mheatair|meatairean|meatair}} os cionn àirde na mara",
+       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|mheatair|mheatair|meatairean|meatair}} fo àirde na mara",
+       "exif-gpsstatus-a": "'Ga thomhas",
+       "exif-gpsstatus-v": "Comas eadar-obrachadh an tomhais",
+       "exif-gpsmeasuremode-2": "Tomhas air 2 dhimeinsean",
+       "exif-gpsmeasuremode-3": "Tomhas air 3 dimeinseanan",
+       "exif-gpsspeed-k": "Cilemeatair san uair",
+       "exif-gpsspeed-m": "Mìle gach uair",
+       "exif-gpsspeed-n": "Mìle-mara san uair",
+       "exif-gpsdestdistance-k": "Cilemeatair",
+       "exif-gpsdestdistance-m": "Mìle",
+       "exif-gpsdestdistance-n": "Mìle-mara",
+       "exif-gpsdop-excellent": "Sgoinneil ($1)",
+       "exif-gpsdop-good": "Math ($1)",
+       "exif-gpsdop-moderate": "Meadhanach ($1)",
+       "exif-gpsdop-fair": "Ceart gu leòr ($1)",
+       "exif-gpsdop-poor": "Dona ($1)",
+       "exif-objectcycle-a": "Sa madainn a-mhàin",
+       "exif-objectcycle-p": "Feasgar a-mhàin",
+       "exif-objectcycle-b": "An dà chuid sa mhadainn 's feasgar",
+       "exif-gpsdirection-t": "Fìor-chomhair",
+       "exif-gpsdirection-m": "Comhair mhagnaiteach",
+       "exif-ycbcrpositioning-1": "Meadhanaichte",
+       "exif-dc-contributor": "Deasaichean",
+       "exif-dc-coverage": "Sgòp na h-aite no ama aig a' mheadhan",
+       "exif-dc-date": "Ceann-là",
+       "exif-dc-publisher": "Foillsichear",
+       "exif-dc-relation": "Meadhanan co-cheangailte",
+       "exif-dc-rights": "Còirichean",
+       "exif-dc-source": "Meadhan tùsail",
+       "exif-dc-type": "Seòrsa a' mheadhain",
+       "exif-rating-rejected": "Air a dhiùltadh",
+       "exif-isospeedratings-overflow": "Nas motha na 65535",
+       "exif-maxaperturevalue-value": "$1 APEX (f/$2)",
+       "exif-iimcategory-ace": "Na h-ealain, cultar 's dibhearsan",
+       "exif-iimcategory-clj": "Eucoir 's lagha",
+       "exif-iimcategory-dis": "Dunaidh 's tubhaistean",
+       "exif-iimcategory-fin": "Eaconamaidh 's gnìomhachas",
+       "exif-iimcategory-edu": "Foghlam",
+       "exif-iimcategory-evn": "An àrainneachd",
+       "exif-iimcategory-hth": "Slàinte",
+       "exif-iimcategory-hum": "Daoine",
+       "exif-iimcategory-lab": "Obair",
+       "exif-iimcategory-lif": "Dòigh-bheatha 's cur-seachad",
+       "exif-iimcategory-pol": "Polataigs",
+       "exif-iimcategory-rel": "Creideamh",
+       "exif-iimcategory-sci": "Saidheans 's teicneolas",
+       "exif-iimcategory-soi": "Cuspairean sòisealta",
+       "exif-iimcategory-spo": "Spòrs",
+       "exif-iimcategory-war": "Cogadh, còmhstri 's aramach",
+       "exif-iimcategory-wea": "Aimsir",
+       "exif-urgency-normal": "Àbhaisteach ($1)",
+       "exif-urgency-low": "Ìosal ($1)",
+       "exif-urgency-high": "Àrd ($1)",
+       "exif-urgency-other": "Prìomhachas gnàthaiche ($1)",
+       "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-submit": "Thoir tiotalan air falbh",
+       "watchlistedit-normal-done": "Chaidh {{PLURAL:$1|$1 tiotal|$1 thiotal|$1 tiotalan|$1 tiotal}} a thoirt far a' chlàir-fhaire agad:",
+       "watchlistedit-raw-title": "Deasaich còd a' chlàir-fhaire",
+       "watchlistedit-raw-legend": "Deasaich còd a' chlàir-fhaire",
+       "watchlistedit-raw-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",
-       "duplicate-defaultsort": "'''Rabhadh:''' Tha an iuchair seòrsachaidh bhunaiteach \"$2\" a' dol thairis air seann iuchair eile, \"$1\".",
+       "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-delete-revision": "Dh'atharraich $1 an fhaicsinneachd aig $5 {{PLURAL:$5|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} air $3: $4",
+       "logentry-delete-event-legacy": "Dh'atharraich $1 an fhaicsinneachd aig tachartasan an loga air $3",
+       "logentry-delete-revision-legacy": "Dh'atharraich $1 an fhaicsinneachd aig mùthaidhean air $3",
+       "logentry-suppress-delete": "Mhùch $1 duilleag $3",
+       "logentry-suppress-event": "Dh'atharraich $1 an fhaicsinneachd aig $5 {{PLURAL:$5|tachartas|thachartas|tachartasan|tachartas}} an loga air $3 gu dìomhair: $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-move-move_redir-noredirect": "Ghluais $1 duilleag $3 gu $4 slighe ath-stiùiridh ach cha do {{GENDER:$2|dh'fhàg e|dh'fhàg i|dh'fhàgadh}} ath-stiùireadh ann",
+       "logentry-patrol-patrol": "Chuir $1 comharra freiceadain ris a' mhùthadh $4 aig an duilleag $3",
+       "logentry-patrol-patrol-auto": "Chuir $1 comharra freiceadain ris a' mhùthadh $4 aig an duilleag $3 gu fèin-obrachail",
+       "logentry-newusers-newusers": "Chaidh cunntas a' chleachdaiche $1 a chruthachadh",
+       "logentry-newusers-create": "Chaidh cunntas a' chleachdaiche $1 a chruthachadh",
+       "logentry-newusers-create2": "Chaidh cunntas a' chleachdaiche $3 a chruthachadh le $1",
+       "logentry-newusers-byemail": "Chaidh cunntas a' chleachdaiche $3 a chruthachadh le $1 's chaidh am facal-faire a chur air a' phost-d",
+       "logentry-newusers-autocreate": "Chaidh cunntas a' chleachdaiche $1 a chruthachadh gu fèin-obrachail",
+       "logentry-rights-rights": "Dh'atharraich $1 {{GENDER:$2|a bhallrachd|a ballrachd}} ann am buidheann airson $3 o $4 gu $5",
+       "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)",
-       "searchsuggest-containing": "anns a bheil..."
+       "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.",
+       "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 0f017d4..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",
        "difference-missing-revision": "Non se {{PLURAL:$2|atopou revisión ningunha|atoparon $2 revisións}} desta diferenza ($1).\n\nA miúdo, isto está provocado por seguir unha ligazón de diferenzas obsoleta cara a unha páxina que foi borrada.\nO [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistro de borrados] contén máis detalles.",
        "searchresults": "Resultados da procura",
        "searchresults-title": "Resultados da procura de \"$1\"",
-       "toomanymatches": "Devolvéronse demasiadas coincidencias; inténteo cunha consulta diferente",
        "titlematches": "O título da páxina coincide",
        "textmatches": "O texto da páxina coincide",
        "notextmatches": "Non se atopou o texto en ningunha páxina",
        "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 5b86822..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",
        "difference-missing-revision": "{{PLURAL:$2|Ei Version|$2 Versione}} vui däre Unterschidsaazeig ($1) {{PLURAL:$2|isch|sin}} nit gfunde wore.\n\nDää Fähler chunnt normalerwyys dur e veraltete Link zue dr Versionsgschicht vun ere Syte, wu in dr Zwischezyt glescht woren isch.\nEinzelheite chasch im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lesch-Logbuech] bschaue.",
        "searchresults": "Suech-Ergäbnis",
        "searchresults-title": "Suechergebniss fir „$1“",
-       "toomanymatches": "D Aazahl vu dr Suechergebniss isch z gross, bitte versuech e anderi Abfrog.",
        "titlematches": "Iberyystimmige mit Sytentitel",
        "textmatches": "Iberyystimmige mit Inhalte",
        "notextmatches": "Kei Iberyystimmige mit Inhalte",
        "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 8951265..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": "ભિન્ન રૂપો",
        "diff-multi-manyusers": "{{PLURAL:$2|એક સભ્યએ કરેલું|$2 સભ્યોએ કરેલા}} ({{PLURAL:$1|વચગાળાનું એક પુનરાવર્તન દર્શાવ્યં|વચગાળાનાં $1 પુનરાવર્તનો દર્શાવ્યાં}} નથી.)",
        "searchresults": "પરિણામોમાં શોધો",
        "searchresults-title": "પરિણામોમાં \"$1\" શોધો",
-       "toomanymatches": "શોધમાં ઘણાં બધાં પરિણામો મળ્યાં, કૃપા કરી નવો શબ્દ મૂકી શોધો.",
        "titlematches": "પાનાનું શીર્ષક મળતું આવે છે",
        "textmatches": "પાનાના શબ્દો મળતાં આવે છે",
        "notextmatches": "આ શબ્દ કોઈ પાનામાં મળ્યો નથી",
        "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 63e467b..a900ad5 100644 (file)
@@ -9,7 +9,8 @@
                        "Mnemonic kek",
                        "Urhixidur",
                        "Xiaomingyan",
-                       "아라"
+                       "아라",
+                       "Mywood"
                ]
        },
        "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": "動作",
        "namespaces": "名字空間",
        "variants": "變換",
        "history_short": "歷史",
        "updatedmarker": "亻厓上擺訪問以來嘅更新",
        "printableversion": "做得印刷嘅版本",
-       "permalink": "永久鏈接",
+       "permalink": "固定連結",
        "print": "印刷",
        "view": "查看",
        "edit": "編寫",
        "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": "最早",
        "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": "在用戶安名空間肚搜尋",
        "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": "高級搜尋",
        "servertime": "Fu̍k-vu hi-khí sṳ̀-kiên",
        "guesstimezone": "從瀏覽器填寫",
        "allowemail": "接受來自其他用戶嘅郵件",
-       "defaultns": "Yi-sat sêu-sok ke miàng-sṳ khûng-kiên:",
        "default": "默認",
        "prefs-files": "文件",
        "youremail": "電子郵件:",
        "username": "Yung-fu miàng-chhṳ̂n:",
-       "uid": "Yung-fu ID:",
        "yourrealname": "真名:",
        "yourlanguage": "語言:",
        "yourvariant": "Sṳ-thí pien-von:",
        "logempty": "在日誌肚無匹配項。",
        "log-title-wildcard": "搜尋以邇隻文字開頭嘅標題",
        "allpages": "全部頁面",
-       "alphaindexline": "$1到$2",
        "nextpage": "下一頁($1)",
        "prevpage": "上一頁($1)",
        "allpagesfrom": "顯示從邇處開始嘅頁面:",
        "tooltip-t-upload": "上傳文件",
        "tooltip-t-specialpages": "全部特殊文章嘅列表",
        "tooltip-t-print": "本頁面做得打印嘅版本",
-       "tooltip-t-permalink": "邇隻頁面修訂版本嘅永久鏈接",
+       "tooltip-t-permalink": "邇隻頁面版本嘅固定連結",
        "tooltip-ca-nstab-main": "查看內容頁",
        "tooltip-ca-nstab-user": "查看用戶頁面",
        "tooltip-ca-nstab-media": "Chhà-khon hìn-thí-chông",
        "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 06b0ee4..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": "תפריט הניווט",
        "mergehistory-empty": "אין גרסאות למיזוג.",
        "mergehistory-success": "{{PLURAL:$3|גרסה אחת|$3 גרסאות}} של [[:$1]] מוזגו בהצלחה לתוך [[:$2]].",
        "mergehistory-fail": "לא ניתן לבצע את מיזוג הגרסאות, אנא בדקו שנית את הגדרות הדף והזמן.",
+       "mergehistory-fail-toobig": "לא ניתן לבצע את מיזוג הגרסאות כיוון שצריך להעביר יותר גרסאות מהמגבלה, שהיא {{PLURAL:$1|גרסה אחת|‏‏֫$1 גרסאות}}.",
        "mergehistory-no-source": "דף המקור $1 אינו קיים.",
        "mergehistory-no-destination": "דף היעד $1 אינו קיים.",
        "mergehistory-invalid-source": "דף המקור חייב להיות בעל כותרת תקינה.",
        "difference-missing-revision": "{{PLURAL:$2|גרסה אחת|$2 גרסאות}} של ההבדל הזה בין שתי גרסאות ($1) {{PLURAL:$2|לא נמצאה|לא נמצאו}}.\n\nזה נגרם בדרך כלל על־ידי לחיצה על קישור ישן להבדל בין גרסאות של דף שנמחק.\nאפשר למצוא פרטים ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
        "searchresults": "תוצאות החיפוש",
        "searchresults-title": "תוצאות החיפוש \"$1\"",
-       "toomanymatches": "יותר מדי תוצאות נמצאו, נא לנסות מילות חיפוש אחרות",
        "titlematches": "כותרות דפים תואמות",
        "textmatches": "דפים עם תוכן תואם",
        "notextmatches": "אין דפים עם תוכן תואם",
        "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": "חיפוש מתקדם",
        "largefileserver": "גודל הקובץ חורג ממגבלת השרת.",
        "emptyfile": "נראה שהקובץ שהעליתם ריק. ייתכן שהסיבה לכך היא שגיאת הקלדה בשם הקובץ. אנא ודאו שזהו הקובץ שברצונכם להעלות.",
        "windows-nonascii-filename": "אתר ויקי זה אינו תומך בשמות קבצים עם תווים מיוחדים או תווים שאינם באנגלית.",
-       "fileexists": "קובץ בשם זה כבר קיים, אנא בדקו את <strong>[[:$1]]</strong> אם אינכם בטוחים שברצונכם להחליף אותו.\n[[$1|thumb]]",
+       "fileexists": "ק×\95×\91×¥ ×\91ש×\9d ×\94×\96×\94 ×\9b×\91ר ×§×\99×\99×\9d, ×\90× ×\90 ×\91×\93ק×\95 ×\90ת <strong>[[:$1]]</strong> ×\90×\9d ×\90×\99× ×\9b×\9d ×\91×\98×\95×\97×\99×\9d ×©×\91רצ×\95× ×\9b×\9d ×\9c×\94×\97×\9c×\99×£ ×\90×\95ת×\95.\n[[$1|thumb]]",
        "filepageexists": "דף תיאור הקובץ עבור קובץ זה כבר נוצר ב<strong>[[:$1]]</strong>, אך לא קיים קובץ בשם זה.\nתיאור הקובץ שתכתבו לא יופיע בדף תיאור הקובץ.\nכדי לגרום לו להופיע שם, יהיה עליכם לערוך אותו ידנית. [[$1|thumb]]",
-       "fileexists-extension": "ק×\95×\91×¥ ×¢×\9d ×©×\9d ×\93×\95×\9e×\94 ×\9b×\91ר ×§×\99×\99×\9d: [[$2|thumb]]\n* ×©×\9d ×\94ק×\95×\91×¥ ×\94×\9e×\95×¢×\9c×\94: <strong>[[:$1]]</strong>\n* ×©×\9d ×\94ק×\95×\91×¥ ×\94ק×\99×\99×\9d: <strong>[[:$2]]</strong>\n×\90× ×\90 ×\91×\97ר×\95 ×©×\9d ×\90×\97ר.",
+       "fileexists-extension": "ק×\95×\91×¥ ×¢×\9d ×©×\9d ×\93×\95×\9e×\94 ×\9b×\91ר ×§×\99×\99×\9d: [[$2|thumb]]\n* ×©×\9d ×\94ק×\95×\91×¥ ×\94×\9e×\95×¢×\9c×\94: <strong>[[:$1]]</strong>\n* ×©×\9d ×\94ק×\95×\91×¥ ×\94ק×\99×\99×\9d: <strong>[[:$2]]</strong>\n×\90×\95×\9c×\99 ×\9b×\93×\90×\99 ×\9cתת ×\9cק×\95×\91×¥ ×©×\9d ×¡×¤×¦×\99פ×\99 ×\99×\95תר?",
        "fileexists-thumbnail-yes": "הקובץ הוא כנראה תמונה מוקטנת (ממוזערת). [[$1|thumb]]\nאנא בדקו את הקובץ <strong>[[:$1]]</strong>.\nאם הקובץ שבדקתם הוא אותה התמונה בגודל מקורי, אין זה הכרחי להעלות גם תמונה ממוזערת.",
        "file-thumbnail-no": "שם הקובץ מתחיל עם <strong>$1</strong>. נראה שזוהי תמונה מוקטנת (ממוזערת).\nאם התמונה בגודל מלא מצויה ברשותכם, אנא העלו אותה ולא את התמונה הממוזערת; אחרת, אנא שנו את שם הקובץ.",
        "fileexists-forbidden": "קובץ בשם זה כבר קיים, ואינכם יכולים להחליף אותו.\nאם אתם עדיין מעוניינים להעלות קובץ זה, אנא חזרו לדף הקודם והעלו את הקובץ תחת שם חדש.\n[[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "אפשרות המחיקה והשחזור של קבצים מבוטלת זמנית עקב פעולת תחזוקה.",
        "filedelete-maintenance-title": "לא ניתן למחוק את הקובץ",
        "mimesearch": "חיפוש MIME",
-       "mimesearch-summary": "×\93×£ ×\96×\94 ×\9e×\90פשר ×\90ת ×¡×\99× ×\95×\9f ×\94ק×\91צ×\99×\9d ×\9cפ×\99 ×¡×\95×\92 ×\94Ö¾MIME ×©×\9c×\94×\9d.\nס×\95×\92 ×\94Ö¾MIME ×\91× ×\95×\99 ×\91צ×\95ר×\94 \"ס×\95×\92 ×ª×\95×\9b×\9f/ס×\95×\92 ×\9eשנ×\99\", ×\9c×\93×\95×\92×\9e×\94 <code>image/jpeg</code>.",
+       "mimesearch-summary": "×\93×£ ×\96×\94 ×\9e×\90פשר ×\9cסנ×\9f ×§×\91צ×\99×\9d ×\9cפ×\99 ×¡×\95×\92 ×\94Ö¾MIME ×©×\9c×\94×\9d.\nק×\9c×\98: contenttype/subtype ×\90×\95 <span dir=\"ltr\">contenttype/*</span>, ×\9c×\9eש×\9c <code>image/jpeg</code>.",
        "mimetype": "סוג MIME:",
        "download": "הורדה",
        "unwatchedpages": "דפים שאינם במעקב",
        "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 f54cf3f..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": "संस्करण",
        "difference-missing-revision": "इस अंतर {{PLURAL:$2|का एक अवतरण|के $2 अवतरण}} ($1) नहीं {{PLURAL:$2|पाया गया|पाए गए}}।\n\nयह आम तौर पर एक हटाए गए पृष्ठ के अवतरणों में अंतर ढूँढने पर होता है। अधिक जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाने के लॉग] में पायी जा सकती है।",
        "searchresults": "खोज परिणाम",
        "searchresults-title": "\"$1\" के लिए खोज परिणाम",
-       "toomanymatches": "अत्यधिक जवाब मिले हैं, कृपया खोजशब्द बदलें",
        "titlematches": "पृष्ठ शीर्षक मिलान",
        "textmatches": "पृष्ठ पाठ मिलान",
        "notextmatches": "किसी भी पृष्ठ में यह सामग्री नहीं मिली",
        "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 2057d05..f2cf581 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",
        "nstab-media": "Mediji",
        "nstab-special": "Posebna stranica",
        "nstab-project": "Stranica o projektu",
-       "nstab-image": "Slika",
+       "nstab-image": "Datoteka",
        "nstab-mediawiki": "Poruka",
        "nstab-template": "Predložak",
        "nstab-help": "Pomoć",
        "edit-gone-missing": "Stranica nije spremljena.\nČini se kako je obrisana.",
        "edit-conflict": "Sukob uređivanja.",
        "edit-no-change": "Vaše uređivanje je zanemareno, jer nikakva promjena sadržaja nije napravljena.",
+       "postedit-confirmation-created": "Stranica je stvorena.",
        "postedit-confirmation-saved": "Vaše je uređivanje sačuvano.",
        "edit-already-exists": "Neuspješno stvaranje nove stranice.\nStranica već postoji.",
        "defaultmessagetext": "Prvotni tekst poruke",
        "difference-missing-revision": "{{PLURAL:$2|Uređivanje|$2 uređivanja}} sljedeće šifre ($1) ne {{PLURAL:$2|postoji|postoje}}.\n\nOvo je obično uzrokovano kada kliknete na zastarjelu poveznicu na stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
        "searchresults": "Rezultati pretrage",
        "searchresults-title": "Rezultati traženja za \"$1\"",
-       "toomanymatches": "Preveliki broj rezultata, molimo probajte drukčiji upit",
        "titlematches": "Pronađene stranice prema naslovu",
        "textmatches": "Pronađene stranice prema tekstu članka",
        "notextmatches": "Nema pronađenih stranica prema tekstu članka",
        "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",
        "powersearch-togglelabel": "Uključi:",
        "powersearch-toggleall": "Sve",
        "powersearch-togglenone": "Ništa",
+       "powersearch-remember": "Zapamti izbor za buduća pretraživanja",
        "search-external": "Vanjski pretraživač",
        "searchdisabled": "<p>Oprostite! Pretraga po cjelokupnoj bazi je zbog bržeg rada projekta {{SITENAME}} trenutačno onemogućena. Možete se poslužiti tražilicom Google.</p>",
        "preferences": "Postavke",
        "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",
        "uploadwarning": "Upozorenje kod postavljanja",
        "uploadwarning-text": "Molimo izmijenite opis datoteke ispod i pokušajte kasnije.",
        "savefile": "Sačuvaj datoteku",
-       "uploadedimage": "postavljeno \"$1\"",
+       "uploadedimage": "je postavio \"$1\"",
        "overwroteimage": "postavljena nova inačica od \"[[$1]]\"",
        "uploaddisabled": "Postavljanje je onemogućeno",
        "copyuploaddisabled": "Postavljanje URL-om onemogućeno.",
        "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 ce8e72b..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",
        "difference-missing-revision": "{{PLURAL:$2|Ein Version|$2 Versione}} der Unnerschiedsoonzeich ($1) {{PLURAL:$2|woard|worre}} net gefund.\n\nDer Fehler weard normalerweis von en veraltete Link zur Versionsgeschicht von en Seit verursacht, wo zwischichzeitlich abgewischt woard.\nEinzelheite sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Abwasch-Logbuch] voarhand.",
        "searchresults": "Suchergebnisse",
        "searchresults-title": "Suchergebnisse für „$1“",
-       "toomanymatches": "Die Oonzoohl von der Suchergebnisse ist zu gross, bittschön versuch en annre Abfroch.",
        "titlematches": "Üwereinstimmunge mit Seitetitle",
        "textmatches": "Üwereinstimmunge mit Inhalte",
        "notextmatches": "Ken Üwereinstimmunge mit Inhalte",
        "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 c4368db..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",
        "difference-missing-revision": "{{PLURAL:$2|Jedna wersija|$2 wersiji|$2 wersije|$2 wersijow}} tutoho rozdźěla ($1) {{PLURAL:$2|njeje so namakała|njejstej so namakałoj|njejsu namakali|njeje so namakało}}.\n\nPřičina je zwjetša zestarjeny diferencny wotkaz k stronje, kotraž je so zhašała.\nPodrobnosće móžeš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokolu wušmórnjenjow] namakać.",
        "searchresults": "Pytanske wuslědki",
        "searchresults-title": "Pytanske wuslědki za \"$1\"",
-       "toomanymatches": "Přewjele pytanskich wuslědkow, prošu spytaj druhe wotprašenje.",
        "titlematches": "Strony z wotpowědowacym titulom",
        "textmatches": "Strony z wotpowědowacym tekstom",
        "notextmatches": "Žane strony z wotpowědowacym tekstom",
        "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",
        "largefileserver": "Dataja je wjetša hač serwer dowoluje.",
        "emptyfile": "Dataja, kotruž sy nahrał, zda so prózdna być. Z přičinu móhł pisanski zmylk w mjenje dataje być. Prošu pruwuj hač chceš ju woprawdźe nahrać.",
        "windows-nonascii-filename": "Tutón wiki datajowe mjena ze specialnymi znamješkami njepodpěruje.",
-       "fileexists": "Dataja z tutym mjenom hižo eksistuje.\nJeli kliknješ na „Składować”, so wona přepisuje.\nProšu pruwuj <strong>[[:$1]]</strong> jeli njejsy wěsty hač chceš ju změnić.\n[[$1|thumb]]",
+       "fileexists": "Dataja z tutym mjenom hižo eksistuje, prošu pruwuj <strong>[[:$1]]</strong>, jeli {{GENDER:|njejsy}} wěsty, hač chceš ju změnić.\n[[$1|thumb]]",
        "filepageexists": "Wopisanska strona za tutu dataju bu hižo pola <strong>[[:$1]]</strong> wutworjena,\nale tuchwilu dataja z tutym mjenom njeeksistuje.\nZjeće, kotrež zapodaš, njebudźe so na wopisanskej stronje jewić.\nZo by so twoje zjeće tam jewiło, dyrbiš ju manuelnje wobdźěłać.\n[[$1|thumb]]",
-       "fileexists-extension": "Dataja z podobnym mjenom hižo eksistuje: [[$2|thumb]]\n* Mjeno dataje, kotruž chceš nahrać: <strong>[[:$1]]</strong>\n* Mjeno eksistowaceje dataje: <strong>[[:$2]]</strong>\nProšu wubjer druhe mjeno.",
+       "fileexists-extension": "Dataja z podobnym mjenom hižo eksistuje: [[$2|thumb]]\n* Mjeno dataje, kotruž chceš nahrać: <strong>[[:$1]]</strong>\n* Mjeno eksistowaceje dataje: <strong>[[:$2]]</strong>\nChceš snano mjeno wužiwać, kotrež so wjace rozeznawa?",
        "fileexists-thumbnail-yes": "Dataja zda so minaturka ''(thumbnail)'' być. [[$1|thumb]]\nProšu přepruwuj dataju <strong>[[:$1]]</strong>.\nJeli je to wobraz w originalnej wulkosći, njetrjebaš minaturku nahrać.",
        "file-thumbnail-no": "Mjeno dataje započina so z <strong>$1</strong>. Zda so, zo to je wobraz z redukowanej wulkosću ''(thumbnail)'' pokazać.\nJeli maš tutón wobraz z połnym rozeznaćom, nahraj tutón, hewak změń prošu datajowe mjeno.",
        "fileexists-forbidden": "Dataja z tutym mjenom hižo eksistuje a njeda so přepisać. Jeli hišće chceš swoju dataju nahrać, dźi  prošu wróćo a wuž nowe mjeno. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Wušmórnjenje a wobnowjenje datajow stej wothladowanja dla nachilu znjemóžnjenej.",
        "filedelete-maintenance-title": "Dataja njeda so zhašeć",
        "mimesearch": "Pytanje za typom MIME",
-       "mimesearch-summary": "Na tutej specialnej stronje hodźa so dataje po typje MIME filtrować. Dyrbiš přeco typ MIME a podtyp zapodać: <code>image/jpeg</code> (hlej stronu z wopisanjom wobraza).",
+       "mimesearch-summary": "Na tutej specialnej stronje hodźa so dataje po typje MIME filtrować.\nZapodaće: contenttype/subtype abo contenttype/*, na př. <code>image/jpeg</code>.",
        "mimetype": "Typ MIME:",
        "download": "Sćahnyć",
        "unwatchedpages": "Njewobkedźbowane strony",
        "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 97bdee8..6f410c1 100644 (file)
@@ -34,7 +34,8 @@
                        "Tgr",
                        "Xbspiro",
                        "아라",
-                       "Csega"
+                       "Csega",
+                       "ViDam"
                ]
        },
        "tog-underline": "Hivatkozások aláhúzása:",
@@ -53,7 +54,7 @@
        "tog-watchdeletion": "Az általam törölt lapok és fájlok felvétele a figyelőlistámra",
        "tog-minordefault": "Alapértelmezetten minden szerkesztésemet jelölje aprónak",
        "tog-previewontop": "Előnézet megjelenítése a szerkesztőablak előtt",
-       "tog-previewonfirst": "Előnézet első szerkesztésnél",
+       "tog-previewonfirst": "Előnézet mutatása az első szerkesztésnél",
        "tog-enotifwatchlistpages": "Kapjak értesítést e-mailben, ha egy általam figyelt lap vagy fájl megváltozik",
        "tog-enotifusertalkpages": "Kapjak értesítést e-mailben, ha megváltozik a vitalapom",
        "tog-enotifminoredits": "Kapjak értesítést e-mailben a lapok és fájlok apró változtatásairól",
        "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",
        "difference-missing-revision": "A(z) \"{{PAGENAME}}\" nevű oldal #$1 $2 változata nem létezik.\n\nEzt általában egy elavult, törölt oldalra mutató laptörténeti hivatkozás használata okozza. Részletek a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} törlési naplóban] találhatóak.",
        "searchresults": "A keresés eredménye",
        "searchresults-title": "Keresési eredmények: „$1”",
-       "toomanymatches": "Túl sok találat van, próbálkozz egy másik lekérdezéssel",
        "titlematches": "Címbeli egyezések",
        "textmatches": "Szövegbeli egyezések",
        "notextmatches": "Nincsenek szövegbeli egyezések",
        "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\ntörlését eredmémyezi. Ilyen esetekben törölnöd kell a legújabb törölt változatok kijelölését, vagy megszüntetni az elrejtésüket. Azon fájlváltozatok,\nmelyek megtekintése a számodra nem engedélyezett, nem kerülnek visszaállításra.",
+       "undeleterevdel": "A 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",
        "expand_templates_remove_nowiki": "<nowiki> tagek mellőzése az eredményben",
        "expand_templates_generate_xml": "XML elemzési fa mutatása",
        "expand_templates_generate_rawhtml": "Nyers HTML megjelenítése",
-       "expand_templates_preview": "Előnézet"
+       "expand_templates_preview": "Előnézet",
+       "pagelanguage": "Oldalnyelv-választó",
+       "pagelang-name": "Oldal",
+       "pagelang-language": "Nyelv",
+       "pagelang-use-default": "Alapértelmezett nyelv használata",
+       "pagelang-select-lang": "Nyelv kiválasztása",
+       "right-pagelang": "Oldal nyelvének megváltoztatása",
+       "action-pagelang": "oldal nyelvének módosítása",
+       "log-name-pagelang": "Nyelvváltoztatások naplója",
+       "log-description-pagelang": "Ebben a naplóban a lap nyelvének változásait követheted nyomon."
 }
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 119fc6c..ca955f2 100644 (file)
@@ -11,7 +11,8 @@
                        "Shirayuki",
                        "Yfdyh000",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Carlosedepaula"
                ]
        },
        "tog-underline": "Sublinear ligamines:",
        "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.",
        "difference-missing-revision": "{{PLURAL:$2|Un version|$2 versiones}} de iste differentia ($1) non ha essite trovate.\n\nIsto es generalmente causate per sequer un ligamine de diff obsolete a un pagina que ha essite delite.\nDetalios se trova in le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de deletiones].",
        "searchresults": "Resultatos del recerca",
        "searchresults-title": "Resultatos del recerca de \"$1\"",
-       "toomanymatches": "Se retornava troppo de resultatos. Per favor prova un altere consulta.",
        "titlematches": "Correspondentias in le titulos de paginas",
        "textmatches": "Resultatos in le texto de paginas",
        "notextmatches": "Nulle resultato in le texto de paginas",
        "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",
        "largefileserver": "Le grandor de iste file excede le limite configurate in le servitor.",
        "emptyfile": "Le file que tu incargava pare esser vacue.\nIsto pote esser debite a un error in le nomine del file.\nPer favor verifica que tu realmente vole incargar iste file.",
        "windows-nonascii-filename": "Iste wiki non supporta nomines de file con characteres special.",
-       "fileexists": "Un file con iste nomine existe ja.\nPer favor verifica <strong>[[:$1]]</strong> si tu non es secur de voler cambiar lo.\n[[$1|thumb]]",
+       "fileexists": "Un file con iste nomine existe jam.\nPer favor verifica <strong>[[:$1]]</strong> si {{GENDER:|tu}} non es secur de voler cambiar lo.\n[[$1|thumb]]",
        "filepageexists": "Le pagina de description correspondente a iste file ha ja essite create a <strong>[[:$1]]</strong>, ma nulle file con iste nomine existe al momento.\nLe summario que tu entra non apparera in le pagina de description.\nSi tu vole que illo appare, tu debe inserer lo manualmente.\n[[$1|thumb]]",
-       "fileexists-extension": "Un file con un nomine similar existe ja: [[$2|thumb]]\n* Nomine del file a incargar: <strong>[[:$1]]</strong>\n* Nomine del file existente: <strong>[[:$2]]</strong>\nPer favor selige un altere nomine.",
+       "fileexists-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",
        "wantedtemplates": "Patronos desirate",
        "mostlinked": "Paginas le plus ligate",
        "mostlinkedcategories": "Categorias le plus ligate",
-       "mostlinkedtemplates": "Patronos le plus utilisate",
+       "mostlinkedtemplates": "Paginas le plus transcludite",
        "mostcategories": "Paginas con le plus categorias",
        "mostimages": "Files le plus utilisate",
        "mostinterwikis": "Paginas con le plus interwikis",
        "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",
        "expand_templates_remove_nowiki": "Supprimer le etiquettas <nowiki> in le resultato",
        "expand_templates_generate_xml": "Monstrar arbore syntactic XML",
        "expand_templates_generate_rawhtml": "Monstrar HTML brute",
-       "expand_templates_preview": "Previsualisation"
+       "expand_templates_preview": "Previsualisation",
+       "pagelanguage": "Selector de lingua de pagina",
+       "pagelang-name": "Pagina",
+       "pagelang-language": "Lingua",
+       "pagelang-use-default": "Usar lingua predefinite",
+       "pagelang-select-lang": "Selige lingua",
+       "right-pagelang": "Cambiar lingua del pagina",
+       "action-pagelang": "Cambiar lingua del pagina",
+       "log-name-pagelang": "Registro de cambios de lingua",
+       "log-description-pagelang": "Isto es un registro de cambios de lingua in paginas.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiava}} le lingua del pagina $3 de $4 a $5."
 }
index cc9919b..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.",
        "difference-missing-revision": "{{PLURAL:$2|Satu revisi|$2 revisi}} dari perbedaan ini ($1) {{PLURAL:$2|tidak|tidak}} ditemukan.\n\nHal ini biasanya disebabkan oleh tautan diff yang kedaluwarsa ke halaman yang sudah dihapus.\nRinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
        "searchresults": "Hasil pencarian",
        "searchresults-title": "Hasil pencarian untuk \"$1\"",
-       "toomanymatches": "Pencarian menghasilkan terlalu banyak hasil, silakan masukkan kueri lain",
        "titlematches": "Judul halaman yang sama",
        "textmatches": "Teks halaman yang cocok",
        "notextmatches": "Tidak ada teks halaman yang cocok",
        "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 2df91a7..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",
        "difference-missing-revision": "{{PLURAL:$2|Maysa a panagbalbaliw|$2 kadagiti panagbalbaliw}} iti daytoy a paggiddiatan ($1) {{PLURAL:$2|ket ti|ket dagiti}} saan a naburikan.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a nabaak a panilpo tipaggiddiatan ti maysa a panid a naikkaten.\nDagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
        "searchresults": "Dagiti nagbanagan ti panagbiruk",
        "searchresults-title": "Dagiti nabirukan a nagbanagan para iti \"$1\"",
-       "toomanymatches": "Adu unay ti napasubli nga agpapada, pangngaasi a padasem ti sabali a panagsapul",
        "titlematches": "Dagiti kapadpada a titulo ti panid",
        "textmatches": "Dagiti agpapada a testo ti panid",
        "notextmatches": "Awan dagiti kapadpada a testo ti panid",
        "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 51a299b..2837738 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",
        "content-failed-to-parse": "Gat ekki þáttað $2 efni samkvæmt $1 líkani: $3",
        "invalid-content-data": "Ógild efnisgögn.",
        "content-not-allowed-here": "„$1“ efni er ekki leyfilegt á síðunni [[$2]]",
-       "editwarning-warning": "Ef farið er frá þessari síðu gætu þær breytingar sem þú hefur gert tapast.\nEf þú ert skráður inn, þá getur þú óvirkjað þessi skilaboð í „Breytingarflipanum\" undir stillingum.",
+       "editwarning-warning": "Ef farið er frá þessari síðu gætu þær breytingar sem þú hefur gert tapast.\nEf þú ert skráður inn, þá getur þú óvirkjað þessi skilaboð í „{{int:prefs-editing}}\" undir stillingum.",
        "content-model-wikitext": "wiki-texti",
        "content-model-text": "hreinn texti",
        "content-model-javascript": "JavaScript",
        "currentrev": "Núverandi útgáfa",
        "currentrev-asof": "Núverandi breyting frá og með $1",
        "revisionasof": "Útgáfa síðunnar $1",
-       "revision-info": "Útgáfa frá $1 eftir $2",
+       "revision-info": "Útgáfa frá $1 eftir $2\nÚtgáfa frá $1 eftir {{GENDER:$6|$2}}$7",
        "previousrevision": "←Fyrri útgáfa",
        "nextrevision": "Næsta útgáfa→",
        "currentrevisionlink": "Núverandi útgáfa",
        "difference-missing-revision": "$2 {{PLURAL:$2|útgáfa|útgáfur}} samanburðarins ($1) {{PLURAL:$2|fannst|fundust}} ekki.\n\nÞetta gerist oftast þegar úreldur samanburðartengill tengir á síðu sem hefur verið eytt.\nFrekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingarskránni].",
        "searchresults": "Leitarniðurstöður",
        "searchresults-title": "Leitarniðurstöður fyrir „$1“",
-       "toomanymatches": "Of mörgum niðurstöðum var skilað, gjörðu svo vel og reyndu aðra fyrirspurn",
        "titlematches": "Titlar greina sem pössuðu við fyrirspurnina",
        "textmatches": "Leitarorð fannst/fundust í innihaldi eftirfarandi greina",
        "notextmatches": "Engar samsvaranir á texta í síðum",
        "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",
        "gender-unknown": "Ég vil heldur ekki gefa upp",
        "gender-male": "Hann breytir wikisíðum",
        "gender-female": "Hún breytir wikisíðum",
-       "prefs-help-gender": "Valfrjálst: notað til að aðgreina kynin í meldingum hugbúnaðarins. Þessar upplýsingar verða aðgengilegar öllum.",
+       "prefs-help-gender": "Þessi stilling er valfrjáls. Notað til að aðgreina kynin í meldingum hugbúnaðarins. Þessar upplýsingar verða aðgengilegar öllum.",
        "email": "Tölvupóstur",
        "prefs-help-realname": "Alvöru nafn er valfrjálst.\nEf þú kýst að gefa það upp, verður það notað til að gefa þér heiður af verkum þínum.",
        "prefs-help-email": "Tölvupóstfang er valfrjálst, en gerir þér kleift að fá nýtt lykilorð ef þú gleymir lykilorðinu þínu.",
        "right-reupload-shared": "Hunsa skrár á sameiginlegu myndasafni staðbundið",
        "right-upload_by_url": "Hlaða inn skrám frá vefslóð",
        "right-purge": "Hreinsa skyndiminni síðu án staðfestingar",
-       "right-autoconfirmed": "Breyta hálfvernduðum síðum",
+       "right-autoconfirmed": "Sneiða hjá takmörkunum vistfanga",
        "right-bot": "Eru meðhöndlaðir eins og sjálfvirk aðgerð",
        "right-nominornewtalk": "Ekki láta minniháttar breytingar á spjallsíðum kveða upp áminningu um ný skilaboð",
        "right-apihighlimits": "Setja hærri mörk á fjölda API fyrirspurna",
        "windows-nonascii-filename": "Þessi wiki styður ekki skráarnöfn með sérstökum stöfum",
        "fileexists": "Skrá með þessu nafni er þegar til, skoðaðu <strong>[[:$1]]</strong> ef þú ert óviss um hvort þú viljir breyta henni, ekki verður skrifað yfir gömlu skránna hlaðiru inn nýrri með sama nafni heldur verður núverandi útgáfa geymd í útgáfusögu.\n[[$1|thumb]]",
        "filepageexists": "Myndasíðan fyrir þessa síðu hefur þegar verið búin til <strong>[[:$1]]</strong>, en engin skrá er til með þessu nafni.\nLýsingin sem þú skrifaðir verður ekki birt á myndasíðunni.\nTil þess að lýsingin geti birst á síðunni, þá þarft þú að breyta síðunni sérstaklega.\n[[$1|thumb]]",
-       "fileexists-extension": "Skrá með svipuðu nafni er til: [[$2|thumb]]\n*Nafn skráarinnar sem hlaða á inn: <strong>[[:$1]]</strong>\n*Nafn skráarinnar sem er þegar til: <strong>[[:$2]]</strong>\nVinsamlegast veldu annað skráarnafn.",
+       "fileexists-extension": "Skrá með svipuðu nafni er til: [[$2|thumb]]\n*Nafn skráarinnar sem hlaða á inn: <strong>[[:$1]]</strong>\n*Nafn skráarinnar sem er þegar til: <strong>[[:$2]]</strong>\nVilt þú kanski nota annað nafn sem er meira lýsandi fyrir skránna ?",
        "fileexists-thumbnail-yes": "Skráin virðist vera smámynd [[$1|thumb]]\nVinsamlegast athugaðu skránna <strong>[[:$1]]</strong>.\nEf skráin er sama myndin í upprunalegri stærð er ekki þörf á annari smámynd.",
        "file-thumbnail-no": "Skráin er líklega smámynd, því skráarnafnið byrjar á <strong>$1</strong>.\nEf skráin er í fullri upplausn haltu þá áfram að hlaða henni inn, en ef ekki breyttu þá skráarnafninu.",
        "fileexists-forbidden": "Skrá með þessu nafni er þegar til og ekki er hægt að skrifa yfir skránna.\nEf þú villt hlaða inn skránni þinni engu að síður, farðu þá til baka og veldu annað skráarnafn.\n[[File:$1|thumb|center|$1]]",
        "pageswithprop-submit": "Áfram",
        "doubleredirects": "Tvöfaldar tilvísanir",
        "doubleredirectstext": "Þessi síða er listi yfir skrár sem eru tilvísanir á aðrar tilvísanir.\nHver lína inniheldur tengla á fyrstu og aðra tilvísun auk þeirrar síðu sem seinni tilvísunin beinist að, sem er oftast sú síða sem allar tilvísanirnar eiga að benda á.\n<del>Yfirstrikaðar</del> færslur hafa verið leiðréttar.",
-       "double-redirect-fixed-move": "[[$1]] hefur verið færð.\nHún er tilvísun á [[$2]].",
-       "double-redirect-fixed-maintenance": "Laga tvöfalda tilvísun frá [[$1]] til [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] hefur verið færð.\nHún var uppfærð sjálfkrafa og tilvísar núna á [[$2]].",
+       "double-redirect-fixed-maintenance": "Laga sjálfvirkt tvöfalda tilvísun frá [[$1]] til [[$2]] í viðhalds aðgerð.",
        "double-redirect-fixer": "Laga tilvísun",
        "brokenredirects": "Brotnar tilvísanir",
        "brokenredirectstext": "Eftirfarandi tilvísanir vísa á síður sem ekki eru til:",
        "wantedtemplates": "Eftirsótt snið",
        "mostlinked": "Mest ítengdu síður",
        "mostlinkedcategories": "Mest ítengdu flokkar",
-       "mostlinkedtemplates": "Mest ítengdu snið",
+       "mostlinkedtemplates": "Mest ítengdu síður",
        "mostcategories": "Mest flokkaðar greinar",
        "mostimages": "Mest ítengdu skrárnar",
        "mostinterwikis": "Síður með flestm tungumálatenglum",
        "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-length": "Lengd síðunnar (í bætum)",
        "pageinfo-article-id": "Einkennisnúmer síðunnar",
        "pageinfo-language": "Tungumál síðunnar",
-       "pageinfo-robot-policy": "Leitarvélastaða",
+       "pageinfo-robot-policy": "Attriðaskráning af vélmennum",
        "pageinfo-robot-index": "Heimilað",
        "pageinfo-robot-noindex": "Ekki heimilað",
        "pageinfo-views": "Fjöldi innlita",
        "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ð",
        "duplicate-defaultsort": "'''Viðvörun:''' Sjálfgildur flýtihnappur \"$2\" tekur yfir fyrri flýtihnapp \"$1\".",
        "version": "Útgáfa",
        "version-extensions": "Uppsettar viðbætur",
+       "version-skins": "Uppsett þemu",
        "version-specialpages": "Kerfissíður",
        "version-variables": "Breytur",
        "version-antispam": "Amapósts sía",
-       "version-skins": "Þemu",
        "version-other": "Aðrar",
        "version-mediahandlers": "Rekill margmiðlunarskráa",
        "version-parser-extensiontags": "Þáttuð smáforrita tög",
index a94af0e..4a8673a 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.",
        "difference-missing-revision": "{{PLURAL:$2|Una versione|$2 versioni}} di questa differenza ($1) {{PLURAL:$2|non è stata trovata|non sono state trovate}}.\n\nQuesto si verifica solitamente seguendo un collegamento obsoleto di un diff a una pagina cancellata.\nI dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni].",
        "searchresults": "Risultati della ricerca",
        "searchresults-title": "Risultati della ricerca di \"$1\"",
-       "toomanymatches": "Troppe corrispondenze. Modificare la richiesta.",
        "titlematches": "Corrispondenze nel titolo delle pagine",
        "textmatches": "Corrispondenze nel testo delle pagine",
        "notextmatches": "Nessuna corrispondenza nel testo delle pagine",
        "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",
        "expand_templates_remove_nowiki": "Elimina il tag <nowiki> nel risultato",
        "expand_templates_generate_xml": "Mostra albero sintattico XML",
        "expand_templates_generate_rawhtml": "Mostra HTML",
-       "expand_templates_preview": "Anteprima"
+       "expand_templates_preview": "Anteprima",
+       "pagelanguage": "Seleziona lingua della pagina",
+       "pagelang-name": "Pagina",
+       "pagelang-language": "Lingua",
+       "pagelang-use-default": "Utilizza la lingua predefinita",
+       "pagelang-select-lang": "Seleziona lingua",
+       "right-pagelang": "Modifica la lingua della pagina",
+       "action-pagelang": "modificare la lingua della pagina",
+       "log-name-pagelang": "Modifiche lingua",
+       "log-description-pagelang": "Questo è un registro delle modifiche alla lingua delle pagine.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha modificato}} la lingua della pagina $3 da $4 a $5."
 }
index cec5444..4457755 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": "統合元のページは有効な名前でなければなりません。",
        "difference-missing-revision": "指定された{{PLURAL:$2|$2版}}の差分 ($1) が見つかりませんでした。\n\n通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。 \n詳細は[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]を参照してください。",
        "searchresults": "検索結果",
        "searchresults-title": "「$1」の検索結果",
-       "toomanymatches": "一致したページが多すぎます。他の検索語を指定してください。",
        "titlematches": "ページ名と一致",
        "textmatches": "ページ本文と一致",
        "notextmatches": "どのページ本文とも一致しませんでした",
        "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",
        "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": "このファイルは元の画像から縮小されたもの <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]]",
        "filedelete-maintenance": "メンテナンス中のため、ファイルの削除と復元は一時的に無効化されています。",
        "filedelete-maintenance-title": "ファイルを削除できません",
        "mimesearch": "MIMEタイプ検索",
-       "mimesearch-summary": "このページでは、ファイルをMIMEタイプで絞り込みます。\ncontenttype/subtypeの形式で入力してください (例: <code>image/jpeg</code>)。",
+       "mimesearch-summary": "このページでは、ファイルをMIMEタイプで絞り込みます。\ncontenttype/subtype または contenttype/* の形式で入力してください (例: <code>image/jpeg</code>)。",
        "mimetype": "MIMEタイプ:",
        "download": "ダウンロード",
        "unwatchedpages": "ウォッチされていないページ",
        "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": "迷子のリダイレクト",
        "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|削除しました}}",
        "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 がページ $3 の言語を $4 から $5 に{{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 f579940..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",
        "difference-missing-revision": "{{PLURAL:$2|Sak pambenahan|$2 pambenahan}} saka prabédan iki ($1) {{PLURAL:$2|ora ditemokaké|ora ditemokaké}}.\n\nIki biasané kasebab pranala prabedan sing wis ora kanggo saka kaca isi wis dibusak.\nRinciané bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log busak].",
        "searchresults": "Kasil panggolèkan",
        "searchresults-title": "Kasil panggolèkan saka \"$1\"",
-       "toomanymatches": "Olèhé panjenengan golèk ngasilaké kakèhan pituwas, mangga nglebokaké ''query'' liyané",
        "titlematches": "Irah-irahan artikel sing cocog",
        "textmatches": "Tèks artikel sing cocog",
        "notextmatches": "Ora ana tèks kaca sing cocog",
        "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 f279420..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": "სანავიგაციო მენიუ",
        "difference-missing-revision": "{{PLURAL:$2|$2 ვერსია}} ამ შედარებისათვის ($1) {{PLURAL:$2|ვერ მოიძებნა}}.\n\nეს ჩვეულებრივ ხდება მაშინ, თუ ვერსიების შედარების მოძველებული ბმულით გადადიხართ გვერდზე, რომელიც წაიშალა.\nდეტალური ინფორმაცია შესაძლებელია იყოს [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} წაშლების ჟურნალში].",
        "searchresults": "ძიების შედეგები",
        "searchresults-title": "ძიების შედეგები „$1“",
-       "toomanymatches": "ნაპოვნია ძალიან ბევრი შესაბამისობა, ეცადეთ სხვა მოთხოვნა",
        "titlematches": "სტატიის სათაური შეესაბამება",
        "textmatches": "გვერდის ტექსტი შესაბამისია",
        "notextmatches": "არ შეესაბამება არცერთი გვერდის ტექსტი",
        "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 5d33b0c..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",
        "difference-missing-revision": "{{PLURAL:$1|Yiwet tacaggart|$1 ticaggartin}} n tameẓla agi ($1) {{PLURAL:$2|ur tella ara (ulac)|ur llant ara (ulac)}}.\n\nAcku azday n tameẓla, ɣef wayen tsennedeḍ, d-aqbur. Asebter yemḥa.\nTzemreḍ ad affeḍ tilɣa deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n isebtar yekksen].",
        "searchresults": "Igmad n unadi",
        "searchresults-title": "Igmad n unadi i \"$1\"",
-       "toomanymatches": "Teceggeɛeḍ amḍan ameqqṛan n igemmaḍ, ilaq ad ceggeɛeḍ tuttra nniḍen.",
        "titlematches": "Ayen yecban azwel n umegrad",
        "textmatches": "Ayen yecban azwel n usebter",
        "notextmatches": "ulac ayen yecban azwel n usebter",
        "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 6534651..f962fa6 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": "Бағыттау мәзірі",
        "watchthis": "Бұл бетті бақылау",
        "savearticle": "Бетті сақтау",
        "preview": "Қарап шығу",
-       "showpreview": "Алдын ала қарау",
+       "showpreview": "Алдын-ала қарау",
        "showdiff": "Өзгерістерді көрсет",
        "anoneditwarning": "<strong> Ескерту:</strong>  Сіз жүйеге кірмегенсіз.\nIP мекенжайыңыз бұл беттің өңделу тарихында жазылып алынады.",
        "anonpreviewwarning": "<em>Сіз жүйеге кірмегенсіз. IP мекенжайыңыз бұл беттің өңделу тарихында жазылып алынады.</em>",
        "rev-suppressed-unhide-diff": "Бір түзетуі (нұсқасы) <strong>жасырылған</strong>.\nЕгжей-тегжейін [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналынан] таба аласыз.\nЕгер жалғастырсаңыз [$1 бұл айырмашылықты] көре аласыз.",
        "rev-deleted-diff-view": "Бұл нұсқалар айырмасының бір нұсқасы <strong>жойылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Жою журналынан] егжей-тегжейін таба аласыз.",
        "rev-suppressed-diff-view": "Бұл нұсқалар айырмасының бір нұсқасы <strong>жасырылған</strong>.\n[{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Жасыру журналынан] егжей-тегжейін таба аласыз.",
-       "rev-delundel": "көÑ\80Ñ\96нÑ\96Ñ\81Ñ\96н Ó©Ð·Ð³ÐµÑ\80Ñ\82Ñ\83",
+       "rev-delundel": "көÑ\80Ñ\81еÑ\82/жаÑ\81Ñ\8bÑ\80",
        "rev-showdeleted": "көрсету",
        "revisiondelete": "Нұсқаларды жою/жоюды болдырмау",
        "revdelete-nooldid-title": "Нысана түзету жарамсыз",
        "revdelete-success": "'''Түзету көрінісі сәтті жаңартылды.'''",
        "revdelete-failure": "'''Түзету көрінісі жаңартылмады:'''\n$1",
        "logdelete-success": "'''Журнал көрінісі сәтті қойылды.'''",
-       "revdel-restore": "Ð\9aөрінісін өзгерту",
+       "revdel-restore": "көрінісін өзгерту",
        "pagehist": "Бет тарихы",
        "deletedhist": "Жойылған тарихы",
        "revdelete-otherreason": "Басқа/қосымша себеп:",
        "difference-missing-revision": "Бұл ($1) {{PLURAL:$2|нұсқа|$2 нұсқалар}} айырмашылығы табылмады.\n\n\nБұл әлте жойылған беттің нұсқалар айырмашылығының сілтемесі.\nЕгжей-тегжейін [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналынан] таба аласыз.",
        "searchresults": "Іздеу нәтижелері",
        "searchresults-title": "\"$1\" сұранымына табылған нәтижелер",
-       "toomanymatches": "Тым көп сәйкес қайтарылды, өзге сұранымды байқап көріңіз",
        "titlematches": "Бет атауы сәйкес келеді",
        "textmatches": "Бет мәтіні сәйкес келеді",
        "notextmatches": "Еш бет мәтіні сәйкес емес",
        "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": "Кеңейтілген іздеу",
        "powersearch-togglelabel": "Белгілеу:",
        "powersearch-toggleall": "Барлығы",
        "powersearch-togglenone": "Ешқандай",
+       "powersearch-remember": "Келесі іздеулер үшін таңдалғанды есте сақтау",
        "search-external": "Сыртқы іздеу",
        "searchdisabled": "{{SITENAME}} іздеу қызметі өшірілген.\nӘзірше Google арқылы іздеуге болады.\nАңғартпа: {{SITENAME}} торабының мағлұмат тізбелері ескірген болуы мүмкін.",
        "search-error": "Іздеген кезде қате кездесті: $1",
        "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": "Мына айдан (және ертеректен):",
        "nolinkshere": "'''[[:$1]]''' дегенге еш бет сілтемейді.",
        "nolinkshere-ns": "Таңдалған есім кеңістігінде '''[[:$1]]''' дегенге ешқандай бет сілтемейді.",
        "isredirect": "бағыттау беті",
-       "istemplate": "кірікбет",
+       "istemplate": "кіріcтірілген",
        "isimage": "файл сілтемесі",
        "whatlinkshere-prev": "{{PLURAL:$1|алдыңғы|алдыңғы $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|келесі|келесі $1}}",
        "whatlinkshere-links": "← сілтемелер",
-       "whatlinkshere-hideredirs": "Ð\91аÒ\93Ñ\8bÑ\82Ñ\82аÑ\83Ñ\88Ñ\8bлаÑ\80дÑ\8b $1",
+       "whatlinkshere-hideredirs": "баÒ\93Ñ\8bÑ\82Ñ\82аÑ\83 Ð±ÐµÑ\82Ñ\82еÑ\80Ñ\96н $1",
        "whatlinkshere-hidetrans": "кіріcтірілген беттерді $1",
        "whatlinkshere-hidelinks": "сілтемелерді $1",
        "whatlinkshere-hideimages": "файл сілтемелерін $1",
        "ipblocklist-empty": "Бұғаттау тізімі бос.",
        "ipblocklist-no-results": "Сұратылған IP мекенжай немесе қатысушы аты бұғатталмаған.",
        "blocklink": "бұғаттау",
-       "unblocklink": "бұÒ\93аÑ\82Ñ\82амау",
+       "unblocklink": "бұÒ\93аÑ\82Ñ\8bнан Ñ\88Ñ\8bÒ\93аÑ\80у",
        "change-blocklink": "бұғаттауын өзгерту",
        "contribslink": "үлесі",
        "emaillink": "хат жіберу",
        "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-ca-unprotect": "Бұл беттің қорғалуын өзгерту",
        "tooltip-ca-delete": "Бұл бетті жою",
        "tooltip-ca-undelete": "Бұл беттің жоюдың алдындағы болған өңдемелерін қалпына келтіру",
-       "tooltip-ca-move": "Бұл бетті жылжыту",
+       "tooltip-ca-move": "Бұл беттің атауын өзгерту",
        "tooltip-ca-watch": "Бұл бетті бақылау тізіміңізге үстеу",
        "tooltip-ca-unwatch": "Бұл бетті бақылау тізіміңізден аластау",
        "tooltip-search": "{{SITENAME}} жобасында іздеу",
        "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 3585ccd..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": "សណ្ដាន",
        "difference-missing-revision": " {{PLURAL:$2|រកមិនឃើញ|រកមិនឃើញ}}{{PLURAL:$2|កំណែមួយ|កំណែចំនួន $2}} របស់ភាពខុសគ្នានេះ ($1) ទេ។\n\nជាធម្មតានេះបណ្ដាលមកពីការតាមទៅកាន់តំនភ្ជាប់ភាពខុសគ្នារបស់ទំព័រដែលត្រូវបានលុបចោល។\nព័ត៌មានលំអិតអាចរកបាននៅក្នុង [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} កំណត់ហេតុនៃការលុបចោល]។",
        "searchresults": "លទ្ធផលស្វែងរក",
        "searchresults-title": "លទ្ធផល​ស្វែងរក​សម្រាប់ \"$1\"",
-       "toomanymatches": "មានតំណភ្ជាប់ច្រើនណាស់ត្រូវបានបង្ហាញ ចូរព្យាយាមប្រើសំណួរផ្សេងមួយទៀត",
        "titlematches": "ភាពត្រូវគ្នានៃចំណងជើងទំព័រ",
        "textmatches": "ទំព័រអត្ថបទផ្គូរផ្គងគ្នា",
        "notextmatches": "គ្មានអត្ថបទទំព័រណាមួយដែលមានខ្លឹមសារផ្គូផ្គងនឹងឃ្លាឬពាក្យនេះទេ",
        "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 2aa278a..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": "원본 문서는 올바른 제목이어야 합니다.",
        "difference-missing-revision": "문서 비교에서 {{PLURAL:$2|하나|$2개}}의 판($1)을 찾을 수 {{PLURAL:$2|없습니다}}.\n\n이 문제는 주로 삭제된 문서를 가리키는 오래된 문서 비교 링크로 인해 발생합니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 확인할 수 있습니다.",
        "searchresults": "검색 결과",
        "searchresults-title": "\"$1\"에 대한 검색 결과",
-       "toomanymatches": "일치하는 결과가 너무 많습니다. 다른 검색어를 입력해주세요.",
        "titlematches": "문서 제목 일치",
        "textmatches": "문서 내용 일치",
        "notextmatches": "해당하는 문서 없음",
        "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": "이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호를 재설정하기 위해 필요합니다.",
        "right-purge": "확인 없이 문서의 캐시를 새로 고침",
        "right-autoconfirmed": "IP 기반의 속도 제한에 영향을 받지 않음",
        "right-bot": "봇의 편집으로 취급",
-       "right-nominornewtalk": "토론 문서를 새로 만들때 사소한 편집 사용 불가능",
+       "right-nominornewtalk": "토론 문서에 사소한 편집으로 새 메시지를 보낼 수 없음",
        "right-apihighlimits": "API 상한 상승",
        "right-writeapi": "API 작성",
        "right-delete": "문서 삭제",
        "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 138054b..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Хапарлашдырыу ючюн тюбюрек кетериуле бла ат тюрлендириулени журналы берилгенди.",
        "difference-missing-revision": "Бу тенглешдириу ($1) ючюн {{PLURAL:$2|бир версия|$2 версия}} {{PLURAL:$2|табылмады}}.\n\n\nБу, эскирген джибериу бла кетерилген бетни версияларын тенглешдириуге кёчген сагъатда кёбюсюне болады.\nТолуракъ информация [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} кетериулени журналында] болургъа боллукъду.",
        "searchresults": "Излеуню эсеби",
        "searchresults-title": "«$1» ючюн излеуню эсеблери",
-       "toomanymatches": "Асыры кёб бирчалыкъ барды, джангыдан соруу джиберирге кюрешигиз",
        "titlematches": "Бетлени атында бирчалыкъ барды",
        "textmatches": "Бетлени текстлеринде бирчалыкъла барды",
        "notextmatches": "Бетлени текстлеринде бирчалыкъ джокъду",
        "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 695500f..583b573 100644 (file)
        "pagecategories": "{{PLURAL:$1|Saachjrupp|Saachjruppe}}",
        "category_header": "Atikkele en dä Saachjrupp „$1“",
        "subcategories": "Ungerjruppe",
-       "category-media-header": "Dateie en de Saachjrupp \"$1\"",
+       "category-media-header": "Dateije en dä Saachjropp „$1“",
        "category-empty": "''En dä Saachjrupp heh sin kein Sigge un kein Dateie.''",
        "hidden-categories": "Verstoche Saachjrupp{{PLURAL:$1||e|e}}",
        "hidden-category-category": "Verstoche Saachjruppe",
        "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",
        "difference-missing-revision": "{{PLURAL:$2|Ein Version|$2 Versione}} vun heh däm Verjlisch zwesche Versione ($1) {{PLURAL:$2|hammer}} nit jefonge.\n\nEsu jät kütt för jewöhnlesch, wam_mer enem övverhollte Lengk ob der Ongerscheid zwesche de Versione vun en Sigg follesch, di zweschedren fottjeschmeße woode es.\nMieh doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbooch vum Sigge Fottschmiiße].",
        "searchresults": "Wat beim Söke eruskom",
        "searchresults-title": "Noh „$1“ jesoht.",
-       "toomanymatches": "Dat wore zo vill Treffer, beß esu joot, un donn en annder Ußwahl probeere!",
        "titlematches": "Zopass Üvverschrefte",
        "textmatches": "Sigge met däm Täx",
        "notextmatches": "Kein Sigg met däm Tex",
        "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",
        "duplicate-defaultsort": "'''Opjepaß:'''\nDä Shtanndat-Zoot-Schlößel „$1“ övverschriif dä älldere Zoot-Schlößel „$2“.",
        "version": "Väsjohn vun de Wiki Soffwär zeije",
        "version-extensions": "Installeete Erjänzunge un Zohsätz",
+       "version-skins": "Ovverflääsche",
        "version-specialpages": "{{int:nstab-special}}e",
        "version-parserhooks": "De Parser-Hooke",
        "version-variables": "Variable",
        "version-antispam": "SPAM verhendere",
-       "version-skins": "Ovverflääsche",
        "version-api": "<i lang=\"en\">API</i>",
        "version-other": "Söns",
        "version-mediahandlers": "Medije-Handler",
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 cca61f8..db9af3d 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ü",
        "difference-missing-revision": "{{PLURAL:$2|Eng Versioun|$2 Versioune}} vun dëser Differenz ($1) {{PLURAL:$2|gouf|goufen}} net fonnt.\n\nDat geschitt normalerweis wann Dir op e vereelste Link vun enger Versioun vun enger Säit klickt déi geläscht ginn ass.\nDetailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbuch vum Läschen].",
        "searchresults": "Resultat vum Sichen",
        "searchresults-title": "Resultater vum Sichen no \"$1\"",
-       "toomanymatches": "Zevill Resultater goufe fonnt, versicht w.e.g. eng aner Ufro",
        "titlematches": "Iwwereneestëmmungen am Säitentitel",
        "textmatches": "Iwwereneestëmmungen am Säitentext",
        "notextmatches": "Keng Iwwereneestëmmungen",
        "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",
        "largefileserver": "Dëse Fichier ass méi grouss wéi déi um Server agestallte Maximalgréisst.",
        "emptyfile": "De Fichier deen Dir eropgelueden hutt, schéngt eidel ze sinn. Dëst kann duerch en Tippfeeler am Numm vum Fichier kommen. Préift w.e.g. no, op Dir dëse Fichier wierklech eropluede wëllt.",
        "windows-nonascii-filename": "Dës Wiki ënnerstëtzt d'Spezialzeechen an de Fichiersnimm net.",
-       "fileexists": "Et gëtt schonn e Fichier mat dësem Numm, kuckt w.e.g.\n<strong>[[:$1]]</strong> wann Dir net sécher sidd, ob Dir den Numm ännere wëllt.\n[[$1|thumb]]",
+       "fileexists": "Et gëtt schonn e Fichier mat dësem Numm, kuckt w.e.g.\n<strong>[[:$1]]</strong> no wann {{GENDER:|Dir}} net sécher sidd, ob Dir en ännere wëllt.\n[[$1|thumb]]",
        "filepageexists": "D'Beschreiwungssäit fir dëse Fichier gouf schonn als <strong>[[:$1]]</strong> ugeluecht, et gëtt awer kee Fichier mat deem Numm.\n\nDe Resumé deen Dir agitt, gëtt net op d'Beschreiwungssäit iwwerholl.\nFir datt Äre Resumé do opdaucht musst Dir e manuell änneren.\n[[$1|thumb]]",
-       "fileexists-extension": "E Fichier mat engem ähnlechen Numm gëtt et schonn: [[$2|thumb]]\n* Numm vum Fichier deen Dir versicht eropzelueden: <strong>[[:$1]]</strong>\n* Numm vum Fichier deen et scho gëtt: <strong>[[:$2]]</strong>\nWielt w.e.g. en aneren Numm.",
+       "fileexists-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",
+       "pagelanguage": "Eraussiche vun der Sprooch vun der Säit",
+       "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",
+       "log-description-pagelang": "Dëst ass a Log mat den Ännerunge vun de Sprooche vun de Säiten."
 }
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 a4ca693..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ù",
        "diff-empty": "(Nesöna diferènsa)",
        "searchresults": "Risültaa de la recerca.",
        "searchresults-title": "Resültaa de la ricerca de \"$1\"",
-       "toomanymatches": "Gh'è tropi curispundens. Mudifichè la richiesta.",
        "titlematches": "Corespondènse endel tìtol de le pàgine",
        "textmatches": "Truvaa int 'l test di paginn",
        "notextmatches": "La vus che t'hee ciamaa la gh'ha minga una curispundenza in del test di paginn.",
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 0ce7d1c..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}}",
        "diff-multi-manyusers": "({{PLURAL:$1|Viena starpversija|$1 starpversijas}}, ko saglabājuši vairāk nekā $2 {{PLURAL:$2|lietotājs|lietotāji}}, nav parādīta{{PLURAL:$1||s}})",
        "searchresults": "Meklēšanas rezultāti",
        "searchresults-title": "Meklēšanas rezultāti \"$1\"",
-       "toomanymatches": "Tika atgriezti poārāk daudzi rezultāti, lūdzu pamēģini citādāku pieprasījumu",
        "titlematches": "Rezultāti virsrakstos",
        "textmatches": "Rezultāti lapu tekstos",
        "notextmatches": "Neviena rezultāta, meklējot lapas tekstā",
        "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 4e9e21b..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",
        "difference-missing-revision": "Tsy hita ny versiona $2{{PLURAL:$2||}} ny fahasamihafanna ($1) an'ity pejy ity.\n\nVokatry ny fanarahana rohy fampitahana lany daty mankany amy pejy efa voafafa izan . Ho hita eo amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogim-pamafàna] ny antsipirihany.",
        "searchresults": "Valim-pikarohana",
        "searchresults-title": "Valim-pikarohana ho an'ny « $1 »",
-       "toomanymatches": "Betsaka loatra ny isan'ny mitovy naverina, mametraha fangatahana hafa.",
        "titlematches": "Mifanitsy amin'ny lohatenin'ny lahatsoratra",
        "textmatches": "Mifanitsy amin'ny votoatin'ny pejy",
        "notextmatches": "Tsy nahitana votoatim-pejy mifanaraka",
        "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 c297f41..8f27297 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": "Изворната страница мора да има важечки наслов.",
        "difference-missing-revision": "Не пронајдов {{PLURAL:$2|една преработка|$2 преработки}} од оваа разлика ($1).\n\nОва обично се должи на застарена врска за разлики што води кон избришана страница.\nПовеќе подробности ќе најдете во [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].",
        "searchresults": "Резултати од пребарувањето",
        "searchresults-title": "Резултати од пребарувањето на „$1“",
-       "toomanymatches": "Премногу резултати од пребарувањето, ве молиме обидете се со поинакво барање",
        "titlematches": "Совпаднати наслови",
        "textmatches": "Совпаднат текст во страниците",
        "notextmatches": "Ниеден текст во статиите не одговара",
        "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": "Напредно пребарување",
        "largefileserver": "Големината на оваа податотека е поголема од максимално дозволената големина од серверот.",
        "emptyfile": "Податотеката што ја подигнавте е празна.\nОва може да се должи на грешка во нејзиното име.\nПроверете дали навистина сакате да ја подигнете ваквата податотека.",
        "windows-nonascii-filename": "Опслужувачот не поддржува податотечни имиња со специјални знаци.",
-       "fileexists": "Податотека со ова име веќе постои, проверете <strong>[[:$1]]</strong> ако не сте сигурни дали сакате да го промените.\n[[$1|thumb]]",
-       "filepageexists": "СÑ\82Ñ\80аниÑ\86аÑ\82а Ð·Ð° Ð¾Ð¿Ð¸Ñ\81 Ð½Ð° Ð¾Ð²Ð°Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека Ðµ Ð²ÐµÑ\9cе Ñ\81оздадена Ð½Ð° <strong>[[:$1]]</strong>, Ð½Ð¾ Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82ои Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека Ñ\81о Ñ\82оа Ð¸Ð¼Ðµ.\nÐ\9eпиÑ\81оÑ\82 ÐºÐ¾Ñ\98 Ð³Ð¾ Ð²Ð½ÐµÑ\81овÑ\82е Ð½ÐµÐ¼Ð° Ð´Ð° Ñ\81Ñ\82ои Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ð·Ð° Ð¾Ð¿Ð¸Ñ\81.\nДоколку сакате описот да стои тука, ќе морате да го уредите рачно.\n[[$1|thumb]]",
-       "fileexists-extension": "Податотека со слично име веќе постои: [[$2|thumb]]\n* Име на податотека која се подигнува: <strong>[[:$1]]</strong>\n* Име на постоечка податотека: <strong>[[:$2]]</strong>\nВе молиме изберете друго име за податотеката.",
+       "fileexists": "Податотека со ова име веќе постои. Проверете <strong>[[:$1]]</strong> ако не {{GENDER:|сте}} сигурни дали сакате да ја промените.\n[[$1|thumb]]",
+       "filepageexists": "Ð\9eпиÑ\81наÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð° Ð¾Ð²Ð°Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека Ðµ Ð²ÐµÑ\9cе Ñ\81оздадена Ð½Ð° <strong>[[:$1]]</strong>, Ð½Ð¾ Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82ои Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека Ñ\81о Ñ\82оа Ð¸Ð¼Ðµ.\nÐ\9eпиÑ\81оÑ\82 ÐºÐ¾Ñ\98 Ð³Ð¾ Ð²Ð½ÐµÑ\81овÑ\82е Ð½ÐµÐ¼Ð° Ð´Ð° Ñ\81Ñ\82ои Ð½Ð° Ð¾Ð¿Ð¸Ñ\81наÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а.\nДоколку сакате описот да стои тука, ќе морате да го уредите рачно.\n[[$1|thumb]]",
+       "fileexists-extension": "Податотека со слично име веќе постои: [[$2|thumb]]\n* Име на податотека која се подигнува: <strong>[[:$1]]</strong>\n* Име на постоечката податотека: <strong>[[:$2]]</strong>\nДали можеби би сакале да користите покарактеристично име.",
        "fileexists-thumbnail-yes": "Се чини дека податотеката е слика со намалена големина ''(минијатура)''. [[$1|thumb]]\nПроверете ја податотеката <strong>[[:$1]]</strong>.\nАко податотеката која ја проверувате е истата слика во својата изворна големина тогаш не мора да ја подигате дополнително.",
        "file-thumbnail-no": "Името на податотеката почнува со <strong>$1</strong>.\nИзгледа дека е слика со намалена големина ''(мини, thumbnail)''.\nАко ја имате оваа слика во изворна големина, подигнете ја неја. Во спротивно сменете го името на податотеката.",
        "fileexists-forbidden": "Податотека со тоа име веќе постои и не може да биде заменета.\nАко и понатаму сакате да ја подигнете вашата податотеката, ве молиме вратете се назад и подигнете ја под друго име. [[File:$1|thumb|center|$1]]",
        "linkstoimage-redirect": "$1 (пренасочување) $2",
        "duplicatesoffile": "{{PLURAL:$1|Следната податотека е дупликат|$1 Следните податотеки се дупликати}} на оваа податотека ([[Special:FileDuplicateSearch/$2|повеќе информации]]):",
        "sharedupload": "Оваа податотека е од $1 и може да се користи во други проекти.",
-       "sharedupload-desc-there": "Оваа податотека е од $1 и може да се користи во други проекти.\nПогледнете ја [$2 страницата за опис на податотеката] за повеќе информации.",
-       "sharedupload-desc-here": "Оваа податотека е од $1 и може да се користи во други проекти.\nОписот од нејзината [$2 страница за опис] е прикажан подолу.",
+       "sharedupload-desc-there": "Оваа податотека е од $1 и може да се користи во други проекти.\nПогледнете ја [$2 описната страница  на податотеката] за повеќе информации.",
+       "sharedupload-desc-here": "Оваа податотека е од $1 и може да се користи во други проекти.\nОписот од нејзината [$2 описна страница] е прикажан подолу.",
        "sharedupload-desc-edit": "Оваа податотека е од $1 и може да се користи во други проекти.\nНејзиниот опис можете да го уредите на [$2 соодветната страница].",
        "sharedupload-desc-create": "Оваа податотека е од $1 и може да се користи во други проекти.\nНејзиниот опис можете да го уредите на [$2 соодветната страница].",
        "filepage-nofile": "Не постои податотека со ова име.",
        "shared-repo-from": "од $1",
        "shared-repo": "заедничко складиште",
        "shared-repo-name-wikimediacommons": "Ризницата",
-       "filepage.css": "/* Тука поставените каскадни стилски страници (CSS) се вклучени во страницата за опис на податотеката, како и на клиентските викија */",
+       "filepage.css": "/* Тука поставените каскадни стилски страници (CSS) се вклучени во описната страница на податотеката, како и на клиентските викија */",
        "upload-disallowed-here": "Нажалост, не можете да презапишете врз сликава.",
        "filerevert": "Врати $1",
        "filerevert-legend": "Врати податотека",
        "filedelete-maintenance": "Бришење и враќање на податотеки е привремено оневозможено поради одржување на базата на податоци.",
        "filedelete-maintenance-title": "Не можам да ја избришам податотеката",
        "mimesearch": "Пребарување по MIME",
-       "mimesearch-summary": "Ð\9eваа Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¾Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ñ\83ва Ñ\84илÑ\82Ñ\80иÑ\80аÑ\9aе Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ð²Ñ\80з Ð¾Ñ\81нова Ð½Ð° Ð½Ð¸Ð²Ð½Ð¸Ð¾Ñ\82 MIME-Ñ\82ип.\nФоÑ\80маÑ\82 Ð½Ð° Ð²Ð½Ð¾Ñ\81: Ñ\82ип Ð½Ð° Ñ\81одÑ\80жина/поÑ\82Ñ\82ип, на пр. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Ð\9eваа Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¾Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ñ\83ва Ñ\84илÑ\82Ñ\80иÑ\80аÑ\9aе Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ð²Ñ\80з Ð¾Ñ\81нова Ð½Ð° Ð½Ð¸Ð²Ð½Ð¸Ð¾Ñ\82 MIME-Ñ\82ип.\nÐ\92ноÑ\81: Ñ\82ипнаÑ\81одÑ\80жина/поÑ\82Ñ\82ип Ð¸Ð»Ð¸ Ñ\82ипнаÑ\81одÑ\80жина/, на пр. <code>image/jpeg</code>.",
        "mimetype": "MIME-тип:",
        "download": "преземи",
        "unwatchedpages": "Ненабљудувани страници",
        "mostinterwikis": "Страници со најмногу меѓувики",
        "mostrevisions": "Статии со најмногу верзии",
        "prefixindex": "Сите страници (со претставка)",
-       "prefixindex-namespace": "СиÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86и Ñ\81о Ð¿Ñ\80еÑ\84икÑ\81 (именски простор $1)",
+       "prefixindex-namespace": "СиÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86и Ñ\81о Ð¿Ñ\80еÑ\82Ñ\81Ñ\82авка (именски простор $1)",
        "prefixindex-strip": "Отстрани ја претставката во списокот",
        "shortpages": "Кратки страници",
        "longpages": "Долги страници",
        "allmessages-filter-unmodified": "Неизменети",
        "allmessages-filter-all": "Сите",
        "allmessages-filter-modified": "Изменети",
-       "allmessages-prefix": "ФилÑ\82Ñ\80иÑ\80аÑ\98 Ð¿Ð¾ Ð¿Ñ\80еÑ\84икÑ\81:",
+       "allmessages-prefix": "ФилÑ\82Ñ\80иÑ\80аÑ\98 Ð¿Ð¾ Ð¿Ñ\80еÑ\82Ñ\81Ñ\82авка:",
        "allmessages-language": "Јазик:",
        "allmessages-filter-submit": "Оди",
        "allmessages-filter-translate": "Преведување",
        "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 cf92c02..56c62e6 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": "സ്രോതസ്സ് താളിന് നിർബന്ധമായും സാധുവായ ഒരു തലക്കെട്ടുണ്ടായിരിക്കണം.",
        "difference-missing-revision": "ഈ വ്യത്യാസത്തിൽ ($1) {{PLURAL:$2|ഒരു നാൾപ്പതിപ്പ്|$2 നാൾപ്പതിപ്പുകൾ}} കാണാനായില്ല.\n\nമായ്ക്കപ്പെട്ട താളിന്റെ കാലഹരണപ്പെട്ട നാൾവഴി കണ്ണി ഉപയോഗിച്ചാലാണ് സാധാരണ ഇങ്ങനെ സംഭവിക്കുക.\nകൂടുതൽ വിവരങ്ങൾ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} മായ്ക്കൽ രേഖയിൽ] കാണാവുന്നതാണ്.",
        "searchresults": "തിരച്ചിലിന്റെ ഫലം",
        "searchresults-title": "\"$1\" എന്നു തിരഞ്ഞതിനു ലഭ്യമായ ഫലങ്ങൾ",
-       "toomanymatches": "യോജിച്ച ഫലങ്ങൾ വളരെയധികം കിട്ടിയിരിക്കുന്നു; ദയവായി വേറൊരു അന്വേഷണ വാക്ക് ഉപയോഗിച്ച് തിരയുക.",
        "titlematches": "താളിന്റെ തലക്കെട്ടുമായി യോജിക്കുന്ന ഫലങ്ങൾ",
        "textmatches": "താങ്കൾ തിരഞ്ഞ വാക്കുകൾ ഉള്ള താളുകൾ",
        "notextmatches": "താളുകളുടെ ഉള്ളടക്കത്തിൽ താങ്കൾ തിരഞ്ഞ വാക്കുമായി യോജിക്കുന്ന ഫലങ്ങൾ ഒന്നും തന്നെയില്ല",
        "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": "വിപുലീകൃത തിരച്ചിൽ",
        "action-viewmyprivateinfo": "താങ്കളുടെ സ്വകാര്യവിവരങ്ങൾ കാണുക",
        "action-editmyprivateinfo": "താങ്കളുടെ സ്വകാര്യവിവരങ്ങൾ തിരുത്തുക",
        "nchanges": "{{PLURAL:$1|ഒരു മാറ്റം|$1 മാറ്റങ്ങൾ}}",
-       "enhancedrc-since-last-visit": "കഴിഞ്ഞ സന്ദർശനത്തിനു ശേഷം {{PLURAL:$1|ഒരെണ്ണം|$1 എണ്ണം}}.",
+       "enhancedrc-since-last-visit": "കഴിഞ്ഞ സന്ദർശനത്തിനു ശേഷം {{PLURAL:$1|ഒരെണ്ണം|$1 എണ്ണം}}",
        "enhancedrc-history": "നാൾവഴി",
        "recentchanges": "സമീപകാല മാറ്റങ്ങൾ",
        "recentchanges-legend": "സമീപകാല മാറ്റങ്ങളുടെ ക്രമീകരണം",
        "largefileserver": "സെർവറിൽ ചിട്ടപ്പെടുത്തിയതുപ്രകാരം ഈ പ്രമാണത്തിന്റെ വലിപ്പം അനുവദനീയമായതിലും കൂടുതലാണ്‌.",
        "emptyfile": "താങ്കൾ അപ്‌ലോഡ് ചെയ്ത പ്രമാണം ശൂന്യമാണെന്നു കാണുന്നു.\nപ്രമാണത്തിന്റെ പേരിലുള്ള അക്ഷരത്തെറ്റായിരിക്കാം ഇതിനു കാരണം.\nഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യണോ എന്നൊരിക്കൽ കൂടി പരിശോധിക്കുക.",
        "windows-nonascii-filename": "പ്രത്യേകാക്ഷരങ്ങളുള്ള പ്രമാണനാമങ്ങൾ ഈ വിക്കി പിന്തുണയ്ക്കുന്നില്ല.",
-       "fileexists": "ഇതേ പേരിൽ വേറെ ഒരു പ്രമാണം നിലവിലുണ്ട്.\nദയവായി <strong>[[:$1]]</strong> പരിശോധിച്ച് പ്രസ്തുത പ്രമാണം മാറ്റണമോ എന്നു തീരുമാനിക്കുക.\n[[$1|thumb]]",
+       "fileexists": "ഇതേ പേരിൽ വേറെ ഒരു പ്രമാണം നിലവിലുണ്ട്.\nദയവായി <strong>[[:$1]]</strong> പരിശോധിച്ച് പ്രസ്തുത പ്രമാണം {{GENDER:|മാറ്റണമോ}} എന്നു തീരുമാനിക്കുക.\n[[$1|thumb]]",
        "filepageexists": "ഈ പ്രമാണത്തിനുള്ള വിവരണതാൾ <strong>[[:$1]]</strong> എന്നു സൃഷ്ടിക്കപ്പെട്ടിട്ടുണ്ട്, പക്ഷേ ഇതേ പേരിൽ പ്രമാണം ഒന്നും നിലവിലില്ല.\nവിവരണതാളിൽ താങ്കൾ ഇവിടെ ചേർക്കുന്ന ലഘുകുറിപ്പ് പ്രത്യക്ഷപ്പെടുന്നതല്ല.\nഅവിടെ ലഘുകുറിപ്പ് വരാൻ ആ താൾ താങ്കൾ സ്വയം തിരുത്തേണ്ടതാണ്.\n[[$1|ലഘുചിത്രം]]",
-       "fileexists-extension": "à´\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": "ആരും ശ്രദ്ധിക്കാത്ത താളുകൾ",
        "wantedtemplates": "അവശ്യ ഫലകങ്ങൾ",
        "mostlinked": "ഏറ്റവുമധികം കണ്ണികളാൽ ചേർത്തിരിക്കുന്ന താളുകൾ",
        "mostlinkedcategories": "ഏറ്റവുമധികം താളുകൾ ചേർത്തിട്ടുള്ള വർഗ്ഗങ്ങൾ",
-       "mostlinkedtemplates": "à´\8fà´±àµ\8dറവàµ\81മധിà´\95à´\82 à´\95à´£àµ\8dണി à´\9aàµ\87ർതàµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´«à´²à´\95à´\99àµ\8dà´\99ൾ",
+       "mostlinkedtemplates": "à´\8fà´±àµ\8dറവàµ\81മധിà´\95à´\82 à´\89ൾപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95ൾ",
        "mostcategories": "ഏറ്റവുമധികം വർഗ്ഗങ്ങൾ ഉൾപ്പെടുത്തിയിരിക്കുന്ന താളുകൾ",
        "mostimages": "ഏറ്റവുമധികം കണ്ണി ചേർത്തിരിക്കുന്ന പ്രമാണങ്ങൾ",
        "mostinterwikis": "ഏറ്റവുമധികം അന്തർവിക്കികളുള്ള താളുകൾ",
        "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": "അനുബന്ധം",
+       "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": "എക്സ്.എം.എൽ. പാഴ്‌സർ ട്രീ പ്രദർശിപ്പിക്കുക",
        "expand_templates_generate_rawhtml": "അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ. പ്രദർശിപ്പിക്കുക",
-       "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": "$3 എന്ന താളിന്റെ ഭാഷയായിരുന്ന $4, $1 $5 ആയി {{GENDER:$2|മാറ്റി}}."
 }
index 83c1024..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": "Хувилбарууд",
        "diff-multi-manyusers": "($2 гаруй {{PLURAL:$2|хэрэглэгчийн}} {{PLURAL:$1|дундын нэг засварыг|дундын $1 засварыг}} үзүүлсэнгүй)",
        "searchresults": "Хайлтын үр дүн",
        "searchresults-title": "\"$1\" гэх хайлтын үр дүн",
-       "toomanymatches": "Хэт олон илэрц илэрлээ. Өөр үгээр хайна уу.",
        "titlematches": "Хуудасны гарчигтай таарсан хуудсууд",
        "textmatches": "Хуудасны тексттэй таарсан хуудсууд",
        "notextmatches": "Хуудасны тексттэй таарсан хуудсууд байхгүй байна",
        "searchrelated": "холбоотой",
        "searchall": "бүгдийг",
        "showingresults": "Доор #'''$2'''-с эхлэсэн '''$1''' илэрцийг үзүүлж байна.",
-       "showingresultsnum": "Доор #'''$2'''-с эхлэсэн '''$3''' илэрцийг үзүүлж байна.",
        "showingresultsheader": "'''$4''' хайлтын {{PLURAL:$5|'''$3'''-н '''$1''' үр дүн|'''$3'''-н '''$1 - $2''' үр дүн}}",
        "search-nonefound": "Хайлтад таарсан үр дүн илэрсэнгүй.",
        "powersearch-legend": "Сонгосон хайлт",
index 745e48e..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": "दिक्चालन यादी",
        "difference-missing-revision": "या लेखाचे/ची  ($1) हे {{PLURAL:$2|संस्करण|$2 संस्करणे}} {{PLURAL:$2|सापडले नाही|सापडली नाहीत}}.वगळल्या गेलेल्या लेखपानाच्या जुन्या इतिहास-दुव्याचे अनुसरण केल्यामुळे, शक्यतोवर,असे घडु शकते.याबाबत अधिक तपशील  [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदी] येथे बघता येईल.",
        "searchresults": "शोध निकाल",
        "searchresults-title": "\"$1\" साठीचे शोध निकाल",
-       "toomanymatches": "खूप एकसारखी उत्तरे मिळाली, कृपया पृच्छा वेगळ्या तऱ्हेने करून पहा",
        "titlematches": "पानाचे शीर्षक जुळते",
        "textmatches": "पानातील मजकूर जुळतो",
        "notextmatches": "कोणत्याही पानातील मजकुराशी जुळत नाही",
        "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 35e9b13..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",
        "difference-missing-revision": "{{PLURAL:$2|Satu semakan|$2 semakan}} bagi perbezaan ini ($1) tidak ditemui.\n\nHal ini biasanya disebabkan oleh pautan perbezaan yang lapuk ke halaman yang sudah dihapuskan.\nButirannya boleh didapati di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
        "searchresults": "Hasil carian",
        "searchresults-title": "Hasil carian \"$1\"",
-       "toomanymatches": "Terlalu banyak padanan dipulangkan, sila cuba pertanyaan lain",
        "titlematches": "Padanan tajuk laman",
        "textmatches": "Padanan teks laman",
        "notextmatches": "Tiada teks laman yang sepadan",
        "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 345975d..d707821 100644 (file)
@@ -8,7 +8,8 @@
                        "Roderick Mallia",
                        "Urhixidur",
                        "아라",
-                       "CharlieTheCabbie"
+                       "CharlieTheCabbie",
+                       "Leli Forte"
                ]
        },
        "tog-underline": "Ħoloq sottolinjati:",
        "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",
        "viewsourcetext": "Tista' tara u tikkopja s-sors ta' din il-paġna:",
        "viewyourtext": "Tista' tara u tikkopja s-sors tal-'''modifiki tiegħek''' fuq din il-paġna:",
        "protectedinterface": "Din il-paġna għanda element li tagħmel parti mill-interfaċċa tal-utent tas-software, u għaldaqstant ġiet protetta sabiex ma jkunx hemm abbuż.",
-       "editinginterface": "'''Avviż:''' Qiegħed tagħmel modifiki lejn paġna li qegħdha tintuża biex tipprovdi interfaċċa għall-messaġġi tas-software. Kull modifika f'din il-paġna se taffetwa l-apparenza tal-faċċata tal-utenti kollha. Għat-traduzzjonijiet, ikkunsidra l-possibilità li tuża'  [//translatewiki.net/wiki/Main_Page?setlang=mt translatewiki.net], il-proġett MediaWiki għal-lokalizzazzjoni.",
+       "editinginterface": "'''Avviż:''' Qiegħed tagħmel modifiki lejn paġna li qiegħda tintuża biex tipprovdi interfaċċa għall-messaġġi tas-software. Kull modifika f'din il-paġna se taffetwa l-apparenza tal-faċċata tal-utenti kollha. Għat-traduzzjonijiet, ikkunsidra l-possibilità li tuża  [//translatewiki.net/wiki/Main_Page?setlang=mt translatewiki.net], il-proġett MediaWiki għal-lokalizzazzjoni.",
        "cascadeprotected": "Din il-paġna ġiet protetta mill-modifiki, minħabba li tinkludi {{PLURAL:$1|paġni, li huwa|paġni, li huma}} protetti bil-preferenza tal-\"kaskata\" mixewla:\n$2",
        "namespaceprotected": "Inti m'għandhekx il-permess li timodifika paġni fin-''namespace'' '''$1''.",
        "customcssprotected": "M'għandekx il-permessi neċessarji sabiex timmodifika din il-paġna tas-CSS, minħabba li għandha tqegħid personali ta' utent ieħor.",
        "diff-multi-manyusers": "(Mhux qed {{PLURAL:$1|tintwera reviżjoni intermedja|jintwerew $1 reviżjonijit intermedji}} mingħand iktar minn $2 {{PLURAL:$2|utent|$2 utenti}})",
        "searchresults": "Riżultat tat-tfittxija",
        "searchresults-title": "Riżultati tat-tfittxija għal \"$1\"",
-       "toomanymatches": "Ħafna tqabbil ġew ritornati, jekk jogħġbok prova inkjesta differenti",
        "titlematches": "Titlu tal-paġna taqbel",
        "textmatches": "It-test tal-paġni, jaqbel",
        "notextmatches": "L-ebda test ta' paġna ma jaqbel",
        "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",
        "powersearch-togglelabel": "Agħżel:",
        "powersearch-toggleall": "Kollha",
        "powersearch-togglenone": "Ebda",
+       "powersearch-remember": "Ftakar l-għażla għal tfittxijiet oħra",
        "search-external": "Tfittxija esterna",
        "searchdisabled": "It-Tfittxija fil-{{SITENAME}} mhux attiva.\nSadanittant, tista' tipprova tfittex bil-Google.\nInnota però li l-werreja tal-kontenut ta' {{SITENAME}} f'dawn is-siti, jistgħu ma jkunux aġġornati.",
        "preferences": "Preferenzi",
        "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",
        "duplicate-defaultsort": "'''Twissija:''' iċ-ċavetta tal-issortjar oriġinali \"$2\" tissostitwixxi dik preċedenti \"$1\".",
        "version": "Verżjoni",
        "version-extensions": "Estensjonijiet installati",
+       "version-skins": "Aspetti",
        "version-specialpages": "Paġni speċjali",
        "version-parserhooks": "Hook tal-parser",
        "version-variables": "Varjabili",
        "version-antispam": "Prevenzjoni tal-ispam",
-       "version-skins": "Aspetti",
        "version-other": "Oħrajn",
        "version-mediahandlers": "Imradd tal-medja",
        "version-hooks": "Hook",
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 5e6e0c3..f29574c 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",
        "namespaces": "Miâ-khong-kan",
        "variants": "piàn-thé",
        "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",
+       "exception-nologin": "Bô teng-ji̍p",
+       "exception-nologin-text": "請先[[Special:Userlogin|登入]]了才有法度看這頁抑對這頁做動作。",
+       "exception-nologin-text-manual": "請先$1,才有法度看這頁抑對這頁做動作。",
+       "virus-badscanner": "設定毋著:你的病毒掃描程式阮毋知:<em>$1</em>",
+       "virus-scanfailed": "掃病毒無成功(代碼$1)",
        "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!",
+       "welcomecreation-msg": "你的口座以經開好矣,\n你若有需要,會使去改你佇{{SITENAME}}的設定。",
        "yourname": "Lí ê iōng-chiá miâ-chheng:",
        "userlogin-yourname": "Iōng-chiá miâ-chheng",
+       "userlogin-yourname-ph": "拍你的用者名稱",
+       "createacct-another-username-ph": "拍你的用者名稱",
        "yourpassword": "Lí ê bi̍t-bé:",
        "userlogin-yourpassword": "Bi̍t-bé",
+       "userlogin-yourpassword-ph": "拍密碼",
+       "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-emailoptional": "電子批地址(無一定愛寫)",
+       "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",
+       "nocookiesnew": "你的用者口座已經開好矣,毋過你猶未登入,{{SITENAME}}有用Cookies做記錄登入的用者,你無允准用Cookies,請先共阻擋提掉,才閣用你的用者名稱佮密碼登入。",
+       "nocookieslogin": "{{SITENAME}}有用cookies做記錄用者,毋過你無允準用cookies,等你改做會當了後,才閣試。",
        "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]].''",
        "shown-title": "Múi ia̍h hián-sī $1 {{PLURAL:$1|kiat-kó|kiat-kó}}",
        "viewprevnext": "Khoàⁿ ($1 {{int:pipe-separator}} $2) ($3)",
        "searchprofile-articles": "Loē-iông ia̍h",
-       "searchprofile-project": "幫助佮事工的頁",
        "searchprofile-images": "To-mûi-thé",
        "searchprofile-everything": "Só͘-ū ê",
        "searchprofile-advanced": "chìn-chi̍t-pō͘",
        "searchprofile-articles-tooltip": "Tī $1 chhoé",
-       "searchprofile-project-tooltip": "Tī $1 chhoé",
        "searchprofile-images-tooltip": "Chhoé tóng-àn",
        "searchprofile-everything-tooltip": "揣全部(包括討論頁)",
        "searchprofile-advanced-tooltip": "佇你家己設的名空間內底揣",
        "search-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",
        "servertime": "Server sî-kan hiān-chāi sī",
        "guesstimezone": "Tùi liû-lám-khì chhau--lâi",
        "allowemail": "Ún-chún pa̍t-ê iōng-chiá kià email kòe-lâi",
-       "defaultns": "Tī chiah ê miâ-khong-kan chhiau-chhōe:",
        "prefs-files": "Tóng-àn",
        "youremail": "Lí ê email:",
        "yourrealname": "Lí ê chin miâ:",
index 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 0c04b4f..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",
        "editwarning-warning": "Ved å forlate siden kan du miste alle endringer du har gjort.\nHvis du er innlogget, kan du slå av denne advarselen under \"{{int:prefs-editing}}\"-avsnittet i dine innstillinger.",
        "editpage-notsupportedcontentformat-title": "Innholdsformatet er ikke støttet",
        "editpage-notsupportedcontentformat-text": "Innholdsformatet $1 er ikke støttet av innholdsmodellen $2.",
-       "content-model-wikitext": "WikiTekst",
+       "content-model-wikitext": "wikitekst",
        "content-model-text": "Ren tekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "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",
        "currentrev": "Nåværende versjon",
        "currentrev-asof": "Nåværende revisjon fra $1",
        "revisionasof": "Revisjonen fra $1",
-       "revision-info": "Revisjon per $1 av $2",
+       "revision-info": "Revisjon per $1 av {{GENDER:$6|$2}}$7",
        "previousrevision": "← Eldre revisjon",
        "nextrevision": "Nyere revisjon →",
        "currentrevisionlink": "Nåværende revisjon",
        "difference-missing-revision": "{{PLURAL:$2|En revisjon|$2 revisjoner}} av denne forskjellen ($1) {{PLURAL:$2|ble|ble}} ikke funnet.\n\nDette skyldes som regel at en gammel forskjell-lenke er fulgt til en side som er slettet.\nDetaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
        "searchresults": "Søkeresultater",
        "searchresults-title": "Søkeresultater for «$1»",
-       "toomanymatches": "For mange mulige svar, prøv med en annen spørring",
        "titlematches": "Artikkeltitler med treff på forespørselen",
        "textmatches": "Artikkeltekster med treff på forespørselen",
        "notextmatches": "Inden sidetekst samsvarte med søket",
        "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",
        "powersearch-togglelabel": "Merk:",
        "powersearch-toggleall": "Alle",
        "powersearch-togglenone": "Ingen",
+       "powersearch-remember": "Husk valgene for fremtidige søk",
        "search-external": "Eksternt søk",
        "searchdisabled": "Søkefunksjonen er slått av. Du kan søke via Google i mellomtiden. Merk at Googles indeksering av {{SITENAME}} muligens er utdatert.",
        "search-error": "En feil oppsto under søk: $1",
        "largefileserver": "Denne filen er større enn det tjeneren er satt opp til å tillate.",
        "emptyfile": "Filen du lastet opp ser ut til å være tom. Dette kan komme av en skrivefeil i filnavnet. Sjekk om du virkelig vil laste opp denne filen.",
        "windows-nonascii-filename": "Denne wikien støtter ikke filnavn med spesialtegn.",
-       "fileexists": "Ei fil med dette navnet finnes allerede.\nSjekk <strong>[[:$1]]</strong> hvis du ikke er sikker på at du vil forandre den.\n[[$1|thumb]]",
+       "fileexists": "En fil med dette navnet finnes allerede.\nSjekk <strong>[[:$1]]</strong> hvis {{GENDER:|du}} ikke er sikker på at du vil forandre den.\n[[$1|thumb]]",
        "filepageexists": "Beskrivelsessiden for denne filen finnes allerede på <strong>[[:$1]]</strong>, men ingen filer med dette navnet finnes. Sammendraget du skriver inn vil ikke vises på beskrivelsessiden. For at det skal dukke opp der må du skrive det inn manuelt etter å ha lastet opp filen.\n[[$1|thumb]]",
-       "fileexists-extension": "En fil med et lignende navn finnes: [[$2|thumb]]\n* Navnet på din fil: <strong>[[:$1]]</strong>\n* Navn på eksisterende fil: <strong>[[:$2]]</strong>\nVelg et annet filnavn.",
+       "fileexists-extension": "En fil med et lignende navn finnes: [[$2|thumb]]\n* Navnet på din fil: <strong>[[:$1]]</strong>\n* Navn på eksisterende fil: <strong>[[:$2]]</strong>\nØnsker du å bruke et mer særegent filnavn?",
        "fileexists-thumbnail-yes": "Filen ser ut til å være et bilde av redusert størrelse. [[$1|thumb]]\nVennligst sjekk filen <strong>[[:$1]]</strong>.\nOm filen du sjekket er det samme bildet, men i opprinnelig størrelse, er det ikke nødvendig å laste opp en ekstra fil.",
        "file-thumbnail-no": "Filnavnet begynner med <strong>$1</strong>.\nDet virker som om det er et bilde av redusert størrelse ''(miniatyrbilde)''.\nOm du har dette bildet i stor utgave, last opp det, eller endre filnavnet på denne filen.",
        "fileexists-forbidden": "En fil med dette navnet finnes fra før, og kan ikke erstattes.\nOm du fortsatt ønsker å laste opp filen, gå tilbake og last den opp under et nytt navn. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Sletting og gjenoppretting av filer er midlertidig slått av på grunn av vedlikehold.",
        "filedelete-maintenance-title": "Kan ikke slette fil",
        "mimesearch": "MIME-søk",
-       "mimesearch-summary": "Denne siden muliggjør filtrering av filer per MIME-type. Skriv inn: innholdstype/undertype, for eksempel <code>image/jpeg</code>.",
+       "mimesearch-summary": "Denne siden muliggjør filtrering av filer per MIME-type. Skriv inn: innholdstype/undertype eller innholdstype/*, for eksempel <code>image/jpeg</code>.",
        "mimetype": "MIME-type:",
        "download": "last ned",
        "unwatchedpages": "Sider som ikke er overvåket",
        "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 639926c..d3c08bb 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",
        "difference-missing-revision": "{{PLURAL:$2|Eén versie|$2 versies}} van disse verschillen ($1) {{PLURAL:$2|is|bin}} niet evunnen.\n\nDit kömp meestentieds deur t volgen van n verouwerde verwiezing naor n zied die vortedaon is.\nWaorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].",
        "searchresults": "Zeukresultaoten",
        "searchresults-title": "Zeukresultaoten veur \"$1\"",
-       "toomanymatches": "Der waren te veule resultaoten. Probeer n aandere zeukopdrachte.",
        "titlematches": "Overeenkomst mit t onderwarp",
        "textmatches": "Overeenkomst mit teksten",
        "notextmatches": "Gien overeenstemming",
        "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",
        "rcnotefrom": "Dit bin de wiezigingen sinds <strong>$2</strong> (maximum van <strong>$1</strong> wiezigingen).",
        "rclistfrom": "Bekiek wiezigingen vanaof $3 $2",
        "rcshowhideminor": "$1 kleine wiezigingen",
-       "rcshowhideminor-show": "Bekieken",
-       "rcshowhideminor-hide": "Verbargen",
+       "rcshowhideminor-show": "Bekiek",
+       "rcshowhideminor-hide": "Verbarg",
        "rcshowhidebots": "$1 botgebrukers",
-       "rcshowhidebots-show": "Bekieken",
-       "rcshowhidebots-hide": "Verbargen",
+       "rcshowhidebots-show": "Bekiek",
+       "rcshowhidebots-hide": "Verbarg",
        "rcshowhideliu": "$1 eregistreerden gebrukers",
-       "rcshowhideliu-show": "Bekieken",
-       "rcshowhideliu-hide": "Verbargen",
+       "rcshowhideliu-show": "Bekiek",
+       "rcshowhideliu-hide": "Verbarg",
        "rcshowhideanons": "$1 anonieme gebrukers",
-       "rcshowhideanons-show": "Bekieken",
-       "rcshowhideanons-hide": "Verbargen",
+       "rcshowhideanons-show": "Bekiek",
+       "rcshowhideanons-hide": "Verbarg",
        "rcshowhidepatr": "$1 nao-ekeken bewarkingen",
-       "rcshowhidepatr-show": "Bekieken",
-       "rcshowhidepatr-hide": "Verbargen",
+       "rcshowhidepatr-show": "Bekiek",
+       "rcshowhidepatr-hide": "Verbarg",
        "rcshowhidemine": "$1 mien bewarkingen",
-       "rcshowhidemine-show": "Bekieken",
-       "rcshowhidemine-hide": "Verbargen",
+       "rcshowhidemine-show": "Bekiek",
+       "rcshowhidemine-hide": "Verbarg",
        "rclinks": "Bekiek de leste $1 wiezigingen van de aofgeleupen $2 dagen<br />$3",
        "diff": "wiezig",
        "hist": "gesch",
        "download": "binnenhaolen",
        "unwatchedpages": "Ziejen die niet evolgd wörden",
        "listredirects": "Lieste van deurverwiezingen",
+       "listduplicatedfiles": "Lieste mit bestaanden mit duplikaoten",
        "unusedtemplates": "Ongebruukten mallen",
        "unusedtemplatestext": "Hieronder staon alle ziejen in de naamruumte \"{{ns:template}}\" die nargens gebruukt wörden.\nVergeet niet de verwiezingen nao te kieken veurda'j de mal vortdoon.",
        "unusedtemplateswlh": "aandere verwiezingen",
        "listgrouprights-removegroup-self": "Kan {{PLURAL:$2|groep|groepen}} vortdoon van eigen gebruker: $1",
        "listgrouprights-addgroup-self-all": "Kan alle groepen bie de eigen gebruker doon",
        "listgrouprights-removegroup-self-all": "Kan alle groepen vortdoon van eigen gebruker",
+       "trackingcategories": "Volgkategorieën",
        "mailnologin": "Niet an-emeld.",
        "mailnologintext": "Je mutten [[Special:UserLogin|an-emeld]] ween en n geldig e-mailadres in \"[[Special:Preferences|mien veurkeuren]]\" invoeren um disse funksie te kunnen gebruken.",
        "emailuser": "n Bericht sturen",
        "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",
        "weeks": "{{PLURAL:$1|één weke|$1 weken}}",
        "months": "{{PLURAL:$1|een maond|$1 maonden}}",
        "years": "{{PLURAL:$1|één jaor|$1 jaor}}",
-       "ago": "$1 eleen",
+       "ago": "$1 elejen",
        "just-now": "onderlest",
        "hours-ago": "$1 {{PLURAL:$1|uur}} elejen",
        "minutes-ago": "$1 {{PLURAL:$1|minuut|minuten}} elejen",
        "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 0a479c3..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",
        "diff-multi-manyusers": "({{PLURAL:$1|Een Twischenversion|$1 Twischenversionen}} von mehr as $2 {{PLURAL:$2|Bruker|Brukers}} warrt nich wiest)",
        "searchresults": "Söökresultaten",
        "searchresults-title": "Söökresultaten för „$1“",
-       "toomanymatches": "To veel Sieden funnen för de Söök, versöök en annere Affraag.",
        "titlematches": "Övereenstimmen mit Överschriften",
        "textmatches": "Övereenstimmen mit Texten",
        "notextmatches": "Kene Övereenstimmen",
        "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 728cc6f..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": "बहुरुपहरु",
        "diff-multi-manyusers": "($2 {{PLURAL:$2|भन्दा अधिक प्रयोगकर्ता|भन्दा अधिक प्रयोगकर्ताहरु}}द्वारा {{PLURAL:$1|एउटा मध्यवर्ती संशोधन|$1 मध्यवर्ती संशोधनहरु}} नदेखाइएको)",
        "searchresults": "खोज नतिजाहरू",
        "searchresults-title": " \"$1\"को लागि खोज नतिजाहरु",
-       "toomanymatches": "अति धेरै मिल्ने नतिजाहरु भेटियो , कृपया फरक क्वेरी प्रयोग गर्नुहोस",
        "titlematches": "पृष्ठ शिर्षक मिल्छ",
        "textmatches": "पृष्ठ पाठ मिल्छ",
        "notextmatches": "अक्षरस् पेज भेटिएन",
        "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 77fe5a6..fe962ef 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",
        "currentrev": "Huidige versie",
        "currentrev-asof": "Huidige versie van $2 om $3",
        "revisionasof": "Versie van $2 om $3",
-       "revision-info": "Versie door $2 op $4 om $5",
+       "revision-info": "Versie door {{GENDER:$6|$2}} op $4 om $5 $7",
        "previousrevision": "← Oudere versie",
        "nextrevision": "Nieuwere versie →",
        "currentrevisionlink": "Huidige versie",
        "difference-missing-revision": "{{PLURAL:$2|Eén versie|$2 versies}} van deze verschillen ($1) {{PLURAL:$2|is|zijn}} niet aangetroffen.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling verschillen voor een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
        "searchresults": "Zoekresultaten",
        "searchresults-title": "Zoekresultaten voor \"$1\"",
-       "toomanymatches": "Er waren te veel resultaten.\nProbeer een andere zoekopdracht.",
        "titlematches": "Overeenkomst met onderwerp",
        "textmatches": "Overeenkomst met inhoud",
        "notextmatches": "Geen pagina's gevonden",
        "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",
        "recentchanges-label-unpatrolled": "Deze bewerking is nog niet gecontroleerd",
        "recentchanges-label-plusminus": "Deze paginagrootte is met dit aantal bytes gewijzigd",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "Zie ook de [[Special:NewPages|Lijst met nieuwe pagina's]].",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zie ook de [[Special:NewPages|Lijst met nieuwe pagina's]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Wijzigingen sinds <strong>$3 om $4</strong> (maximaal <strong>$1</strong> {{PLURAL:$1|wijziging|wijzigingen}}).",
        "rclistfrom": "Wijzigingen bekijken vanaf $3 $2",
        "windows-nonascii-filename": "Deze wiki ondersteunt geen bestandsnamen met speciale tekens.",
        "fileexists": "Er bestaat al een bestand met deze naam.\nControleer <strong>[[:$1]]</strong> als u niet zeker weet of u het huidige bestand wilt overschrijven.\n[[$1|thumb]]",
        "filepageexists": "De beschrijvingspagina voor dit bestand bestaat al op <strong>[[:$1]]</strong>, maar er bestaat geen bestand met deze naam.\nDe samenvatting die u hebt opgegeven verschijnt niet op de beschrijvingspagina.\nBewerk de pagina handmatig om uw beschrijving daar weer te geven.\n[[$1|miniatuur]]",
-       "fileexists-extension": "Een bestand met dezelfde naam bestaat al: [[$2|thumb]]\n* Naam van het geüploade bestand: <strong>[[:$1]]</strong>\n* Naam van het bestaande bestand: <strong>[[:$2]]</strong>\nKies een andere naam.",
+       "fileexists-extension": "Een bestand met dezelfde naam bestaat al: [[$2|thumb]]\n* Naam van het geüploade bestand: <strong>[[:$1]]</strong>\n* Naam van het bestaande bestand: <strong>[[:$2]]</strong>\nWilt u misschien een meer onderscheidende naam gebruiken?",
        "fileexists-thumbnail-yes": "Het bestand lijkt een verkleinde versie te zijn ''(miniatuurafbeelding)''. [[$1|thumb]]\nControleer het bestand <strong>[[:$1]]</strong>.\nAls het gecontroleerde bestand dezelfde afbeelding van oorspronkelijke grootte is, is het niet noodzakelijk een extra miniatuurafbeelding te uploaden.",
        "file-thumbnail-no": "De bestandsnaam begint met <strong>$1</strong>.\nHet lijkt een verkleinde afbeelding te zijn ''(miniatuurafbeelding)''.\nAls u deze afbeelding in volledige resolutie hebt, upload die afbeelding dan.\nWijzig anders de bestandsnaam.",
        "fileexists-forbidden": "Er bestaat al een bestand met deze naam, en dat kan niet overschreven worden.\nUpload uw bestand onder een andere naam.\n[[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Het verwijderen en terugplaatsen is tijdelijk niet mogelijk wegens onderhoudswerkzaamheden.",
        "filedelete-maintenance-title": "Bestand verwijderen is niet mogelijk",
        "mimesearch": "Zoeken op MIME-type",
-       "mimesearch-summary": "Deze pagina maakt het filteren van bestanden voor het MIME-type mogelijk.\nInvoer: inhoudstype/subtype, bijvoorbeeld <code>image/jpeg</code>.",
+       "mimesearch-summary": "Deze pagina maakt het filteren van bestanden voor het MIME-type mogelijk.\nInvoer: inhoudstype/subtype of inhoudstype/*, bijvoorbeeld <code>image/jpeg</code>.",
        "mimetype": "MIME-type:",
        "download": "downloaden",
        "unwatchedpages": "Pagina's die niet op een volglijst staan",
        "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": "Geïnstalleerde 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",
        "version-license": "Licentie voor MediaWiki",
        "version-ext-license": "Licentie",
        "version-ext-colheader-name": "Uitbreiding",
+       "version-skin-colheader-name": "Vormgeving",
        "version-ext-colheader-version": "Versie",
        "version-ext-colheader-license": "Licentie",
        "version-ext-colheader-description": "Beschrijving",
        "expand_templates_remove_nowiki": "Tags <nowiki> in resultaat onderdrukken",
        "expand_templates_generate_xml": "XML-parserboom bekijken",
        "expand_templates_generate_rawhtml": "Ruwe HTML weergeven",
-       "expand_templates_preview": "Voorvertoning"
+       "expand_templates_preview": "Voorvertoning",
+       "pagelang-name": "Pagina",
+       "pagelang-language": "Taal",
+       "pagelang-select-lang": "Taal selecteren"
 }
index ddfb030..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",
        "namespaces": "Namnerom",
        "variants": "Variantar",
        "permalink": "Fast lenkje",
        "print": "Skriv ut",
        "view": "Sjå",
+       "view-foreign": "Vis på $1",
        "edit": "Endre",
+       "edit-local": "Endre lokal skildring",
        "create": "Opprett",
+       "create-local": "Legg til lokal skildring",
        "editthispage": "Endre sida",
        "create-this-page": "Opprett sida",
        "delete": "Slett",
        "difference-missing-revision": "{{PLURAL:$2|Éin versjon|$2 versjonar}} av skilnaden ($1) vart ikkje {{PLURAL:$2|funnen|funne}}.\n\nDette skriv seg som oftast frå at ein har fylgt ei forelda versjonslenkje til ei side som er sletta.\nDetaljar kan ein finna i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
        "searchresults": "Søkjeresultat",
        "searchresults-title": "Søkjeresultat for «$1»",
-       "toomanymatches": "Søket gav for mange treff, prøv ei anna spørjing",
        "titlematches": "Sidetitlar med treff på førespurnaden",
        "textmatches": "Sider med treff på førespurnaden",
        "notextmatches": "Ingen sider hadde treff på førespurnaden",
        "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 ecf18f9..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",
        "difference-missing-revision": "{{PLURAL:$2|Una revision|$2 revisions}} d'aquesta diferéncia ($1) {{PLURAL:$2|es pas estada trobada|son pas estadas trobadas}}.\n\nAquò se produtz en general en seguent un ligam de diferéncia obsolèta cap a una pagina qu'es estada suprimada.\nPodètz trobar de detalhs dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de las supressions].",
        "searchresults": "Resultats de la recèrca",
        "searchresults-title": "Resultats de la recèrca per « $1 »",
-       "toomanymatches": "Tròp d’ocuréncias son estadas trobadas, sètz pregat de sometre una requèsta diferenta.",
        "titlematches": "Correspondéncias dins los títols d'articles",
        "textmatches": "Correspondéncias dins los tèxtes d'articles",
        "notextmatches": "Cap de tèxte d'article correspond pas a la recèrca",
        "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..d66eb12 100644 (file)
@@ -28,7 +28,7 @@
        "tog-hidepatrolled": "ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਵਿੱਚੋਂ ਜਾਂਚੀਆਂ ਸੋਧਾਂ ਲੁਕਾਓ",
        "tog-newpageshidepatrolled": "ਨਵੀਂ ਸਫ਼ਾ ਸੂਚੀ ਵਿੱਚੋਂ ਜਾਂਚੇ ਸਫ਼ੇ ਲੁਕਾਓ",
        "tog-extendwatchlist": "ਸਿਰਫ਼ ਤਾਜ਼ਾ ਹੀ ਨਹੀਂ, ਸਗੋਂ ਸਾਰੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਵਖਾਉਣ ਲਈ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਨੂੰ ਵਧਾਓ",
-       "tog-usenewrc": "ਤਾà¨\9c਼ਾ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨\85ਤà©\87 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à©±à¨\9a à¨¸à¨«à¨¼à©\87 à¨®à©\81ਤਾਬà¨\95 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à©\87 à¨\97ਰà©\81ੱà¨\95 ਬਣਾਓ (ਜਾਵਾਸਕਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)",
+       "tog-usenewrc": "ਹਾਲà©\80à¨\86 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨\85ਤà©\87 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à©±à¨\9a à¨¸à¨«à¨¼à©\87 à¨®à©\81ਤਾਬà¨\95 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à©\87 à¨\97ਰà©\81ੱਪ ਬਣਾਓ (ਜਾਵਾਸਕਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)",
        "tog-numberheadings": "ਆਟੋ-ਨੰਬਰ ਸਿਰਨਾਵੇਂ",
        "tog-showtoolbar": "ਸੋਧ ਸੰਦਬਕਸਾ ਵੇਖੋ",
        "tog-editondblclick": "ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰਨ 'ਤੇ ਸਫ਼ੇ ਸੋਧੋ",
        "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": "ਬਦਲ",
        "mypreferencesprotected": "ਤੁਹਾਨੂੰ ਆਪਣੀਆਂ ਪਸੰਦਾਂ ਵਿੱਚ ਸੋਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
        "ns-specialprotected": "ਖ਼ਾਸ ਸਫ਼ਿਆਂ ’ਚ ਫੇਰ-ਬਦਲ ਨਹੀਂ ਹੋ ਸਕਦੇ।",
        "titleprotected": "ਇਹ ਸਿਰਲੇਖ [[User:$1|$1]] ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਦਿੱਤਾ ਹੋਇਆ ਕਾਰਨ ਹੈ, \"''$2''\"।",
-       "filereadonlyerror": "\"$1\" à¨«à¨¼à¨¾à¨\88ਲ à¨µà¨¿à©±à¨\9a à¨¤à¨¬à¨¦à©\80ਲà©\80 à¨¨à¨¹à©\80à¨\82 à¨¹à©\8b à¨°à¨¹à©\80 à¨\95ਿà¨\89à¨\82à¨\95ਿ à¨«à¨¼à¨¾à¨\88ਲ à¨­à©°à¨¡à¨¾à¨° \"$2\" à¨¸à¨¿à¨°à¨«à¨¼ à¨ªà©\9cà©\8dਹਨਯà©\8bà¨\97 à¨°à©\82ਪ à¨µà¨¿à¨\9a à¨¹à©\88।\n\nà¨\89ਹ à¨ªà©\8dਰਸ਼ਾਸà¨\95, à¨\9cਿਹਨà©\87 à¨\87ਹ à¨°à©\8bà¨\95 à¨²à¨¾à¨\88 à¨¹à©\88, à¨¦à¨¾ à¨\95ਹਿਣਾ à¨¹à©\88:",
+       "filereadonlyerror": "\"$1\" à¨«à¨¼à¨¾à¨\88ਲ à¨µà¨¿à©±à¨\9a à¨¤à¨¬à¨¦à©\80ਲà©\80 à¨¨à¨¹à©\80à¨\82 à¨¹à©\8b à¨¸à¨\95ਦà©\80 à¨\95ਿà¨\89à¨\82à¨\95ਿ à¨«à¨¼à¨¾à¨\88ਲ à¨­à©°à¨¡à¨¾à¨° \"$2\" à¨¸à¨¿à¨°à¨«à¨¼ à¨µà©\87à¨\96ਣਯà©\8bà¨\97 à¨°à©\82ਪ à¨µà¨¿à¨\9a à¨¹à©\88।\n\nà¨\89ਹ à¨ªà©\8dਰਬੰਧà¨\95, à¨\9cਿਹਨà©\87 à¨\87ਹ à¨°à©\8bà¨\95 à¨²à¨¾à¨\88 à¨¹à©\88, à¨¦à¨¾ à¨\95ਹਿਣਾ à¨¹à©\88: ''$3''",
        "invalidtitle-knownnamespace": "ਥਾਂ-ਨਾਮ \"$2\" ਅਤੇ ਲਿਖਤ \"$3\" ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ",
        "invalidtitle-unknownnamespace": "ਅਣਜਾਣ ਨਾਂ-ਸਥਾਨ ਗਿਣਤੀ $1 ਅਤੇ ਲਿਖਤ $2 ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ",
        "exception-nologin": "ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ",
        "virus-badscanner": "ਮੰਦਾ ਪ੍ਰਬੰਧ: ਅਣਜਾਣ ਵਾਇਰਸ ਸਕੈਨਰ: ''$1''",
        "virus-scanfailed": "ਸਕੈਨ ਫੇਲ੍ਹ ਹੈ (ਕੋਡ $1)",
        "virus-unknownscanner": "ਅਣਪਛਾਤਾ ਐਂਟੀਵਾਇਰਸ:",
-       "logouttext": "'''ਹੁਣ ਤੁਸੀਂ ਵਿਦਾਈ ਲੈ ਚੁੱਕੇ ਹੋ।'''\n\nਤੁਸੀਂ {{SITENAME}} ਦੀ ਵਰਤੋਂ ਗੁਮਨਾਮ ਰਹਿ ਕੇ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਦੁਬਾਰਾ ਇਹੋ ਜਾਂ ਵੱਖਰੇ ਵਰਤੋਂਕਾਰ ਵਜੋਂ ਦਾਖ਼ਲਾ ਲੈ ਸਕਦੇ ਹੋ।\nਧਿਆਨ ਦਿਉ ਕਿ ਜਿੰਨੀ ਦੇਰ ਤੱਕ ਤੁਸੀਂ ਆਪਣੇ ਬਰਾਊਜ਼ਰ ਦਾ ਕੈਸ਼ ਸਾਫ਼ ਨਹੀਂ ਕਰਦੇ, ਕੁਝ ਸਫ਼ੇ ਇੱਦਾਂ ਵਿਖਣਗੇ ਜਿਵੇਂ ਤੁਸੀਂ ਅਜੇ ਵੀ ਦਾਖ਼ਲ ਹੀ ਹੋ।",
+       "logouttext": "<strong>ਹੁਣ ਤੁਸੀਂ ਵਿਦਾਈ ਲੈ ਚੁੱਕੇ ਹੋ।</strong> ਧਿਆਨ ਦਿਉ ਕਿ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਆਪਣੇ ਬਰਾਊਜ਼ਰ ਦਾ ਕੈਸ਼ ਸਾਫ਼ ਨਹੀਂ ਕਰਦੇ, ਕੁਝ ਸਫ਼ੇ ਏਦਾਂ ਵਿਖਾਈ ਦੇ ਸਕਦੇ ਹਨ ਕਿ ਜਿਵੇਂ ਤੁਸੀਂ ਅਜੇ ਵੀ ਲਾਗਇਨ ਹੀ ਹੋ।",
        "welcomeuser": "$1 ਜੀ ਆਇਆਂ ਨੂੰ!",
        "welcomecreation-msg": "ਤੁਹਾਡਾ ਖਾਤਾ ਬਣ ਚੁੱਕਾ ਹੈ। ਆਪਣੀਆਂ [[Special:Preferences|{{SITENAME}} ਪਸੰਦ]] ਬਦਲਣੀ ਨਾ ਭੁੱਲੋ।",
        "yourname": "ਵਰਤੋਂਕਾਰ-ਨਾਂ:",
        "createacct-benefit-body3": "ਹਾਲੀਆ {{PLURAL:$1|ਯੋਗਦਾਨੀ}}",
        "badretype": "ਤੁਹਾਡੇ ਵਲੋਂ ਦਿੱਤੇ ਪਾਸਵਰਡ ਮਿਲਦੇ ਨਹੀਂ ਹਨ।",
        "userexists": "ਯੂਜ਼ਰ-ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ। ਵੱਖਰਾ ਨਾਂ ਚੁਣੋ ਜੀ।",
-       "loginerror": "ਲਾਗਇਨ ਗਲਤੀ",
+       "loginerror": "ਲਾà¨\97à¨\87ਨ à¨\97਼ਲਤà©\80",
        "createacct-error": "ਖਾਤਾ ਬਣਾਉਣ ਵਿਚ ਗਲਤੀ",
        "createaccounterror": "ਖਾਤਾ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: $1",
        "nocookiesnew": "ਯੂਜ਼ਰ ਅਕਾਊਂਟ ਬਣਾਇਆ ਗਿਆ ਹੈ, ਪਰ ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਹੈ।{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.",
        "user-mail-no-addy": "ਬਿਨਾਂ ਈ-ਮੇਲ ਪਤਾ ਦਿੱਤੇ ਈ-ਮੇਲ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ।",
        "user-mail-no-body": "ਖ਼ਾਲੀ ਜਾਂ ਬਹੁਤੀ ਛੋਟੀ ਸਮੱਗਰੀ ਨਾਲ਼ ਈਮੇਲ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਗਈ",
        "changepassword": "ਪਾਸਵਰਡ ਬਦਲੋ",
-       "resetpass_announce": "ਤà©\81ਸà©\80à¨\82 à¨\87ੱà¨\95 à¨\86ਰà¨\9c਼à©\80 à¨\88-ਮà©\87ਲ à¨\95à©\80ਤà©\87 à¨\95à©\8bਡ à¨¨à¨¾à¨² à¨²à¨¾à¨\97à¨\87ਨ à¨\95à©\80ਤਾ à¨¹à©\88। à¨²à¨¾à¨\97à¨\87ਨ à¨ªà©\82ਰਾ à¨\95ਰਨ à¨²à¨\88, à¨¤à©\81ਹਾਨà©\82à©° à¨\87ੱਥà©\87 à¨¨à¨µà¨¾à¨\82 à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨¦à©\87ਣਾ à¨ªà¨µà©\87à¨\97ਾ:",
+       "resetpass_announce": "ਲਾà¨\97à¨\87ਨ à¨ªà©\82ਰਾ à¨\95ਰਨ à¨²à¨\88 à¨¤à©\81ਹਾਨà©\82à©° à¨¨à¨µà¨¾à¨\82 à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨¬à¨£à¨¾à¨\89ਣਾ à¨ªà¨µà©\87à¨\97ਾ।",
        "resetpass_header": "ਅਕਾਊਂਟ ਪਾਸਵਰਡ ਬਦਲੋ",
        "oldpassword": "ਪੁਰਾਣਾ ਪਾਸਵਰਡ:",
        "newpassword": "ਨਵਾਂ ਪਾਸਵਰਡ:",
        "resetpass-abort-generic": "ਇੱਕ ਐਕਸਟੈਂਸ਼ਨ ਵੱਲੋਂ ਪਾਸਵਰਡ ਦੀ ਤਬਦੀਲੀ ਰੱਦ ਕੀਤੀ ਗਈ",
        "passwordreset": "ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਕਰੋ",
        "passwordreset-text-one": "ਪਾਸਵਰਡ ਦੁਬਾਰਾ ਬਣਾਉਣ ਲਈ ਇਹ ਫ਼ਾਰਮ ਭਰੋ।",
-       "passwordreset-text-many": "{{PLURAL:$1|à¨\86ਪਣਾ à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨®à©\81à©\9c à¨¬à¨£à¨¾à¨\89ਣ ਲਈ ਕੋਈ ਇੱਕ ਥਾਂ ਭਰੋ।}}",
+       "passwordreset-text-many": "{{PLURAL:$1|à¨\88-ਮà©\87ਲ à¨\9c਼ਰà©\80à¨\8f à¨\86ਪਣਾ à¨\86ਰà¨\9c਼à©\80 à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨¹à¨¾à¨¸à¨² à¨\95ਰਨ ਲਈ ਕੋਈ ਇੱਕ ਥਾਂ ਭਰੋ।}}",
        "passwordreset-legend": "ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਕਰੋ",
        "passwordreset-disabled": "ਇਸ ਵਿਕੀ ਤੇ ਪਾਸਵਰਡ ਰੀਸੈੱਟ ਬੰਦ ਕੀਤੇ ਗਏ ਹਨ।",
        "passwordreset-emaildisabled": "ਇਹ ਵਿਕਿ ਉੱਤੇ ਈਮੇਲ ਫੀਚਰ ਬੰਦ ਕੀਤਾ ਹੋਇਆ ਹੈ।",
        "currentrev": "ਮੌਜੂਦਾ ਰੀਵਿਜ਼ਨ",
        "currentrev-asof": "$1 ਮੁਤਾਬਕ ਸਭ ਤੋਂ ਨਵਾਂ ਰੀਵਿਜਨ",
        "revisionasof": "$1 ਦਾ ਰੀਵਿਜਨ",
-       "revision-info": "$2 ਦਾ ਬਣਾਇਆ $1 ਦਾ ਰੀਵਿਜਨ",
+       "revision-info": "{{GENDER:$6|$2}}$7 ਦਾ ਬਣਾਇਆ $1 ਦਾ ਰੀਵਿਜ੍ਹਨ",
        "previousrevision": "←ਪੁਰਾਣਾ ਰੀਵਿਜਨ",
        "nextrevision": "ਨਵਾਂ ਰੀਵਿਜਨ →",
        "currentrevisionlink": "ਸਭ ਤੋ ਨਵਾਂ ਰੀਵਿਜਨ",
        "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-articles-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": "ਥੰਮਨੇਲ ਆਕਾਰ:",
        "watchlisttools-raw": "ਕੱਚੀ ਨਿਗਰਾਨ-ਸੂਚੀ ਸੋਧੋ",
        "duplicate-defaultsort": "ਪੁਰਾਣੀ ਮੂਲ ਕਰਮਾਂਕਨ ਕੁੰਜੀ $1 ਦੇ ਬਜਾਏ ਹੁਣ ਮੂਲ ਕਰਮਾਂਕਨ ਕੁੰਜੀ $2 ਹੋਵੇਗੀ।",
        "version": "ਵਰਜਨ",
-       "version-specialpages": "ਖ਼ਾਸ ਸਫ਼ੇ",
        "version-skins": "ਸਕਿਨਾਂ",
+       "version-specialpages": "ਖ਼ਾਸ ਸਫ਼ੇ",
        "version-other": "ਹੋਰ",
        "version-hooks": "ਹੁੱਕਾਂ",
        "version-hook-name": "ਹੁੱਕ ਦਾ ਨਾਂ",
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 380ea15..59574f4 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",
        "mergehistory-empty": "Brak historii zmian do scalenia.",
        "mergehistory-success": "$3 {{PLURAL:$3|zmiana|zmiany|zmian}} w [[:$1]] zostało scalonych z [[:$2]].",
        "mergehistory-fail": "Scalenie historii zmian jest niewykonalne. Zmień ustawienia parametrów.",
+       "mergehistory-fail-toobig": "Nie można połączyć historii, gdyż wymagałoby to przeniesienia więcej niż maksymalnej dopuszczalnej liczby $1 {{PLURAL:$1|wersji}}.",
        "mergehistory-no-source": "Strona źródłowa $1 nie istnieje.",
        "mergehistory-no-destination": "Strona docelowa $1 nie istnieje.",
        "mergehistory-invalid-source": "Strona źródłowa musi mieć poprawną nazwę.",
        "difference-missing-revision": "{{PLURAL:$2|Wersja|$2 wersje|$2 wersji}} #$1 strony \"{{PAGENAME}}\" nie {{PLURAL:$2|została znaleziona|zostały znalezione|zostało znalezionych}}.\n\nZazwyczaj jest to spowodowane przestarzałym linkiem do usuniętej strony. Powód usunięcia znajduje się w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze].",
        "searchresults": "Wyniki wyszukiwania",
        "searchresults-title": "Wyniki wyszukiwania „$1”",
-       "toomanymatches": "Zbyt wiele elementów pasujących do wzorca, spróbuj innego zapytania",
        "titlematches": "Znaleziono w tytułach",
        "textmatches": "Znaleziono w treści stron",
        "notextmatches": "Nie znaleziono w treści stron",
        "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",
        "largefileserver": "Plik jest większy niż maksymalny dozwolony rozmiar.",
        "emptyfile": "Przesłany plik wydaje się być pusty. Może być to spowodowane literówką w nazwie pliku.\nSprawdź, czy nazwa jest prawidłowa.",
        "windows-nonascii-filename": "Na tej wiki nie można używać znaków specjalnych w nazwach plików.",
-       "fileexists": "Plik o takiej nazwie już istnieje.\nSprawdź <strong>[[:$1]]</strong>, jeśli nie jesteś pewien czy chcesz go zastąpić.\n[[$1|thumb]]",
+       "fileexists": "Plik o takiej nazwie już istnieje.\nSprawdź <strong>[[:$1]]</strong>, jeśli nie jesteś {{GENDER:|pewien|pewna}} czy chcesz go zastąpić.\n[[$1|thumb]]",
        "filepageexists": "Istnieje już strona opisu tego pliku, została utworzona <strong>[[:$1]]</strong>, ale brak jest pliku o tej nazwie.\nInformacje, które wprowadzasz o przesyłanym pliku, nie pojawią się na jego stronie opisu.\nJeśli chcesz, by się tam pojawiły, musisz później, ręcznie przeredagować stronę opisu.\n[[$1|thumb]]",
-       "fileexists-extension": "Plik o podobnej nazwie już istnieje: [[$2|thumb]]\n* Nazwa przesyłanego pliku: <strong>[[:$1]]</strong>\n* Nazwa istniejącego pliku: <strong>[[:$2]]</strong>\nWybierz inną nazwę.",
+       "fileexists-extension": "Plik o podobnej nazwie już istnieje: [[$2|thumb]]\n* Nazwa przesyłanego pliku: <strong>[[:$1]]</strong>\n* Nazwa istniejącego pliku: <strong>[[:$2]]</strong>\nMoże chcesz użyć bardziej zróżnicowanej nazwy?",
        "fileexists-thumbnail-yes": "Plik wydaje się być pomniejszoną grafiką ''(miniaturką)''. [[$1|thumb]]\nSprawdź plik <strong>[[:$1]]</strong>.\nJeśli wybrany plik jest tą samą grafiką co ta w rozmiarze pierwotnym, nie musisz przesyłać dodatkowej miniaturki.",
        "file-thumbnail-no": "Nazwa pliku zaczyna się od <strong>$1</strong>.\nWydaje się, że jest to pomniejszona grafika ''(miniaturka)''.\nJeśli posiadasz tę grafikę w pełnym rozmiarze – prześlij ją. Jeśli chcesz wysłać tę – zmień nazwę przesyłanego obecnie pliku.",
        "fileexists-forbidden": "Plik o tej nazwie już istnieje i nie może zostać nadpisany.\nJeśli chcesz przesłać plik cofnij się i prześlij go pod inną nazwą. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Usuwanie i odtwarzanie plików zostało tymczasowo wyłączone z powodu konserwacji.",
        "filedelete-maintenance-title": "Nie można usunąć pliku",
        "mimesearch": "Wyszukiwanie MIME",
-       "mimesearch-summary": "Ta strona umożliwia wyszukiwanie plików ze względu na ich typ MIME.\nUżycie: typ_treści/podtyp, np. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Ta strona umożliwia wyszukiwanie plików ze względu na ich typ MIME.\nUżycie: typ_treści/podtyp albo typ_treści/*, np. <code>image/jpeg</code>.",
        "mimetype": "Typ MIME",
        "download": "pobierz",
        "unwatchedpages": "Nieobserwowane strony",
        "wantedtemplates": "Potrzebne szablony",
        "mostlinked": "Najczęściej linkowane strony",
        "mostlinkedcategories": "Kategorie o największej liczbie stron",
-       "mostlinkedtemplates": "Najczęściej linkowane szablony",
+       "mostlinkedtemplates": "Najczęściej transkludowane strony",
        "mostcategories": "Strony z największą liczbą kategorii",
        "mostimages": "Najczęściej linkowane pliki",
        "mostinterwikis": "Strony z największą liczbą linków interwiki",
        "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",
        "expand_templates_remove_nowiki": "Ukrywaj w wyniku znaczniki <nowiki>",
        "expand_templates_generate_xml": "Pokaż drzewo analizatora składni w formacie XML",
        "expand_templates_generate_rawhtml": "Pokaż surowy HTML",
-       "expand_templates_preview": "Podgląd"
+       "expand_templates_preview": "Podgląd",
+       "pagelanguage": "Wybór języka strony",
+       "pagelang-name": "Strona",
+       "pagelang-language": "Język",
+       "pagelang-use-default": "Użyj domyślnego języka",
+       "pagelang-select-lang": "Wybierz język",
+       "right-pagelang": "Zmiana języka strony",
+       "action-pagelang": "zmiany języka strony",
+       "log-name-pagelang": "Rejestr zmian języka",
+       "log-description-pagelang": "Rejestr zmian języków przypisanych do poszczególnych stron",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|zmienił|zmieniła}} język strony $3 z „$4” na „$5”."
 }
index c258fb7..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",
        "difference-missing-revision": "{{PLURAL:$2|Na revision|$2 revision}} dë sta diferensa ($1) a {{PLURAL:$2|l'é pa stàita|son pa stàite}} trovà.\n\n\n\nSòn a l'é normalment causà da l'andèje dapress a na veja liura stòrica a na pàgina ch'a l'é stàita scancelà. Ij detaj a peulo esse trovà ant ël [registr ëd jë scanselament ëd {{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}].",
        "searchresults": "Arzultà dl'arserca",
        "searchresults-title": "Arzultà dl'arserca për «$1»",
-       "toomanymatches": "Parèj a-i ven fòra tròpa ròba, për piasì, ch'a preuva n'arserca diferenta.",
        "titlematches": "Ant ij tìtoj dj'artìcoj",
        "textmatches": "Ant ël test ëd j'artìcoj",
        "notextmatches": "La vos che a l'ha ciamà a l'é pa trovasse antrames aj test dj'artìcoj",
        "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à",
        "recentchanges-label-unpatrolled": "Sta modìfica-sì a l'é pa ancó stàita verificà",
        "recentchanges-label-plusminus": "La taja dla pàgina a l'é cangià d'un nùmer ëd bytes",
        "recentchanges-legend-heading": "'''Legend:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vëdde ëdcò [[Special:NewPages|lista dle pàgine neuve]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vëdde ëdcò la [[Special:NewPages|lista dle pàgine neuve]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Ambelessì sota a-i é la lista dle modìfiche da <strong>$2</strong> (mostrà fin-a a <strong>$1</strong>).",
        "rclistfrom": "Mostré le modìfiche a parte da $3 $2",
        "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 f5bb154..ff4c931 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",
        "unprotectthispage": "Alterar a proteção desta página",
        "newpage": "Página nova",
        "talkpage": "Dialogar sobre esta página",
-       "talkpagelinktext": "Discussão",
+       "talkpagelinktext": "discussão",
        "specialpage": "Página especial",
        "personaltools": "Ferramentas pessoais",
        "postcomment": "Nova seção",
        "jumptonavigation": "navegação",
        "jumptosearch": "pesquisa",
        "view-pool-error": "Desculpe-nos, os servidores estão sobrecarregados neste momento.\nMuitos usuários estão tentando ver esta página.\nAguarde um instante antes de tentar acessar esta página novamente.\n\n$1",
+       "generic-pool-error": "Desculpe-nos, os servidores estão sobrecarregados neste momento.\nMuitos usuários estão tentando ver esta página.\nAguarde um instante antes de tentar acessar esta página novamente.",
        "pool-timeout": "Tempo limite de espera para o bloqueio excedido",
        "pool-queuefull": "A fila de processos está cheia",
        "pool-errorunknown": "Erro desconhecido",
        "difference-missing-revision": "{{PLURAL:$2|Uma revisão|$2 revisões}} desta diferença ($1) não {{PLURAL:$2|foi encontrada|foram encontradas}}.\n\nIsto é geralmente causado por seguir um link de histórico desatualizado para uma página que foi eliminada.\nOs detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminação].",
        "searchresults": "Resultados da pesquisa",
        "searchresults-title": "Resultados da pesquisa por \"$1\"",
-       "toomanymatches": "Foram retornados muitos resultados. Por favor, tente um filtro de pesquisa diferente",
        "titlematches": "Resultados nos títulos das páginas",
        "textmatches": "Resultados nos textos das páginas",
        "notextmatches": "Não foi possível localizar, no conteúdo das páginas, o termo pesquisado",
        "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",
        "listgrouprights-namespaceprotection-namespace": "Namespace",
        "listgrouprights-namespaceprotection-restrictedto": "Direito(s) permitindo edições do usuário",
        "trackingcategories": "Monitorando categorias",
+       "trackingcategories-summary": "Esta página lista categorias de monitoramento que são preenchidas automaticamente pelo software MediaWiki. Seus nomes podem ser alterados através da alteração das mensagens de sistema relevantes no namespace {{ns: 8}}.",
+       "trackingcategories-msg": "Categoria de monitoramento",
+       "trackingcategories-desc": "Critérios de inclusão de categoria",
+       "noindex-category-desc": "A página não é indexada por robôs, porque possui a palavra mágica <code><nowiki>__NOINDEX__</nowiki></code> e está em um namespace onde a flag é permitida.",
+       "post-expand-template-inclusion-category-desc": "Após expandir todos as predefinições, o tamanho da página é maior que o valor permitido na variável <code>$wgMaxArticleSize</code>, por isso algumas predefinições não foram expandidas.",
        "trackingcategories-disabled": "A categoria está desabilitada",
        "mailnologin": "Nenhum endereço de envio",
        "mailnologintext": "Necessita de estar [[Special:UserLogin|autenticado]] e de possuir um endereço de e-mail válido nas suas [[Special:Preferences|preferências]] para poder enviar um e-mail a outros usuários.",
        "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",
        "watchlistedit-raw-done": "Sua lista de páginas vigiadas foi atualizada.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Foi adicionado um título|Foram adicionados $1 títulos}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Foi removido um título|Foram removidos $1 títulos}}:",
+       "watchlistedit-clear-legend": "Limpar a lista de páginas vigiadas",
        "watchlistedit-clear-explain": "Todos os títulos serão removidos da sua lista de páginas vigiadas",
        "watchlistedit-clear-titles": "Títulos:",
        "watchlistedit-clear-submit": "Limpar a lista de páginas vigiadas (Esta ação é permanente!)",
        "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 instalados",
        "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",
        "htmlform-no": "Não",
        "htmlform-yes": "Sim",
        "htmlform-chosen-placeholder": "Selecione uma opção",
+       "htmlform-cloner-required": "Pelo menos um valor é requerido",
        "sqlite-has-fts": "$1 com suporte de pesquisa de texto completo",
        "sqlite-no-fts": "$1 sem suporte de pesquisa de texto completo",
        "logentry-delete-delete": "$1 apagou a página $3",
        "expand_templates_remove_nowiki": "Suprima marcações <nowiki> no resultado",
        "expand_templates_generate_xml": "Mostrar árvore de análise (parse) do XML",
        "expand_templates_generate_rawhtml": "Mostrar HTML puro",
-       "expand_templates_preview": "Pré-visualização"
+       "expand_templates_preview": "Pré-visualização",
+       "pagelang-select-lang": "Selecionar idioma",
+       "right-pagelang": "Mudar idioma da página",
+       "action-pagelang": "mudar idioma da página",
+       "log-name-pagelang": "Mudar idioma do log"
 }
index 7dcba69..ac5d18e 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",
        "edit": "Editar",
        "edit-local": "Editar descrição local",
        "create": "Criar",
-       "create-local": "Adicionar descrição do local",
+       "create-local": "Adicionar descrição local",
        "editthispage": "Editar esta página",
        "create-this-page": "Criar esta página",
        "delete": "Eliminar",
        "unprotectthispage": "Alterar a proteção desta página",
        "newpage": "Página nova",
        "talkpage": "Discutir esta página",
-       "talkpagelinktext": "Discussão",
+       "talkpagelinktext": "discussão",
        "specialpage": "Página especial",
        "personaltools": "Ferramentas pessoais",
        "postcomment": "Seção nova",
        "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.",
        "difference-missing-revision": "{{PLURAL:$2|Uma revisão|$2 revisões}} desta diferença ($1) não {{PLURAL:$2|foi encontrada|foram encontradas}}.\n\nIsto é geralmente causado por seguir uma ligação de histórico desatualizada para uma página que foi eliminada.\nOs detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminação].",
        "searchresults": "Resultados da pesquisa",
        "searchresults-title": "Resultados da pesquisa de \"$1\"",
-       "toomanymatches": "Foram devolvidos demasiados resultados; tente outro termo de pesquisa, por favor",
        "titlematches": "Resultados no título das páginas",
        "textmatches": "Resultados no conteúdo das páginas",
        "notextmatches": "Não foi possível localizar, no conteúdo das páginas, o termo pesquisado",
        "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",
        "largefileserver": "O tamanho deste ficheiro é superior ao permitido pela configuração do servidor.",
        "emptyfile": "O ficheiro que enviou parece estar vazio.\nIsto pode dever-se a um erro no nome do ficheiro.\nVerifique se é realmente este o ficheiro que deseja carregar, por favor.",
        "windows-nonascii-filename": "A wiki não aceita nomes de ficheiros com caracteres especiais.",
-       "fileexists": "Já existe um ficheiro com este nome.\nVerifique <strong>[[:$1]]</strong> caso não tenha a certeza de que quer alterar o ficheiro atual, por favor.\n[[$1|thumb]]",
+       "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",
        "uctop": "(atual)",
        "month": "Até o mês:",
        "year": "Até o ano:",
-       "sp-contributions-newbies": "Mostrar só as contribuições das contas recentes",
+       "sp-contributions-newbies": "Mostrar só as contribuições de contas recentes",
        "sp-contributions-newbies-sub": "Para contas novas",
        "sp-contributions-newbies-title": "Contribuições de contas novas",
        "sp-contributions-blocklog": "registo de bloqueios",
        "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",
        "expand_templates_remove_nowiki": "Suprimir marcações <nowiki> no resultado",
        "expand_templates_generate_xml": "Mostrar a árvore de análise sintáctica do XML",
        "expand_templates_generate_rawhtml": "Mostrar o HTML puro",
-       "expand_templates_preview": "Antevisão do resultado"
+       "expand_templates_preview": "Antevisão do resultado",
+       "pagelanguage": "Seletor de idioma da página",
+       "pagelang-name": "Página",
+       "pagelang-language": "Idioma",
+       "pagelang-use-default": "Usar idioma pré-definido",
+       "pagelang-select-lang": "Escolher o idioma",
+       "right-pagelang": "Alterar o idioma da página",
+       "action-pagelang": "alterar o idioma da página",
+       "log-name-pagelang": "Alterar registo de idioma",
+       "log-description-pagelang": "Este é um registo de alterações aos idiomas das páginas.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|alterou}} o idioma da página $3 de $4 para $5."
 }
index 26a58de..78dd1fd 100644 (file)
        "faqpage": "{{doc-important|Do not translate <code>Project:</code> part.}}\n\"FAQ\" is short for \"frequently asked questions\".\n\nThis page is only linked in CologneBlue (an old skin), not in Monobook or Vector.",
        "sitetitle": "{{Ignore}}",
        "sitesubtitle": "{{Ignore}}",
-       "vector-action-addsection": "Used in the Vector skin. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}",
-       "vector-action-delete": "Used in the Vector skin, as the name of a tab at the top of the page. See for example {{canonicalurl:Main_Page|useskin=vector}}\n\n{{Identical|Delete}}",
-       "vector-action-move": "Used in the Vector skin, on the tabs at the top of the page. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}\n\n{{Identical|Move}}",
-       "vector-action-protect": "Tab at top of page, in vector skin\n\n{{Identical|Protect}}",
-       "vector-action-undelete": "Tab at top of page, in vector skin.\n{{Identical|Undelete}}",
-       "vector-action-unprotect": "Tab at top of page, in vector skin.\n{{Identical|Change protection}}",
-       "vector-view-create": "Tab label in the Vector skin. See for example {{canonicalurl:Foo|useskin=vector}}\n{{Identical|Create}}",
-       "vector-view-edit": "Tab label in the Vector skin. See for example {{canonicalurl:Main_Page|useskin=vector}}\n{{Identical|Edit}}",
-       "vector-view-history": "Tab label in the Vector skin. See for example {{canonicalurl:Main_Page|useskin=vector}}\n{{Identical|View history}}",
-       "vector-view-view": "Tab label in the Vector skin (verb). See for example {{canonicalurl:Main_Page|useskin=vector}}.\n{{Identical|Read}}",
-       "vector-view-viewsource": "Tab label in the Vector skin.\n{{Identical|View source}}",
        "actions": "{{Identical|Action}}",
-       "vector-more-actions": "Label in the Vector skin's menu for the less-important or rarer actions which are not shown as tabs (like moving the page, or for sysops deleting or protecting the page), as well as (for users with a narrow viewing window in their browser) the less-important tab actions which the user's browser is unable to fit in. {{Identical|More}}",
        "namespaces": "{{Identical|Namespace}}",
        "variants": "Used by the Vector skin.",
        "navigation-heading": "Heading shown above the navigation menu (sidebar) for screen-readers (or in non-standard skins).",
        "anonnotice": "{{notranslate}}",
        "newsectionheaderdefaultlevel": "{{notranslate}}\nParameters:\n* $1 - section name",
        "red-link-title": "Title for red hyperlinks. Indicates, that the page is empty, not written yet.\n\nParameters:\n* $1 - page title",
-       "sort-descending": "JavaScript message. Used by sortable table script.",
-       "sort-ascending": "JavaScript message. Used by sortable table script.",
+       "sort-descending": "JavaScript message. Used by sortable table script.\n\nSee also:\n* {{msg-mw|Sort-ascending}}",
+       "sort-ascending": "JavaScript message. Used by sortable table script.\n\nSee also:\n* {{msg-mw|Sort-descending}}\n{{Identical|Sort ascending}}",
        "nstab-main": "The name for the tab of the main namespace. Example: [[Example]]\n\nSee also:\n* {{msg-mw|Nstab-main}}\n* {{msg-mw|Accesskey-ca-nstab-main}}\n* {{msg-mw|Tooltip-ca-nstab-main}}\n{{Identical|Page}}",
        "nstab-user": "The name for the tab of the user namespace. Example: [[User:Example]]. It is possible to use <nowiki>{{GENDER:{{ROOTPAGENAME}}|male form|female form}}</nowiki> if needed.\n\nSee also:\n* {{msg-mw|Nstab-user}}\n* {{msg-mw|Accesskey-ca-nstab-user}}\n* {{msg-mw|Tooltip-ca-nstab-user}}\n{{Identical|User page}}",
        "nstab-media": "The name for the tab of the media namespace. Example: [[Media:Example]]\n\nSee also:\n* {{msg-mw|Nstab-media}}\n* {{msg-mw|Accesskey-ca-nstab-media}}\n* {{msg-mw|Tooltip-ca-nstab-media}}",
        "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}}",
        "mergehistory-empty": "Used in [[Special:MergeHistory]].",
        "mergehistory-success": "Used in [[Special:MergeHistory]].\n* $1 - target page title\n* $2 - destination page title\n* $3 - number of revisions which succeeded to merge",
        "mergehistory-fail": "Used as error message in [[Special:MergeHistory]].",
+       "mergehistory-fail-toobig": "Used as error message in [[Special:MergeHistory]].\n* $1 - maximum allowed number of revisions that can be moved",
        "mergehistory-no-source": "Used as error message in [[Special:MergeHistory]].\n* $1 - source page title\nSee also:\n* {{msg-mw|mergehistory-invalid-source}}\n* {{msg-mw|mergehistory-invalid-destination}}\n* {{msg-mw|mergehistory-no-destination}}\n* {{msg-mw|mergehistory-same-destination}}",
        "mergehistory-no-destination": "Used as error message in [[Special:MergeHistory]].\n* $1 - destination page title\nSee also:\n* {{msg-mw|mergehistory-invalid-source}}\n* {{msg-mw|mergehistory-no-source}}\n* {{msg-mw|mergehistory-invalid-destination}}\n* {{msg-mw|mergehistory-same-destination}}",
        "mergehistory-invalid-source": "Used as error message in [[Special:MergeHistory]].\n\nSee also:\n* {{msg-mw|mergehistory-no-source}}\n* {{msg-mw|mergehistory-invalid-destination}}\n* {{msg-mw|mergehistory-no-destination}}\n* {{msg-mw|mergehistory-same-destination}}",
        "search-summary": "{{doc-specialpagesummary|search}}",
        "searchresults": "This is the title of the page that contains the results of a search.\n\n{{Identical|Search results}}",
        "searchresults-title": "Appears as page title in the html header of the search result special page.\n\nParameters:\n* $1 - the search term",
-       "toomanymatches": "Used as section header in [[Special:Search]], when there are too many hits.",
        "titlematches": "Used as section header in [[Special:Search]].\n\nThis message is followed by search results.",
        "textmatches": "When displaying search results",
        "notextmatches": "Error message when there are no results",
        "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}}",
        "group-suppress-member": "{{doc-group|suppress|member}}\nThis is a member of the optional (disabled by default) user group, meant for the [[mw:RevisionDelete|RevisionDelete]] feature, to change the visibility of revisions through [[Special:RevisionDelete]].\n\n{{Identical|Oversight}}",
        "grouppage-user": "{{doc-group|user|page}}",
        "grouppage-autoconfirmed": "{{doc-group|autoconfirmed|page}}",
-       "grouppage-bot": "{{doc-group|bot|page}}",
+       "grouppage-bot": "{{doc-group|bot|page}}\n{{Identical|Bot}}",
        "grouppage-sysop": "{{doc-group|sysop|page}}",
        "grouppage-bureaucrat": "{{doc-group|bureaucrat|page}}",
        "grouppage-suppress": "{{doc-group|suppress|page}}\n{{Identical|Oversight}}",
        "license-nopreview": "Error message when a certain license does not exist",
        "upload_source_url": "Used in [[Special:Upload]].\n\nSee also:\n* {{msg-mw|Sourcefilename|label}}\n* {{msg-mw|Sourceurl|label}}\n* {{msg-mw|Upload source file}}\n* {{msg-mw|Upload-maxfilesize}}",
        "upload_source_file": "Used in [[Special:Upload]].\n\nSee also:\n* {{msg-mw|Sourcefilename|label}}\n* {{msg-mw|Sourceurl|label}}\n* {{msg-mw|Upload source url}}\n* {{msg-mw|Upload-maxfilesize}}",
+       "listfiles-delete": "Text of the delete links next to the entries on [[Special:ListFiles]], surrounded by parentheses.",
        "listfiles-summary": "This message is displayed at the top of [[Special:ImageList]] to explain how to use that special page.",
        "listfiles_search_for": "Input label for the form displayed on [[Special:ListFiles]].",
        "imgfile": "{{Identical|File}}",
        "categoriespagetext": "{{doc-important|Do not translate or change links.}}\nText displayed in [[Special:Categories]].\n\nIn order to translate \"Unused categories\" and \"wanted categories\" see {{msg-mw|Unusedcategories}} and {{msg-mw|Wantedcategories}}.\n\nParameters:\n* $1 - number of categories",
        "categoriesfrom": "Used as label for the input box in [[Special:Categories]].\n\nThis message follows the fieldset label {{msg-mw|categories}}, and is followed by the input box.",
        "special-categories-sort-count": "Commented out at this time.\n\nThis message is used on [[Special:Categories]] to sort the list by the number of members in the categories.\n\nSee also:\n* {{msg-mw|Special-categories-sort-abc}}",
-       "special-categories-sort-abc": "Commented out at this time.\n\nThis message is used on [[Special:Categories]] to sort the list by the category name.\n\nSee also:\n* {{msg-mw|Special-categories-sort-count}}",
+       "special-categories-sort-abc": "Commented out at this time.\n\nThis message is used on [[Special:Categories]] to sort the list by the category name.\n\nSee also:\n* {{msg-mw|Special-categories-sort-count}}\n{{Identical|Sort alphabetically}}",
        "deletedcontributions": "The message is shown as a link on [[Special:SpecialPages]] to [[Special:DeletedContributions]].\n\n{{Identical|Deleted user contributions}}",
        "deletedcontributions-summary": "{{doc-specialpagesummary|deletedcontributions}}",
        "deletedcontributions-title": "Title of [[Special:DeletedContributions]] (extension), a special page with a list of edits to pages which were deleted. Only viewable by sysops.\n\n{{Identical|Deleted user contributions}}",
        "tooltip-summary": "Used as tooltip for Summary input box in Editor page.\n\nSee also:\n* {{msg-mw|Summary}}\n* {{msg-mw|Accesskey-summary}}\n* {{msg-mw|Tooltip-summary}}",
        "interlanguage-link-title": "{{Optional}}\nFormat of a sidebar interwiki link tooltip. Parameters:\n* $1 - page name in the target wiki\n* $2 - target wiki language autonym",
        "interlanguage-link-title-langonly": "{{ignored}}Interlanguage link title. Parameters: $1 replaced with a language name.",
+       "interlanguage-link-title-nonlang": "{{Optional}}\nFormat of a tooltip for a sidebar interwiki link that points to a specific project. Parameters:\n* $1 - page name in the target wiki\n* $2 - name of the target wiki (probably not a language name)",
+       "interlanguage-link-title-nonlangonly": "{{ignored}}Interlanguage link title. Parameters: $1 replaced with name of the target wiki (probably not a language name).",
        "common.css": "{{optional}}\nCSS applied to all users.",
-       "monobook.css": "{{optional}}\nCSS applied to users using Monobook skin.",
-       "vector.css": "{{optional}}",
        "print.css": "{{optional}}",
        "noscript.css": "{{optional}}",
        "group-autoconfirmed.css": "{{doc-group|autoconfirmed|css}}",
        "group-sysop.css": "{{doc-group|sysop|css}}",
        "group-bureaucrat.css": "{{doc-group|bureaucrat|css}}",
        "common.js": "{{optional}}\nJS for all users.",
-       "monobook.js": "{{optional}}\nJS for users using Monobook skin.",
-       "vector.js": "{{optional}}",
        "group-autoconfirmed.js": "{{doc-group|autoconfirmed|js}}",
        "group-user.js": "{{doc-group|user|js}}",
        "group-bot.js": "{{doc-group|bot|js}}",
        "pageinfo-category-pages": "See also:\n* {{msg-mw|Pageinfo-category-subcats}}\n* {{msg-mw|Pageinfo-category-files}}",
        "pageinfo-category-subcats": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-files}}",
        "pageinfo-category-files": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-subcats}}",
-       "skinname-monobook": "{{optional}}",
-       "skinname-vector": "{{optional}}",
        "markaspatrolleddiff": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolledtext}}\n{{Identical|Mark as patrolled}}",
        "markaspatrolledlink": "{{notranslate}}\nParameters:\n* $1 - link which has text {{msg-mw|Markaspatrolledtext}}",
        "markaspatrolledtext": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolleddiff}}",
        "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": "{{Logentry}}\nAdditional parameters:\n* $4 - old language code, or \"[def]\" (hard-coded)\n* $5 - new language code, or \"[def]\" (hard-coded)"
 }
index 22d6484..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",
        "difference-missing-revision": "Kay wakin kaymanta ($1) {{PLURAL:$2|huk musuqchasqa|$2 musuqchasqakuna}} manam tarisqachu.\n\nKayqa tukurqanman qullusqa p'anchaman t'inkimuq mawk'ayasqa wiñay kawsay t'inkiraykuchá.\nImaymanata [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} qulluy hallch'apim] tariykiman.",
        "searchresults": "Maskaymanta tarisqakuna",
        "searchresults-title": "\"$1\" nisqapaq maskaspa taripasqakuna",
-       "toomanymatches": "Nisyu taripasqakunam kutisqa, ama hina kaspa, huk taripanawan ruraykachay",
        "titlematches": "P'anqakunap sutinkunapi tarisqa",
        "textmatches": "P'anqakunap qillqankunapi tarisqa",
        "notextmatches": "Manam ima p'anqakunap qillqankunapipas tarisqachu",
        "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 92ecf7f..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",
        "difference-missing-revision": "{{PLURAL:$2|Ina versiun|$2 versiuns}} da questa differenza ($1) {{PLURAL:$2|n'è betg vegnida chattada|n'èn betg vegnidas chattadas}}.\n\nPer ordinari vegn quai chaschunà dad ina colliaziun da diff antiquada ad ina pagian ch'è vegnida stizzada. \nDetagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protocol da stizzar].",
        "searchresults": "Resultats da tschertga",
        "searchresults-title": "Resultats da tschertga per \"$1\"",
-       "toomanymatches": "Il dumber dals resultats è memia grond. Tschertga per plaschair auters terms.",
        "titlematches": "Titels da paginas che correspundan",
        "textmatches": "Texts da paginas che correspundan",
        "notextmatches": "Nagin text correspunda",
        "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 5c9707d..4271f79 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.",
        "difference-missing-revision": "{{PLURAL:$2|O versiune a|$2 versiuni ale|$2 de versiuni ale}} acestei diferențe ($1) nu {{PLURAL:$2|a fost găsită|au fost găsite}}.\n\nAcest lucru se întâmplă de obicei atunci când se accesează o legătură expirată către istoricul unei pagini șterse.\nDetalii se pot găsi în [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jurnalul ștergerilor].",
        "searchresults": "Rezultatele căutării",
        "searchresults-title": "Rezultatele căutării pentru „$1”",
-       "toomanymatches": "Prea multe rezultate au fost întoarse, încercă o căutare diferită",
        "titlematches": "Rezultate din titlurile paginilor",
        "textmatches": "Rezultate din conținutul paginilor",
        "notextmatches": "Nici un rezultat în textele articolelor",
        "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ă",
        "largefileserver": "Fișierul este mai mare decât este configurat serverul să permită.",
        "emptyfile": "Fișierul pe care l-ați încărcat pare a fi gol. Aceasta poate fi datorită unei greșeli în numele fișierului. Verificați dacă într-adevăr doriți să încărcați acest fișier.",
        "windows-nonascii-filename": "Acest wiki nu acceptă nume de fișiere care conțin caractere speciale.",
-       "fileexists": "Un fișier cu același nume există deja, vă rugăm verificați <strong>[[:$1]]</strong> dacă nu sunteți sigur dacă doriți să îl modificați.\n[[$1|thumb]]",
+       "fileexists": "Un fișier cu același nume există deja; vă rugăm să verificați <strong>[[:$1]]</strong> în cazul în care nu sunteți sigur{{GENDER:||ă|}} că doriți să îl modificați.\n[[$1|thumb]]",
        "filepageexists": "Pagina cu descrierea fișierului a fost deja creată la <strong>[[:$1]]</strong>, dar niciun fișier cu acest nume nu există în acest moment.\nSumarul pe care l-ai introdus nu va apărea în pagina cu descriere.\nPentru ca sumarul tău să apară, va trebui să îl adaugi manual.\n[[$1|miniatură]]",
-       "fileexists-extension": "Un fișier cu un nume similar există: [[$2|thumb]]\n* Numele fișierului de încărcat: <strong>[[:$1]]</strong>\n* Numele fișierului existent: <strong>[[:$2]]</strong>\nTe rog alege alt nume.",
+       "fileexists-extension": "Un fișier cu un nume similar există: [[$2|thumb]]\n* Numele fișierului de încărcat: <strong>[[:$1]]</strong>\n* Numele fișierului existent: <strong>[[:$2]]</strong>\nPoate doriți să utilizați un nume mai distinctiv?",
        "fileexists-thumbnail-yes": "Fișierul pare a fi o imagine cu o rezoluție scăzută ''(thumbnail)''. [[$1|thumb]]\nVerifică fișierul<strong>[[:$1]]</strong>.\nDacă fișierul verificat este identic cu imaginea originală nu este necesară încărcarea altui thumbnail.",
        "file-thumbnail-no": "Numele fișierului începe cu <strong>$1</strong>.\nSe pare că este o imagine cu dimensiune redusă''(thumbnail)''.\nDacă ai această imagine la rezoluție mare încarc-o pe aceasta, altfel schimbă numele fișierului.",
        "fileexists-forbidden": "Un fișier cu acest nume există deja și nu poate fi rescris.\nMergeți înapoi și încărcați acest fișier sub un nume nou. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Ştergerea sau restaurarea fișierelor este temporar dezactivată pe timpul lucrărilor de mentenanță.",
        "filedelete-maintenance-title": "Fișierul nu a putut fi șters",
        "mimesearch": "Căutare MIME",
-       "mimesearch-summary": "This page enables the filtering of files for its MIME-type.\nInput: contenttype/subtype, e.g. <code>image/jpeg</code>.\n\n\nAceastă pagină specială permite căutarea fișierelor în funcție de tipul MIME (Multipurpose Internet Mail Extensions). Cele mai des întâlnite sunt:\n* Imagini : <code>image/jpeg</code>\n* Diagrame : <code>image/png</code>, <code>image/svg+xml</code>\n* Imagini animate : <code>image/gif</code>\n* Fișiere sunet : <code>audio/ogg</code>, <code>audio/x-ogg</code>\n* Fișiere video : <code>video/ogg</code>, <code>video/x-ogg</code>\n* Fișiere PDF : <code>application/pdf</code>",
+       "mimesearch-summary": "Această pagină permite filtrarea fișierelor în funcție de tipul MIME.\nDate de intrare: tip_de_conținut/subtip sau tip_de_conținut/*; ex. <code>image/jpeg</code>.",
        "mimetype": "Tip MIME:",
        "download": "descarcă",
        "unwatchedpages": "Pagini neurmărite",
        "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",
        "expand_templates_remove_nowiki": "Suprimă etichetele <nowiki> în rezultat",
        "expand_templates_generate_xml": "Arată arborele de analiză XML",
        "expand_templates_generate_rawhtml": "Arată HTML brut",
-       "expand_templates_preview": "Previzualizare"
+       "expand_templates_preview": "Previzualizare",
+       "pagelanguage": "Selector limbă pagină",
+       "pagelang-name": "Pagină",
+       "pagelang-language": "Limbă",
+       "pagelang-use-default": "Folosește limba implicită",
+       "pagelang-select-lang": "Alege limba",
+       "right-pagelang": "Modifică limba paginii",
+       "action-pagelang": "modificați limba paginii",
+       "log-name-pagelang": "Jurnal modificare limbă",
+       "log-description-pagelang": "Acesta este un jurnal cu modificări ale limbii paginilor.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a modificat}} limba paginii pentru $3 din $4 în $5."
 }
index e6b4805..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",
        "difference-missing-revision": "{{PLURAL:$2|'Na revisione|$2 revisiune}} de sta differenze ($1) {{PLURAL:$2|non g'onne|non g'onne}} state acchiate.\n\nQuiste succede normalmende purcé 'u cunde jè collegate a 'na pàgene ca ha state scangellate.\nLe dettaglie le puè acchià jndr'à l'[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} archivije de le scangellaziune].",
        "searchresults": "Resultete d'a ricerche",
        "searchresults-title": "Resultete d'a ricerche pe \"$1\"",
-       "toomanymatches": "Troppe combronde sciute bbuene onne state returnete, pe piacere prueve cu 'n'otra inderrogazione",
        "titlematches": "'U titele d'a pàgene se iacchje",
        "textmatches": "'U teste d'a pàgene combacie",
        "notextmatches": "Nisciune teste de pàgene s'accocchie cu 'a recerche",
        "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 12b14d0..fce8dbb 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": "Источник должен иметь правильный заголовок.",
        "difference-missing-revision": "Не {{PLURAL:$2|1=найдена|найдены}} {{PLURAL:$2|$2 версия|$2 версий|$2 версии|1=одна из версий}} для этого сравнения ($1).\n\nТакое обычно случается при переходе по устаревшей ссылке сравнения версий для страницы, которая была удалена.\nПодробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].",
        "searchresults": "Результаты поиска",
        "searchresults-title": "Поиск «$1»",
-       "toomanymatches": "Найдено слишком много соответствий; пожалуйста, попробуйте сформулировать запрос иначе",
        "titlematches": "Совпадения в названиях страниц",
        "textmatches": "Совпадения в текстах страниц",
        "notextmatches": "Нет совпадений в текстах страниц",
        "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": "Расширенный поиск",
        "largefileserver": "Размер файла превышает максимально разрешённый.",
        "emptyfile": "Загруженный вами файл, вероятно, пустой. Возможно, это произошло из-за ошибки при наборе имени файла. Пожалуйста, проверьте, действительно ли вы хотите загрузить этот файл.",
        "windows-nonascii-filename": "Эта вики не поддерживает имена файлов с символами, отсутствующими в таблице ASCII.",
-       "fileexists": "Файл с этим именем уже существует, пожалуйста, проверьте <strong>[[:$1]]</strong>, если вы не уверены, что хотите заменить его.\n[[$1|thumb]]",
+       "fileexists": "Файл с этим именем уже существует, пожалуйста, проверьте <strong>[[:$1]]</strong>, если {{GENDER:|вы}} не уверены, что хотите заменить его.\n[[$1|thumb]]",
        "filepageexists": "Страница описания для этого файла уже создана как <strong>[[:$1]]</strong>, но файла с таким именем сейчас нет.\nВведённое описание не появится на странице описания файла.\nЧтобы добавить новое описание, вам придётся изменить его вручную.\n[[$1|thumb]]",
-       "fileexists-extension": "СÑ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82 Ñ\84айл Ñ\81 Ð¿Ð¾Ñ\85ожим Ð¸Ð¼ÐµÐ½ÐµÐ¼: [[$2|thumb]]\n* Ð\98мÑ\8f Ð·Ð°Ð³Ñ\80Ñ\83женного Ñ\84айла: <strong>[[:$1]]</strong>\n* Ð\98мÑ\8f Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83Ñ\8eÑ\89его Ñ\84айла: <strong>[[:$2]]</strong>\nÐ\9fожалÑ\83йÑ\81Ñ\82а, Ð²Ñ\8bбеÑ\80иÑ\82е Ð´Ñ\80Ñ\83гое Ð¸Ð¼Ñ\8f.",
+       "fileexists-extension": "СÑ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82 Ñ\84айл Ñ\81 Ð¿Ð¾Ñ\85ожим Ð¸Ð¼ÐµÐ½ÐµÐ¼: [[$2|thumb]]\n* Ð\98мÑ\8f Ð·Ð°Ð³Ñ\80Ñ\83женного Ñ\84айла: <strong>[[:$1]]</strong>\n* Ð\98мÑ\8f Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83Ñ\8eÑ\89его Ñ\84айла: <strong>[[:$2]]</strong>\nÐ\9cожеÑ\82 Ð±Ñ\8bÑ\82Ñ\8c, Ð²Ñ\8b Ñ\85оÑ\82иÑ\82е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ð±Ð¾Ð»ÐµÐµ Ð¾Ñ\82лиÑ\87аÑ\8eÑ\89ееÑ\81Ñ\8f Ð¸Ð¼Ñ\8f?",
        "fileexists-thumbnail-yes": "Файл, вероятно, является уменьшенной копией (миниатюрой). [[$1|thumb]]\nПожалуйста, проверьте файл <strong>[[:$1]]</strong>.\nЕсли указанный файл является тем же изображением, не стоит загружать отдельно его уменьшенную копию.",
        "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-типу. Формат ввода: типсодержимого/подтип, например <code>image/jpeg</code>.",
+       "mimesearch-summary": "Эта страница позволяет фильтровать файлы по их MIME-типу. Формат ввода: типсодержимого/подтип или типсодержимого/*, например <code>image/jpeg</code>.",
        "mimetype": "MIME-тип:",
        "download": "загрузить",
        "unwatchedpages": "Страницы, за которыми никто не следит",
        "wantedtemplates": "Требуемые шаблоны",
        "mostlinked": "Страницы, на которые больше всего ссылок",
        "mostlinkedcategories": "Категории, на которые больше всего ссылок",
-       "mostlinkedtemplates": "Самые используемые шаблоны",
+       "mostlinkedtemplates": "Самые частовключаемые страницы",
        "mostcategories": "Страницы, включённые в большое количество категорий",
        "mostimages": "Самые используемые файлы",
        "mostinterwikis": "Страницы с наибольшим числом интервики-ссылок",
        "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": "Описание",
        "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 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 5094902..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": "Барыллар",
        "difference-missing-revision": "$2 барыл бу тэҥнээһиҥҥэ ($1) көстүбэтэ.\n\nБу үксүн хайыы-үйэ сотуллубут сирэйи кытта тэҥнээри эргэрбит сигэнэн кэллэххэ баар буолааччы.\nСиһилии баҕар [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} сотуу сурунаалыгар] баара буолуо.",
        "searchresults": "Булулунна",
        "searchresults-title": "Көрдөөһүн түмүгэ \"$1\"",
-       "toomanymatches": "Наһаа элбэх ыйытыы төнүннэ, бука диэн атыннык көрдөө",
        "titlematches": "Ыстатыйалар ааттара хоһулаһар",
        "textmatches": "Ыстатыйалар истэрэ хатыланар",
        "notextmatches": "Ыстатыйалар истэрэ хатыламмат",
        "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 2ef479f..62f3650 100644 (file)
        "tog-hidepatrolled": "Ammuccia li mudìfichi fatti ntâ l'ùrtimi canciamenti",
        "tog-newpageshidepatrolled": "Ammuccia li pàggini virificati di l'alencu dî pàgging cchiù novi",
        "tog-extendwatchlist": "Attiva tutti li funzioni avanzati pi l'ossirvati spiciali, nun sulu l'ultima",
-       "tog-usenewrc": "Utilizza Ùrtimi canciamenti avanzati (richiedi JavaScript)",
+       "tog-usenewrc": "Raggruppa li canci pi pàggina ntê canciamenti ricenti e ntâ lista dî taliati spiciali",
        "tog-numberheadings": "Nummirazzioni automàtica dî tìtuli di paràgrafu",
        "tog-showtoolbar": "Ammustra la barra dî strumenta pi lu canciamentu",
-       "tog-editondblclick": "Duppiu click pi canciari l'artìculu (richiedi Javascript)",
-       "tog-editsectiononrightclick": "Abbìlita lu canciamentu dî sezzioni tràmiti duppiu click supra lu tìtulu dâ sezzioni (richiedi Javascript)",
-       "tog-watchcreations": "Agghiunci li pàggini criati a l'ossirvati spiciali",
+       "tog-editondblclick": "Duppiu click pi canciari l'artìculu",
+       "tog-editsectiononrightclick": "Abbìlita lu canciamentu dî sizzioni tràmiti duppiu click a manu dritta supra lu tìtulu dâ sezzioni",
+       "tog-watchcreations": "Agghiunci li pàggini criati e li files â lista dî taliati",
        "tog-watchdefault": "Agghiunci li pàggini canciati a l'ossirvati spiciali",
        "tog-watchmoves": "Agghiunci li pàggini spustati a l'ossirvati spiciali",
        "tog-watchdeletion": "Agghiunci li pàggini di mìa cancillati a l'ossirvati spiciali",
        "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",
        "userlogin-resetpassword-link": "Reinizzializza la tò password",
        "userlogin-helplink2": "Aiutu pâ trasuta",
        "userlogin-loggedin": "Vossia già trasìu comu {{GENDER:$1|$1}}.\nUsassi lu mòdulu ccassutta pi tràsiri comu autru utenti.",
+       "userlogin-createanother": "Crèa n'autru cuntu",
        "createacct-emailrequired": "Nnirizzu e-mail",
        "createacct-emailoptional": "Nnirizzu e-mail (facurtativu)",
        "createacct-email-ph": "Nzirisci lu tò nnirizzu e-mail",
        "createacct-captcha": "Cuntrollu di sicurezza",
        "createacct-imgcaptcha-ph": "Nzirìsci lu testu ca vidi ccassupra",
        "createacct-submit": "Crèa nu cuntu",
+       "createacct-another-submit": "Crèa n'autru cuntu",
        "createacct-benefit-heading": "{{SITENAME}} è fatta di pirsuni comu a tìa.",
        "createacct-benefit-body1": "{{PLURAL:$1|cuntribbutu|cuntribbuti}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pàggina|pàggini}}",
        "editundo": "annulla",
        "searchresults": "Risurtati dâ circata",
        "searchresults-title": "Risurtati dâ circata di \"$1\"",
-       "toomanymatches": "Troppi currispunnenzi. Cancia la richiesta.",
        "titlematches": "Ntê tìtuli di l'artìculi",
        "textmatches": "Ntô testu di l'artìculi",
        "notextmatches": "Nudda currispunnenza ntô testu dî pàggini",
        "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 be43c4c..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.",
        "difference-missing-revision": "{{PLURAL:$2|Yin reveesion|$2 reveesions}} o this difference ($1) {{PLURAL:$2|wis|were}} na foond.\n\nThis is usuallie caused bi follaein aen ootdated diff airtin til ae page that's been delytit.\nDetails can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].",
        "searchresults": "Rake ootcomes",
        "searchresults-title": "Rake ootcome fer \"$1\"",
-       "toomanymatches": "Ower moni matches were returned, please try ae different speirin",
        "titlematches": "Page teetle matches",
        "textmatches": "Page tex matches",
        "notextmatches": "Nae page tex matches",
        "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 f0fabb5..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",
        "difference-missing-revision": "Ne mogu da pronađem {{PLURAL:$2|jednu izmenu|$2 izmene|$2 izmena}} od ove razlike ($1).\n\nOvo se obično dešava kada pratite zastarjelu vezu do stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
        "searchresults": "Rezultati pretrage",
        "searchresults-title": "Rezultati pretrage za \"$1\"",
-       "toomanymatches": "Pronađeno je previše rezultata, molimo pokušajte unijeti konkretniji izraz",
        "titlematches": "Naslov članka odgovara",
        "textmatches": "Tekst stranice odgovara",
        "notextmatches": "Tekst stranice ne odgovara",
        "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 bbb6c02..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",
        "difference-missing-revision": "{{PLURAL:$2|$2 revízia|$2 revízie|$2 revízií}} pre požadovaný rozdiel ($1) {{PLURAL:$2|neexistuje|neexistujú|neexistuje}}.\n\nPravdepodobne ste nasledovali zastaraný odkaz na rozdiel revízií, z ktorých niektorá bola medzičasom odstránená.\nPodrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zázname zmazaní].",
        "searchresults": "Výsledky vyhľadávania",
        "searchresults-title": "Výsledky hľadania „$1“",
-       "toomanymatches": "Hľadanie vrátilo príliš veľa výsledkov. Prosím, skúste inú požiadavku.",
        "titlematches": "Vyhovujúce názvy stránok",
        "textmatches": "Zhody v textoch stránok",
        "notextmatches": "V textoch stránok nebola nájdená zhoda",
        "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 6d3b739..040772c 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",
        "copyrightwarning": "Vsi prispevki k {{GRAMMAR:dajalnik|{{SITENAME}}}} se obravnavajo kot objave pod pogoji $2 (za podrobnosti glej $1). Če niste pripravljeni na neusmiljeno urejanje in prosto razširjanje vašega gradiva, ga ne prispevajte.<br />\nPoleg tega zagotavljate, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz javno dostopnega ali podobnega prostega vira.\n'''Ne dodajajte avtorsko zaščitenega dela brez dovoljenja!'''",
        "copyrightwarning2": "Vedite, da lahko drugi urejevalci urejajo, spremenijo ali odstranijo kateri koli prispevek k {{GRAMMAR:dajalnik|{{SITENAME}}}}.\nČe niste pripravljeni na neusmiljeno urejanje svojega gradiva, ga ne objavljajte tukaj.<br />\nPoleg tega jamčite, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz vira v javni lasti ali podobnega prostega vira (za podrobnosti glej $1).\n'''Ne objavljajte avtorsko zaščitenega gradiva brez dovoljenja!'''",
        "longpageerror": "'''Napaka: Predloženo besedilo je dolgo $1 {{PLURAL:$1|kilobajt|kilobajta|kilobajte|kilobajtov}}, s čimer presega največjo dovoljeno dolžino $2 {{PLURAL:$2|kilobajta|kilobajtov|kilobajtov|kilobajtov}}.'''\nZato ga ni mogoče shraniti.",
-       "readonlywarning": "'''Opozorilo: Zbirka podatkov je zaradi vzdrževanja začasno zaklenjena, kar pomeni, da sprememb trenutno ne morete shraniti. Prosimo, prenesite besedilo v urejevalnik in ga dodajte pozneje.'''\n\nSistemski skrbnik, ki jo je zaklenil, je podal naslednjo razlago: $1",
+       "readonlywarning": "<strong>Opozorilo: Zbirka podatkov je zaradi vzdrževanja začasno zaklenjena, kar pomeni, da sprememb trenutno ne morete shraniti.</strong>\nProsimo, prenesite besedilo v urejevalnik in ga dodajte pozneje.\n\nSistemski skrbnik, ki jo je zaklenil, je podal naslednjo razlago: $1",
        "protectedpagewarning": "'''Opozorilo: Stran je bila zaklenjena in jo lahko urejajo le uporabniki z administratorskimi pravicami.'''\nZadnji vnos v dnevnik je naveden spodaj:",
        "semiprotectedpagewarning": "'''Opomba:''' Stran je bila zaklenjena in jo lahko urejajo le registrirani uporabniki.\nZadnji vnos v dnevnik je naveden spodaj:",
        "cascadeprotectedwarning": "'''Opozorilo:''' Ta stran je zaklenjena, tako da jo lahko urejajo le administratorji, saj je bila vključena med {{PLURAL:$1|sledečo stran|sledeči strani|sledeče strani}} s kaskadno zaščito:",
        "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.",
        "difference-missing-revision": "{{PLURAL:$2|Ene redakcije|$2 redakcij}} razlike ($1) {{PLURAL:$2|nisem}} našel.\n\nPo navadi se to zgodi, ko sledite zastareli povezavi na razliko redakcij strani, ki jo je nekdo izbrisal.\nPodrobnosti lahko najdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
        "searchresults": "Izid iskanja",
        "searchresults-title": "Zadetki za povpraševanje »$1«",
-       "toomanymatches": "Vrnjenih je bilo preveč zadetkov, poskusite z drugačno poizvedbo",
        "titlematches": "Ujemanje z naslovom članka",
        "textmatches": "Ujemanje z besedilom članka",
        "notextmatches": "Iskanih besed ne vsebuje nobeno besedilo članka",
        "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",
        "largefileserver": "Velikost datoteke presega strežnikove nastavitve.",
        "emptyfile": "Kaže, da je aložena datoteka prazna.\nDo tega bi lahko prišlo zaradi tipkarske napake v imenu.\nAli datoteko resnično želite naložiti?",
        "windows-nonascii-filename": "Ta wiki ne podpira imen datotek s posebnimi znaki.",
-       "fileexists": "Datoteka s tem imenom že obstaja. Preden jo povozite, preverite stran <strong>[[:$1]]</strong>.\n[[$1|thumb]]",
+       "fileexists": "Datoteka s tem imenom že obstaja. Preden jo {{GENDER:|povozite}}, preverite stran <strong>[[:$1]]</strong>.\n[[$1|thumb]]",
        "filepageexists": "Opisna stran za to datoteko je bila že ustvarjena na <strong>[[:$1]]</strong>, vendar datoteka s tem imenom trenutno ne obstaja.\nPovzetek, ki ste ga vnesli, se ne bo prikazal na opisni strani.\nDa tam prikažete povzetek, morate stran urediti ročno.\n[[$1|thumb]]",
-       "fileexists-extension": "Datoteka s podobnim imenom že obstaja: [[$2|thumb]]\n* Ime naložene datoteke: <strong>[[:$1]]</strong>\n* Ime obstoječe datoteke: <strong>[[:$2]]</strong>\nProsimo, izberite drugo ime.",
+       "fileexists-extension": "Datoteka s podobnim imenom že obstaja: [[$2|thumb]]\n* Ime naložene datoteke: <strong>[[:$1]]</strong>\n* Ime obstoječe datoteke: <strong>[[:$2]]</strong>\nŽelite morda uporabiti bolj opisno ime?",
        "fileexists-thumbnail-yes": "Kot izgleda, je ta slika pomanjšana ''(thumbnail)''. [[$1|thumb]]\nProsimo, preverite datoteko <strong>[[:$1]]</strong>.\nČe je preverjena datoteka enaka kot ta, ki jo nalage, ni potrebno nalagati še dodatne sličice.",
        "file-thumbnail-no": "Ime datoteke se začne z <strong>$1</strong>.\nIzgleda, da je to pomanjšana slika ''(thumbnail)''.\nČe imate sliko polne resolucije, jo naložite, drugače spremenite ime datoteke.",
        "fileexists-forbidden": "Datoteka s tem imenom že obstaja in je ni mogoče prepisati.\nČe še vedno želite naložiti vašo datoteko, se prosimo vrnite nazaj in uporabite novo ime.\n[[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Brisanje in obnovitev datotek je začasno onemogočeno zaradi vzdrževanja.",
        "filedelete-maintenance-title": "Ne morem izbrisati datoteke",
        "mimesearch": "Iskanje po vrsti MIME",
-       "mimesearch-summary": "Ta stran omogoča filtriranje datotek po njihovi vrsti MIME.\nVnesite: vrstavsebine/podvrsta, npr. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Stran omogoča filtriranje datotek po njihovi vrsti MIME.\nVnesite: vrstavsebine/podvrsta ali vrstavsebine/*, npr. <code>image/jpeg</code>.",
        "mimetype": "Vrsta MIME:",
        "download": "prenesi",
        "unwatchedpages": "Nespremljane strani",
        "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",
        "expand_templates_remove_nowiki": "V rezultatu odstrani oznake <nowiki>",
        "expand_templates_generate_xml": "Pokaži razčlenitveno drevo XML",
        "expand_templates_generate_rawhtml": "Prikaži surovi HTML",
-       "expand_templates_preview": "Predogled"
+       "expand_templates_preview": "Predogled",
+       "pagelanguage": "Izbirnik jezika strani",
+       "pagelang-name": "Stran",
+       "pagelang-language": "Jezik",
+       "pagelang-use-default": "Uporabi privzeti jezik",
+       "pagelang-select-lang": "Izberite jezik",
+       "right-pagelang": "Spreminjanje jezika strani",
+       "action-pagelang": "spreminjanje jezika strani",
+       "log-name-pagelang": "Dnevnik spreminjanja jezika",
+       "log-description-pagelang": "Dnevnik sprememb jezika strani.",
+       "logentry-pagelang-pagelang": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} jezik strani $3 z jezika $4 na jezik $5."
 }
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..7aa4ea6 100644 (file)
        "tog-minordefault": "Shëno të gjitha redaktimet si të vogla automatikisht",
        "tog-previewontop": "Vendose kutinë e bocetit sipër kutisë së redaktimeve",
        "tog-previewonfirst": "Tregoje bocetin në redaktimin e parë",
-       "tog-enotifwatchlistpages": "Më njofto me e-mail kur ndryshohet një faqe apo skedaë nga lista ime e faqeve nën mbikqyrje",
+       "tog-enotifwatchlistpages": "Më njofto me e-mail kur ndryshohet një faqe apo skedarë nga lista ime e faqeve nën mbikqyrje",
        "tog-enotifusertalkpages": "Më njofto me e-mail kur faqja ime e dikutimeve të përdoruesit ndryshohet",
        "tog-enotifminoredits": "Më njofto me e-mail edhe kur ka redaktime të vogla në faqe dhe skedave",
        "tog-enotifrevealaddr": "Tregoje adresën time të e-mail-it në e-mail-et njoftuese",
        "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",
        "thu": "Enj",
        "fri": "Pr",
        "sat": "Sht",
-       "january": "janar",
-       "february": "shkurt",
-       "march": "mars",
-       "april": "prill",
-       "may_long": "maj",
-       "june": "qershor",
-       "july": "korrik",
-       "august": "gusht",
-       "september": "shtator",
-       "october": "tetor",
-       "november": "nëntor",
-       "december": "dhjetor",
-       "january-gen": "janar",
-       "february-gen": "shkurt",
-       "march-gen": "mars",
-       "april-gen": "prill",
-       "may-gen": "maj",
-       "june-gen": "qershor",
+       "january": "Janar",
+       "february": "Shkurt",
+       "march": "Mars",
+       "april": "Prill",
+       "may_long": "Maj",
+       "june": "Qershor",
+       "july": "Korrik",
+       "august": "Gusht",
+       "september": "Shtator",
+       "october": "Tetor",
+       "november": "Nëntor",
+       "december": "Dhjetor",
+       "january-gen": "Janar",
+       "february-gen": "Shkurt",
+       "march-gen": "Mars",
+       "april-gen": "Prill",
+       "may-gen": "Maj",
+       "june-gen": "Qershor",
        "july-gen": "korrik",
-       "august-gen": "gusht",
-       "september-gen": "shtator",
-       "october-gen": "tetor",
-       "november-gen": "nëntor",
-       "december-gen": "dhjetor",
+       "august-gen": "Gusht",
+       "september-gen": "Shtator",
+       "october-gen": "Tetor",
+       "november-gen": "Nëntor",
+       "december-gen": "Dhjetor",
        "jan": "Jan",
        "feb": "Shku",
        "mar": "Mar",
        "oct": "Tet",
        "nov": "Nën",
        "dec": "Dhje",
-       "january-date": "$1 janar",
-       "february-date": "$1 shkurt",
-       "march-date": "$1 mars",
-       "april-date": "$1 prill",
-       "may-date": "$1 maj",
-       "june-date": "$1 qershor",
-       "july-date": "$1 korrik",
-       "august-date": "$1 gusht",
-       "september-date": "$1 shtator",
-       "october-date": "$1 tetor",
-       "november-date": "$1 nëntor",
-       "december-date": "$1 dhjetor",
+       "january-date": "$1 Janar",
+       "february-date": "Shkurt, <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
+       "march-date": "Mars <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
+       "april-date": "Prill <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
+       "may-date": "$1 Maj",
+       "june-date": "$1 Qershor",
+       "july-date": "$1 Korrik",
+       "august-date": "$1 Gusht",
+       "september-date": "$1 Shtator",
+       "october-date": "$1 Tetor",
+       "november-date": "$1 Nëntor",
+       "december-date": "$1 Dhjetor",
        "pagecategories": "{{PLURAL:$1|Kategoria|Kategoritë}}",
        "category_header": "Artikuj në kategorinë \"$1\"",
        "subcategories": "Nën-kategori",
        "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",
        "navigation": "Shfleto",
        "and": "&#32;dhe",
-       "qbfind": "Kërko",
+       "qbfind": "Gjeni",
        "qbbrowse": "Shfletoni",
        "qbedit": "Redaktoni",
        "qbpageoptions": "Kjo faqe",
        "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",
+       "faqpage": "Projekt: Pyetje që bëhen shpesh",
        "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-knownnamespace": "Titull jo i vlefshëm me hapësirën \"$2\" dhe teksti \"$3\"",
        "invalidtitle-unknownnamespace": "Titull jo i vlefshëm me numrin e panjohur të hapësirës së emrit $1 dhe tekstit \"$2\"",
        "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": "Ju lutem [[Special:Userlogin|hyni brënda]] për të qenë  në gjendje të hyni në këtë faqe ose veprim.",
+       "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}}",
+       "createacct-benefit-body3": "kohët e fundit <span class=\"notranslate\" translate=\"asnjë\">{{PLURAL:$1|</span>kontribues|kontribuesit}}",
        "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",
+       "createacct-error": "krijim gabim llogarie",
        "createaccounterror": "I pamundur krijimi i llogarisë: $1",
        "nocookiesnew": "Llogaria e përdoruesit u krijua por ju nuk jeni identifikuar ende.\n{{SITENAME}} shfrytëzon \"cookies\" për të identifikuar përdoruesit.\nJu nuk mundësoni lejimin e \"cookies\".\nJu lutemi, mundësojini ato, pastaj identifikohuni me anë të të dhënave tuaja të reja: emri i përdoruesit dhe fjalëkalimi.",
        "nocookieslogin": "{{SITENAME}} shfrytëzon \"cookies\" për identifikimin e përdoruesve.\nYou nuk lejoni shfrytëzimin e \"cookies\".\nJu lutemi, lejoni shfrytëzimin e \"cookies\" dhe provojeni përsëri.",
        "passwordtooshort": "Fjalëkalimi juaj është i pavlefshëm ose tepër i shkurtër. Ai duhet të ketë së paku {{PLURAL:$1|1 shkronjë|$1 shkronja}} dhe duhet të jetë i ndryshëm nga emri i përdoruesit.",
        "password-name-match": "Fjalëkalimi juaj duhet të jetë i ndryshëm nga emri juaj.",
        "password-login-forbidden": "Përdorimi i kësaj nofke dhe fjalëkalimi është i ndaluar.",
-       "mailmypassword": "Më dërgo një fjalëkalim të ri tek adresa ime",
+       "mailmypassword": "Ridergo fjalekalimin",
        "passwordremindertitle": "Kërkesë për fjalëkalim të ri tek {{SITENAME}}",
        "passwordremindertext": "Dikush (sigurisht ju, nga adresa IP adresa $1) kërkoi një fjalëkalim të ri për hyrje tek {{SITENAME}} ($4). U krijua fjalëkalimi i përkohshëm për përdoruesin \"$2\" dhe u dërgua tek \"$3\". Nëse ky ishte tentimi juaj duhet që të kyçeni dhe ndërroni fjalëkalimin tani. Fjalëkalimi juaj i përkohshëm do të skadojë {{PLURAL:$5|një dite|$5 ditësh}}.\n\nNëse ndokush tjetër ka bërë këtë kërkesë, ose nëse ju kujtohet fjalëkalimin dhe nuk doni që ta ndërroni, mund të e injoroni këtë porosi dhe të vazhdoni të përdorni  fjalëkalimin e vjetër.",
        "noemail": "Regjistri nuk ka adresë për përdoruesin \"$1\".",
        "noemailcreate": "Ju duhet të sigurojë një adresë e e-mailit të saktë.",
        "passwordsent": "Një fjalëkalim i ri është dërguar tek adresa e regjistruar për \"$1\". Provojeni përsëri hyrjen mbasi ta keni marrë fjalëkalimin.",
        "blocked-mailpassword": "IP adresa juaj është bllokuar , si e tillë nuk lejohet të përdor funksionin pë rikthim të fjalkalimit , në mënyrë që të parandalohet abuzimi.",
-       "eauthentsent": "Një eMail konfirmues u dërgua te adresa e dhënë.\nPara se të pranohen eMail nga përdoruesit e tjerë, duhet që adressa e juaj të vërtetohet.\nJu lutemi ndiqni këshillat në eMailin e pranuar.",
+       "eauthentsent": "Një email konfirmimi është dërguar në adresën e caktuar  të e-mailit.\nParase te dergohen emaile të tjerë  në llogarinë tuaj, duhet të ndiqni udhëzimet në email, për të konfirmuar se llogaria është  vërtetë e juaja.",
        "throttled-mailpassword": "Një kujtesë e fjalëkalimit është dërguar gjatë {{PLURAL:$1|orës|$1 orëve}} të kaluara. Për t'u mbrojtur nga abuzime vetëm një kujtesë dërgohet çdo {{PLURAL:$1|orë|$1 orë}}.",
        "mailerror": "Gabim duke dërguar postën: $1",
        "acct_creation_throttle_hit": "Nuk lejoheni të krijoni më llogari pasi keni krijuar {{PLURAL:$1|1|$1}}.",
        "accountcreatedtext": "Llogarija e Përdoruesit për $1 u krijua",
        "createaccount-title": "Hapja e llogarive për {{SITENAME}}",
        "createaccount-text": "Dikush ka përdorur adresën tuaj për të hapur një llogari tek {{SITENAME}} ($4) të quajtur \"$2\" me fjalëkalimin \"$3\".\nDuhet të hyni brenda dhe të ndërroni fjalëkalimin tani nëse ky person jeni ju. Përndryshe shpërfilleni këtë mesazh.",
-       "login-throttled": "Keni bërë shumë tentime të njëpasnjëshme në fjalëkalimin e kësaj llogarie. Ju lutemi prisni para tentimit përsëri.",
+       "login-throttled": "Keni bërë shumë tentime të njëpasnjëshme në fjalëkalimin e kësaj llogarie. Ju lutemi prisni para se te tentoni përsëri.",
        "login-abort-generic": "login juaj ishte i pasuksesshëm - Ndërpre",
        "loginlanguagelabel": "Gjuha: $1",
        "suspicious-userlogout": "Kërkesa juaj për të shkëputet u mohua sepse duket sikur është dërguar nga një shfletues të thyer ose caching proxy.",
+       "createacct-another-realname-tip": "* Emri i vërtetë nuk është i domosdoshëm: Nëse e jepni do të përmendeni si kontribues për punën që ke bërë.",
+       "pt-login": "Hyni",
+       "pt-login-button": "Hyni",
+       "pt-createaccount": "Krijo llogari",
+       "pt-userlogout": "Dil",
        "php-mail-error-unknown": "Gabim i panjohur në funksionin e postës PHP ()",
        "user-mail-no-addy": "Provuat të dërgoni një korrespondencë pa adresë elektronike",
+       "user-mail-no-body": "U përpoqët të dërgonio email me një përmbajtje të shkurtër dhe të paarsyeshme.",
        "changepassword": "Ndërroni fjalëkalimin",
-       "resetpass_announce": "Ju keni hyrë me një kod të përkohshëm.\nPër të hyrë tërësisht duhet të vendosni një fjalëkalim të ri këtu:",
+       "resetpass_announce": "Për të përfunduar regjistrimin, ju duhet të vendosni një fjalëkalim të ri.",
        "resetpass_header": "Ndrysho fjalëkalimin e llogarisë",
        "oldpassword": "I vjetri",
        "newpassword": "I riu",
        "retypenew": "I riu përsëri",
        "resetpass_submit": "Ndrysho fjalëkalimin dhe hyni brenda",
-       "changepassword-success": "Fjalëkalimi juaj është ndryshuar me sukses! Mund të hyni brenda...",
+       "changepassword-success": "Fjalëkalimin juaj ka ndryshuar me sukses!",
+       "changepassword-throttled": "Keni bërë shumë tentime të njëpasnjëshme në fjalëkalimin e kësaj llogarie. Ju lutemi prisni para se te tentoni përsëri.",
        "resetpass_forbidden": "Fjalëkalimet nuk mund të ndryshohen",
        "resetpass-no-info": "Duhet të jeni i kyçur që të keni qasje direkte në këtë faqe.",
        "resetpass-submit-loggedin": "Ndrysho fjalëkalimin",
        "resetpass-submit-cancel": "Anulo",
        "resetpass-wrong-oldpass": "Fjalëkalimi momental ose i përkohshëm nuk është i vlefshëm. Ndoshta tanimë me sukses keni ndërruar fjalëkalimin, ose keni kërkuar fjalëkalim të përkohshëm.",
+       "resetpass-recycled": "Ju lutemi rivendosni fjalëkalimin tuaj për diçka tjetër përveç fjalëkalimin tuaj të tanishme.",
+       "resetpass-temp-emailed": "Ju keni hyrë në me një koditë përkohshme të dërguar me email .\nPër të përfundojë logging in, ju duhet të vendosni një fjalëkalim të ri këtu:",
        "resetpass-temp-password": "Fjalëkalimi i përkohshëm:",
+       "resetpass-abort-generic": "Ndryshimi i fjalëkalimi  dështoi nga një zgjerim.",
        "resetpass-expired": "Fjalëkalimin tuaj ka skaduar. Ju lutem vendosni një fjalëkalim të ri për të hyr.",
        "resetpass-expired-soft": "Fjalëkalimi juaj ka skaduar dhe duhet të rivendoset. Ju lutem zgjidhni një fjalëkalim të ri tani, ose klikoni \"{{int:resetpass-submit-cancel}}\" për ta rivendosur më vonë.",
+       "resetpass-validity-soft": "Fjalëkalimi juaj ka skaduar dhe duhet të rivendoset. Ju lutem zgjidhni një fjalëkalim të ri tani, ose klikoni \"{{int:resetpass-submit-cancel}}\" për ta rivendosur më vonë.",
        "passwordreset": "Ndrysho fjalkalimin",
+       "passwordreset-text-one": "Plotësoni këtë formular për të marrë një fjalëkalim të përkohshëm nëpërmjet postës elektronike.",
+       "passwordreset-text-many": "<span class=\"notranslate\" translate=\"asnjë\">{{PLURAL:$1|</span>Mbush një nga fushat për të marrë një fjalëkalim të përkohshëm nëpërmjet postës elektronike.}}",
        "passwordreset-legend": "Ndrysho fjalkalimin",
        "passwordreset-disabled": "Rivendosja e fjalëkalimit është deaktivizuar në këtë wiki.",
+       "passwordreset-emaildisabled": "Karakteristikat e  Email janë të paaftë në këtë wiki.",
        "passwordreset-username": "Nofka:",
        "passwordreset-domain": "Domain:",
        "passwordreset-capture": "Dëshiron të shikosh e-mail-in që rezulton?",
        "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 8ea3efc..980ea1a 100644 (file)
@@ -58,7 +58,7 @@
        "tog-watchlisthideminor": "Сакриј мање измене са списка надгледања",
        "tog-watchlisthideliu": "Сакриј измене пријављених корисника са списка надгледања",
        "tog-watchlisthideanons": "Сакриј измене анонимних корисника са списка надгледања",
-       "tog-watchlisthidepatrolled": "Сакриј прегледане измене са списка надгледања",
+       "tog-watchlisthidepatrolled": "Сакриј патролиране измене са списка надгледања",
        "tog-ccmeonemails": "Пошаљи ми копије е-порука које пошаљем другим корисницима",
        "tog-diffonly": "Не приказуј садржај странице испод разлика",
        "tog-showhiddencats": "Прикажи скривене категорије",
        "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>, али немате дозволу да направите ову страницу.",
        "copyrightwarning2": "Имајте на уму да се сви доприноси на овом викију могу мењати, враћати или брисати од других корисника.\nАко не желите да се ваши текстови слободно мењају и расподељују, не шаљите их овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву (више на $1).\n'''Не шаљите радове заштићене ауторским правима без дозволе!'''",
        "longpageerror": "'''Грешка: текст који сте унели је величине {{PLURAL:$1|један килобајт|$1 килобајта|$1 килобајта}}, што је веће од {{PLURAL:$2|дозвољеног једног килобајта|дозвољена $2 килобајта|дозвољених $2 килобајта}}.'''\nСтраница не може бити сачувана.",
        "readonlywarning": "'''Упозорење: база података је закључана ради одржавања, тако да тренутно нећете моћи да сачувате измене.'''\nМожда бисте желели сачувати текст за касније у некој текстуалној датотеци.\n\nАдминистратор који је закључао базу дао је следеће објашњење: $1",
-       "protectedpagewarning": "'''Упозорење: ова страница је заштићена, тако да само администратори могу да је мењају.'''\nПоследња ставка у историји је приказана испод:",
+       "protectedpagewarning": "<strong>Упозорење: ова страница је заштићена, тако да само администратори могу да је мењају.</strong>\nПоследњи запис у дневнику је приказан испод:",
        "semiprotectedpagewarning": "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је уређују.\nПоследњи запис у дневнику је приказан испод:",
        "cascadeprotectedwarning": "<strong>Упозорење:</strong> ова страница је заштићена тако да је могу уређивати само администратори, јер је она укључена у {{PLURAL:$1|следећу страницу која је|следеће странице које су}} заштићене „преносивом“ заштитом:",
        "titleprotectedwarning": "'''Упозорење: ова страница је заштићена тако да је могу направити само корисници [[Special:ListGroupRights|с одређеним правима]].'''",
        "revdelete-selected-text": "{{PLURAL:$1|Изабрана измена|Изабране измене}} [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Изабрана верзија датотеке|Изабране верзије датотеке}} [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Изабрана ставка у историји|Изабране ставке у историји}}:",
+       "revdelete-text-text": "Избрисане измене ће и даље бити видљиве у историји странице, али делови њиховог садржаја неће бити јавно доступну.",
+       "revdelete-text-file": "Избрисане верзије датотеке ће и даље бити видљиве у историји датотеке, али делови њиховог садржаја неће бити јавно доступну.",
+       "logdelete-text": "Избрисани уноси у дневницима ће и даље бити видљиви у дневницима, али делови њиховог садржаја неће бити јавно доступну.",
        "revdelete-confirm": "Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
        "revdelete-suppress-text": "Сакривање измена би требало користити '''само''' у следећим случајевима:\n* Злонамерни или погрдни подаци\n* Неприкладни лични подаци\n*: ''кућна адреса и број телефона, број банковне картице итд.''",
        "revdelete-legend": "Ограничења видљивости",
-       "revdelete-hide-text": "Текст ревизије",
+       "revdelete-hide-text": "Текст измене",
        "revdelete-hide-image": "Сакриј садржај датотеке",
        "revdelete-hide-name": "Сакриј радњу и одредиште",
        "revdelete-hide-comment": "Опис измене",
        "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": "Изворна страница мора имати исправан наслов.",
        "showhideselectedversions": "Прикажи/сакриј изабране измене",
        "editundo": "поништи",
        "diff-empty": "(Нема разлике)",
-       "diff-multi-sameuser": "({{PLURAL:$1|Једна међуизмена истог корисника није приказана|$1 међуизмена истог корисника није приказано}})",
-       "diff-multi-otherusers": "({{PLURAL:$1|Једна међуизмена|$1 међуизмена}} од стране {{PLURAL:$2|још једног корисника није приказана|$2 корисника није приказано}})",
+       "diff-multi-sameuser": "({{PLURAL:$1|Ð\88една Ð¼ÐµÑ\92Ñ\83измена Ð¸Ñ\81Ñ\82ог ÐºÐ¾Ñ\80иÑ\81ника Ð½Ð¸Ñ\98е Ð¿Ñ\80иказана|$1 Ð¼ÐµÑ\92Ñ\83измене Ð¸Ñ\81Ñ\82ог ÐºÐ¾Ñ\80иÑ\81ника Ð½Ð¸Ñ\98е Ð¿Ñ\80иказано|$1 Ð¼ÐµÑ\92Ñ\83измена Ð¸Ñ\81Ñ\82ог ÐºÐ¾Ñ\80иÑ\81ника Ð½Ð¸Ñ\98е Ð¿Ñ\80иказано}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|Ð\88една Ð¼ÐµÑ\92Ñ\83измена|$1 Ð¼ÐµÑ\92Ñ\83измене|$1 Ð¼ÐµÑ\92Ñ\83измена}} Ð¾Ð´ Ñ\81Ñ\82Ñ\80ане {{PLURAL:$2|Ñ\98оÑ\88 Ñ\98едног ÐºÐ¾Ñ\80иÑ\81ника Ð½Ð¸Ñ\98е Ð¿Ñ\80иказана|$2 ÐºÐ¾Ñ\80иÑ\81ника Ð½Ð¸Ñ\98е Ð¿Ñ\80иказано}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Није приказана међуизмена|Нису приказане $1 међуизмене|Није приказано $1 међуизмена}} од више од $2 корисника)",
        "difference-missing-revision": "Не могу да пронађем {{PLURAL:$2|једну измену|$2 измене|$2 измена}} од ове разлике ($1).\n\nОво се обично дешава када пратите застарелу везу до странице која је обрисана.\nВише информација можете пронаћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневнику брисања].",
        "searchresults": "Резултати претраге",
        "searchresults-title": "Резултати претраге за „$1“",
-       "toomanymatches": "Пронађено је превише резултата. Измените упит.",
        "titlematches": "Наслов странице одговара",
        "textmatches": "Текст странице одговара",
        "notextmatches": "Ниједан текст странице не одговара",
        "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": "спајање историја страница",
        "wantedfiletext-nocat": "Следеће датотеке се користе, али не постоје. Датотеке из других ризница могу бити наведене иако не постоје. Такве датотеке ће бити <del>поништене</del> са списка.",
        "wantedtemplates": "Тражени шаблони",
        "mostlinked": "Странице с највише веза",
-       "mostlinkedcategories": "ЧланÑ\86и Ñ\81 Ð½Ð°Ñ\98виÑ\88е ÐºÐ°Ñ\82егоÑ\80иÑ\98а",
+       "mostlinkedcategories": "Ð\9aаÑ\82егоÑ\80иÑ\98е Ñ\81 Ð½Ð°Ñ\98виÑ\88е Ð²ÐµÐ·а",
        "mostlinkedtemplates": "Шаблони с највише веза",
        "mostcategories": "Странице с највише категорија",
        "mostimages": "Датотеке с највише веза",
        "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": "Серијски број камере",
        "scarytranscludefailed": "[Добављање шаблона за $1 није успело]",
        "scarytranscludefailed-httpstatus": "[Не могу да преузмем шаблон $1: HTTP $2]",
        "scarytranscludetoolong": "[URL адреса је предугачка]",
-       "deletedwhileediting": "'''Упозорење''': ова страница је обрисана након што сте почели с уређивањем!",
+       "deletedwhileediting": "<strong>Упозорење</strong>: ова страница је обрисана након што сте почели с уређивањем!",
        "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|је обрисао|је обрисала|обриса}} ову страницу након што сте почели да је уређујете из следећег разлога:\n: ''$2''\nПотврдите да стварно желите да направите страницу.",
        "confirmrecreate-noreason": "Корисник [[User:$1|$1]] ([[User talk:$1|разговор]]) је обрисао ову страницу након што сте почели да га уређујете. Потврдите да стварно желите да поново направите ову страницу.",
        "recreate": "Поново направи",
        "watchlistedit-normal-title": "Уређивање списка надгледања",
        "watchlistedit-normal-legend": "Уклањање наслова са списка надгледања",
        "watchlistedit-normal-explain": "Наслови на вашем списку надгледања су приказани испод.\nДа бисте уклонили наслов, означите кућицу до њега и кликните на „{{int:Watchlistedit-normal-submit}}“.\nМожете и да [[Special:EditWatchlist/raw|уредите сиров списак]].",
-       "watchlistedit-normal-submit": "Уклони",
+       "watchlistedit-normal-submit": "Уклони наслове",
        "watchlistedit-normal-done": "{{PLURAL:$1|Једна страница је уклоњена|$1 странице су уклоњене|$1 страница је уклоњено}} с вашег списка надгледања:",
        "watchlistedit-raw-title": "Измени сиров списак надгледања",
        "watchlistedit-raw-legend": "Измени сиров списак надгледања",
        "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_preview": "Приказ"
+       "expand_templates_generate_xml": "Прикажи XML стабло",
+       "expand_templates_generate_rawhtml": "Прикажи сиров HTML",
+       "expand_templates_preview": "Приказ",
+       "pagelang-name": "Страница",
+       "pagelang-language": "Језик",
+       "pagelang-select-lang": "Изабери језик",
+       "right-pagelang": "промена језика странице",
+       "action-pagelang": "промену језика странице"
 }
index 36a99ac..799eaea 100644 (file)
@@ -50,7 +50,7 @@
        "tog-watchlisthideminor": "Sakrij manje izmene sa spiska nadgledanja",
        "tog-watchlisthideliu": "Sakrij izmene prijavljenih korisnika sa spiska nadgledanja",
        "tog-watchlisthideanons": "Sakrij izmene anonimnih korisnika sa spiska nadgledanja",
-       "tog-watchlisthidepatrolled": "Sakrij pregledane izmene sa spiska nadgledanja",
+       "tog-watchlisthidepatrolled": "Sakrij patrolirane izmene sa spiska nadgledanja",
        "tog-ccmeonemails": "Pošalji mi primerke e-poruka koje pošaljem drugim korisnicima",
        "tog-diffonly": "Ne prikazuj sadržaj stranice ispod razlika",
        "tog-showhiddencats": "Prikaži skrivene kategorije",
        "broken-file-category": "Stranice s neispravnim vezama do datoteka",
        "about": "O nama",
        "article": "Stranica sa sadržajem",
-       "newwindow": "(otvara u novom prozoru)",
+       "newwindow": "(otvara se u novom prozoru)",
        "cancel": "Otkaži",
        "moredotdotdot": "Više…",
        "morenotlisted": "Ova lista nije kompletna.",
        "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.",
        "copyrightwarning2": "Imajte na umu da se svi doprinosi na ovom vikiju mogu menjati, vraćati ili brisati od drugih korisnika.\nAko ne želite da se vaši tekstovi slobodno menjaju i raspodeljuju, ne šaljite ih ovde.<br />\nIsto tako obećavate da ste vi autor teksta, ili da ste ga umnožili s izvora koji je u javnom vlasništvu (više na $1).\n'''Ne šaljite radove zaštićene autorskim pravima bez dozvole!'''",
        "longpageerror": "'''Greška: tekst koji ste uneli je veličine {{PLURAL:$1|jedan kilobajt|$1 kilobajta|$1 kilobajta}}, što je veće od {{PLURAL:$2|dozvoljenog jednog kilobajta|dozvoljena $2 kilobajta|dozvoljenih $2 kilobajta}}.'''\nStranica ne može biti sačuvana.",
        "readonlywarning": "<strong>Upozorenje: baza podataka je zaključana radi održavanja, tako da trenutno nećete moći da sačuvate izmene.</strong>\nMožda biste želeli sačuvati tekst za kasnije u nekoj tekstualnoj datoteci.\n\nAdministrator koji je zaključao bazu dao je sledeće objašnjenje: $1",
-       "protectedpagewarning": "'''Upozorenje: ova stranica je zaštićena, tako da samo administratori mogu da je menjaju.'''\nPoslednja stavka u istoriji je prikazana ispod:",
+       "protectedpagewarning": "<strong>Upozorenje: ova stranica je zaštićena, tako da samo administratori mogu da je menjaju.</strong>\nPoslednji zapis u dnevniku je prikazan ispod:",
        "semiprotectedpagewarning": "'''Napomena:''' ova stranica je zaštićena, tako da samo registrovani korisnici mogu da je uređuju.\nPoslednji zapis u dnevniku je prikazan ispod:",
        "cascadeprotectedwarning": "<strong>Upozorenje:</strong> ova stranica je zaštićena tako da je mogu uređivati samo administratori, jer je ona uključena u {{PLURAL:$1|sledeću stranicu koja je|sledeće stranice koje su}} zaštićene „prenosivom“ zaštitom:",
        "titleprotectedwarning": "'''Upozorenje: ova stranica je zaštićena tako da je mogu napraviti samo korisnici [[Special:ListGroupRights|s određenim pravima]].'''",
        "permissionserrors": "Greška u dozvoli",
        "permissionserrorstext": "Nemate ovlašćenje za tu radnju iz {{PLURAL:$1|sledećeg|sledećih}} razloga:",
        "permissionserrorstext-withaction": "Nemate dozvolu za $2 iz {{PLURAL:$1|sledećeg|sledećih}} razloga:",
-       "recreate-moveddeleted-warn": "'''Upozorenje: ponovo pravite stranicu koja je prethodno obrisana.'''\n\nRazmotrite da li je prikladno da nastavite s uređivanjem ove stranice.\nOvde je navedena istorija brisanja i premeštanja s obrazloženjem:",
+       "recreate-moveddeleted-warn": "<strong>Upozorenje: ponovo pravite stranicu koja je prethodno obrisana.</strong>\n\nRazmotrite da li je prikladno da nastavite s uređivanjem ove stranice.\nOvde je navedena istorija brisanja i premeštanja s obrazloženjem:",
        "moveddeleted-notice": "Ova stranica je obrisana.\nIstorija njenog brisanja i premeštanja nalazi se ispod:",
        "log-fulllog": "Pogledaj celu istoriju",
        "edit-hook-aborted": "Izmenu je prekinula kuka.\nNije dato nikakvo obrazloženje.",
        "revdelete-confirm": "Potvrdite da nameravate ovo uraditi, da razumete posledice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
        "revdelete-suppress-text": "Sakrivanje izmena bi trebalo koristiti '''samo''' u sledećim slučajevima:\n* Zlonamerni ili pogrdni podaci\n* Neprikladni lični podaci\n*: ''kućna adresa i broj telefona, broj bankovne kartice itd.''",
        "revdelete-legend": "Ograničenja vidljivosti",
-       "revdelete-hide-text": "Tekst revizije",
+       "revdelete-hide-text": "Tekst izmene",
        "revdelete-hide-image": "Sakrij sadržaj datoteke",
        "revdelete-hide-name": "Sakrij radnju i odredište",
        "revdelete-hide-comment": "Opis izmene",
        "showhideselectedversions": "Prikaži/sakrij izabrane izmene",
        "editundo": "poništi",
        "diff-empty": "(Nema razlike)",
-       "diff-multi-sameuser": "({{PLURAL:$1|Jedna međuizmena istog korisnika nije prikazana|$1 međuizmena istog korisnika nije prikazano}})",
-       "diff-multi-otherusers": "({{PLURAL:$1|Jedna međuizmena|$1 međuizmena}} od strane {{PLURAL:$2|još jednog korisnika nije prikazana|$2 korisnika nije prikazano}})",
+       "diff-multi-sameuser": "({{PLURAL:$1|Jedna međuizmena istog korisnika nije prikazana|$1 međuizmene istog korisnika nije prikazano|$1 međuizmena istog korisnika nije prikazano}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|Jedna međuizmena|$1 međuizmene|$1 međuizmena}} od strane {{PLURAL:$2|još jednog korisnika nije prikazana|$2 korisnika nije prikazano}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Nije prikazana međuizmena|Nisu prikazane $1 međuizmene|Nije prikazano $1 međuizmena}} od više od $2 korisnika)",
        "difference-missing-revision": "Ne mogu da pronađem {{PLURAL:$2|jednu izmenu|$2 izmene|$2 izmena}} od ove razlike ($1).\n\nOvo se obično dešava kada pratite zastarelu vezu do stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
        "searchresults": "Rezultati pretrage",
        "searchresults-title": "Rezultati pretrage za „$1“",
-       "toomanymatches": "Pronađeno je previše rezultata. Izmenite upit.",
        "titlematches": "Naslov stranice odgovara",
        "textmatches": "Tekst stranice odgovara",
        "notextmatches": "Nijedan tekst stranice ne odgovara",
        "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",
        "wantedfiletext-nocat": "Sledeće datoteke se koriste, ali ne postoje. Datoteke iz drugih riznica mogu biti navedene iako ne postoje. Takve datoteke će biti <del>poništene</del> sa spiska.",
        "wantedtemplates": "Traženi šabloni",
        "mostlinked": "Stranice s najviše veza",
-       "mostlinkedcategories": "Članci s najviše kategorija",
+       "mostlinkedcategories": "Kategorije s najviše veza",
        "mostlinkedtemplates": "Šabloni s najviše veza",
        "mostcategories": "Stranice s najviše kategorija",
        "mostimages": "Datoteke s najviše veza",
        "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",
        "scarytranscludefailed": "[Dobavljanje šablona za $1 nije uspelo]",
        "scarytranscludefailed-httpstatus": "[Ne mogu da preuzmem šablon $1: HTTP $2]",
        "scarytranscludetoolong": "[URL adresa je predugačka]",
-       "deletedwhileediting": "'''Upozorenje''': ova stranica je obrisana nakon što ste počeli s uređivanjem!",
+       "deletedwhileediting": "<strong>Upozorenje</strong>: ova stranica je obrisana nakon što ste počeli s uređivanjem!",
        "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|razgovor]]) {{GENDER:$1|je obrisao|je obrisala|je obrisao}} ovu stranicu nakon što ste počeli da je uređujete iz sledećeg razloga:\n: ''$2''\nPotvrdite da stvarno želite da napravite stranicu.",
        "confirmrecreate-noreason": "Korisnik [[User:$1|$1]] ([[User talk:$1|razgovor]]) je obrisao ovu stranicu nakon što ste počeli da ga uređujete. Potvrdite da stvarno želite da ponovo napravite ovu stranicu.",
        "recreate": "Ponovo napravi",
        "watchlistedit-normal-title": "Uređivanje spiska nadgledanja",
        "watchlistedit-normal-legend": "Uklanjanje naslova sa spiska nadgledanja",
        "watchlistedit-normal-explain": "Naslovi na vašem spisku nadgledanja su prikazani ispod.\nDa biste uklonili naslov, označite kućicu do njega i kliknite na „{{int:Watchlistedit-normal-submit}}“.\nMožete i da [[Special:EditWatchlist/raw|uredite sirov spisak]].",
-       "watchlistedit-normal-submit": "Ukloni",
+       "watchlistedit-normal-submit": "Ukloni naslove",
        "watchlistedit-normal-done": "{{PLURAL:$1|Jedna stranica je uklonjena|$1 stranice su uklonjene|$1 stranica je uklonjeno}} s vašeg spiska nadgledanja:",
        "watchlistedit-raw-title": "Izmeni sirov spisak nadgledanja",
        "watchlistedit-raw-legend": "Izmeni sirov spisak nadgledanja",
        "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"
 }
diff --git a/languages/i18n/sr.json b/languages/i18n/sr.json
deleted file mode 100644 (file)
index 7c7ed28..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-    "@metadata": {
-        "authors": [
-            "Milicevic01",
-            "Misos",
-            "Terik",
-            "Жељко Тодоровић",
-            "Михајло Анђелковић"
-        ]
-    },
-    "vector-view-viewsource": "#REDIRECT[[MediaWiki:Vector-view-viewsource/sr-ec]]",
-    "postedit-confirmation": "",
-    "newuserlogpage": "историја креирања корисника",
-    "newuserlogpagetext": "Ово је историја скорашњих креирања корисника.",
-    "linksearch": "#REDIRECT[[MediaWiki:Linksearch/sr-ec]]",
-    "linksearch-text": "#REDIRECT[[MediaWiki:Linksearch-text/sr-ec]]",
-    "linksearch-line": "$1 повезана са $2",
-    "linksearch-error": "Џокери могу да се појављују само на почетку домена.",
-    "uctop": "‎"
-}
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 027eea3..6dc5f90 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",
        "toc": "Innehåll",
        "showtoc": "visa",
        "hidetoc": "göm",
-       "collapsible-collapse": "Kollapsa",
-       "collapsible-expand": "Expandera",
+       "collapsible-collapse": "Dölj",
+       "collapsible-expand": "Visa",
        "thisisdeleted": "Visa eller återställ $1?",
        "viewdeleted": "Visa $1?",
        "restorelink": "{{PLURAL:$1|en raderad version|$1 raderade versioner}}",
        "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\".'''",
        "subject": "Ämne/rubrik:",
        "minoredit": "Mindre ändring (m)",
        "watchthis": "Bevaka denna sida",
-       "savearticle": "Spara sida",
+       "savearticle": "Spara sidan",
        "preview": "Förhandsgranska",
        "showpreview": "Visa förhandsgranskning",
        "showdiff": "Visa ändringar",
        "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.",
        "difference-missing-revision": "{{PLURAL:$2|En version|$2 versioner}} av denna skillnad ($1) kunde inte hittas.\n\nDetta orsakas vanligtvis av att följa en utgången difflänk till en sida som har raderats.\nDetaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
        "searchresults": "Sökresultat",
        "searchresults-title": "Sökresultat för \"$1\"",
-       "toomanymatches": "Sökningen gav för många resultat, försök med en annan fråga",
        "titlematches": "Träffar i sidtitlar",
        "textmatches": "Artikeltexter som matchar sökningen",
        "notextmatches": "Inga artikeltexter matchar sökningen",
        "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",
        "largefileserver": "Denna fil är större än vad servern ställts in att tillåta.",
        "emptyfile": "Filen du laddade upp verkar vara tom; felet kan bero på ett stavfel i filnamnet. Kontrollera om du verkligen vill ladda upp denna fil.",
        "windows-nonascii-filename": "Denna wiki stödjer inte filnamn med specialtecken.",
-       "fileexists": "Det finns redan en fil med detta namn.\nTitta på <strong>[[:$1]]</strong>, såvida du inte är säker på att du vill ändra den.\n[[$1|thumb]]",
+       "fileexists": "Det finns redan en fil med detta namn. Titta på <strong>[[:$1]]</strong>, om {{GENDER:|du}} inte är säker på att {{GENDER:|du}} vill ändra den.\n[[$1|thumb]]",
        "filepageexists": "Beskrivningssidan för denna fil har redan skapats på <strong>[[:$1]]</strong>, men just nu finns ingen fil med detta namn.\nDen sammanfattning du skriver här kommer inte visas på beskrivningssidan.\nFör att din sammanfattning ska visas där, så måste du redigera beskrivningssidan manuellt.\n[[$1|thumb]]",
-       "fileexists-extension": "En fil med ett liknande namn finns redan: [[$2|thumb]]\n* Namn på den fil du försöker ladda upp: <strong>[[:$1]]</strong>\n* Namn på filen som redan finns: <strong>[[:$2]]</strong>\nVar vänlig välj ett annat namn.",
+       "fileexists-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",
        "allinnamespace": "Alla sidor (i namnrymden $1)",
        "allpagessubmit": "Visa",
        "allpagesprefix": "Visa sidor med prefixet:",
-       "allpagesbadtitle": "Den sökta sidtiteln var ogiltig eller så innehöll den ett prefix för annan språkversion eller interwiki-prefix. Titeln kan innehålla bokstäver som inte är tillåtna i sidtitlar.",
+       "allpagesbadtitle": "Den angivna sidtiteln var ogiltig eller innehöll ett prefix för annan språkversion eller ett interwiki-prefix.\nDen kan innehålla en eller fler tecken som inte är tillåtna i titlar.",
        "allpages-bad-ns": "Namnrymden \"$1\" finns inte på {{SITENAME}}.",
        "allpages-hide-redirects": "Göm omdirigeringar",
        "cachedspecial-viewing-cached-ttl": "Du visar en cachad version av denna sida, som kan vara upp till $1 gammal.",
        "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",
        "expand_templates_remove_nowiki": "Undertryck <nowiki> taggar i resultatet",
        "expand_templates_generate_xml": "Visa parseträd som XML",
        "expand_templates_generate_rawhtml": "Visa rå HTML",
-       "expand_templates_preview": "Förhandsvisning"
+       "expand_templates_preview": "Förhandsvisning",
+       "pagelanguage": "Sidspråksväljare",
+       "pagelang-name": "Sida",
+       "pagelang-language": "Språk",
+       "pagelang-use-default": "Använd standardspråk",
+       "pagelang-select-lang": "Välj språk",
+       "right-pagelang": "Ändra sidans språk",
+       "action-pagelang": "ändra sidspråket",
+       "log-name-pagelang": "Språkändringslogg",
+       "log-description-pagelang": "Detta är en logg över ändringar i sidspråken.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ändrade}} sidspråket för $3 från $4 till $5."
 }
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 a255932..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": "మార్గదర్శకపు మెనూ",
        "difference-missing-revision": "ఈ తేడా ($1) యొక్క {{PLURAL:$2|ఒక కూర్పు|$2 కూర్పులు}} {{PLURAL:$2|కనబడలేదు}}.\n\nసాధారణంగా, తొలగించబడిన పేజీ యొక్క కాలం చెల్లిన ’తేడా’ లింకును నొక్కినపుడు ఇది జరుగుతుంది. \n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} తొలగింపు లాగ్] లో వివరాలు ఉంటాయి.",
        "searchresults": "వెతుకులాట ఫలితాలు",
        "searchresults-title": "\"$1\" కి వెతుకులాట ఫలితాలు",
-       "toomanymatches": "మరీ ఎక్కువ పోలికలు వచ్చాయి, దయచేసి మరో ప్రశ్నని ప్రయత్నించండి",
        "titlematches": "వ్యాస శీర్షిక సరిపోయింది",
        "textmatches": "పేజిలోని పాఠం సరిపోలింది",
        "notextmatches": "పేజీ పాఠ్యమేదీ సరిపోలడం లేదు",
        "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 965baac..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}} ใช้อยู่",
        "difference-missing-revision": "ไม่พบรุ่น{{PLURAL:$2|รุ่น| $2 รุ่น}}ของผลต่างนี้ ($1)\n\nโดยปกติเกิดจากการเข้าลิงก์ผลต่างของหน้าที่ถูกลบไปแล้ว \nดูรายละเอียดได้ที่[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
        "searchresults": "ผลการค้นหา",
        "searchresults-title": "ผลการค้นหาสำหรับ \"$1\"",
-       "toomanymatches": "พบตรงกันมากเกินไป กรุณาลองใช้คำค้นหาอื่น",
        "titlematches": "พบชื่อเรื่องหน้าตรงกัน",
        "textmatches": "พบข้อความตรงในหน้า",
        "notextmatches": "ไม่พบข้อความตรงในหน้า",
        "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 c90035d..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",
        "yourpassword": "Password:",
        "userlogin-yourpassword": "Password",
        "userlogin-yourpassword-ph": "Ipasok ang iyong password",
-       "createacct-yourpassword-ph": "Ilagay ang hudyat (password)",
+       "createacct-yourpassword-ph": "Ilagay ang password",
        "yourpasswordagain": "Password mo uli:",
-       "createacct-yourpasswordagain": "Tiyakin ang hudyat",
-       "createacct-yourpasswordagain-ph": "Muling ilagay ang hudyat (password)",
+       "createacct-yourpasswordagain": "Tiyakin ang password",
+       "createacct-yourpasswordagain-ph": "Muling ilagay ang password",
        "remembermypassword": "Tandaan ang paglagda ko sa kompyuter na ito (pinakamarami na ang $1 {{PLURAL:$1|araw|mga araw}})",
        "userlogin-remembermypassword": "Panatilihin akong naka-login",
        "userlogin-signwithsecure": "Gumamit ng ligtas na koneksyon",
        "noemail": "Walang nakatalang adres ng e-liham para sa tagagamit na \"$1\".",
        "noemailcreate": "Kailangan mong magbigay ng may-bisang direksiyong e-liham",
        "passwordsent": "Isang bagong password ang ipinadala sa email address na nakatala para kay \"$1\".\nPaki login muli pagkaraan mong matanggap ito.",
-       "blocked-mailpassword": "Hinarangan sa paggawa ng mga pagbabago ang iyong adres ng IP, at kaya hindi rin pinapahintulutang gumamit ng tungkuling makabawi ng hudyat para maiwasan ang pangaabuso.",
+       "blocked-mailpassword": "Hinarangan sa paggawa ng mga pagbabago ang iyong IP address, at kaya hindi rin pinapahintulutang gumamit ng tungkuling makabawi ng password para maiwasan ang pang-aabuso.",
        "eauthentsent": "Nagpadala ng isang email na pangkompirmasyon doon sa tinukoy na email address.\nBago magpadala ng iba email sa account, kailangan mong sundin ang mga tagubiling nasa loob ng email, para mapatunayang iyo talaga ang account.",
        "throttled-mailpassword": "Nagpadala na ng isang paalalang pang-password, nitong huling {{PLURAL:$1|oras|$1 oras}}.\nPara maiwasin ang pangaabuso, isang paalalang pang-password lamang ang ipapadala bawat {{PLURAL:$1|oras|$1 oras}}.",
        "mailerror": "Kamalian sa pagpapadala ng liham: $1",
        "passwordreset-username": "Pangalan ng tagagamit:",
        "passwordreset-domain": "Nasasakupan:",
        "passwordreset-capture": "Tingnan ang lumabas na e-liham?",
-       "passwordreset-capture-help": "Kapag tsetsekan mo ang kahong ito, ang e-liham (may pansamantalang hudyat) ay ipapakita sa iyo at ipapadala rin sa tagagamit.",
+       "passwordreset-capture-help": "Kapag tsetsekan mo ang kahong ito, ang email (may pansamantalang password) ay ipapakita sa iyo at ipapadala rin sa tagagamit.",
        "passwordreset-email": "Direksiyong e-liham:",
        "passwordreset-emailtitle": "Mga detalye ng account sa {{SITENAME}}",
        "passwordreset-emailtext-ip": "Isang tao (marahil ay ikaw, mula sa IP address na $1) ang humiling ng isang paalala sa iyong mga detalye ng account para sa {{SITENAME}} ($4). Ang sumusunod na {{PLURAL:$3|account ng tagagamit ay|mga account ng tagagamit ay}} may kaugnayan sa email address na ito:\n\n$2\n\n{{PLURAL:$3|Ang pansamantalang password na ito|Ang mga pansamantalang password na ito}} ay mawawalan ng bisa sa loob ng {{PLURAL:$5|isang araw|$5 araw}}.\nDapat kang mag-login at pumili ng isang bagong password ngayon. Kung ibang tao ang gumawa ng kahilingang ito, o kung naalala mo na ang orihinal mong password, at hindi mo na nais palitan ito, maaari mong huwag nang pansinin ang mensaheng ito at magpatuloy sa paggamit ng luma mong password.",
        "passwordreset-emailerror-capture": "Nalikha na ang isang e-liham na paalala, na ipinapakita sa ibaba, subalit nabigo ang pagpapadala sa tagagamit: $1",
        "changeemail": "Baguhin ang direksiyong e-liham",
        "changeemail-header": "Baguhin ang email address ng account",
-       "changeemail-text": "Kumpletuhin ang pormularyong ito upang mabago ang tirahan na para sa e-liham mo. Kakailanganin mong ipasok ang iyong hudyat upang tiyakin ang pagbabagong ito.",
+       "changeemail-text": "Kumpletuhin ang form na ito upang mabago ang email address. Kakailanganin mong ipasok ang iyong password upang tiyakin ang pagbabagong ito.",
        "changeemail-no-info": "Kailangan mong lumagda upang tuwirang mapuntahan ang pahinang ito.",
        "changeemail-oldemail": "Kasalukuyang direksiyong e-liham:",
        "changeemail-newemail": "Bagong direksiyong e-liham:",
        "loginreqlink": "lumagda/tumala",
        "loginreqpagetext": "Kailangan mong $1 para matanaw ang ibang mga pahina.",
        "accmailtitle": "Ipinadala na ang password.",
-       "accmailtext": "Ipinadala na sa $2 ang isang hudyat na nilikha ng pagkakataon para kay [[User talk:$1|$1]].  Maaari itong baguhin sa pahinang ''[[Special:ChangePassword|palitan ng hudyat]]'' kapag lumagdang papasok.",
+       "accmailtext": "Ipinadala na sa $2 ang isang password na nilikha ng pagkakataon para kay [[User talk:$1|$1]].  Maaari itong baguhin sa pahinang ''[[Special:ChangePassword|palitan ang password]]'' kapag nag-login.",
        "newarticle": "(Bago)",
        "newarticletext": "Sinundan mo ang isang kawing para sa isang pahinang hindi pa umiiral.\nPara likhain ang pahina, magsimulang magmakinilya sa loob ng kahong nasa ibaba (tingnan ang [$1 pahina ng tulong] para sa mas maraming kabatiran).\nKung napunta ka rito dahil sa pagkakamali, pakipindot ang pinduntang '''balik''' ('''''back''''') ng iyong pantingin-tingin (''browser'').",
        "anontalkpagetext": "Ito ang pahinang usapan para sa isang hindi nakikilalang tagagamit na hindi pa lumilikha ng account, o kaya hindi ito ginagamit.\nKaya't kinailangan naming gamitin ang may bilang na IP address para makilala siya.\nMaaaring pagsaluhan ng ilang mga tagagamit ang ganiyang  IP address.\nKung isa kang hindi nagpapakilalang tagagamit at nakadaramang may mga walang saysay na komentong patungkol sa iyo, [[Special:UserLogin/signup|pakilikha ng isang account]] o [[Special:UserLogin|lumagda]] para maiwasan ang kalituhan o mapagkamalan ka bilang ibang hindi nakikilalang mga tagagamit sa hinaharap.",
        "difference-missing-revision": "Hindi natagpuan ang {{PLURAL:$2|isang rebisyon|$2 mga rebisyon}} ng kaibahang ($1) ito.\n\nKaraniwang itong isinanhi ng pagsunod sa isang wala na sa panahong kawing sa pagkakaiba na papunta sa isang pahinang nabura na.\nMatatagpuan ang mga detalye sa loob ng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan ng pagbura].",
        "searchresults": "Kinalabasan/Resulta ng paghahanap",
        "searchresults-title": "Resulta ng paghahanap para sa \"$1\"",
-       "toomanymatches": "Napakaraming mga tumutugmang ibinalik, pakisubok ang isang ibang tanong",
        "titlematches": "Tumutugma ang pamagat ng pahina",
        "textmatches": "Tumutugma ang teksto ng pahina",
        "notextmatches": "Walang katugmang pahina ng teksto",
        "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 db73b4d..5b9b74a 100644 (file)
@@ -59,7 +59,8 @@
                        "Vugar 1981",
                        "לערי ריינהארט",
                        "아라",
-                       "Arystanbek"
+                       "Arystanbek",
+                       "Sayginer"
                ]
        },
        "tog-underline": "Bağlantıların altını çiz:",
        "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ü",
        "jumptonavigation": "kullan",
        "jumptosearch": "ara",
        "view-pool-error": "Üzgünüz, sunucular şu anda aşırı yüklendi.\nBirçok kullanıcı bu sayfayı görüntülemeye çalışıyor.\nLütfen bu sayfaya  tekrar erişmeyi denemeden önce biraz bekleyin.\n\n$1",
+       "generic-pool-error": "Üzgünüz, sunucular şu anda aşırı yüklendi.\nBirçok kullanıcı bu sayfayı görüntülemeye çalışıyor.\nLütfen bu sayfaya  tekrar erişmeyi denemeden önce biraz bekleyin.\n\n$1",
        "pool-timeout": "Kilit için zaman bitimi bekleniyor",
        "pool-queuefull": "Havuz sırası dolu",
        "pool-errorunknown": "Bilinmeyen hata",
        "difference-missing-revision": "Bu farkın {{PLURAL:$2|bir revizyonu|$2 revizyonu}} ($1) {{PLURAL:$2|bulunamadı|bulunamadı}}.\n\nBu genellikle, silinen bir sayfaya olan eski tarihli bir fark sayfasına bağlantılardan dolayı olur.\nAyrıntılar [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silme günlüğünde] bulunabilir.",
        "searchresults": "Arama sonuçları",
        "searchresults-title": "\"$1\" için arama sonuçları",
-       "toomanymatches": "Çok fazla eşleşme döndü, lütfen başka bir sorgu seçin",
        "titlematches": "Madde adı eşleşiyor",
        "textmatches": "Sayfa metni eşleşiyor",
        "notextmatches": "Hiçbir sayfada bulunamadı",
        "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",
        "powersearch-togglelabel": "Seç:",
        "powersearch-toggleall": "Hepsi",
        "powersearch-togglenone": "Hiçbiri",
+       "powersearch-remember": "Gelecek aramalarda seçimi hatırla",
        "search-external": "Dış arama",
        "searchdisabled": "{{SITENAME}} sitesinde arama yapma geçici olarak durdurulmuştur. Bu arada Google kullanarak {{SITENAME}} içinde arama yapabilirsiniz. Arama sitelerinde dizinlerin biraz eski kalmış olabileceğini göz önünde bulundurunuz.",
        "search-error": "Arama yapılırken bir hata oluştu: $1",
        "right-move": "Sayfaları taşı",
        "right-move-subpages": "Sayfaları altsayfalarıyla beraber taşı",
        "right-move-rootuserpages": "Kök kullanıcı sayfalarını taşı",
+       "right-move-categorypages": "Kategori sayfaları taşı",
        "right-movefile": "Dosyaları taşı",
        "right-suppressredirect": "Bir sayfayı taşırken eski isimden yönlendirme oluşturma",
        "right-upload": "Dosyaları yükle",
        "action-createpage": "sayfa oluşturmaya",
        "action-createtalk": "tartışma sayfası oluşturmaya",
        "action-createaccount": "bu kullanıcı hesabını oluşturmaya",
+       "action-history": "sayfa geçmişini görüntüle",
        "action-minoredit": "bu değişikliği küçük olarak işaretlemeye",
        "action-move": "bu sayfayı taşımaya",
        "action-move-subpages": "bu sayfayı ve altsayfalarını taşımaya",
        "action-move-rootuserpages": "kök kullanıcı sayfalarını taşımaya",
+       "action-move-categorypages": "kategori sayfalarını taşı",
        "action-movefile": "bu dosyayı taşımaya",
        "action-upload": "bu dosyayı yüklemeye",
        "action-reupload": "bu mevcut dosyanın üzerine yazmaya",
        "recentchanges-label-plusminus": "Sayfa boyutundaki değişikliğin bayt bazında değeri",
        "recentchanges-legend-heading": "'''Gösterge:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ayrıca bakınız [[Special:NewPages|yeni sayfalar listesi]])",
-       "rcnotefrom": "'''$2''' tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla <b>$1</b> tanesi gösterilmektedir).",
+       "rcnotefrom": "<strong>$2</strong> tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla <strong>$1</strong> tanesi gösterilmektedir).",
        "rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
        "rcshowhideminor": "Küçük değişiklikleri $1",
        "rcshowhideminor-show": "Göster",
        "largefileserver": "Bu dosyanın uzunluğu sunucuda izin verilenden daha büyüktür.",
        "emptyfile": "Yüklediğiniz dosya boş görünüyor. Bunun sebebi dosya adındaki bir yazım hatası olabilir. Lütfen dosyayı gerçekten yüklemek isteyip istemediğinizden emin olun.",
        "windows-nonascii-filename": "Bu viki dosya isimlerinde özel karakter kullanımını desteklemiyor",
-       "fileexists": "Bu isimde bir dosya mevcut.\nEğer değiştirmekten emin değilseniz ilk önce <strong>[[:$1]]</strong> dosyasına bir gözatın.\n[[$1|thumb]]",
+       "fileexists": "Bu isimde bir dosya mevcut; eğer değiştirmekten emin değilseniz ilk önce <strong>[[:$1]]</strong> dosyasına bir göz atın.\n[[$1|thumb]]",
        "filepageexists": "Bu dosya için açıklama sayfası <strong>[[:$1]]</strong> adresinde zaten oluşturulmuş, fakat bu isimde bir dosya şu anda mevcut değil.\nGireceğiniz özet açıklama sayfasında görünmeyecektir.\nÖzetinizin orada görünmesi için, bunu elle değiştirmelisiniz.\n[[$1|küçük resim]]",
        "fileexists-extension": "Benzer isimle başka bir dosya mevcut: [[$2|thumb]]\n* Yüklenilen dosyanın adı: <strong>[[:$1]]</strong>\n* Varolan dosyanın adı: <strong>[[:$2]]</strong>\nLütfen başka bir isim seçin",
        "fileexists-thumbnail-yes": "Bu dosya, bir resmi küçültülmüş sürümü gibi görünüyor ''(thumbnail)''. [[$1|thumb]]\nLütfen <strong>[[:$1]]</strong> dosyasını kontrol edin .\nEğer kontrol edilen dosya ile özgün boyutundaki aynı dosyaysa fazladan küçük resim yüklemeye gerek yoktur.",
        "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",
        "watchnologin": "Oturum açık değil.",
        "addwatch": "İzleme listesine ekle",
        "addedwatchtext": "\"[[:$1]]\" sayfası [[Special:Watchlist|izleme listenize]] eklenmiştir.\nBundan sonra, bu sayfaya ve ilgili tartışma sayfasına yapılacak değişiklikler burada listelenecek.",
+       "addedwatchtext-short": "\"$1\" sayfası izleme listenize eklendi.",
        "removewatch": "İzleme listesinden kaldır",
        "removedwatchtext": "\"[[:$1]]\" sayfası [[Special:Watchlist|izleme listenizden]] silinmiştir.",
+       "removedwatchtext-short": "\"$1\" sayfası izleme listenizden çıkarıldı.",
        "watch": "izle",
        "watchthispage": "Sayfayı izle",
        "unwatch": "İzleme",
        "delete-edit-reasonlist": "Silme nedenlerini değiştir",
        "delete-toobig": "Bu sayfa, $1 {{PLURAL:$1|tane değişiklik|tane değişiklik}} ile çok uzun bir geçmişe sahiptir.\nBöyle sayfaların silinmesi, {{SITENAME}} sitesini bozmamak için sınırlanmaktadır.",
        "delete-warning-toobig": "Bu sayfanın büyük bir değişiklik geçmişi var, $1 {{PLURAL:$1|revizyonun|revizyonun}} üzerinde.\nBunu silmek {{SITENAME}} işlemlerini aksatabilir;\ndikkatle devam edin.",
-       "deleting-backlinks-warning": "'''Uyarı:''' Silmek üzere olduğunuz sayfaya başka sayfalardan bağlantıları var veya sayfanın bazı bölümleri başka sayfalar tarafından alıntı olarak kullanılıyor.",
+       "deleting-backlinks-warning": "'''Uyarı:''' Silmek üzere olduğunuz sayfaya [[Özel:SayfayaBağlantılar/{{FULLPAGENAME}}|başka sayfalardan]] bağlantılar var veya sayfanın bazı bölümleri başka sayfalar tarafından alıntı olarak kullanılıyor.",
        "rollback": "değişiklikleri geri al",
        "rollback_short": "geri al",
        "rollbacklink": "geri döndür",
        "contributions-title": "$1 için kullanıcı katkıları",
        "mycontris": "Katkılar",
        "contribsub2": "{{GENDER:$3|$1}} ($2) tarafından",
+       "contributions-userdoesnotexist": "\"$1\" kullanıcı hesabı kayıtlı değil.",
        "nocontribs": "Bu kriterlere uyan değişiklik bulunamadı",
        "uctop": "(son)",
        "month": "Ay:",
        "movenotallowedfile": "Sayfaları taşımaya izniniz yok.",
        "cant-move-user-page": "Kullanıcı sayfalarını taşımaya izniniz yok (altsayfalardan başka).",
        "cant-move-to-user-page": "Bir sayfayı, bir kullanıcı sayfasına taşımaya izniniz yok (bir kullanıcı altsayfası dışında).",
+       "cant-move-to-category-page": "Bir sayfayı, bir kategoriye taşımaya izniniz yok.",
        "newtitle": "Yeni isim",
        "move-watch": "Bu sayfayı izle",
        "movepagebtn": "İsmi değiştir",
        "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",
        "newimages-summary": "Bu özel sayfa, en son yüklenen dosyaları göstermektedir.",
        "newimages-legend": "Filtre",
        "newimages-label": "Dosya adı (ya da bir parçası):",
+       "newimages-showbots": "Bot yüklemelerini göster",
        "noimages": "Görecek bir şey yok.",
        "ilsubmit": "Ara",
        "bydate": "kronolojik sırayla",
        "watchlistedit-raw-done": "İzleme listeniz güncellendi.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 başlık|$1 başlık}} eklendi:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 başlık|$1 başlık}} silindi:",
+       "watchlistedit-clear-legend": "İzleme listesini temizle",
+       "watchlistedit-clear-explain": "İzleme listenizdeki tüm başlıklar silinecek",
+       "watchlistedit-clear-titles": "Başlıklar:",
+       "watchlistedit-clear-submit": "İzleme listesini temizle (Geri alınamaz!)",
+       "watchlistedit-clear-done": "İzleme listeniz temizlendi.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 başlık|$1 başlık}} silindi:",
+       "watchlisttools-clear": "İzleme listesini temizle",
        "watchlisttools-view": "İlgili değişiklikleri göster",
        "watchlisttools-edit": "İzleme listesini gör ve düzenle",
        "watchlisttools-raw": "Ham izleme listesini düzenle",
        "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",
        "htmlform-no": "Hayır",
        "htmlform-yes": "Evet",
        "htmlform-chosen-placeholder": "Bir seçenek seçin",
+       "htmlform-cloner-delete": "Sil",
+       "htmlform-cloner-required": "En az bir değer gereklidir.",
        "sqlite-has-fts": "$1 tam-metin arama desteği ile",
        "sqlite-no-fts": "$1 tam-metin arama desteği olmaksızın",
        "logentry-delete-delete": "$1 $3 sayfasını {{GENDER:$2|sildi}}",
index 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 22a8abb..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": "ۋارىيانتلار",
        "difference-missing-revision": "{{PLURAL:$2|نەشر|$2 نەشىر لەر}} نىڭ ($1) پەرق سېلىشتۇرما {{PLURAL:$2}} تېپىلمىدى.\n\nئادەتتە بۇ ئۆچۈرۈلگەن بەتنىڭ ئۇلانمىسىغا كىرگەنلىك سەۋەبىدىن بولىدۇ.\nتەپسىلىي ئۇچۇرنى [{{fullurl:{{#Special:log}}/delete|page={{FULLPAGENEMEE}}}}ئۆچۈرۈش خاتىرىسى] دىن تاپقىلى بولىدۇ.",
        "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|'''$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 c077d79..95d9f26 100644 (file)
@@ -50,7 +50,7 @@
                        "Calak"
                ]
        },
-       "tog-underline": "Підкреслювати посилання:\nПідкреслювання посилань:",
+       "tog-underline": "Підкреслювання посилань:",
        "tog-hideminor": "Приховати незначні редагування у списку останніх змін",
        "tog-hidepatrolled": "Приховувати патрульовані редагування у списку нових редагувань",
        "tog-newpageshidepatrolled": "Приховувати патрульовані сторінки у списку нових сторінок",
        "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": "Навігаційне меню",
        "unexpected": "Неочікуване значення: «$1»=«$2».",
        "formerror": "Помилка: неможливо передати дані форми",
        "badarticleerror": "Ця дія не може бути виконана на цій сторінці.",
-       "cannotdelete": "Неможливо вилучити сторінку або файл \"$1\".\nМожливо, її (його) вже вилучив хтось інший.",
+       "cannotdelete": "Неможливо вилучити сторінку або файл «$1».\nМожливо, її (його) вже вилучив хтось інший.",
        "cannotdelete-title": "Не вдається видалити сторінку «$1»",
        "delete-hook-aborted": "Вилучення було скасовано процедурою-перехоплювачем. \nНіяких поясненень надано не було.",
        "no-null-revision": "Не вдалося створити нульову версію сторінки «$1»",
        "namespaceprotected": "У вас нема дозволу редагувати сторінки в просторі назв «$1».",
        "customcssprotected": "У вас немає прав на редагування цієї CSS-сторінки, так як вона містить особисті налаштування іншого користувача.",
        "customjsprotected": "У вас немає дозволу на редагування цієї JavaScript-сторінки, так як вона містить особисті налаштування іншого користувача.",
-       "mycustomcssprotected": "У Ð²ас немає прав для редагування цієї CSS сторінки.",
+       "mycustomcssprotected": "У Ð\92ас немає прав для редагування цієї CSS сторінки.",
        "mycustomjsprotected": "Ви не маєте дозволу для редагування цієї сторінки JavaScript.",
        "myprivateinfoprotected": "У Вас немає дозволу на редагування своєї приватної інформації.",
        "mypreferencesprotected": "У Вас немає дозволу на редагування своїх налаштувань.",
        "currentrev": "Поточна версія",
        "currentrev-asof": "Поточна версія на $1",
        "revisionasof": "Версія за $1",
-       "revision-info": "Версія від $1; $2",
+       "revision-info": "Версія від $1, створена {{GENDER:$6|$2}}$7",
        "previousrevision": "← Попередня версія",
        "nextrevision": "Новіша версія →",
        "currentrevisionlink": "Поточна версія",
        "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": "Джерело повинне мати правильний заголовок.",
        "difference-missing-revision": "{{PLURAL:$2|$2 версія|$2 версії|$2 версій}} для цього порівняння ($1) не {{PLURAL:$2|1=знайдена|знайдені}}.\n\nІмовірно, ви перейшли за застарілим посиланням на порівняння версій вилученої сторінки.\nПодробиці можна дізнатися з [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журналу вилучень].",
        "searchresults": "Результати пошуку",
        "searchresults-title": "Результати пошуку для «$1»",
-       "toomanymatches": "Знайдено дуже багато відповідностей, будь ласка, спробуйте інший запит",
        "titlematches": "Збіги в назвах сторінок",
        "textmatches": "Збіги в текстах сторінок",
        "notextmatches": "Немає збігів у текстах сторінок",
        "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": "Розширений пошук",
        "powersearch-togglelabel": "Позначити:",
        "powersearch-toggleall": "Усі",
        "powersearch-togglenone": "Жодний",
+       "powersearch-remember": "Запам'ятати вибір для майбутніх пошуків",
        "search-external": "Зовнішній пошук",
        "searchdisabled": "<p>Вибачте, повнотекстовий пошук тимчасово недоступний через перевантаження сервера; передбачається, що ця функція буде знову включена після установки нового обладнання. Поки що ми пропонуємо вам скористатися Google чи Yahoo!:</p>",
        "search-error": "Сталася помилка під час пошуку:$1",
        "userrights": "Керування правами користувачів",
        "userrights-lookup-user": "Керування групами користувача",
        "userrights-user-editname": "Введіть ім'я користувача:",
-       "editusergroup": "Редагувати групи користувача",
+       "editusergroup": "Редагувати групи користувачів",
        "editinguser": "Зміна прав користувача '''[[User:$1|$1]]''' $2",
-       "userrights-editusergroup": "Змінити групи користувача",
+       "userrights-editusergroup": "Змінити групи користувачів",
        "saveusergroups": "Зберегти групи користувача",
        "userrights-groupsmember": "Член груп:",
        "userrights-groupsmember-auto": "Неявний член:",
        "largefileserver": "Розмір файлу більший за максимальнодозволений.",
        "emptyfile": "Завантажений вами файл ймовірно порожній. Можливо, це сталося через помилку при введенні імені файлу. Будь-ласка, перевірте, чи справді ви бажаєте звантажити цей файл.",
        "windows-nonascii-filename": "Ця вікі не підтримує імена файлів зі спеціальними символами.",
-       "fileexists": "Файл з такою назвою вже існує.\nБудь ласка, перевірте <strong>[[:$1]]</strong>, якщо ви не впевнені, чи хочете замінити його.\n[[$1|thumb]]",
+       "fileexists": "Файл з такою назвою вже існує.\nБудь ласка, перевірте <strong>[[:$1]]</strong>, якщо {{GENDER:|ви}} не впевнені, чи хочете замінити його.\n[[$1|thumb]]",
        "filepageexists": "Сторінка опису цього файлу вже створена як <strong>[[:$1]]</strong>, але файлу з такою назвою немає. Уведений опис не з'явиться на сторінці опису зображення. Щоб додати новий опис, вам доведеться змінити його вручну. [[$1|thumb]]",
-       "fileexists-extension": "Ð\86Ñ\81нÑ\83Ñ\94 Ñ\84айл Ð·Ñ\96 Ñ\81Ñ\85ожоÑ\8e Ð½Ð°Ð·Ð²Ð¾Ñ\8e: [[$2|thumb]]\n* Ð\9dазва Ð·Ð°Ð²Ð°Ð½Ñ\82аженого Ñ\84айлÑ\83: <strong>[[:$1]]</strong>\n* Ð\9dазва Ñ\96Ñ\81нÑ\83Ñ\8eÑ\87ого Ñ\84айлÑ\83: <strong>[[:$2]]</strong>\nÐ\91Ñ\83дÑ\8cÑ\82е Ð»Ð°Ñ\81кавÑ\96, Ð²Ð¸Ð±ÐµÑ\80Ñ\96Ñ\82Ñ\8c Ñ\96нÑ\88Ñ\83 Ð½Ð°Ð·Ð²Ñ\83.",
+       "fileexists-extension": "Ð\86Ñ\81нÑ\83Ñ\94 Ñ\84айл Ð·Ñ\96 Ñ\81Ñ\85ожоÑ\8e Ð½Ð°Ð·Ð²Ð¾Ñ\8e: [[$2|thumb]]\n* Ð\9dазва Ð·Ð°Ð²Ð°Ð½Ñ\82аженого Ñ\84айлÑ\83: <strong>[[:$1]]</strong>\n* Ð\9dазва Ñ\96Ñ\81нÑ\83Ñ\8eÑ\87ого Ñ\84айлÑ\83: <strong>[[:$2]]</strong>\nÐ\9cожливо, Ð²Ð¸ Ñ\85оÑ\87еÑ\82е Ð¾Ð±Ñ\80аÑ\82и Ð½Ð°Ð·Ð²Ñ\83, Ñ\89о Ð±Ñ\83де Ð±Ñ\96лÑ\8cÑ\88е Ð²Ñ\96дÑ\80Ñ\96знÑ\8fÑ\82иÑ\81Ñ\8f?",
        "fileexists-thumbnail-yes": "Можливо, файл є зменшеною копією (мініатюрою). [[$1|thumb]]\nБудь ласка, перевірте файл <strong>[[:$1]]</strong>.\nЯкщо вказаний файл є тим самим зображенням, не варто окремо завантажувати його зменшену копію.",
        "file-thumbnail-no": "Назва файлу починається на <strong>$1</strong>.\nМожливо, це зменшена копія зображення ''(мініатюра)''.\nЯкщо у вас є це зображення в повному розмірі, завантажте його, інакше змініть назву файлу.",
        "fileexists-forbidden": "Файл з такою назвою вже існує і не може бути перезаписаний.\nЯкщо ви все одно хочете завантажити цей файл, будь ласка, поверніться назад і оберіть іншу назву.\n[[File:$1|thumb|center|$1]]",
        "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": "Не існує файлу з такою назвою.",
        "filedelete-maintenance": "Вилучення та відновлення файлів відімкнене на час технічних робіт.",
        "filedelete-maintenance-title": "Не вдається видалити файл",
        "mimesearch": "Пошук по MIME",
-       "mimesearch-summary": "Ця сторінка дозволяє вибирати файли за їх MIME-типом. Формат вводу: тип_вмісту/підтип, наприклад <code>image/jpeg</code>.",
+       "mimesearch-summary": "Ця сторінка дозволяє вибирати файли за їх MIME-типом. Формат вводу: тип_вмісту/підтип або тип_вмісту/* тощо, наприклад <code>image/jpeg</code>.",
        "mimetype": "MIME-тип:",
        "download": "завантажити",
        "unwatchedpages": "Сторінки, за якими ніхто не спостерігає",
        "wantedtemplates": "Необхідні шаблони",
        "mostlinked": "Сторінки, на які найбільше посилань",
        "mostlinkedcategories": "Найбільші категорії",
-       "mostlinkedtemplates": "Ð\9dайÑ\83живанÑ\96Ñ\88Ñ\96 Ñ\88аблони",
+       "mostlinkedtemplates": "Ð\9dайÑ\87аÑ\81Ñ\82Ñ\96Ñ\88е Ð²ÐºÐ»Ñ\8eÑ\87енÑ\96 Ñ\81Ñ\82оÑ\80Ñ\96нки",
        "mostcategories": "Статті з найбільшою кількістю категорій",
        "mostimages": "Найуживаніші зображення",
        "mostinterwikis": "Сторінки з найбільшою кількістю інтервікі-посилань",
        "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": "Позначена як перевірена",
        "watchlistedit-clear-titles": "Сторінки:",
        "watchlistedit-clear-submit": "Очистити список спостереження (це безповоротньо!)",
        "watchlistedit-clear-done": "Ваш список спостереження було очищено.",
+       "watchlistedit-clear-removed": "Було видалено {{PLURAL:$1|1 запис|$1 записів|$1 записи}}:",
        "watchlistedit-too-many": "Забагато сторінок для відображення тут.",
        "watchlisttools-clear": "Очистити список спостереження",
        "watchlisttools-view": "Зміни на сторінках зі списку",
        "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": "Обробники медіа",
        "version-hook-name": "Ім'я перехоплювача",
        "version-hook-subscribedby": "Підписаний на",
        "version-version": "($1)",
+       "version-no-ext-name": "[без назви]",
        "version-svn-revision": "(r$2)",
        "version-license": "Ліцензія MediaWik",
        "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 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 27aa74a..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",
        "editundo": "qaytarish",
        "searchresults": "Qidiruv natijalari",
        "searchresults-title": "\"$1\" uchun qidiruv natijalari",
-       "toomanymatches": "Juda ko'p o'xshashliklar topildi, iltimos, boshqa so'rov bilan urinib ko'ring",
        "titlematches": "Sahifalar nomlaridagi mos kelishlar",
        "textmatches": "Sahifalar matnlaridagi mos kelishlar",
        "notextmatches": "Bunday matn topilmadi",
        "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 e3fcd21..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",
        "difference-missing-revision": "{{PLURAL:$2|Na version|$2 version}} de sta difarensa ($1) {{PLURAL:$2|nó ła xe sta trovà|nó łe xe stae trovae}}.\n\nCuesto se verifega de sołito seguendo un ligamente vecio de un dif a na pàjina scansełà.\nI detaji i pol esar catai inte'l [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de łe scansełasion].",
        "searchresults": "Risultati de la riserca",
        "searchresults-title": "Risultati de la riserca de \"$1\"",
-       "toomanymatches": "Xe stà catà massa corispondense, par piaser próa a modificar la richiesta.",
        "titlematches": "In tei titoli de le pagine",
        "textmatches": "Corispondense nel testo de le pagine",
        "notextmatches": "Nei testi de le pagine no gò catà gnente",
        "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 b94b77b..a262641 100644 (file)
@@ -44,7 +44,7 @@
        "tog-watchdeletion": "Tự động theo dõi các trang và tập tin tôi xóa",
        "tog-minordefault": "Mặc định đánh dấu tất cả sửa đổi của tôi là sửa đổi nhỏ",
        "tog-previewontop": "Hiển thị phần xem trước nằm trên hộp sửa đổi",
-       "tog-previewonfirst": "Hiện xem trước tại lần sửa đầu tiên",
+       "tog-previewonfirst": "Hiện xem trước tại ngay khi bắt đầu sửa đổi",
        "tog-enotifwatchlistpages": "Gửi thư cho tôi khi có thay đổi tại trang hoặc tập tin tôi theo dõi",
        "tog-enotifusertalkpages": "Gửi thư cho tôi khi có thay đổi tại trang thảo luận của tôi",
        "tog-enotifminoredits": "Gửi thư cho tôi cả những thay đổi nhỏ trong trang và tập tin",
@@ -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ệ.",
        "difference-missing-revision": "Không tìm thấy {{PLURAL:$2|một phiên bản|$2 phiên bản}} trong khác biệt này ($1).\n\nLỗi này thường xuất hiện đối khi theo dõi liên kết lỗi thời đến khác biệt giữa các bản của trang đã bị xóa.\nXem chi tiết trong [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} nhật trình xóa].",
        "searchresults": "Kết quả tìm kiếm",
        "searchresults-title": "Kết quả tìm kiếm “$1”",
-       "toomanymatches": "Có quá nhiều kết quả được trả về, xin hãy thử câu tìm kiếm khác",
        "titlematches": "Đề mục tương tự",
        "textmatches": "Câu chữ tương tự",
        "notextmatches": "Không tìm thấy nội dung trang",
        "nextn-title": "$1 {{PLURAL:$1|kết quả|kết quả}} sau",
        "shown-title": "Hiển thị $1 {{PLURAL:$1|kết quả|kết quả}} mỗi trang",
        "viewprevnext": "Xem ($1 {{int:pipe-separator}} $2) ($3).",
-       "searchmenu-exists": "* Trang '''[[$1]]'''",
-       "searchmenu-new": "'''Tạo trang “[[:$1]]” trên wiki này!''' {{PLURAL:$2|0=|Hãy xem {{PLURAL:$2|kết quả|các kết quả}} tìm kiếm:}}",
+       "searchmenu-exists": "<strong>Có trang với tên “[[:$1]]” trên wiki này.</strong> {{PLURAL:$2|0=|Xem thêm các kết quả tìm kiếm bên dưới:}}",
+       "searchmenu-new": "'''Tạo trang “[[:$1]]” trên wiki này!''' {{PLURAL:$2|0=|Xem thêm {{PLURAL:$2|kết quả|các kết quả}} tìm kiếm:}}",
        "searchprofile-articles": "Trang nội dung",
        "searchprofile-images": "Đa phương tiện",
        "searchprofile-everything": "Tất cả",
        "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",
        "enhancedrc-history": "lịch sử",
        "recentchanges": "Thay đổi gần đây",
        "recentchanges-legend": "Tùy chọn thay đổi gần đây",
-       "recentchanges-summary": "Xem các thay đổi gần đây nhất tại wiki trên trang này.",
+       "recentchanges-summary": "Xem các thay đổi gần đây nhất trên wiki này tại đây.",
        "recentchanges-noresult": "Không có thay đổi trong khoảng thời gian phù hợp với các tiêu chí này.",
        "recentchanges-feed-description": "Theo dõi các thay đổi gần đây nhất của wiki dùng nguồn cấp dữ liệu này.",
        "recentchanges-label-newpage": "Bản sửa này tạo ra trang mới",
        "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ả",
        "expand_templates_remove_nowiki": "Bỏ qua thẻ <nowiki> trong kết quả",
        "expand_templates_generate_xml": "Xem cây phân tích XML",
        "expand_templates_generate_rawhtml": "Hiển thị HTML thô",
-       "expand_templates_preview": "Xem trước"
+       "expand_templates_preview": "Xem trước",
+       "pagelanguage": "Chọn ngôn ngữ trang",
+       "pagelang-name": "Trang",
+       "pagelang-language": "Ngôn ngữ",
+       "pagelang-use-default": "Sử dụng ngôn ngữ mặc định",
+       "pagelang-select-lang": "Chọn ngôn ngữ",
+       "right-pagelang": "Thay đổi ngôn ngữ của trang",
+       "action-pagelang": "thay đổi ngôn ngữ của trang",
+       "log-name-pagelang": "Nhật trình thay đổi ngôn ngữ",
+       "log-description-pagelang": "Nhật trình này ghi các thay đổi ngôn ngữ của các trang.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2}}đã đổi ngôn ngữ của trang $3 từ $4 thành $5."
 }
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 e2bd5d9..5778823 100644 (file)
                        "乌拉跨氪",
                        "十弌",
                        "아라",
-                       "Mywood"
+                       "Mywood",
+                       "Cwek",
+                       "Duolaimi",
+                       "Impersonator 1"
                ]
        },
        "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": "变量",
        "enterlockreason": "请输入锁定个原因,包括预计解锁个辰光",
        "readonlytext": "数据库目前禁止输入新内容及更改,\n箇蛮有可能是因为数据库拉许维修,完成仔即可恢复。\n\n管理员有如下解释:$1",
        "missing-article": "数据库寻弗着想寻个页面文本:名字“$1”$2。\n\n箇一般是由于点击了链向旧有差异或历史个链接,而原有修订已拨删除导致个。\n\n如果弗是箇种情况,你侬作兴寻着软件里一个错误。畀URL地址记落来,搭[[Special:ListUsers/sysop|管理员]]报告。",
-       "missingarticle-rev": "(修订#:$1)",
+       "missingarticle-rev": "(版本#:$1)",
        "missingarticle-diff": "(两样:$1、$2)",
        "readonly_lag": "从数据库服务器垃拉从主服务器上更新,数据库已经拨自动锁定",
        "internalerror": "内部错误",
        "viewyourtext": "你侬好望也好畀'''你侬编个'''复制到箇页:",
        "protectedinterface": "箇页为箇维基个软件提供界面文本,锁牢定防乱用。\n加改全部维基个译文,用[//translatewiki.net/ translatewiki.net],MediaWiki软件个本地化计划。",
        "editinginterface": "'''警告:''' 侬来里编写个页面是畀软件用个界面文本。箇页变化会影响各许人个界面样子。假使要畀全部维基翻译,用 [//translatewiki.net/wiki/Main_Page?setlang=zh-hans translatewiki.net],MediaWiki软件个本地化计划。",
-       "cascadeprotected": "箇只页面拨保护拉许,因为箇只页面拨下底已经标注“联锁保护”个{{PLURAL:$1|一只|多只}}被保护页面包含:\n$2",
+       "cascadeprotected": "箇只页面拨保护拉许,因为箇只页面拨下底已经标注“级联保护”个{{PLURAL:$1|一只|多只}}被保护页面包含:\n$2",
        "namespaceprotected": "侬无没编辑'''$1'''名字空间里向页面个权限。",
        "customcssprotected": "箇CSS页你呒处编,箇页有各许用户个私人设置。",
        "customjsprotected": "箇JavaScript页你呒处编,箇页有各许用户个私人设置。",
        "editconflict": "编辑冲突: $1",
        "explainconflict": "有人垃拉侬开始编辑之后更改仔页面。\n上头个文字框内显示个是箇歇本页个内容。\n侬个修改显示垃拉下底只文字框里向。\n侬应当拿侬个修改加入到现有个内容里向。\n<b>只有</b>上头文字框里向个内容会得垃侬点击\"保存页面\"之后畀保存。",
        "yourtext": "侬个文字",
-       "storedversion": "已保存修订版本",
+       "storedversion": "已保存版本",
        "nonunicodebrowser": "'''警告:侬个浏览器弗兼容Unicode编码。'''箇搭有一只工作区将使侬可以安全编辑页面:非ASCII字符将以十六进制编码方式出现垃拉编辑框里向。",
        "editingold": "''' 注意:倷勒里改动一只已经过期个页面修改。 如果倷保存俚个说话,勒拉该个修改之后个亨白浪当个修改侪会呒拨个。'''",
        "yourdiff": "两样",
        "readonlywarning": "'''警告:数据库锁定垃许维护,侬箇歇弗好保存侬个修改。'''侬作兴希望先拿本段文字复制并保存到文本文件,等歇再修改。\n\n管理员有如下解释:$1",
        "protectedpagewarning": "'''警告:此页已经畀保护,只有拥有管理员权限个用户再好修改。'''\n最近个日志垃拉下底提供以便参考:",
        "semiprotectedpagewarning": "'''注意:''' 本页面畀锁定,仅限注册用户编辑。\n最近个日志垃拉下底提供以便参考:",
-       "cascadeprotectedwarning": "警告:本页已经畀保护,只有拥有管理员权限个用户再好修改,因为本页已畀下底眼连锁保护个{{PLURAL:$1|一只|多只}}页面所包含:",
+       "cascadeprotectedwarning": "警告:本页已经畀保护,只有拥有管理员权限个用户再好修改,因为本页已畀下底眼级联保护个{{PLURAL:$1|一只|多只}}页面所包含:",
        "titleprotectedwarning": "'''警告:本页面已畀锁定,需要[[Special:ListGroupRights|指定权限]]方可创建。'''\n最近个日志垃拉下底提供以便参考:",
        "templatesused": "箇页有{{PLURAL:$1|个模板}}:",
        "templatesusedpreview": "{{PLURAL:$1|只模板}}垃拉箇趟预览里向拨使用:",
        "language-converter-depth-warning": "字词转换器深度超限($1)",
        "undo-success": "箇只编辑可以撤销。\n请检查下头个比较,确定侬确实想撤销,然后保存下底个更改完成撤销编辑。",
        "undo-failure": "由于相互冲突个中途编辑,箇只编辑弗好撤销。",
-       "undo-norev": "由于其修订版本弗存在或已删除,此编辑弗好撤销。",
-       "undo-summary": "撤销由[[Special:Contributions/$2|$2]]([[User talk:$2|对话]])作出个修订$1",
+       "undo-norev": "由于其版本弗存在或已删除,此编辑弗好撤销。",
+       "undo-summary": "撤销由[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])作出个版本$1",
        "cantcreateaccounttitle": "呒处建立帐户",
        "cantcreateaccount-text": "从箇只IP地址 (<b>$1</b>) 创建账户已经畀[[User:$3|$3]]禁止。\n\n$3封禁个原因是''$2''",
        "viewpagelogs": "望箇页日志",
        "nohistory": "该只页面呒拨编辑历史。",
-       "currentrev": "最新修订版本",
+       "currentrev": "最版本",
        "currentrev-asof": "于$1个最新修订版",
        "revisionasof": "垃拉$1所作出个修订版",
-       "revision-info": "垃拉$1由$2所作修订版本",
+       "revision-info": "垃拉$1由$2所作版本",
        "previousrevision": "←还旧版",
        "nextrevision": "新点个版本→",
-       "currentrevisionlink": "最新修订",
+       "currentrevisionlink": "最后版本",
        "cur": "当前",
        "next": "后头",
        "last": "上个",
        "rev-deleted-user": "(用户名已删除)",
        "rev-deleted-event": "(日志动作已删除)",
        "rev-deleted-user-contribs": "[用户名或IP地址已删除 - 垃贡献里向囥脱编辑]",
-       "rev-deleted-text-permission": "箇只页面修订已畀'''删除'''。\n垃拉[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 删除日志]里向可以寻着详细信息。",
+       "rev-deleted-text-permission": "箇只页面版本已畀'''删除'''。\n垃拉[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 删除日志]里向可以寻着详细信息。",
        "rev-deleted-text-unhide": "箇只页面修订已经畀'''删除'''。\n垃拉[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 删除日志]里向可以寻着详细信息。\n作为管理员,如果侬想继续个闲话,侬可以仍旧[$1 查看箇趟修订]。",
        "rev-suppressed-text-unhide": "箇只页面修订已经畀'''废止'''。\n垃拉[{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} 废止日志]里向可以寻着详细信息。\n作为管理员,如果侬想继续个闲话,侬可以仍旧[$1 查看箇趟修订]。",
        "rev-deleted-text-view": "箇只页面修订已经畀'''删除'''。作为管理员,侬可以查看渠;\n垃拉[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]里向可以寻着详细信息。",
        "rev-suppressed-text-view": "箇只页面修订已经畀'''废止'''。作为管理员,侬可以查看渠;\n垃拉[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 废止日志]里向可以寻着详细信息。",
        "rev-deleted-no-diff": "因为其中一趟修订已畀'''删除''',侬弗可以查看差异。\n垃拉[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]里向可以寻着更多信息。",
-       "rev-suppressed-no-diff": "箇只页面个其中一趟修订已经畀'''删除''',箇咾弗可以查看箇趟修订。",
+       "rev-suppressed-no-diff": "箇只页面个其中一趟版本已经畀'''删除''',箇咾弗可以查看箇趟版本。",
        "rev-deleted-unhide-diff": "箇只页面个其中一趟修订已经畀'''删除'''。\n垃拉[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]里向可以寻着更多信息。\n作为管理员,如果侬想继续个闲话,侬仍旧可以[$1 查看箇趟修订]。",
        "rev-suppressed-unhide-diff": "箇只页面个其中一趟修订已经拨'''废止'''。\n垃拉[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 废止日志]里向可以寻着更多资料。\n作为管理员,如果侬想继续个闲话,侬可以仍旧[$1 查看箇趟修订]。",
        "rev-deleted-diff-view": "差异里向个一趟修订已拨'''删除'''。\n作为管理员,侬可以查看箇个差异。详细信息可垃拉[{{fullurl: {{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]里向寻着。",
        "rev-suppressed-diff-view": "差异里向个一趟修订已拨'''废止'''。\n作为管理员,侬可以查看箇个差异。详细信息可垃拉[{{fullurl: {{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 废止日志]里向寻着。",
        "rev-delundel": "显示/囥脱",
        "rev-showdeleted": "显示",
-       "revisiondelete": "删除 / 反删除修订",
-       "revdelete-nooldid-title": "无效个目标修订",
-       "revdelete-nooldid-text": "侬还弗曾指定一个目标修订去进行箇只功能、\n所指定个修订弗存在,或者侬尝试去隐藏现时个修订。",
+       "revisiondelete": "删除 / 反删除版本",
+       "revdelete-nooldid-title": "无效个目标版本",
+       "revdelete-nooldid-text": "侬还弗曾指定一个目标版本去进行箇只功能、\n所指定个版本弗存在,或者侬尝试去隐藏现时个版本。",
        "revdelete-no-file": "指定文件弗存在。",
-       "revdelete-show-file-confirm": "侬阿是真个要查看文件“<nowiki>$1</nowiki>”垃拉$2 $3已经删除个修订?",
+       "revdelete-show-file-confirm": "侬阿是真个要查看文件“<nowiki>$1</nowiki>”垃拉$2 $3已经删除个版本?",
        "revdelete-show-file-submit": "是",
        "logdelete-selected": "选取$1个日志事件:",
        "revdelete-confirm": "假使侬想箇能介做个闲话,请确认侬已经清爽箇能介做个后果,外加箇个程序符合[[{{MediaWiki:Policy-url}}|政策]]。",
        "revdelete-log": "理由:",
        "revdelete-submit": "应用于拣中个{{PLURAL:$1|修订}}",
        "revdelete-success": "'''修订个可见性已经成功更新。'''",
-       "revdelete-failure": "'''修订个可见性无法更新:'''\n$1",
+       "revdelete-failure": "<strong>版本个可见性无法更新:</strong>$1",
        "logdelete-success": "'''事件个可见性已经成功设置。'''",
        "logdelete-failure": "'''事件个可见性无法设置:'''\n$1",
        "revdel-restore": "改变可见性",
        "pagehist": "页面历史",
        "deletedhist": "已删除之历史",
-       "revdelete-hide-current": "隐藏于$1 $2之项目错误:箇个是当前个修订,弗可以隐藏。",
+       "revdelete-hide-current": "隐藏于$1 $2之项目错误:箇个是当前个版本,弗可以隐藏。",
        "revdelete-show-no-access": "显示于$1 $2之项目错误:箇只项目已经标示为\"已限制\",侬对渠并无通行权。",
        "revdelete-modify-no-access": "更改于$1 $2之项目错误:箇个项目已经标示为\"已限制\",侬对渠并无通行权。",
        "revdelete-modify-missing": "更改项目ID $1错误:数据库里寻弗着!",
        "revdelete-otherreason": "别个/附加理由:",
        "revdelete-reasonotherlist": "别个理由",
        "revdelete-edit-reasonlist": "编辑删除理由",
-       "revdelete-offender": "修订作者:",
+       "revdelete-offender": "版本作者:",
        "suppressionlog": "阻止日志",
        "suppressionlogtext": "下头是只删除搭仔封锁列表,包括对管理员隐藏个内容。\n参看[[Special:IPBlockList|IP封锁名单]]来了解目前有效个禁止搭仔封锁之名单。",
        "mergehistory": "合并页面历史",
        "mergehistory-from": "来源页面:",
        "mergehistory-into": "目的页面:",
        "mergehistory-list": "可合并个编辑历史",
-       "mergehistory-merge": "下头对[[:$1]]个修订可以合并到[[:$2]]。用该选项揿钮列去合并只有垃拉指定辰光前头创建个修订。要当心个是使用导航链接就会重设箇栏。",
+       "mergehistory-merge": "下头对[[:$1]]个版本可以合并到[[:$2]]。用该选项揿钮列去合并只有垃拉指定辰光前头创建个版本。要当心个是使用导航链接就会重设箇栏。",
        "mergehistory-go": "显示可合并个编辑",
-       "mergehistory-submit": "合并修订",
+       "mergehistory-submit": "合并版本",
        "mergehistory-empty": "呒没修订可以合并",
        "mergehistory-success": "[[:$1]]个$3趟修订已成功合并到[[:$2]]。",
        "mergehistory-fail": "弗可以进行历史合并,请重新检查页面以及辰光参数。",
        "pagemerge-logentry": "已拿[[$1]]合并到[[$2]] (修订截至$3)",
        "revertmerge": "反合并",
        "mergelogpagetext": "下底是只最近发生个页面历史合并个记录列表。",
-       "history-title": "“$1”个修订史",
+       "history-title": "“$1”的版本历史",
        "lineno": "第$1排:",
        "compareselectedversions": "比较选中个版本",
        "showhideselectedversions": "显示/囥脱选定修订版本",
        "editundo": "撤销",
        "searchresults": "搜寻结果",
        "searchresults-title": "搜寻“$1”个结果",
-       "toomanymatches": "匹配结果忒多哉,请尝试弗同个查询关键词",
        "titlematches": "页面标题匹配",
        "textmatches": "页面内容匹配",
        "notextmatches": "呒没匹配个页面文本",
        "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": "高级搜索",
        "prefixindex": "全部带前缀个页面",
        "shortpages": "短页面",
        "longpages": "长页面",
-       "protectedpages": "å·²保护页面",
-       "protectedtitles": "å·²保护个标题",
+       "protectedpages": "å\8f\97保护页面",
+       "protectedtitles": "å\8f\97保护个标题",
        "listusers": "用户列表",
        "listusers-creationsort": "照建個日子排",
        "newpages": "新页",
        "rollbackfailed": "恢复失败",
        "revertpage": "恢复[[Special:Contributions/$2|$2]] ([[User talk:$2|讲张]])个改动;恢复到[[User:$1|$1]]个上一版本",
        "protectlogpage": "保护日志",
-       "protectedarticle": "保护“[[$1]]”",
+       "protectedarticle": "保护“[[$1]]”",
        "modifiedarticleprotection": "“[[$1]]”个保护等级改好哉",
        "prot_1movedto2": "[[$1]]捅到[[$2]]",
        "protectcomment": "理由:",
        "protect-fallback": "需要“$1”个许可",
        "protect-level-autoconfirmed": "弗准新用戶搭還朆註冊個用戶",
        "protect-level-sysop": "只准管理員",
-       "protect-summary-cascade": "联锁",
+       "protect-summary-cascade": "级联",
        "protect-expiring": "终止于$1(UTC)",
-       "protect-cascade": "保护本页里向包含个页面(连锁保护)",
+       "protect-cascade": "保护本页里向包含个页面(级联保护)",
        "protect-cantedit": "侬呒此更改迭只页面个保护等级,因为侬呒没权限编辑渠。",
        "protect-othertime": "各許時間:",
        "protect-othertime-op": "各許時間",
        "tooltip-t-upload": "上传文件",
        "tooltip-t-specialpages": "全部特殊页列表",
        "tooltip-t-print": "箇页个打印版",
-       "tooltip-t-permalink": "箇页当前修订版个老世链接",
+       "tooltip-t-permalink": "箇页当前版本个老世链接",
        "tooltip-ca-nstab-main": "望内容页",
        "tooltip-ca-nstab-user": "查看用户页",
        "tooltip-ca-nstab-media": "查看媒体页",
index 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 27966c0..816bf32 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": "נאוויגאציע מעניו",
        "parser-template-recursion-depth-warning": "מוסטער רעקורסיע טיף מאקסימום איבערגעשטיגן ($1)",
        "language-converter-depth-warning": "אַריבער דעם שפּראַך קאַנווערטער טיף לימיט ($1)",
        "node-count-exceeded-category": "בלעטער וואו קנופצאל איז צו פיל",
+       "node-count-exceeded-category-desc": "א קאטעגאריע פאר בלעטער וואו די קנופצאל איז צו פיל.",
        "node-count-exceeded-warning": "קנופנצאל אויפן בלאט צו הויך",
        "expansion-depth-exceeded-category": "בלעטער וואו מ'האט אריבערגעשטיגן די פארברייטערונג טיף",
        "expansion-depth-exceeded-category-desc": "דאס איז א קאטעגאריע פאר בלעטער וואס שטיגן איבער דער פארברייטערן־טיף.",
        "undo-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-selected-file": "'''{{PLURAL:$1|אויסדערוויילטע טעקע ווערסיע| אויסדערוויילטע טעקע ווערסיעס}} פון [[:$2]]:'''",
        "logdelete-selected": "{{PLURAL:$1| אויסדערוויילטע לאג אקציע|אויסדערוויילטע לאג אקציעס}}:",
        "revdelete-text-text": "אויסגעמעקטע ווערסיעס וועלן נאך דערשיינען אין דער בלאט־היסטאריע, אבער טייל פון זייער אינהאלט וועט נישט זײַן צוגאנגבאר צום עולם.",
+       "revdelete-text-file": "אויסגעמעקטע טעקע ווערסיעס וועלן נאך דערשיינען אין דער בלאט־היסטאריע, אבער טייל פון זייער אינהאלט וועט נישט זײַן צוגאנגבאר צום עולם.",
+       "logdelete-text": "אויסגעמעקטע לאגביכער־געשעענישן וועלן נאך דערשיינען אינעם לאגבוך, אבער טייל פון זייער אינהאלט וועט נישט זײַן צוגאנגבאר צום עולם.",
+       "revdelete-text-others": "אנדערע סיסאפן ביי {{SITENAME}} וועלן נאך קענען צוקומען צום באהאלטענעם אינהאלט און קענען אים צוריקשטעלן דורכן זעלבן אייבערפלאך, סײַדן ווען מען שטעלט נאך באשרענקונגען.",
        "revdelete-confirm": "זייט אזוי גוט און באשטעטיקט אז דאס איז טאקע אייער כוונה, אז איר פארשטייט די קאנסעקווענצן, און אז איר טוט דאס לויט  [[{{MediaWiki:Policy-url}}|דער פאליסי]].",
        "revdelete-suppress-text": "אונטערדרוקן זאל בלויז גענוצט ווערן '''נאר''' אין די פאלגנדע פעלער:\n* אינפארמאציע וואס קען זיין מוציא שם רע\n* אויפדעקונג פון פריוואטקייט אינפארמאציע\n*: ''היים אדרעסן, טעלעפאן נומערן, נאציאנאלע אידענטיפיקאציע נומערן, א.א.וו.''",
        "revdelete-legend": "שטעלט ווייזונג באגרענעצונגען",
        "difference-missing-revision": "{{PLURAL:$2|איין ווערסיע|$2 ווערסיעס}} פון דעם דיפערענץ ($1) {{PLURAL:$2|האט}} מען נישט געטראפן.\n\nדאס געשעט געוויינלעך פון פאלגן א פארעלטערטן היסטאריע לינק צו א בלאט וואס איז געווארן אויסגעמעקט.\nפרטים קען מען געפינען אינעם [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} אויסמעקונג לאגבוך].",
        "searchresults": "זוכן רעזולטאטן",
        "searchresults-title": "זוכן רעזולטאַטן פֿאַר \"$1\"",
-       "toomanymatches": "צו פֿיל רעזולטאַטן, ביטע פרואווט אן אנדער זוך",
        "titlematches": "בלאט קעפל שטימט",
        "textmatches": "בלעטער מיט פאַסנדיקן אינהאַלט",
        "notextmatches": "נישטאָ קיין בלעטער מיט פאַסנדיקן אינהאַלט",
        "searchrelated": "פארבינדן",
        "searchall": "אלץ",
        "showingresults": "ווייזן ביז {{PLURAL:$1|רעזולטאט '''איינס'''|'''$1''' רעזולטאטן}} אנגעפאנגן פון נומער #'''$2''':",
-       "showingresultsnum": "ווייזן {{PLURAL:$3|רעזולטאט '''איינס'''|'''$3''' רעזולטאטן}} אנגעפאנגן פון נומער #'''$2''':",
+       "showingresultsinrange": "ווײַזן אונטן ביז {{PLURAL:$1|<strong>1</strong> רעזולטאט|<strong>$1</strong> רעזולטאטן}} אין גרייך #<strong>$2</strong> ביז #<strong>$3</strong>.",
        "showingresultsheader": "{{PLURAL:$5|רעזולטאַט '''$1''' פֿון '''$3'''| רעזולטאַטן '''$1 - $2''' פֿון '''$3'''}} פֿאַר '''$4'''",
        "search-nonefound": "נישטא קיין רעזולטאטן פֿאַר דער שאלה.",
        "powersearch-legend": "ווײַטהאלטן זוכן",
        "prefs-tokenwatchlist": "טאקן",
        "prefs-diffs": "צווישנשיידן",
        "prefs-help-prefershttps": "דער פרעפערענץ וועט ארבעטן ביי אײַער נעקסטער ארײַנלאגירונג.",
+       "prefs-tabs-navigation-hint": "טיפ: איר קענט ניצן די רעכטס און לינקס פייל־קלאווישן צו נאוויגירן צווישן די צינגלעך אין דער צינגלעך־ליסטע.",
        "email-address-validity-valid": "ע-פּאָסט אַדרעס זעט אויס גילטיק",
        "email-address-validity-invalid": "לייגט אַרײַן א גילטיקן ע־פאסט אַדרעס",
        "userrights": "באַניצער רעכטן פֿאַרוואַלטערשאפט",
        "recentchanges-feed-description": "גייט נאך די לעצטע ענדערונגען צו דער וויקי אין דעם בלאט.",
        "recentchanges-label-newpage": "די רעדאַקטירונג האט באשאפֿן א נײַעם בלאַט",
        "recentchanges-label-minor": "דאָס איז אַ מינערדיקע רעדאַקטירונג",
-       "recentchanges-label-bot": " די רעדאַקטירונג האט אויסגעפירט א באט",
+       "recentchanges-label-bot": "די רעדאַקטירונג האט אויסגעפירט א באט",
        "recentchanges-label-unpatrolled": "די רעדאקטירונג איז נאך נישט נאכגעקוקט",
        "recentchanges-label-plusminus": "בלאט גרייס געענדערט מיט דער צאל בייטן",
        "recentchanges-legend-heading": "'''לעגענדע:'''",
        "largefileserver": "די טעקע איז גרעסער פונעם מאקסימום פאר דעם סערווער.",
        "emptyfile": "די טעקע וואס איר האט ארויפֿלגעלאָדן איז ליידיג.\nעס קען זיין אז די סיבה איז פשוט א טייפא אינעם טעקע־נאמען.\nביטע קוקט איבער צי איר ווילט ארויפֿלאדן  די דאזיקע טעקע.",
        "windows-nonascii-filename": "די וויקי שטיצט נישט טעקע־נעמען מיט ספעציעלע צייכענען.",
-       "fileexists": "א טעקע מיט דעם נאָמען עקזיסטירט שוין, ביטע זײַט בודק <strong>[[:$1]]</strong> ווען איר זענט נישט זיכער אַז איר ווילט זי ענדערן.\n[[$1|thumb]]",
+       "fileexists": "א טעקע מיט דעם נאָמען עקזיסטירט שוין, ביטע זײַט בודק <strong>[[:$1]]</strong> ווען {{GENDER:|איר}} זענט נישט זיכער אַז איר ווילט אים ענדערן.\n[[$1|thumb]]",
        "filepageexists": "דער באשרייבונג בלאט פאר דער דאזיקער טעקע האט מען שוין געשאפן ביי <strong>[[:$1]]</strong>, אבער ס'עקזיסטירט נישט קיין טעקע מיט דעם נאמען.\nדי רעזומע וואס איר קלאפט אריין וועט זיך נישט באווייזן אויפן באשרייבונג בלאט.\nכדי צו שאפן אז אייער רעזומע וועט זיך טאקע באווייזן דארט, דארפט איר רעדאקטירן זי האנטווייז.\n[[$1|thumb]]",
-       "fileexists-extension": "×\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]]",
        "php-uploaddisabledtext": "אַרויפֿלאָדן טעקעס נישט דערמעגלעכט אין PHP.\nזייט אזוי גוט בודק זיין די file_uploads שטעלונג.",
        "uploadscripted": "די טעקע האט א סקריפט אדער HTML קאד וואס קען ווערן פֿאלש אויסגעטייטשט דורך א בלעטערער",
        "uploadscriptednamespace": "די SVG טעקע אנטהאלט אן אומלעגאלן נאמענטייל  \"$1\"",
+       "uploadinvalidxml": "דאס XML אין דער ארויפגעלאדענער טעקע קען מען נישט פארזירן.",
        "uploadvirus": "די טעקע האָט אַ ווירוס! פרטים: <div dir=\"rtl\">$1</div>",
        "upload-source": "מקור טעקע",
        "sourcefilename": "מקור טעקע נאמען:",
        "upload-misc-error-text": "אן אומבאקאנטער גרייז האט פאסירט בשעת דעם ארויפלאד.\nביטע באשטעטיקט אז דער  URL איז גילטיק און דערגרייכבאר און פרובירט נאכאמאל.\nווען דער פראבלעם בלייבט ווייטער, קאנטאקטירט  א [[Special:ListUsers/sysop|סיסאפ]].",
        "upload-too-many-redirects": "דער URL אַנטהאַלט צופֿיל ווײַטערפֿירונגען.",
        "upload-http-error": "א HTTP גרײַז האט פאַסירט: $1",
+       "upload-copy-upload-invalid-domain": "ארויפלאדן טעקעס פון דעם דאמיין נישט מעגלעך.",
        "backend-fail-stream": "קען נישט מאכן שטראמען טעקע $1.",
        "backend-fail-notexists": "נישט פֿאראן די טעקע $1.",
        "backend-fail-notsame": "א נישט־אידענטישע טעקע עקזיסטירט שוין ביי \"$1\".",
        "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\".",
        "uploadstash-errclear": "אוועקנעמען די טעקעס דורכגעפאלן.",
        "uploadstash-refresh": "דערפֿרישן די רשימה פון טעקעס",
        "img-auth-accessdenied": "צוטריט אָפגעזאָגט",
+       "img-auth-notindir": "געשיכטעס שטעג איז נישט אין דער קאנפיגורטער ארויפלאד־דירעקטאריע.",
        "img-auth-badtitle": "קען נישט שאפֿן א גילטיקן טיטל פֿון \"$1\"",
        "img-auth-nologinnWL": "איר זענט נישט ארײַנלאגירט און \"$1\" איז נישט אין דער ווײַסער ליסטע.",
        "img-auth-nofile": "טעקע \"$1\" עקזיסטירט נישט.",
        "double-redirect-fixer": "מתקן ווײַטערפֿירונגען",
        "brokenredirects": "צעבראָכענע ווײַטערפֿירונגען",
        "brokenredirectstext": "די פֿאלגנדע ווײַטערפֿירונגען פֿאַרבינדן צו בלעטער וואס עקזיסטירן נאך נישט:",
-       "brokenredirects-edit": "×¢× ×\93×¢רן",
+       "brokenredirects-edit": "רע×\93×\90ַק×\98×\99רן",
        "brokenredirects-delete": "אויסמעקן",
        "withoutinterwiki": "בלעטער אן שפראך פֿארבינדונגען",
        "withoutinterwiki-summary": "די פֿאלגנדע בלעטער פֿאַרבינדן נישט מיט אַנדערע שפראַך ווערסיעס",
        "wantedtemplates": "געזוכטע מוסטערן",
        "mostlinked": "מערסט פֿארבינדענע בלעטער",
        "mostlinkedcategories": "מערסט פֿארבינדענע קאטעגאריעס",
-       "mostlinkedtemplates": "×\9eערס×\98 ×¤Ö¿×\90ר×\91×\99× ×\93×¢× ×¢ ×\9e×\95ס×\98ער×\9f",
+       "mostlinkedtemplates": "×\9eערס×\98 ×\90ר×\99×\91ער×\92×\9cעשעסענע ×\91×\9c×¢×\98ער",
        "mostcategories": "אַרטיקלען מיט די מערסטע קאַטעגאָריעס",
        "mostimages": "מערסט פֿארבונדענע טעקעס",
        "mostinterwikis": "בלעטער מיט די מערסטע אינטערוויקיס",
        "listgrouprights-namespaceprotection-header": "נאמענטייל באשרענקונגען",
        "listgrouprights-namespaceprotection-namespace": "נאָמענטייל",
        "listgrouprights-namespaceprotection-restrictedto": "רעכט(ן) וואס דערלויבט באניצער צו רעדאקטירן",
+       "trackingcategories": "אויפפאסן־קאטעגאריעס",
+       "trackingcategories-msg": "אויפפאסן־קאטעגאריע",
        "trackingcategories-name": "מעלדונג נאמען",
        "trackingcategories-desc": "קאטעגאריע אײַנשליסן קריטעריע",
        "trackingcategories-nodesc": "נישט פאראן קיין באשרײַבונג.",
        "prot_1movedto2": "[[$1]] אריבערגעפירט צו [[$2]]",
        "protect-badnamespace-title": "אומשיצבארער נאמענטייל",
        "protect-badnamespace-text": "בלעטער אין דעם נאמענטייל קען מען נישט שיצן.",
+       "protect-norestrictiontypes-text": "מען קען נישט שיצן דעם בלאט ווײַל עס זענען נישט פאראן קיין באשרענקונג־טיפן.",
        "protect-norestrictiontypes-title": "נישט־שיצבארער בלאט",
        "protect-legend": "באַשטעטיגן שיץ",
        "protectcomment": "אורזאַך:",
        "sp-contributions-newbies-sub": "פאר נייע קאנטעס",
        "sp-contributions-newbies-title": "בײַשטײַערונגען פֿון נײַע באַניצערס",
        "sp-contributions-blocklog": "בלאקירן לאג",
+       "sp-contributions-suppresslog": "אונטערדריקטע באַניצער בײַשטײַערונגען",
        "sp-contributions-deleted": "אויסגעמעקטע באַניצער בײַשטײַערונגען",
        "sp-contributions-uploads": "אַרויפֿלאָדונגען",
        "sp-contributions-logs": "לאגביכער",
        "ipboptions": "2 שעהן:2 hours,\n1 טאָג:1 day,\n3 טעג:3 days,\n1 װאָך:1 week,\n2 װאָכן:2 weeks,\n1 מאָנאַט:1 month,\n3 מאָנאַטן:3 months,\n6 מאָנאַטן:6 months,\n1 יאָר:1 year,\nאויף אייביק:infinite",
        "ipbhidename": "באַהאַלטן באַניצער נאָמען פֿון רעדאַקטירונגען און רשימות",
        "ipbwatchuser": "אויפֿפאַסן דעם באַניצערס באַניצער און רעדן בלעטער",
+       "ipb-disableusertalk": "פארמײַדן דעם באניצער פון רעדאקטירן זײַן אייגענעם רעדן בלאט בשעת ער איז בלאקירט",
+       "ipb-change-block": "ווידער-בלאקירן דעם באניצער מיט די דאזיקע אײַנשטעלונגען",
        "ipb-confirm": "באַשטעטיקן בלאָק",
        "badipaddress": "נישט קיין גוטער IP אַדרעס.",
        "blockipsuccesssub": "בלאק איז דורכגפירט מיט דערפֿאלג",
        "ipb_expiry_temp": "בלאקירן מיט פאַרבאָרגן באַניצער נאָמען מוז זייַן אויף אייביק.",
        "ipb_hide_invalid": "נישט געקענט פֿאַרשטיקן די קאנטע; זי האט {{PLURAL:$1|איין רעדאקטירונג|$1 רעדאַקטירונגען}}.",
        "ipb_already_blocked": "\"$1\" איז שוין בלאקירט",
-       "ipb-needreblock": "$1 ×\90×\99×\96 ×©×\95×\99×\9f ×\91×\9c×\90ק×\99ר×\98. ×¦×\99 ×\95×\95×\99×\9c×\98 ×\90×\99ר ×\98×\95×\99ש×\9f ×\93×\99 ×\91×\90ַצ×\99×\99×\9b× ונגען?",
+       "ipb-needreblock": "$1 ×\90×\99×\96 ×©×\95×\99×\9f ×\91×\9c×\90ק×\99ר×\98. ×¦×\99 ×\95×\95×\99×\9c×\98 ×\90×\99ר ×\98×\95×\99ש×\9f ×\93×\99 ×\90ײַנש×\98×¢×\9cונגען?",
        "ipb-otherblocks-header": "{{PLURAL:$1|אנדער בלאקירונג|אנדערע בלאקירונגען}}",
        "unblock-hideuser": "איר קענט נישט אומבלאקירן דעם באניצער, ווײַל זײַן באַניצער נאָמען איז פֿאַרבארגן.",
        "ipb_cant_unblock": "גרײַז: בלאק ID $1 נישט געפֿונען.\nס'מעגליך שוין געווארן באַפֿרייט.",
        "tooltip-preferences-save": "היטן פרעפֿערענצן",
        "tooltip-summary": "אײַנגעבן א קורצע רעזומע",
        "common.css": "/* CSS געשריבן דא וועט אפילירן און באיינפלוסן אלע סקינס */",
-       "monobook.css": "/* סטייל דא געלייגט וועט באאיינפלוסן דעם Monobook סקין */",
-       "vector.css": "/* CSS געשטעלט דא ווירקט נאר אויפן וועקטאר סקין */",
        "common.js": "/* אלע סקריפטן פון JavaScript דא געשריבן וועט לויפן פאר אלע באנוצער ווען זיי וועלן לאדירן דעם בלאט */",
        "anonymous": "{{PLURAL:$1|אַנאנימער באַניצער| אַנאנימע באַניצערס}} פֿון {{SITENAME}}",
        "siteuser": "באַניצער {{SITENAME}} $1",
        "creditspage": "בלאט קרעדיטס",
        "nocredits": "נישט פאראן קיין אינפארמאציע פאר דעם בלאט.",
        "spamprotectiontitle": "ספעם באשיצונג פילטער",
+       "spamprotectionmatch": "די פאלגנדער טעקסט האט געלאזט אין גאנג אונזער ספאם־פילטער: $1",
        "spambot_username": "מעדיעוויקי ספאם פוצן",
        "spam_reverting": "צוריקגעשטעלט צו דער לעצטער ווערסיע אן לינקען צו $1",
        "spam_blanking": "אלע רעוויזיעס האבן לינקען צו $1, אויסליידיקן",
        "spam_deleting": "אלע רעוויזיעס האבן לינקען צו $1, אויסמעקן",
+       "simpleantispam-label": "אנטי־ספאם קאנטראלע.\n'''נישט''' אײַנגעבן קיין אײַנגאב דא!",
        "pageinfo-title": "אינפֿאָרמאַציע פֿאַר \"$1\"",
        "pageinfo-not-current": "קען ווייזן אינפארמאציע נאר פאר דער לויפיקער רעוויזיע.",
        "pageinfo-header-basic": "גרונטלעכע אינפֿארמאַציע",
        "pageinfo-category-pages": "צאָל בלעטער",
        "pageinfo-category-subcats": "צאָל אונטערקאטעגאריעס",
        "pageinfo-category-files": "צאָל טעקעס",
-       "skinname-monobook": "מאנאבוק",
-       "skinname-vector": "וועקטאר",
        "markaspatrolleddiff": "באצייכענען אלס פאטראלירט",
        "markaspatrolledtext": "באצייכענען בלאט אלס פאטראלירט",
        "markedaspatrolled": "באצייכנט אלס פאטראלירט",
        "exif-giffilecomment": "GIF טעקע הערה",
        "exif-intellectualgenre": "ארט  איינהייט",
        "exif-subjectnewscode": "טעמע קאד",
+       "exif-scenecode": "IPTC סצענע־קאד",
+       "exif-event": "געוויזענער געשעעניש",
        "exif-organisationinimage": "אויסגעשטעלטע ארגאניזאציע",
        "exif-personinimage": "אויסגעשטעלטער מענטש",
+       "exif-originalimageheight": "בילד־הייך פארן צעשנײַדן",
+       "exif-originalimagewidth": "בילד־ברייט פארן צעשנײַדן",
        "exif-compression-1": "אומ-צאמגעקוועטשט",
        "exif-copyrighted-true": "געשיצט מיט קאפירעכט",
        "exif-copyrighted-false": "קאפירעכט סטאטוס נישט געשטעלט",
        "exif-lightsource-9": "פֿייַן וועטער",
        "exif-lightsource-10": "פאַרוואָלקנטער וועטער",
        "exif-lightsource-11": "שאָטן",
+       "exif-lightsource-255": "אנדער ליכטקוואל",
+       "exif-flash-fired-0": "קיין פלאש",
        "exif-flash-mode-3": "אויטא מאדע",
        "exif-flash-function-1": "קיין בליץ־פונקציע",
        "exif-flash-redeye-1": "רויט־אויג רעדוקציע",
        "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": "טיטלען:",
        "watchlisttools-clear": "ליידיקן די אויפפאסן ליסטע",
        "watchlisttools-view": "ווייזן שייכדיגע ענדערונגען",
        "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": "פארזער פארברייטערן טאַגן",
        "version-hook-name": "נאמען פון hook",
        "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-poweredby-others": "אַנדערע",
        "version-poweredby-translators": "translatewiki.net איבערזעצער",
        "version-credits-summary": "מיר ווילן אנערקענען די פֿאלגנדע מענטשן פֿאר זייער בײַשטײַערוג צו [[Special:Version|מעדיעוויקי]].",
index 61c4a08..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",
        "difference-missing-revision": "{{PLURAL:$2|Àtúnyẹ̀wò kan|Àwọn àtúnyẹ̀wò $2}} ìyàtọ̀ yìí ($1) kò {{PLURAL:$2|sí|sí}}.\n\nÈyí ṣẹlẹ̀ nítorí pé ẹ tẹ̀lé àjápọ̀ ìyàtọ̀ tí kò ṣiṣẹ́ mọ́ wá sí ojúewé tó ti jẹ́ píparẹ́.\nẸ̀kúnrẹ́rẹ́ wà nínú [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} àkọọ́lẹ̀ ìparẹ́].",
        "searchresults": "Àwọn èsì àwárí",
        "searchresults-title": "Àwọn èsì àwárí fún \"$1\"",
-       "toomanymatches": "Àwọn ìbáramu ti pọ̀jù, ẹ jọ̀wọ́ ẹ gbìyànjú lọ́nà mìíràn",
        "titlematches": "Àkọlé ojúewé báramu",
        "textmatches": "Ọ̀rọ̀ ojúewé tóbáramu:",
        "notextmatches": "Kò sí ọ̀rọ̀ ojúewé tóbáramu",
        "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 007f2a0..821f78c 100644 (file)
@@ -18,7 +18,8 @@
                        "Cwek",
                        "아라",
                        "Ktchankt",
-                       "Kc kennylau"
+                       "Kc kennylau",
+                       "Mywood"
                ]
        },
        "tog-underline": "連結加底線:",
        "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}}",
        "history_short": "歷史",
        "updatedmarker": "我上次來之後嘅修改",
        "printableversion": "可打印版本",
-       "permalink": "永久連結",
+       "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": "響版度有太多嘅耗費嘅語法功能呼叫",
        "diff-multi-manyusers": "(由$2位更多用戶所做嘅$1個中途修訂冇顯示到)",
        "searchresults": "搵嘢結果",
        "searchresults-title": "對\"$1\"嘅搵嘢結果",
-       "toomanymatches": "太多嘅配合搵到,請試吓一個唔同嘅查詢",
        "titlematches": "頁面標題符合",
        "textmatches": "頁面文字符合",
        "notextmatches": "冇頁面文字符合",
        "searchrelated": "有關",
        "searchall": "全部",
        "showingresults": "'自#'''$2'''起顯示最多'''$1'''個結果。",
-       "showingresultsnum": "自#'''$2'''起顯示'''$3'''個結果。",
        "showingresultsheader": "對'''$4'''嘅{{PLURAL:$5|第'''$1'''到第'''$3'''項結果|第'''$1 - $2'''項,共'''$3'''項結果}}",
        "search-nonefound": "響個查詢度無結果配合。",
        "powersearch-legend": "進階搵嘢",
        "action-userrights-interwiki": "編輯響其它wiki用戶嘅權限",
        "action-siteadmin": "鎖同解鎖資料庫",
        "nchanges": "$1次更改",
-       "recentchanges": "æ\9c\80è¿\91æ\9b´æ\94¹",
+       "recentchanges": "æ\9c\80è¿\91æ\94¹é\81\8eå\98\85å\98¢",
        "recentchanges-legend": "最近更改選項",
        "recentchanges-summary": "追蹤對哩一個 wiki 嘅最後更改。",
        "recentchanges-feed-description": "追蹤對哩一個 wiki 度呢個集合嘅最後更改。",
        "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 006d7d8..966331a 100644 (file)
@@ -75,7 +75,9 @@
                        "阿pp",
                        "Hudafu",
                        "아라",
-                       "Mywood"
+                       "Mywood",
+                       "Impersonator 1",
+                       "Duolaimi"
                ]
        },
        "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": "导航菜单",
        "history_short": "历史",
        "updatedmarker": "更新于我上次访问后",
        "printableversion": "打印版本",
-       "permalink": "永久链接",
+       "permalink": "固定链接",
        "print": "打印",
        "view": "查看",
        "view-foreign": "在$1查看",
        "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条结果}}。",
        "viewyourtext": "您可以查看并复制<strong>您对此页面作出编辑后</strong>的源代码:",
        "protectedinterface": "该页提供此wiki软件的界面文字,它已被保护以防止恶意修改。\n如欲修改所有wiki的翻译,请到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化计划。",
        "editinginterface": "'''警告:'''您正在编辑的页面是用于提供软件的界面文字。\n改变此页将影响其他在此wiki上的用户界面外观。\n如欲修改所有wiki的翻译,请到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化计划。",
-       "cascadeprotected": "此页é\9d¢å·²è¢«ä¿\9dæ\8a¤ï¼\8cå\9b ä¸ºè¿\99个页é\9d¢è¢«ä»¥ä¸\8bå·²æ \87注â\80\9cè\81\94é\94\81ä¿\9dæ\8a¤â\80\9dç\9a\84{{PLURAL:$1|ä¸\80个|å¤\9a个}}被ä¿\9dæ\8a¤é¡µé\9d¢å\8c\85å\90«ï¼\9a\n$2",
+       "cascadeprotected": "æ\9c¬é¡µé\9d¢å·²ç»\8få\8f\97å\88°ä¿\9dæ\8a¤ï¼\8cä¸\8dè\83½ç¼\96è¾\91ï¼\8cå\9b ä¸ºå®\83被åµ\8cå\85¥äº\86以ä¸\8bå\90¯ç\94¨â\80\9c级è\81\94â\80\9dé\80\89项ç\9a\84å\8f\97ä¿\9dæ\8a¤{{PLURAL:$1|页é\9d¢}}ï¼\9a$2",
        "namespaceprotected": "您没有权限编辑'''$1'''名字空间内的页面。",
        "customcssprotected": "您没有权限编辑此CSS页面,因为它包含另一位用户的个人设置。",
        "customjsprotected": "您没有权限编辑此JavaScript页面,因为它包含另一位用户的个人设置。",
        "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": "这位用户目前已被封禁。以下提供最近的封禁日志以供参考:",
        "readonlywarning": "警告:数据库被锁定以进行维护,所以您目前将无法保存您的修改。'''您或许希望将本段文字先剪贴并保存到文本文件,并在稍后进行修改。\n\n锁定数据库的管理员有如下解释:$1",
        "protectedpagewarning": "'''警告:本页面已被保护,只有拥有管理员权限的用户可以编辑。'''下面提供最后的日志条目以供参考:",
        "semiprotectedpagewarning": "'''注意:'''本页面已被保护,只有注册用户可以编辑。下面提供最后的日志条目以供参考:",
-       "cascadeprotectedwarning": "'''警告:'''本页面已被保护,只有拥有管理员权限的用户可以编辑,因为其包含于以下受连锁保护的{{PLURAL:$1|页面}}:",
+       "cascadeprotectedwarning": "<strong>警告:</strong>本页面已经被保护,只有拥有管理员权限的用户可以编辑,因为它被嵌入了以下启用级联保护的{{PLURAL:$1|页面}}:",
        "titleprotectedwarning": "'''警告:本页面已被保护,创建本页面需要[[Special:ListGroupRights|特定权限]]。'''下面提供最后的日志条目以供参考:",
        "templatesused": "该页面使用的{{PLURAL:$1|模板}}:",
        "templatesusedpreview": "本预览使用的{{PLURAL:$1|模板}}:",
        "templatesusedsection": "该段落使用的{{PLURAL:$1|模板}}:",
-       "template-protected": "ï¼\88å·²保护)",
-       "template-semiprotected": "(半保护)",
+       "template-protected": "ï¼\88å\8f\97保护)",
+       "template-semiprotected": "ï¼\88å\8f\97å\8d\8aä¿\9dæ\8a¤ï¼\89",
        "hiddencategories": "该页面属于$1个隐藏分类:",
        "edittools": "<!-- 这里的文字将显示在编辑和上传表格下面。 -->",
        "nocreatetext": "{{SITENAME}}已经限制创建新页面功能。你可以返回编辑现有页面或[[Special:UserLogin|登录或创建账户]]。",
        "undo-norev": "该编辑无法撤消,因为它不存在或已被删除。",
        "undo-nochange": "这次编辑似乎已被撤销。",
        "undo-summary": "撤销[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的版本$1",
-       "undo-summary-username-hidden": "取消由一匿名用户所作的修订$1",
+       "undo-summary-username-hidden": "取消由一匿名用户所作的版本$1",
        "cantcreateaccounttitle": "无法创建账户",
        "cantcreateaccount-text": "从该IP地址('''$1''')创建账户已被[[User:$3|$3]]禁止。\n\n$3的理由是''$2''",
        "cantcreateaccount-range-text": "从该IP地址段'''$1'''的账户创建已被[[User:$3|$3]]禁止,而这也包括了您的IP地址('''$4''')。\n$3给出的原因是“$2”。",
        "previousrevision": "←上一版本",
        "nextrevision": "下一版本→",
        "currentrevisionlink": "最后版本",
-       "cur": "",
+       "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-user-contribs": "[用户名或IP地址被删除 - 编辑在贡献中隐藏]",
        "rev-deleted-text-permission": "本页面版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
        "rev-deleted-text-unhide": "本页面版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。如果你想继续操作,你仍然可以[$1 查看本版本]。",
-       "rev-suppressed-text-unhide": "该页面修订已经被'''监督隐藏'''。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。如果您想继续的话,您可以仍然[$1 去查看这次修订]。",
+       "rev-suppressed-text-unhide": "该页面版本已经被'''监督隐藏'''。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。如果您想继续的话,您可以仍然[$1 去查看这次版本]。",
        "rev-deleted-text-view": "本页面版本已被'''删除'''。你可以查看它,详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
-       "rev-suppressed-text-view": "该页面修订已经被'''监督隐藏'''。您可以查看它。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。",
+       "rev-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-deleted-unhide-diff": "该差异对比其中的一个版本已经被'''删除'''。在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中可以找到更多的信息。如果您想继续的话,您仍然可以[$1 查看这版本]。",
+       "rev-suppressed-unhide-diff": "该页面的其中一次版本已经被'''监督隐藏'''。\n在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到更多的资料。如果您想继续的话,您可以仍然[$1 去查看这版本]。",
+       "rev-deleted-diff-view": "差异对比中的一次版本已被'''删除'''。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
+       "rev-suppressed-diff-view": "差异对比中的一个版本已被'''监督隐藏'''。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中找到。",
        "rev-delundel": "显示/隐藏",
        "rev-showdeleted": "显示",
        "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-confirm": "请确认该操作,明白其后果,并确保该操作符合[[{{MediaWiki:Policy-url}}|方针]]。",
        "revdelete-suppress-text": "阻止应'''仅'''用于以下情况:\n* 潜在的诽谤信息\n* 不合适的个人信息\n*: ''家庭地址、电话号码和社保号码等。''",
        "revdelete-legend": "设置可见性之限制",
-       "revdelete-hide-text": "修订文字",
+       "revdelete-hide-text": "版本文字",
        "revdelete-hide-image": "隐藏文件内容",
        "revdelete-hide-name": "隐藏动作和目标",
        "revdelete-hide-comment": "编辑摘要",
        "revdelete-radio-set": "隐藏",
        "revdelete-radio-unset": "可见",
        "revdelete-suppress": "同时阻止管理员与其他用户查看数据",
-       "revdelete-unsuppress": "在已恢复的修订中移除限制",
+       "revdelete-unsuppress": "在已恢复的版本中移除限制",
        "revdelete-log": "原因:",
        "revdelete-submit": "应用于选中的{{PLURAL:$1|版本}}",
-       "revdelete-success": "<strong>修订版本可见性更新成功。</strong>",
-       "revdelete-failure": "<strong>修订版本可见性无法更新:</strong>\n$1",
+       "revdelete-success": "<strong>版本可见性更新成功。</strong>",
+       "revdelete-failure": "<strong>版本可见性无法更新:</strong>$1",
        "logdelete-success": "'''事件的可见性已经成功设置。'''",
        "logdelete-failure": "'''事件的可见性无法设置:'''\n$1",
        "revdel-restore": "更改可见性",
        "pagehist": "页面历史",
        "deletedhist": "已删除历史",
-       "revdelete-hide-current": "正在隐藏于$1 $2之项目错误:这个是现时的修订,不可以隐藏。",
+       "revdelete-hide-current": "隐藏$1 $2的项出错:这个是当前的版本,不可以隐藏。",
        "revdelete-show-no-access": "正在显示于$1 $2之项目错误:这个项目已经标示为\"已限制\",您对它并无通行权。",
        "revdelete-modify-no-access": "正在更改于$1 $2之项目错误:这个项目已经标示为\"已限制\",您对它并无通行权。",
        "revdelete-modify-missing": "正在更改项目ID $1错误:它在资料库中遗失!",
        "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": "来源页面必须是一个有效的标题。",
        "diff-multi-sameuser": "(未显示同一用户的$1个中间版本)",
        "diff-multi-otherusers": "(未显示{{PLURAL:$1|另一用户|$2个用户}}的{{PLURAL:$1|$1个中间版本}})",
        "diff-multi-manyusers": "(未显示超过$2个用户的$1个中间版本)",
-       "difference-missing-revision": "此差异对比的{{PLURAL:$2|一个修订|$2个修订}}($1){{PLURAL:$2|没有}}找到。\n\n这通常是因为进入了一个已被删除的页面的修订差异对比链接。\n详细信息可以在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
+       "difference-missing-revision": "此差异对比的{{PLURAL:$2|$2个版本}}($1){{PLURAL:$2|没有}}找到。\n\n这通常是因为进入了一个已被删除的页面的版本差异对比链接。\n详细信息可以在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
        "searchresults": "搜索结果",
        "searchresults-title": "“$1”的搜索结果",
-       "toomanymatches": "找到的匹配结果过多,请尝试不同的查询词",
        "titlematches": "页面标题匹配",
        "textmatches": "页面内容匹配",
        "notextmatches": "没有页面内容匹配",
        "searchprofile-images-tooltip": "搜索文件",
        "searchprofile-everything-tooltip": "搜索所有内容(包括讨论页面)",
        "searchprofile-advanced-tooltip": "在自定义名字空间中搜索",
-       "search-result-size": "$1($2字)",
+       "search-result-size": "$1($2字)",
        "search-result-category-size": "$1个成员($2个子分类,$3个文件)",
        "search-result-score": "相关度:$1%",
        "search-redirect": "(重定向自“$1”)",
        "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": "高级搜索",
        "recentchangesdays-max": "最多$1天",
        "recentchangescount": "默认显示的编辑数:",
        "prefs-help-recentchangescount": "这包括最近更改、页面历史和日志。",
-       "prefs-help-watchlist-token2": "这是你的监视列表的网络feed的密钥。任何知道它的人均可以阅读你的监视列表,因此请不要分享它。如果需要,[[Special:ResetTokens|你可以重置它]]。",
+       "prefs-help-watchlist-token2": "这是您的监视列表的网络feed密钥。\n任何拥有者均可以浏览您的监视列表,因此不要公开该密钥。\n如果有需要,[[Special:ResetTokens|您可以重置密钥]]。",
        "savedprefs": "您的系统设置已保存。",
        "timezonelegend": "时区:",
        "localtime": "当地时间:",
        "yourvariant": "内容语言变种:",
        "prefs-help-variant": "您希望用于显示该本站内容的语言变体。",
        "yournick": "新签名:",
-       "prefs-help-signature": "讨论页面上的评论应该使用“<nowiki>~~~~</nowiki>”签名,它会自动转换为您的签名及时间戳。",
+       "prefs-help-signature": "讨论页上留言应该使用“<nowiki>~~~~</nowiki>”签名,它会自动转换为您的签名及时间戳。",
        "badsig": "错误的原始签名。请检查HTML标签。",
        "badsiglength": "签名过长。请不超过$1个字符。",
        "yourgender": "您希望使用什么性别称呼?",
        "email": "电子邮件",
        "prefs-help-realname": "真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。",
        "prefs-help-email": "电子邮件地址是选填项,但是当你忘记你的密码要重置密码时,需要该信息。",
-       "prefs-help-email-others": "你也可以选择让其他用户通过你的用户或讨论页面上的链接用电子邮件联系你。其他用户联系你时你的电子邮件地址不会显示。",
+       "prefs-help-email-others": "您也可以选择让其他用户通过您的用户或讨论页面上的链接用电子邮件联系您。其他用户联系您时您的电子邮件地址不会显示。",
        "prefs-help-email-required": "电子邮件地址是必填项目。",
        "prefs-info": "基本信息",
        "prefs-i18n": "语言",
        "right-ipblock-exempt": "绕过IP封禁、自动封禁和段封禁",
        "right-proxyunbannable": "避开代理服务器的自动封禁",
        "right-unblockself": "自我解封",
-       "right-protect": "更改保护级别和编辑受连锁保护的页面",
+       "right-protect": "更改保护级别和编辑受级联保护页面",
        "right-editprotected": "编辑保护级别为“{{int:protect-level-sysop}}”的页面",
        "right-editsemiprotected": "编辑保护级别为“{{int:protect-level-autoconfirmed}}”的页面",
        "right-editinterface": "编辑用户界面",
        "rcshowhidemine-show": "显示",
        "rcshowhidemine-hide": "隐藏",
        "rclinks": "显示过去$2天的最后$1个更改<br />$3",
-       "diff": "异",
-       "hist": "史",
+       "diff": "å·®å¼\82",
+       "hist": "å\8e\86å\8f²",
        "hide": "隐藏",
        "show": "显示",
        "minoreditletter": "小",
        "filehist-comment": "备注",
        "imagelinks": "文件用途",
        "linkstoimage": "以下$1个页面链接至本文件:",
-       "linkstoimage-more": "超过$1个页面连接到这个文件。\n此处只列出首$1个链接到该文件的页面。\n您也可以查看[[Special:WhatLinksHere/$2|完整的列表]]。",
+       "linkstoimage-more": "超过$1个{{PLURAL:$1|页面链接至}}本文件。下面的列表只显示链接至本文件的{{PLURAL:$1|首个页面|前$1个页面}}。[[Special:WhatLinksHere/$2|完整列表]]。",
        "nolinkstoimage": "没有页面链接到本文件。",
        "morelinkstoimage": "查看连接到这个文件的[[Special:WhatLinksHere/$1|更多链接]]。",
        "linkstoimage-redirect": "$1(文件重定向)$2",
        "protectedpages": "受保护页面",
        "protectedpages-indef": "仅无限期保护",
        "protectedpages-summary": "本页面列出当前受保护的页面。要浏览受限制创建的标题列表,请参见[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]。",
-       "protectedpages-cascade": "仅连锁保护",
+       "protectedpages-cascade": "仅级联保护",
        "protectedpages-noredirect": "隐藏重定向",
        "protectedpagesempty": "在这些参数下没有页面正在保护。",
        "protectedpages-timestamp": "时间戳",
        "allarticles": "所有页面",
        "allinnamespace": "所有页面($1名字空间)",
        "allpagessubmit": "提交",
-       "allpagesprefix": "显示页面的前缀:",
+       "allpagesprefix": "显示有该前缀的页面:",
        "allpagesbadtitle": "给定的页面标题是非法的,或者具有一个内部语言或内部 wiki 的前缀。它可能包含一个或更多的不能用于标题的字符。",
        "allpages-bad-ns": "在{{SITENAME}}中没有一个叫做\"$1\"的名字空间。",
        "allpages-hide-redirects": "隐藏重定向",
        "categoriesfrom": "显示分类开始于:",
        "special-categories-sort-count": "按数量排列",
        "special-categories-sort-abc": "按字母排列",
-       "deletedcontributions": "被删除的用户贡献",
-       "deletedcontributions-title": "被删除的用户贡献",
+       "deletedcontributions": "被删除的用户贡献",
+       "deletedcontributions-title": "被删除的用户贡献",
        "sp-deletedcontributions-contribs": "贡献",
        "linksearch": "外部链接搜索",
        "linksearch-pat": "搜索网址:",
        "unwatch": "取消监视",
        "unwatchthispage": "停止监视",
        "notanarticle": "非内容页面",
-       "notvisiblerev": "上次由不同用户所作的修订版本已经删除",
-       "watchlist-details": "不计讨论页,您的监视列表中有$1个页面。",
+       "notvisiblerev": "上次由不同用户所作的版本已经删除",
+       "watchlist-details": "不计讨论页,您的监视列表中有$1个页面。",
        "wlheader-enotif": "已启用电子邮件通知。",
        "wlheader-showupdated": "您上次访问后发生更改的页面'''加粗'''显示",
-       "wlnote2": "下面是过去{{PLURAL:$1|<strong>$1</strong>小时}}的更改,截至$2 $3。",
+       "wlnote2": "下面是最近{{PLURAL:$1|<strong>$1</strong>小时}}的更改,截至$2 $3。",
        "wlshowlast": "显示过去$1小时$2天$3",
        "watchlist-options": "监视列表选项",
        "watching": "正在监视...",
        "exbeforeblank": "被清空前的内容为:“$1”",
        "delete-confirm": "删除“$1”",
        "delete-legend": "删除",
-       "historywarning": "警告:您将要删除的页面有约$1个{{PLURAL:$1|修订}}版本的历史:",
+       "historywarning": "警告:您将要删除的页面有约$1个{{PLURAL:$1|版本}}的历史:",
        "confirmdeletetext": "您即将删除一个页面或图像以及其历史。\n请确定您要进行此项操作,并且了解其后果,同时您的行为符合[[{{MediaWiki:Policy-url}}]]。",
        "actioncomplete": "操作完成",
        "actionfailed": "操作失败",
        "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": "回退",
        "protect-locked-blocked": "您不能在被封禁时更改保护级别。以下是页面'''$1'''的当前设置:",
        "protect-locked-dblock": "您不能在数据库锁定时更改保护级别。以下是页面'''$1'''的当前设置:",
        "protect-locked-access": "您的帐户没有足够的权限去更改保护级别。以下是页面'''$1'''的当前设置:",
-       "protect-cascadeon": "以下$1个页面包含本页面的同时,启动了连锁保护,因此此页面也被保护。您可以设置本页面的保护级别,但这并不会对连锁保护有所影响。",
+       "protect-cascadeon": "该页面目前受到保护,因为它被嵌入了以下启用级联保护的{{PLURAL:$1|页面}}。更改该页面的保护级别不会影响级联保护。",
        "protect-default": "允许所有用户",
        "protect-fallback": "仅允许拥有“$1”权限的用户",
        "protect-level-autoconfirmed": "仅允许自动确认用户",
        "protect-level-sysop": "仅允许管理员",
        "protect-summary-desc": "[$1=$2]($3)",
-       "protect-summary-cascade": "联锁",
+       "protect-summary-cascade": "级联",
        "protect-expiring": "终止于$1(UTC)",
        "protect-expiring-local": "终止于$1",
        "protect-expiry-indefinite": "无限期",
-       "protect-cascade": "保护本页中包含的页面(连锁保护)",
+       "protect-cascade": "保护嵌入该页面的页面(级联保护)",
        "protect-cantedit": "您无法更改这个页面的保护等级,因为您没有权限去编辑它。",
        "protect-othertime": "其它时间:",
        "protect-othertime-op": "其它时间",
        "protect-otherreason-op": "其他原因",
        "protect-dropdown": "*常见保护原因\n** 过度破坏\n** 过多垃圾信息\n** 负面的编辑战\n** 高流量页面",
        "protect-edit-reasonlist": "编辑保护原因",
-       "protect-expiry-options": "1小时:1 hour,1天:1 day,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,限期:infinite",
+       "protect-expiry-options": "1小时:1 hour,1天:1 day,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,限期:infinite",
        "restriction-type": "权限:",
        "restriction-level": "限制级别:",
        "minimum-size": "最小尺寸",
        "restriction-level-all": "任何级别",
        "undelete": "查看被删除页面",
        "undeletepage": "查看和还原被删除的页面",
-       "undeletepagetitle": "'''以下包含[[:$1]]的已删除之修订版本'''。",
+       "undeletepagetitle": "'''以下包含[[:$1]]的已删除之版本'''。",
        "viewdeletedpage": "查看被删页面",
        "undeletepagetext": "以下{{PLURAL:$1|页面|$1个页面}}已被删除,但依然在归档中并可以被恢复。归档可能会被定时清理。",
        "undelete-fieldset-title": "还原版本",
        "undeleteextrahelp": "要恢复该页面的整个历史记录时,不选中任何复选框直接点击'''''{{int:undeletebtn}}'''''。要选择性地恢复部分版本时,请选中相应版本前的复选框再点击'''''{{int:undeletebtn}}'''''。",
        "undeleterevisions": "$1版本存档",
-       "undeletehistory": "如果您恢复了该页面,所有版本都会被恢复到修订历史中。\n如果本页删除后有一个同名的新页面建立,被恢复的版本将会出现在先前的历史中。",
-       "undeleterevdel": "如果把最新修订部分删除,反删除将会无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的修订。",
-       "undeletehistorynoadmin": "这个页面已被删除。删除原因显示在下方编辑摘要中,被删除前的所有修订文本连同删除前贡献用户的细节信息只对管理员可见。",
-       "undelete-revision": "$1由$3(在$4 $5)所编写的已删除修订版本:",
-       "undeleterevision-missing": "无效或丢失的修订版本。您可能使用了错误的链接,或者此修订版本已经被从存档中恢复或移除。",
-       "undelete-nodiff": "找不到先前的修订版本。",
+       "undeletehistory": "如果您恢复了该页面,所有版本都会被恢复到版本历史中。如果本页删除后有一个同名的新页面建立,被恢复的版本将会出现在先前的历史中。",
+       "undeleterevdel": "如果把最新版本部分删除,反删除将会无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的版本。",
+       "undeletehistorynoadmin": "这个页面已被删除。删除原因显示在下方编辑摘要中,被删除前的所有版本文本连同删除前贡献用户的细节信息只对管理员可见。",
+       "undelete-revision": "$1由$3(在$4 $5)所编写的已删除版本:",
+       "undeleterevision-missing": "无效或丢失的版本。您可能使用了错误的链接,或者此版本已经被从存档中恢复或移除。",
+       "undelete-nodiff": "找不到先前的版本。",
        "undeletebtn": "还原",
        "undeletelink": "查看/还原",
        "undeleteviewlink": "查看",
        "undelete-search-prefix": "显示页面自:",
        "undelete-search-submit": "搜索",
        "undelete-no-results": "删除日志中没有匹配的结果。",
-       "undelete-filename-mismatch": "不能删除带有时间戳的文件修订$1:文件不匹配",
-       "undelete-bad-store-key": "不能删除带有时间戳的文件修订$1:文件在删除前遗失。",
+       "undelete-filename-mismatch": "不能删除带有时间戳的文件版本$1:文件不匹配",
+       "undelete-bad-store-key": "不能删除带有时间戳的文件版本$1:文件在删除前遗失。",
        "undelete-cleanup-error": "删除无用的存档文件“$1”时发生错误。",
        "undelete-missing-filearchive": "由于文件存档 ID $1 不在数据库中,不能在文件存档中恢复。它可能已经被恢复了。",
        "undelete-error": "还原页面出错",
        "sp-contributions-newbies-sub": "新账户的贡献",
        "sp-contributions-newbies-title": "新账户的用户贡献",
        "sp-contributions-blocklog": "封禁日志",
-       "sp-contributions-suppresslog": "已被删除的用户贡献",
-       "sp-contributions-deleted": "被删除的用户贡献",
+       "sp-contributions-suppresslog": "被压制的用户贡献",
+       "sp-contributions-deleted": "被删除的用户贡献",
        "sp-contributions-uploads": "上传",
        "sp-contributions-logs": "日志",
        "sp-contributions-talk": "讨论",
        "ipbenableautoblock": "自动封禁该用户最后使用的IP地址,以及他们随后试图用于编辑的所有IP地址",
        "ipbsubmit": "封禁该用户",
        "ipbother": "其它时间:",
-       "ipboptions": "2小时:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,限期:infinite",
+       "ipboptions": "2小时:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,限期:infinite",
        "ipbhidename": "在编辑及列表中隐藏用户名",
        "ipbwatchuser": "监视该用户的用户页和讨论页",
        "ipb-disableusertalk": "阻止用户在封禁期间编辑自己的讨论页",
        "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'''注意:'''由于性能原因,从此表单导出页面的全部历史已被禁用。",
        "export-addnstext": "从名字空间添加页面:",
        "export-addns": "添加",
        "export-download": "另存为文件",
-       "export-templates": "包模板",
+       "export-templates": "包模板",
        "export-pagelinks": "包含链接页面的搜索深度:",
        "allmessages": "系统消息",
        "allmessagesname": "名称",
        "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-history": "复制此页的所有历史版本",
        "import-interwiki-templates": "包含所有模板",
        "import-interwiki-submit": "导入",
        "import-interwiki-namespace": "目标名字空间:",
        "importuploaderrortemp": "上传导入文件失败。临时文件夹已遗失。",
        "import-parse-failure": "XML导入语法失败",
        "import-noarticle": "没有页面作导入!",
-       "import-nonewrevisions": "没有导入修订(所有都已存在或因错误跳过)。",
+       "import-nonewrevisions": "没有导入版本(所有都已存在或因错误跳过)。",
        "xml-error-string": "$1于行$2,列$3($4字节):$5",
        "import-upload": "上传XML数据",
        "import-token-mismatch": "会话数据遗失。请重试。",
        "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-t-upload": "上传文件",
        "tooltip-t-specialpages": "所有特殊页面的列表",
        "tooltip-t-print": "本页面的可打印版本",
-       "tooltip-t-permalink": "本页面该版本的永久链接",
+       "tooltip-t-permalink": "本页面该版本的固定链接",
        "tooltip-ca-nstab-main": "查看内容页面",
        "tooltip-ca-nstab-user": "查看用户页面",
        "tooltip-ca-nstab-media": "查看媒体文件页面",
        "tooltip-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将只为管理员加载 */",
        "spamprotectionmatch": "以下文本触发了我们的垃圾链接过滤器:$1",
        "spambot_username": "MediaWiki垃圾链接清理器",
        "spam_reverting": "恢复至不包含$1的链接的最后版本",
-       "spam_blanking": "消隐所有包含链接至$1的修订",
+       "spam_blanking": "消隐所有包含链接至$1的版本",
        "spam_deleting": "正在删除所有包含至$1的版本",
        "simpleantispam-label": "反垃圾检查。\n'''不要'''加入这个!",
        "pageinfo-title": "“$1”的信息",
        "pageinfo-redirectsto-info": "信息",
        "pageinfo-contentpage": "计为内容页面",
        "pageinfo-contentpage-yes": "是",
-       "pageinfo-protect-cascading": "保护连锁自此",
+       "pageinfo-protect-cascading": "保护级联自这里",
        "pageinfo-protect-cascading-yes": "是",
-       "pageinfo-protect-cascading-from": "保护连锁自",
+       "pageinfo-protect-cascading-from": "保护级联自",
        "pageinfo-category-info": "分类信息",
        "pageinfo-category-pages": "页面数",
        "pageinfo-category-subcats": "子分类数",
        "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": "←上一编辑",
        "confirm-watch-top": "将此页添加到您的监视吗?",
        "confirm-unwatch-button": "确定",
        "confirm-unwatch-top": "从监视列表中删除此页吗?",
+       "semicolon-separator": ";",
        "comma-separator": "、",
        "colon-separator": ":",
        "pipe-separator": "&#32;|&#32;",
        "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": "说明",
        "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 81914ef..2dbb891 100644 (file)
                        "乌拉跨氪",
                        "아라",
                        "Vincent Liu",
-                       "Mywood"
+                       "Mywood",
+                       "Cwek",
+                       "Impersonator 1",
+                       "LNDDYL"
                ]
        },
        "tog-underline": "連結底線:",
@@ -72,9 +75,9 @@
        "tog-minordefault": "預設標記所有的編輯為小修訂",
        "tog-previewontop": "顯示預覽於編輯框上方",
        "tog-previewonfirst": "第一次編輯時顯示預覽",
-       "tog-enotifwatchlistpages": "當我的監視清單中的頁面或檔案有變更時,送電子郵件通知我",
-       "tog-enotifusertalkpages": "當我的對話頁面有變更時,送電子郵件通知我",
-       "tog-enotifminoredits": "當頁面與檔案有小修訂時,送電子郵件通知我",
+       "tog-enotifwatchlistpages": "當我的監視清單中的頁面或檔案有變更時,送電子郵件通知我",
+       "tog-enotifusertalkpages": "當我的對話頁面有變更時,送電子郵件通知我",
+       "tog-enotifminoredits": "當頁面與檔案有小修訂時,送電子郵件通知我",
        "tog-enotifrevealaddr": "在通知信件中顯示我的電子郵件位址",
        "tog-shownumberswatching": "顯示正在監視的使用者數",
        "tog-oldsig": "現有簽名:",
@@ -87,7 +90,7 @@
        "tog-watchlisthideliu": "隱藏監視清單中已登入使用者的編輯",
        "tog-watchlisthideanons": "隱藏監視清單中匿名使用者的編輯",
        "tog-watchlisthidepatrolled": "隱藏監視清單中已巡查的編輯",
-       "tog-ccmeonemails": "送郵件給他人時,也送一份副本到我的電子郵件信箱",
+       "tog-ccmeonemails": "送郵件給他人時,也送一份副本到我的電子郵件信箱",
        "tog-diffonly": "比對版本差異時下面不顯示頁面內容",
        "tog-showhiddencats": "顯示隱藏分類",
        "tog-norollbackdiff": "執行還原後略過差異比對",
        "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": "導覽選單",
        "history_short": "歷史",
        "updatedmarker": "自我最後一次訪問以後的更新",
        "printableversion": "可列印版",
-       "permalink": "永久連結",
+       "permalink": "固定連結",
        "print": "列印",
        "view": "檢視",
        "view-foreign": "用 $1 檢視",
        "categorypage": "檢視分類頁面",
        "viewtalkpage": "檢視討論頁面",
        "otherlanguages": "其他語言",
-       "redirectedfrom": "(重定向自$1)",
-       "redirectpagesub": "重向頁面",
+       "redirectedfrom": "(已重新導向自 $1)",
+       "redirectpagesub": "重新導向頁面",
        "lastmodifiedat": "此頁面最後修訂於 $1 $2。",
        "viewcount": "此頁面已被檢視過 $1 次。",
        "protectedpage": "受保護頁面",
        "mainpage-description": "首頁",
        "policy-url": "Project:方針",
        "portal": "社群主頁",
-       "portal-url": "Project:社專頁",
+       "portal-url": "Project:社專頁",
        "privacy": "隱私政策",
        "privacypage": "Project:Privacy policy",
        "badaccess": "權限錯誤",
        "createacct-emailoptional": "電子郵件位址 (選填)",
        "createacct-email-ph": "輸入您的電子郵件位址",
        "createacct-another-email-ph": "輸入電子郵件位址",
-       "createaccountmail": "使用臨時的隨機密碼,並將它發送到指定的電子郵件地址",
+       "createaccountmail": "使用臨時的隨機密碼,並將它到指定的電子郵件地址",
        "createacct-realname": "真實姓名 (選填)",
        "createaccountreason": "原因:",
        "createacct-reason": "原因",
        "createacct-captcha": "安全驗證",
        "createacct-imgcaptcha-ph": "輸入您在上方看到的文字",
        "createacct-submit": "建立您的帳號",
-       "createacct-another-submit": "建立另一帳號",
+       "createacct-another-submit": "建ç«\8bå\8f¦ä¸\80å\80\8b帳è\99\9f",
        "createacct-benefit-heading": "{{SITENAME}} 是由像您一樣貢獻的人所建立的。",
        "createacct-benefit-body1": " {{PLURAL:$1|次編輯}}",
        "createacct-benefit-body2": " $1 頁",
        "mailmypassword": "重設密碼",
        "passwordremindertitle": "{{SITENAME}} 的新臨時密碼",
        "passwordremindertext": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼。\n給使用者 \"$2\" 的臨時密碼設為 \"$3\"。\n如果這個動作是您做的,您需要立即登入並設定一個新的密碼,\n您的臨時密碼將於{{PLURAL:$5|一|$5}}天內過期。\n\n如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
-       "noemail": "使用者 \"$1\" 未登記電子郵件址。",
-       "noemailcreate": "您需要提供一個有效的電子郵件址。",
-       "passwordsent": "使用者 \"$1\" 的新密碼已寄至當出登記的電子郵件地址,\n請稍後收到信件後再登入。",
+       "noemail": "使用者 \"$1\" 未登記電子郵件址。",
+       "noemailcreate": "您需要提供一個有效的電子郵件址。",
+       "passwordsent": "使用者 \"$1\" 的新密碼已寄至當出登記的電子郵件地址,\n請稍後收到信件後再登入。",
        "blocked-mailpassword": "您的 IP 位址已被封鎖不允許編輯,密碼復原的功能也同樣被禁止使用以防止被濫用。",
-       "eauthentsent": "以發送一封確認信到您所設定的電子郵件地址。\n在未收到其它電子郵件前,您必須先依照信件中的指示,確認這個帳號確實是您本人。",
-       "throttled-mailpassword": "密碼重設的電子郵件已經在最近 $1 小時內送出。\n為防止濫用,$1 小時內只能發送一次密碼重設信件。",
-       "mailerror": "發送郵件錯誤:$1",
-       "acct_creation_throttle_hit": "使用您目前的 IP 位址的參觀者在最近一天建立了 {{PLURAL:$1|1 個帳號|$1 個帳號}},已超出系統允許的上限。\n因此,目前無法讓使用此 IP 位址的參觀者建立帳號。",
+       "eauthentsent": "已寄出一封確認信到您所設定的電子郵件位址。\n在未收到其它電子郵件前,您必須先依照信件中的指示,確認這個帳號確實是您本人。",
+       "throttled-mailpassword": "密碼重設的電子郵件已經在最近 $1 小時內寄出。\n為防止濫用,$1 小時內只能寄出一次密碼重設信件。",
+       "mailerror": "寄出電子郵件錯誤:$1",
+       "acct_creation_throttle_hit": "使用您目前的 IP 位址的訪客在最近一天建立了 {{PLURAL:$1|1 個帳號|$1 個帳號}},已超出系統允許的上限。\n因此,目前無法讓使用此 IP 位址的訪客建立帳號。",
        "emailauthenticated": "您的電子郵件位址已確認於 $2 的 $3。",
-       "emailnotauthenticated": "您的電子郵件地址尚未確認,\n尚不會發送以下功能的電子郵件給您。",
+       "emailnotauthenticated": "您的電子郵件地址尚未確認,\n尚不會寄出以下功能的電子郵件給您。",
        "noemailprefs": "在您的偏好設定中設定電子郵件地址,讓您可以使用這些功能。",
        "emailconfirmlink": "確認您的電子郵件位址",
        "invalidemailaddress": "無法接受格式不正確的電子郵件地址,\n請輸入正確的電子郵件地址格式或略過填寫該欄位。",
        "cannotchangeemail": "此 Wiki 不允許更改帳號的電子郵件位址。",
-       "emaildisabled": "此網站不能發送電子郵件。",
+       "emaildisabled": "此網站不能寄出電子郵件。",
        "accountcreated": "已建立帳號",
        "accountcreatedtext": "使用者帳號 [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|對話]]) 已建立。",
        "createaccount-title": "{{SITENAME}} 的帳號建立",
        "pt-createaccount": "建立帳號",
        "pt-userlogout": "登出",
        "php-mail-error-unknown": "PHP 的 mail() 函數發生不明錯誤。",
-       "user-mail-no-addy": "試圖發送沒有電子郵件地址的電子郵件。",
-       "user-mail-no-body": "試圖發送一個空的或異常簡短的電子郵件。",
+       "user-mail-no-addy": "試圖寄出沒有電子郵件位址的信件。",
+       "user-mail-no-body": "試圖寄出一個空的或異常簡短的電子郵件。",
        "changepassword": "變更密碼",
        "resetpass_announce": "要完成登入,您必須設定一個新密碼。",
        "resetpass_text": "<!-- 在此處加入文字 -->",
        "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": "您的密碼已過期。請設定一個新的密碼以登入。",
        "passwordreset-username": "使用者名稱:",
        "passwordreset-domain": "網域名稱:",
        "passwordreset-capture": "檢視電子郵件內容?",
-       "passwordreset-capture-help": "若您勾選此核選方塊,電子郵件 (包含臨時密碼) 將直接顯示,並發送給使用者。",
+       "passwordreset-capture-help": "若您勾選此核選方塊,電子郵件 (包含臨時密碼) 將直接顯示,並給使用者。",
        "passwordreset-email": "電子郵件位址:",
        "passwordreset-emailtitle": "於 {{SITENAME}} 的帳號詳細資訊",
-       "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
-       "passwordreset-emailtext-user": "使用者 $1 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
+       "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
+       "passwordreset-emailtext-user": "使用者 $1 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
        "passwordreset-emailelement": "使用者名稱:$1\n臨時密碼:$2",
-       "passwordreset-emailsent": "已發送重設密碼的電子郵件。",
-       "passwordreset-emailsent-capture": "已發送重設密碼的電子郵件,並在下面顯示。",
-       "passwordreset-emailerror-capture": "產生的重設密碼的電子郵件如下所示,但送給{{GENDER:$2|使用者}}失敗:$1",
+       "passwordreset-emailsent": "已寄出重設密碼的電子郵件。",
+       "passwordreset-emailsent-capture": "已寄出重設密碼的電子郵件,並在下面顯示。",
+       "passwordreset-emailerror-capture": "產生的重設密碼的電子郵件如下所示,但送給{{GENDER:$2|使用者}}失敗:$1",
        "changeemail": "變更電子郵件位址",
        "changeemail-header": "變更帳號的電子郵件位址",
-       "changeemail-text": "填寫表格以修改您的電子郵件址。您需要輸入密碼以確認此次變更。",
-       "changeemail-no-info": "您必須登入方可直接訪問此頁面。",
+       "changeemail-text": "填寫表格以修改您的電子郵件址。您需要輸入密碼以確認此次變更。",
+       "changeemail-no-info": "您必須登入方可直接存取此頁面。",
        "changeemail-oldemail": "目前的電子郵件位址:",
        "changeemail-newemail": "新的電子郵件位址:",
        "changeemail-none": "(無)",
        "summary-preview": "摘要預覽:",
        "subject-preview": "主旨/標題預覽:",
        "blockedtitle": "使用者已被封鎖",
-       "blockedtext": "<strong>您的使用者名稱或 IP 位址以被封鎖。</strong>\n\n您被 $1 封鎖,\n原因爲 <em>$2</em>。\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯繫 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件地址,且尚未被封鎖郵件功能,則您可透過 \"送電子郵件給這位使用者\" 的功能來聯絡相關管理員。\n您目刖的 IP 位址是 $3,此次封鎖的 ID 爲 #$5。\n請您在詢問時附註以上詳細訊息。",
-       "autoblockedtext": "因先前的另一位使用者被 $1 封鎖,您的 IP 位址已被自動封鎖。\n原因是:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯繫 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件地址,且尚未被封鎖郵件功能,則您可透過 \"送電子郵件給這位使用者\" 的功能來聯絡相關管理員。\n您目刖的 IP 位址是 $3,此次封鎖的 ID 爲 #$5。\n請您在詢問時附註以上詳細訊息。",
+       "blockedtext": "<strong>您的使用者名稱或 IP 位址以被封鎖。</strong>\n\n您被 $1 封鎖,\n原因爲 <em>$2</em>。\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯繫 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件地址,且尚未被封鎖郵件功能,則您可透過 \"送電子郵件給這位使用者\" 的功能來聯絡相關管理員。\n您目刖的 IP 位址是 $3,此次封鎖的 ID 爲 #$5。\n請您在詢問時附註以上詳細訊息。",
+       "autoblockedtext": "因先前的另一位使用者被 $1 封鎖,您的 IP 位址已被自動封鎖。\n原因是:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯繫 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件地址,且尚未被封鎖郵件功能,則您可透過 \"送電子郵件給這位使用者\" 的功能來聯絡相關管理員。\n您目刖的 IP 位址是 $3,此次封鎖的 ID 爲 #$5。\n請您在詢問時附註以上詳細訊息。",
        "blockednoreason": "未說明原因",
        "whitelistedittext": "請先 $1 才可編輯頁面。",
        "confirmedittext": "在編輯此頁之前您必須確認您的電子郵件位址。\n請透過 [[Special:Preferences|偏好設定]] 設定並驗證您的電子郵件位址。",
        "nosuchsectiontitle": "找不到章節",
-       "nosuchsectiontext": "æ\82¨å\98\97試編輯ç\9a\84ç« ç¯\80並ä¸\8då­\98å\9c¨ã\80\82\nå\8f¯è\83½å\9c¨æ\82¨æ\9f¥ç\9c\8b頁面時已經移動或刪除。",
+       "nosuchsectiontext": "æ\82¨å\98\97試編輯ç\9a\84ç« ç¯\80並ä¸\8då­\98å\9c¨ã\80\82\nå\8f¯è\83½å\9c¨æ\82¨æª¢è¦\96頁面時已經移動或刪除。",
        "loginreqtitle": "需要登入",
        "loginreqlink": "登入",
        "loginreqpagetext": "您必須 $1 才能檢視其它頁面。",
        "accmailtext": "[[User talk:$1|$1]] 的隨機密碼已經寄送至 $2,可登入後至 <em>[[Special:ChangePassword|變更密碼]] 頁面更改</em>。",
        "newarticle": "(新)",
        "newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯框中輸入內容 (詳情請參考 [$1 説明頁面])。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
-       "anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識身份,但相同的 IP 位可能由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請 [[Special:UserLogin/signup|建立新帳號]] 或 [[Special:UserLogin|登入]] 避免與其他匿名使用者混淆。",
+       "anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識身份,但相同的 IP 位可能由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請 [[Special:UserLogin/signup|建立新帳號]] 或 [[Special:UserLogin|登入]] 避免與其他匿名使用者混淆。",
        "noarticletext": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌],\n或 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。",
        "noarticletext-nopermission": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],或 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]</span>,但您沒有權限建立此頁面。",
        "missing-revision": "頁面名稱 \"{{FULLPAGENAME}}\" 的 #$1 修訂版本不存在。\n\n通常是因連結到過期的歷史頁面,該頁面已被刪除。\n詳情請參考 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
        "session_fail_preview": "<strong>很抱歉!由於連線階段的資料遺失,我們無法處理您的編輯動作。</strong>\n請再試一次。\n如果仍然失敗,請 [[Special:UserLogout|登出]] 後重新登入。",
        "session_fail_preview_html": "<strong>很抱歉!由於連線階段的資料遺失,我們無法處理您的編輯動作。</strong>\n\n<em>由於 {{SITENAME}} 開啟了原始 HTML 模式,將不會顯示預覽畫面以避免 JavaScript 攻擊。</em>\n\n<strong>若這是符合規範的編輯動作,請再試一次。</strong>\n如果仍然有問題,請 [[Special:UserLogout|登出]] 後再重新登入一次。",
        "token_suffix_mismatch": "<strong>您使用的瀏覽器刪除了編輯資訊中的特殊符號,已拒絕此編輯動作。</strong>\n為了避免破壞頁面內容,已拒絕此編輯動作,\n這通常是因為您使用了有問題的匿名網頁代理伺服器。",
-       "edit_form_incomplete": "<strong>部份編輯的內容未送至伺服器,請檢查您的編輯內容是否完整並再試一次。</strong>",
+       "edit_form_incomplete": "<strong>部份編輯的內容未送至伺服器,請檢查您的編輯內容是否完整並再試一次。</strong>",
        "editing": "正在編輯 $1",
        "creating": "正在建立 $1",
        "editingsection": "正在編輯 $1 (章節)",
        "explainconflict": "在您開始編輯之後已有其他人儲存了此頁面。\n上方的文字框內顯示了目前頁面中的文字內容,\n您所變更的文字內容顯示在下方文字框中。\n您須要將您所變更的文字內容合併到已儲存的文字內容當中。\n若您直接點選 \"{{int:savearticle}}\" <strong>只有</strong> 上方文字框中的內容會被儲存。",
        "yourtext": "您的文字",
        "storedversion": "已儲存修訂",
-       "nonunicodebrowser": "<strong>警告:您的瀏覽器不相容 Unicode。</strong>\n暫時解決的方式是先在您可安全編輯頁面的地方編輯:非 ASCII 字元在編輯框中會以 16 進位編碼顯示。",
+       "nonunicodebrowser": "<strong>警告:您的瀏覽器與 Unicode 不相容。</strong>\n暫時解決的方式是先在您可安全編輯頁面的地方編輯:非 ASCII 字元在編輯框中會以 16 進位編碼顯示。",
        "editingold": "<strong>警告:您目前正編輯頁面的舊修訂版本。</strong>\n若您儲存,在此修訂之後變更的任何內容將會遺失。",
        "yourdiff": "差異",
        "copyrightwarning": "請注意,所有於 {{SITENAME}} 所做的貢獻會依據 $2 授權條款發佈 (詳情請見 $1)。\n若您不希望您的著作被任意修改與散佈,請勿在此發表文章。<br />\n您同時向我們保証在此的著作內容是您自行撰寫,或是取自不受版權保護的公開領域或自由資源。\n<strong>請勿在未經授權的情況下發表文章!</strong>",
        "previousrevision": "←上個修訂",
        "nextrevision": "下個修訂→",
        "currentrevisionlink": "最新修訂",
-       "cur": "ç\8f¾",
+       "cur": "ç\9b®å\89\8d",
        "next": "後筆",
-       "last": "前",
+       "last": "前",
        "page_first": "第一頁",
        "page_last": "最後頁",
        "histlegend": "比較選擇的版本差異:選要比較修訂版本的單選方塊並點選網頁底部的按鈕進行比較。<br />\n符號說明:<strong>({{int:cur}})</strong> = 與最新的修訂版本比較,<strong>({{int:last}})</strong> = 與前一筆修訂版本比較,<strong>{{int:minoreditletter}}</strong> = 小修訂。",
        "mergehistory-empty": "沒有可以合併的修訂",
        "mergehistory-success": "[[:$1]] 中 $3 次修訂已經成功地合併至 [[:$2]]。",
        "mergehistory-fail": "不可以進行歷史合併,請重新檢查該頁面以及時間參數。",
+       "mergehistory-fail-toobig": "由於超出$1個合併移動版本的上限,故此無法進行歷史合併。",
        "mergehistory-no-source": "來源頁面 $1 不存在。",
        "mergehistory-no-destination": "目標頁面 $1 不存在。",
        "mergehistory-invalid-source": "來源頁面必須使用有效的標題。",
        "difference-missing-revision": "{{PLURAL:$2|1次修訂|$2 次修訂}}差異($1)不存在。\n\n這通常是因為過時的頁面修訂差異鏈接被刪除。\n詳情請閱[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
        "searchresults": "搜尋結果",
        "searchresults-title": "\"$1\" 的搜尋結果",
-       "toomanymatches": "太多符合條件的結果,請嘗試使用較複雜的查詢",
        "titlematches": "頁面標題符合",
        "textmatches": "頁面內容符合",
        "notextmatches": "沒有符合的頁面內容",
        "search-result-size": "$1 ($2 個字)",
        "search-result-category-size": "$1 位成員 ($2 個子分類,$3 個檔案)",
        "search-result-score": "相關度:$1%",
-       "search-redirect": "(重定向自 $1)",
+       "search-redirect": "(重新導向 $1)",
        "search-section": "(章節 $1)",
        "search-file-match": "(符合檔案內容)",
        "search-suggest": "您指的是不是:$1",
        "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": "進階搜尋",
        "right-move-rootuserpages": "移動根使用者頁面",
        "right-move-categorypages": "移動分類頁面",
        "right-movefile": "移動檔案",
-       "right-suppressredirect": "移動頁面時不在原頁面建立重定向",
+       "right-suppressredirect": "移動頁面時不在原頁面位置建立重新導向頁面",
        "right-upload": "上傳檔案",
        "right-reupload": "覆蓋現有的檔案",
        "right-reupload-own": "覆蓋自己上傳的檔案",
        "right-suppressrevision": "複查與還原由管理員隱藏的修訂",
        "right-suppressionlog": "檢視非公開日誌",
        "right-block": "封鎖其他使用者的編輯權限",
-       "right-blockemail": "封鎖使用者送電子郵件的權限",
+       "right-blockemail": "封鎖使用者送電子郵件的權限",
        "right-hideuser": "封鎖使用者名稱,避免公開顯示",
        "right-ipblock-exempt": "略過 IP 封鎖、自動封鎖及範圍封鎖檢查",
        "right-proxyunbannable": "略過 Proxy 自動封鎖檢查",
        "right-userrights-interwiki": "編輯使用者在其它 Wiki 上的權限",
        "right-siteadmin": "鎖定和解除鎖定資料庫",
        "right-override-export-depth": "匯出頁面包含連結內容,深度上限為 5 層",
-       "right-sendemail": "送電子郵件給其他使用者",
+       "right-sendemail": "送電子郵件給其他使用者",
        "right-passwordreset": "檢視重設密碼電子郵件",
        "newuserlogpage": "建立使用者日誌",
        "newuserlogpagetext": "此為建立使用者的日誌。",
        "action-userrights": "編輯所有使用者的權限",
        "action-userrights-interwiki": "編輯在其它 Wiki 上的使用者權限",
        "action-siteadmin": "鎖定和解除鎖定資料庫",
-       "action-sendemail": "送電子郵件",
+       "action-sendemail": "送電子郵件",
        "action-editmywatchlist": "編輯您的監視清單",
-       "action-viewmywatchlist": "æ\9f¥ç\9c\8b您的監視清單",
+       "action-viewmywatchlist": "檢è¦\96您的監視清單",
        "action-viewmyprivateinfo": "查看您的個人資料",
        "action-editmyprivateinfo": "編輯您的個人資料",
        "nchanges": "$1 次變更",
        "largefileserver": "此檔案大小超出伺服器設定的允許範圍。",
        "emptyfile": "您上傳的檔案為空的。\n可能是檔案名輸入錯誤。\n請檢查您是否真的要上傳空檔案。",
        "windows-nonascii-filename": "本 Wiki 不支援使用特殊符號的檔案名稱。",
-       "fileexists": "已存在相同名稱的檔案,若不確定是否要變更它,請檢查 <strong>[[:$1]]</strong>。\n[[$1|thumb]]",
+       "fileexists": "已存在相同名稱的檔案,若{{GENDER:|您}}不確定是否要變更它,請檢查 <strong>[[:$1]]</strong>。\n[[$1|thumb]]",
        "filepageexists": "此檔案的描述頁面 <strong>[[:$1]]</strong> 已存在,但目前沒有使用此名稱的檔案。\n您在此輸入的摘要不會儲存到該描述頁面,\n您必須手動編輯該描述頁面。\n[[$1|thumb]]",
        "fileexists-extension": "類似的檔案名稱已存在:[[$2|thumb]]\n* 上傳中的檔案名稱:<strong>[[:$1]]</strong>\n* 已存在的檔案名稱:<strong>[[:$2]]</strong>\n請選擇使用其他名稱。",
        "fileexists-thumbnail-yes": "此檔案似乎已為縮小的圖片 <em>(縮圖)</em>。\n[[$1|thumb]]\n請檢查檔案 <strong>[[:$1]]</strong>。\n若原始圖片確實為此尺寸,則無須另外上傳縮圖。",
        "upload-file-error-text": "嘗試在伺服器上建立臨時檔案時發生內部錯誤。\n請連絡 [[Special:ListUsers/sysop|管理員]]。",
        "upload-misc-error": "不明的上傳錯誤",
        "upload-misc-error-text": "上傳時發生不明錯誤。\n請檢查您的 URL 是否有效且可存取,然後再重試一次。\n如果仍有問題,請聯絡 [[Special:ListUsers/sysop|管理員]]。",
-       "upload-too-many-redirects": "URL 中包含太多重定向",
+       "upload-too-many-redirects": "該 URL 重新導向至太多其他位址",
        "upload-http-error": "發生 HTTP 錯誤:$1",
        "upload-copy-upload-invalid-domain": "此網域不允許複製上傳的檔案。",
        "backend-fail-stream": "無法傳輸檔案 \"$1\"。",
        "linkstoimage-more": "超過$1個頁面連接到這個檔案。\n此處只列出首$1個連接到此檔案的頁面。\n您也可以查看[[Special:WhatLinksHere/$2|完整的清單]]。",
        "nolinkstoimage": "沒有頁面連接到本檔案。",
        "morelinkstoimage": "檢視連接到這個檔案的[[Special:WhatLinksHere/$1|更多連結]]。",
-       "linkstoimage-redirect": "$1(檔案重定向)$2",
+       "linkstoimage-redirect": "$1 (檔案重新導向) $2",
        "duplicatesoffile": "以下 $1 個檔案與此檔案重覆 ([[Special:FileDuplicateSearch/$2|了解詳細資訊]]):",
        "sharedupload": "此檔案來自 $1 且可能被其他專案所使用。",
        "sharedupload-desc-there": "此檔案來自 $1 且可能被其他專案所使用。\n請參考 [$2 檔案描述頁面] 了解進一步資訊。",
        "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": "未監視的頁面",
-       "listredirects": "重向頁面清單",
+       "listredirects": "重新導向頁面清單",
        "listduplicatedfiles": "重複檔案列表",
        "listduplicatedfiles-summary": "以下列表中某檔案之最新版本與其他檔案之最新版本重複。進包含本地檔案",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] 有[[$3|其他 $2 個重複檔案]]。",
        "randomincategory-nopages": "[[:Category:$1]]中沒有頁面。",
        "randomincategory-selectcategory": "從分類中獲取隨機頁面:$1 $2",
        "randomincategory-selectcategory-submit": "執行",
-       "randomredirect": "隨機重向",
-       "randomredirect-nopages": "在命名空間\"$1\"中沒有任何重定向頁面。",
+       "randomredirect": "隨機重新導向",
+       "randomredirect-nopages": "在命名空間 \"$1\" 中沒有任何重新導向頁面。",
        "statistics": "統計",
        "statistics-header-pages": "頁面統計",
        "statistics-header-edits": "編輯統計",
        "statistics-header-hooks": "其它統計",
        "statistics-articles": "內容頁面",
        "statistics-pages": "頁面",
-       "statistics-pages-desc": "在 wiki 上所有的頁面,包括對話頁面、重定向頁面等。",
+       "statistics-pages-desc": "在 Wiki 上所有的頁面,包括對話頁面、重新導向頁面等。",
        "statistics-files": "已經上傳的檔案",
        "statistics-edits": "自 {{SITENAME}} 成立以來的頁面編輯數",
        "statistics-edits-average": "每頁平均編輯數",
        "pageswithprop-submit": "執行",
        "pageswithprop-prophidden-long": "已隱藏過長的屬性值 ($1)",
        "pageswithprop-prophidden-binary": "已隱藏二進位屬性值 ($1)",
-       "doubleredirects": "雙重重定向",
-       "doubleredirectstext": "這一頁列出所有重定向頁面重定向到另一個重定向頁的頁面。每一行都包含到第一和第二個重定向頁面的連結,以及第二個重定向頁面的目標,通常顯示的都會是\"真正\"的目標頁面,也就是第一個重定向頁面應該指向的頁面。\n<del>已劃去</del>的為已經解決之項目。",
-       "double-redirect-fixed-move": "[[$1]] 已完成移動。\n此頁面已自動更新並重向至 [[$2]]。",
-       "double-redirect-fixed-maintenance": "作為維護工作自動修復於[[$1]]至[[$2]]之雙重重定向。",
-       "double-redirect-fixer": "重向修正者",
-       "brokenredirects": "損壞的重定向頁面",
-       "brokenredirectstext": "以下的重定向頁面均指向不存在的頁面:",
+       "doubleredirects": "雙重的重新導向",
+       "doubleredirectstext": "此頁列出所有重新導向頁面連結到另一個重新導向頁面的頁面清單。每一列都包含第一次和第二次重新導向頁面的連結,以及第二次重新導向之後的目標,第二次重新導向之後的目標通常是 \"實際\" 的目標頁面,也是第一個重新導向頁面應該指向的頁面。\n<del>刪節線</del> 代表該項目的問題已經解決。",
+       "double-redirect-fixed-move": "[[$1]] 已完成移動。\n此頁面已自動更新並重新導向至 [[$2]]。",
+       "double-redirect-fixed-maintenance": "在維護作業時自動修正雙重的重新導向自 [[$1]] 至 [[$2]]。",
+       "double-redirect-fixer": "重新導向修正者",
+       "brokenredirects": "損壞的重新導向",
+       "brokenredirectstext": "以下的重新導向頁面連結的頁面不存在:",
        "brokenredirects-edit": "編輯",
        "brokenredirects-delete": "刪除",
        "withoutinterwiki": "未有語言連結的頁面",
        "protectedpages-indef": "只顯示無限期的保護頁面",
        "protectedpages-summary": "此頁面列出目前受保護的頁面。 欲查詢受保護標題清單,請參考 [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]。",
        "protectedpages-cascade": "只顯示連鎖的保護頁面",
-       "protectedpages-noredirect": "隱藏重向頁面",
+       "protectedpages-noredirect": "隱藏重新導向頁面",
        "protectedpagesempty": "在這些參數下沒有頁面正在保護。",
        "protectedpages-timestamp": "日期時間",
        "protectedpages-page": "頁面",
        "allpagesprefix": "顯示以此為字首頁面:",
        "allpagesbadtitle": "指定的頁面標題無效、包含內部語言或內部 Wiki 的字首。\n它可能包含一個或多個的不能用於標題的字元。",
        "allpages-bad-ns": "{{SITENAME}} 沒有 \"$1\" 命名空間。",
-       "allpages-hide-redirects": "隱藏重向頁面",
+       "allpages-hide-redirects": "隱藏重新導向頁面",
        "cachedspecial-viewing-cached-ttl": "你正在瀏覽本頁的緩存版本,至多可能存在$1的延遲。",
        "cachedspecial-viewing-cached-ts": "您正在閱讀此頁的緩存版本,這可能不是完整的版本。",
        "cachedspecial-refresh-now": "查看最新。",
        "linksearch-pat": "搜尋網址:",
        "linksearch-ns": "命名空間:",
        "linksearch-ok": "搜尋",
-       "linksearch-text": "可使用通配符,如“*.wikipedia.org”。至少需要一個頂級域名,例如“*.org”。<br />\n支持的{{PLURAL:$2|協議}}:<code>$1</code>(若沒有指定協議,預設為http://)。",
+       "linksearch-text": "可使用萬用字元如 \"*.wikipedia.org\"。\n萬用字元必須使用在最上層網域,例如 \"*.org\".<br />\n支援的{{PLURAL:$2|通訊協定|通訊協定}}有:<code>$1</code> (若未指定則預設使用 http:// 通訊協定)。",
        "linksearch-line": "$1 連自 $2",
        "linksearch-error": "萬用字元僅可在主機名稱的開頭使用。",
        "listusersfrom": "顯示使用者開始自:",
        "listgrouprights-removegroup": "移除的{{PLURAL:$2|一個|多個}}群組: $1",
        "listgrouprights-addgroup-all": "加入所有群組",
        "listgrouprights-removegroup-all": "移除所有群組",
-       "listgrouprights-addgroup-self": "在自己的賬戶中加入的{{PLURAL:$2|一個|多個}}群組: $1",
-       "listgrouprights-removegroup-self": "在自己的賬戶中移除的{{PLURAL:$2|一個|多個}}群組: $1",
-       "listgrouprights-addgroup-self-all": "在自己的賬戶中加入所有群組",
-       "listgrouprights-removegroup-self-all": "在自己的賬戶中移除所有群組",
+       "listgrouprights-addgroup-self": "在自己的帳號中加入的{{PLURAL:$2|一個|多個}}群組: $1",
+       "listgrouprights-removegroup-self": "在自己的帳號中移除的{{PLURAL:$2|一個|多個}}群組: $1",
+       "listgrouprights-addgroup-self-all": "在自己的帳號中加入所有群組",
+       "listgrouprights-removegroup-self-all": "在自己的帳號中移除所有群組",
        "listgrouprights-namespaceprotection-header": "命名空間限制",
        "listgrouprights-namespaceprotection-namespace": "命名空間",
        "listgrouprights-namespaceprotection-restrictedto": "允許使用者編輯的權限",
        "hidden-category-category-desc": "此分類帶有<code><nowiki>__HIDDENCAT__</nowiki></code>,它預設防止於頁面分類連接盒中顯示。",
        "trackingcategories-nodesc": "並無說明。",
        "trackingcategories-disabled": "分類被禁用",
-       "mailnologin": "沒有送位址",
-       "mailnologintext": "您必須先 [[Special:UserLogin|登入]]\n並在 [[Special:Preferences|偏好設定]]\n中設定一個有效的電子郵件地址才可以送信件給其他使用者。",
+       "mailnologin": "沒有送位址",
+       "mailnologintext": "您必須先 [[Special:UserLogin|登入]]\n並在 [[Special:Preferences|偏好設定]]\n中設定一個有效的電子郵件地址才可以送信件給其他使用者。",
        "emailuser": "寄信給此使用者",
        "emailuser-title-target": "寄信給此{{GENDER:$1|使用者}}",
        "emailuser-title-notarget": "寄信給使用者",
        "emailpage": "E-mail 給使用者",
-       "emailpagetext": "您可以使用以下表格送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件地址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。",
-       "defemailsubject": "來自使用者 \"$1\" 於 {{SITENAME}} 發送的電子郵件",
+       "emailpagetext": "您可以使用以下表格送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件地址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。",
+       "defemailsubject": "來自使用者 \"$1\" 於 {{SITENAME}} 寄來的電子郵件",
        "usermaildisabled": "使用者電子郵件已停用",
-       "usermaildisabledtext": "您不可送信件到這個 Wiki 上的其他使用者",
-       "noemailtitle": "沒有電子郵件址",
-       "noemailtext": "此使用者尚未指定一個有效的電子郵件址。",
+       "usermaildisabledtext": "您不可送信件到這個 Wiki 上的其他使用者",
+       "noemailtitle": "沒有電子郵件址",
+       "noemailtext": "此使用者尚未指定一個有效的電子郵件址。",
        "nowikiemailtext": "此使用者選擇不接收其他使用者的信件。",
        "emailnotarget": "收件人不存在或無效的使用者名稱。",
        "emailtarget": "輸入收件人使用者名稱",
        "emailusername": "使用者名稱:",
        "emailusernamesubmit": "送出",
-       "email-legend": "送電子郵件給另一位 {{SITENAME}} 使用者",
+       "email-legend": "送電子郵件給另一位 {{SITENAME}} 使用者",
        "emailfrom": "寄件人:",
        "emailto": "收件人:",
        "emailsubject": "主題:",
        "emailmessage": "訊息:",
-       "emailsend": "送",
-       "emailccme": "送一份副本到我的電子郵件信箱。",
-       "emailccsubject": "您發送給 $1 的訊息副本:$2",
-       "emailsent": "電子郵件已發送",
+       "emailsend": "送",
+       "emailccme": "送一份副本到我的電子郵件信箱。",
+       "emailccsubject": "您給 $1 的訊息副本:$2",
+       "emailsent": "電子郵件已送出",
        "emailsenttext": "您的電子郵件訊息已經送出。",
-       "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"送信件給使用者\" 功能寄給 $2。",
+       "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"送信件給使用者\" 功能寄給 $2。",
        "usermessage-summary": "留給系統訊息。",
        "usermessage-editor": "系統訊息",
        "watchlist": "監視清單",
        "deletecomment": "原因:",
        "deleteotherreason": "其它/額外的原因:",
        "deletereasonotherlist": "其它理由",
-       "deletereason-dropdown": "* 常見的刪除原因\n** 濫發廣告訊息\n** 破壞\n** 侵犯版權\n** 作者請求\n** 損壞的重定向",
+       "deletereason-dropdown": "* 常見的刪除原因\n** 濫發廣告訊息\n** 破壞\n** 侵犯版權\n** 作者請求\n** 損壞的重新導向連結",
        "delete-edit-reasonlist": "編輯刪除理由",
        "delete-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除此類頁面的動作已經被限制,以防止在{{SITENAME}}上的意外擾亂。",
        "delete-warning-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除它可能會擾亂{{SITENAME}}的資料庫操作;在繼續此動作前請小心。",
        "linkshere": "以下頁面連結到[[:$1]]:",
        "nolinkshere": "沒有頁面連結到[[:$1]]。",
        "nolinkshere-ns": "已選擇的命名空間中沒有頁面連結到 [[:$1]]。",
-       "isredirect": "重向頁面",
+       "isredirect": "重新導向頁面",
        "istemplate": "引用",
        "isimage": "檔案連結",
        "whatlinkshere-prev": "前 $1 筆",
        "whatlinkshere-next": "後 $1 筆",
        "whatlinkshere-links": "← 連入",
-       "whatlinkshere-hideredirs": "$1 重向頁面",
+       "whatlinkshere-hideredirs": "$1 重新導向頁面",
        "whatlinkshere-hidetrans": "$1 引用",
        "whatlinkshere-hidelinks": "$1 連結",
        "whatlinkshere-hideimages": "$1 檔案連結",
        "ipbreason-dropdown": "*常見的封鎖原因\n** 填寫不實資訊\n** 刪除頁面內容\n** 散佈外部廣告連結\n** 在頁面填寫無意義文字\n** 無禮的行為、攻擊/騷擾別人\n** 濫用多個帳號\n** 使用不受歡迎的使用者名稱",
        "ipb-hardblock": "避免使用此 IP 位址登入的使用者編輯",
        "ipbcreateaccount": "禁止建立帳號",
-       "ipbemailban": "禁止使用者送電子郵件",
-       "ipbenableautoblock": "自動封鎖此使用者最後使用的 IP 位,以及所有之後嘗試編輯使用的 IP 位址",
-       "ipbsubmit": "查封該地址",
+       "ipbemailban": "禁止使用者送電子郵件",
+       "ipbenableautoblock": "自動封鎖此使用者最後使用的 IP 位,以及所有之後嘗試編輯使用的 IP 位址",
+       "ipbsubmit": "封禁該使用者",
        "ipbother": "其它時間:",
        "ipboptions": "2小時:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1個月:1 month,3個月:3 months,6個月:6 months,1年:1 year,無限期:infinite",
        "ipbhidename": "在編輯及清單中隱藏使用者名稱",
        "unblocklink": "解除封鎖",
        "change-blocklink": "變更封鎖",
        "contribslink": "貢獻",
-       "emaillink": "送電子郵件",
+       "emaillink": "送電子郵件",
        "autoblocker": "您的 IP 位址因最近被 [[User:$1|$1]] 使用過而被自動封鎖。\n封鎖 $1 的原因為 \"$2\"",
        "blocklogpage": "查封日誌",
        "blocklog-showlog": "此使用者先前被封鎖過。\n以下為封鎖紀錄以供參考:",
        "proxyblocker": "代理封鎖器",
        "proxyblockreason": "因您的 IP 位址是開放代理伺服器,已被封鎖。\n請聯繫您的網路服務供應商或您所在組織的技術支援,告知他們此嚴重的安全性問題。",
        "sorbsreason": "您的IP位址在{{SITENAME}}中被 DNSBL列為屬於開放代理服務器。",
-       "sorbs_create_account_reason": "您連線到 {{SITENAME}} 的 IP 位址被 DNSBL 列為開放代理伺服。\n您不能建立帳號。",
+       "sorbs_create_account_reason": "您連線到 {{SITENAME}} 的 IP 位址被 DNSBL 列為開放代理伺服。\n您不能建立帳號。",
        "xffblockreason": "您的 IP 位址使用 X-Forwarded-For 標頭,您或您使用的代理伺服器已被封鎖。\n封鎖的原因為:$1",
        "cant-see-hidden-user": "您欲封鎖的使用者已經被封鎖並且隱藏。\n您沒有隱藏使用者的權限,您無法檢視或編輯該使用者的封鎖狀態。",
        "ipbblocked": "因您已被封鎖,故無法封鎖或解除封鎖其他使用者。",
        "lockedbyandtime": "(由 {{GENDER:$1|$1}} 於 $2 的 $3)",
        "move-page": "移動 $1",
        "move-page-legend": "移動頁面",
-       "movepagetext": "以下表格可以用來重新命名頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。\n舊標題的頁面將會變成重定向頁面,指向使用新標題的頁面。\n您可以選擇自動更新所有指向舊頁面的重定向,讓它們改為指向新頁面。\n若您選擇不自動更新,請檢查有沒有[[Special:DoubleRedirects|雙重重定向]]或[[Special:BrokenRedirects|損壞的重定向]]需要修正。\n您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處,除非新名稱下是個重定向頁面而且沒有任何編輯記錄。\n即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面來說可能是重大而唐突的更改;\n在行動前請先確認您了解移動可能帶來的後果。",
-       "movepagetext-noredirectfixer": "以下表格可以用來重新命名頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。\n舊標題的頁面將會變成重定向頁面,指向使用新標題的頁面。\n請檢查有沒有[[Special:DoubleRedirects|雙重重定向]]或[[Special:BrokenRedirects|損壞的重定向]]需要修正。\n您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處,除非新名稱下是個重定向頁面而且沒有任何編輯記錄。\n即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>警告!</strong>\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請檢查有沒有[[Special:DoubleRedirects|雙重重新導向]]或[[Special:BrokenRedirects|損壞的重新導向]]需要修正。\n您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處,除非新名稱下是個重新導向頁面而且沒有任何編輯記錄。\n即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面來說可能是重大而唐突的更改;\n在行動前請先確認您了解移動可能帶來的後果。",
        "movepagetalktext": "相關的的對話頁面 (如果有的話) 會自動與該頁面一起移動,<strong>除非:</strong>\n*新的名稱已有一個存在的對話頁面,或\n*您未勾選此核選方塊。\n\n在上述情況下,若有必要您必須手動移動或合併已存在的頁面。",
        "movearticle": "移動頁面:",
        "moveuserpage-warning": "<strong>警告:</strong>您正要移動使用者頁面,請注意只有使用者頁面會變更名稱,並<em>不會</em>重新命名使用者。",
        "movepagebtn": "移動頁面",
        "pagemovedsub": "移動成功",
        "movepage-moved": "<strong>已移動 \"$1\" 至 \"$2\"</strong>",
-       "movepage-moved-redirect": "已建立重向頁面。",
-       "movepage-moved-noredirect": "已禁止建立重向頁面。",
+       "movepage-moved-redirect": "已建立重新導向頁面。",
+       "movepage-moved-noredirect": "已禁止建立重新導向頁面。",
        "articleexists": "該頁面名稱已存在,或您選擇的名稱無效。\n請改選擇其他名稱。",
        "cantmove-titleprotected": "您選擇的新標題已被禁止使用,您不可移動頁面到該位置。",
        "movetalk": "移動相關的對話頁面",
        "nonfile-cannot-move-to-file": "不可以移動非檔案到檔案命名空間",
        "imagetypemismatch": "新的檔案副檔名不符合該檔案的類型",
        "imageinvalidfilename": "目標檔案名稱無效",
-       "fix-double-redirects": "更新所有指向原標題的重定向",
-       "move-leave-redirect": "留下重向頁面",
+       "fix-double-redirects": "更新所有指向原標題的重新導向頁面",
+       "move-leave-redirect": "留下重新導向頁面",
        "protectedpagemovewarning": "<strong>警告:</strong>本頁已經被保護,只有擁有管理員權限的使用者才可移動。\n以下提供最近的日誌以便參考:",
        "semiprotectedpagemovewarning": "<strong>注意:</strong>本頁已經被保護,只有已註冊的使用者才可移動。\n以下提供最近的日誌以便參考:",
        "move-over-sharedrepo": "== 檔案已存在 ==\n[[:$1]] 已存在於共用檔案庫,將檔案移動到此標題會覆蓋該共用檔案。",
        "tooltip-feed-rss": "訂閱此頁面的 RSS feed",
        "tooltip-feed-atom": "訂閱此頁面的 Atom feed",
        "tooltip-t-contributions": "此使用者的貢獻清單",
-       "tooltip-t-emailuser": "送電子郵件給這個使用者",
+       "tooltip-t-emailuser": "送電子郵件給這個使用者",
        "tooltip-t-upload": "上傳檔案",
        "tooltip-t-specialpages": "全部特殊頁面的列表",
        "tooltip-t-print": "此頁面的可列印版本",
-       "tooltip-t-permalink": "此頁面修訂的永久連結",
+       "tooltip-t-permalink": "此頁面修訂的固定連結",
        "tooltip-ca-nstab-main": "檢視頁面內容",
        "tooltip-ca-nstab-user": "檢視使用者頁面",
        "tooltip-ca-nstab-media": "檢視媒體頁面",
        "tooltip-summary": "請輸入簡短摘要",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* 此 CSS 會套用至所有的介面外觀 */",
-       "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",
        "pageinfo-views": "檢視次數",
        "pageinfo-watchers": "頁面監視者數",
        "pageinfo-few-watchers": "少於 $1 名監視者",
-       "pageinfo-redirects-name": "指向此頁面的重定向數量",
+       "pageinfo-redirects-name": "指向此頁面的重新導向頁面數量",
        "pageinfo-subpages-name": "此頁面的子頁面",
-       "pageinfo-subpages-value": "$1($2 個重定向頁面; $3 個非重定向頁面)",
+       "pageinfo-subpages-value": "$1 ($2 個重新導向頁面; $3 個非重新導向頁面)",
        "pageinfo-firstuser": "頁面的建立者",
        "pageinfo-firsttime": "頁面創建日期",
        "pageinfo-lastuser": "最近編輯者",
        "pageinfo-templates": "引用的樣版 ($1)",
        "pageinfo-transclusions": "頁面被引用於 ($1)",
        "pageinfo-toolboxlink": "頁面資訊",
-       "pageinfo-redirectsto": "重向至",
+       "pageinfo-redirectsto": "重新導向至",
        "pageinfo-redirectsto-info": "資訊",
        "pageinfo-contentpage": "作為內容頁面計算",
        "pageinfo-contentpage-yes": "是",
        "confirm-watch-top": "新增此頁面至您的監視清單?",
        "confirm-unwatch-button": "確定",
        "confirm-unwatch-top": "從您的監視清單中移除此頁面?",
+       "semicolon-separator": ";",
        "comma-separator": "、",
        "colon-separator": ":",
        "word-separator": "",
        "table_pager_empty": "沒有結果",
        "autosumm-blank": "清空頁面",
        "autosumm-replace": "使用 \"$1\" 取代內容",
-       "autoredircomment": "頁面已重向至 [[$1]]",
+       "autoredircomment": "頁面已重新導向至 [[$1]]",
        "autosumm-new": "已建立頁面,內容為 \"$1\"",
        "size-bytes": "$1 位元組",
        "lag-warn-normal": "此清單可能不會顯示最近 $1 {{PLURAL:$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": "說明",
        "version-entrypoints-header-entrypoint": "入口",
        "version-entrypoints-header-url": "URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath 條目路徑]",
-       "redirect": "指向檔案、使用者、頁面或修訂 ID 的重定向",
-       "redirect-legend": "重向至檔案或頁面",
-       "redirect-summary": "此特殊頁面可用來建立重定向,指向任何檔案(指定檔案名)、頁面(指定修訂 ID 或頁面 ID)或使用者頁面(指定使用者 ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]] 或 [[{{#Special:Redirect}}/user/101]]。",
+       "redirect": "重新導向至檔案、使用者、頁面或修訂 ID",
+       "redirect-legend": "重新導向至檔案或頁面",
+       "redirect-summary": "此特殊頁面可用來重新導向至檔案 (指定檔案名稱)、頁面 (指定修訂 ID 或頁面 ID) 或使用者頁面 (指定使用者 ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]] 或 [[{{#Special:Redirect}}/user/101]]。",
        "redirect-submit": "執行",
        "redirect-lookup": "尋找:",
        "redirect-value": "值:",
        "specialpages-group-pages": "頁面清單",
        "specialpages-group-pagetools": "頁面工具",
        "specialpages-group-wiki": "資料和工具",
-       "specialpages-group-redirects": "重定向到別處的特殊頁面",
+       "specialpages-group-redirects": "重新導向相關特殊頁面",
        "specialpages-group-spam": "反垃圾訊息工具",
        "blankpage": "空白頁面",
        "intentionallyblankpage": "此頁面被故意設為空白。",
        "revdelete-restricted": "已套用對管理員的限制",
        "revdelete-unrestricted": "已移除對管理員的限制",
        "logentry-move-move": "$1 {{GENDER:$2|已移動}}頁面 $3 至 $4",
-       "logentry-move-move-noredirect": "$1 已移動頁面 $3 至 $4,不留重定向",
-       "logentry-move-move_redir": "$1 已移動頁面 $3 至 $4 並覆蓋原有重向",
-       "logentry-move-move_redir-noredirect": "$1 已移動頁面 $3 至 $4 並覆蓋原有重定向,不留重定向",
+       "logentry-move-move-noredirect": "$1 已移動頁面 $3 至 $4,不留重新導向頁面",
+       "logentry-move-move_redir": "$1 已移動頁面 $3 至 $4 並覆蓋原有重新導向",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|已移動}}頁面 $3 覆蓋重新導向頁面至 $4,未留重新導向頁面",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|已標記}}頁面 $3 的修訂 $4 為已巡查",
        "logentry-patrol-patrol-auto": "$1 已自動{{GENDER:$2|標記}}頁面 $3 的修訂 $4 為已巡查",
        "logentry-newusers-newusers": "已{{GENDER:$2|建立}}使用者帳號 $1",
        "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 248df79..aa1d9d1 100644 (file)
@@ -23,11 +23,16 @@ $namespaceNames = array(
 
 $namespaceAliases = array(
        'Gesprec'       => NS_TALK,
+       'Motung'        => NS_TALK,
        'Brucend'       => NS_USER,
        'Brucendmotung' => NS_USER_TALK,
        'Biliþgesprec'  => NS_FILE_TALK,
+       'Biliþmotung'   => NS_FILE_TALK,
        'Bysengesprec'  => NS_TEMPLATE_TALK,
+       'Bysenmotung'   => NS_TEMPLATE_TALK,
        'Helpgesprec'   => NS_HELP_TALK,
+       'Helpmotung'    => NS_HELP_TALK,
        'Floccgesprec'  => NS_CATEGORY_TALK,
+       'Floccmotung'   => NS_CATEGORY_TALK,
 );
 
index b233831..dd9b06f 100644 (file)
@@ -79,6 +79,10 @@ $dateFormats = array(
        'ISO 8601 time' => 'xnH:xni:xns',
        'ISO 8601 date' => 'xnY-xnm-xnd',
        'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+
+       'jMY time' => 'H:i',
+       'jMY date' => 'j M Y',
+       'jMY both' => 'H:i، j M Y', # Arabic comma
 );
 
 $digitTransformTable = array(
index 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 86c01f4..9929cf9 100644 (file)
@@ -63,6 +63,8 @@ class FindHooks extends Maintenance {
                $documented = $this->getHooksFromDoc( $IP . '/docs/hooks.txt' );
                $potential = array();
                $bad = array();
+
+               // TODO: Don't hardcode the list of directories
                $pathinc = array(
                        $IP . '/',
                        $IP . '/includes/',
@@ -90,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/',
@@ -99,6 +102,7 @@ class FindHooks extends Maintenance {
                        $IP . '/includes/specialpage/',
                        $IP . '/includes/specials/',
                        $IP . '/includes/upload/',
+                       $IP . '/includes/utils/',
                        $IP . '/languages/',
                        $IP . '/maintenance/',
                        $IP . '/maintenance/language/',
@@ -106,6 +110,8 @@ class FindHooks extends Maintenance {
                        $IP . '/tests/parser/',
                        $IP . '/tests/phpunit/suites/',
                        $IP . '/skins/',
+                       $IP . '/skins/MonoBook/',
+                       $IP . '/skins/Vector/',
                );
 
                foreach ( $pathinc as $dir ) {
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" );
        }
 }
 
index 5a3e00c..fbc5d98 100644 (file)
@@ -85,8 +85,8 @@ class CommandLineInstaller extends Maintenance {
                        true
                );
                $this->addOption( 'confpath', "Path to write LocalSettings.php to ($IP)", false, true );
+               $this->addOption( 'dbschema', 'The schema for the MediaWiki DB in PostgreSQL/Microsoft SQL Server (mediawiki)', false, true );
                /*
-               $this->addOption( 'dbschema', 'The schema for the MediaWiki DB in pg (mediawiki)', false, true );
                $this->addOption( 'namespace', 'The project namespace (same as the "name" argument)', false, true );
                */
                $this->addOption( 'env-checks', "Run environment checks only, don't change anything" );
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.
index 21d9104..d172363 100644 (file)
@@ -57,28 +57,24 @@ class NextJobDB extends Maintenance {
                        return; // no DBs with jobs or cache is both empty and locked
                }
 
-               do {
-                       $again = false;
-
-                       $candidates = array(); // list of (type, db)
-                       // Flatten the tree of candidates into a flat list so that a random
-                       // item can be selected, weighing each queue (type/db tuple) equally.
-                       foreach ( $pendingDBs as $type => $dbs ) {
-                               if (
-                                       ( is_array( $types ) && in_array( $type, $types ) ) ||
-                                       ( $types === false && !in_array( $type, $wgJobTypesExcludedFromDefaultQueue ) )
-                               ) {
-                                       foreach ( $dbs as $db ) {
-                                               $candidates[] = array( $type, $db );
-                                       }
+               $candidates = array(); // list of (type, db)
+               // Flatten the tree of candidates into a flat list so that a random
+               // item can be selected, weighing each queue (type/db tuple) equally.
+               foreach ( $pendingDBs as $type => $dbs ) {
+                       if (
+                               ( is_array( $types ) && in_array( $type, $types ) ) ||
+                               ( $types === false && !in_array( $type, $wgJobTypesExcludedFromDefaultQueue ) )
+                       ) {
+                               foreach ( $dbs as $db ) {
+                                       $candidates[] = array( $type, $db );
                                }
                        }
-                       if ( !count( $candidates ) ) {
-                               return; // no jobs for this type
-                       }
+               }
+               if ( !count( $candidates ) ) {
+                       return; // no jobs for this type
+               }
 
-                       list( $type, $db ) = $candidates[mt_rand( 0, count( $candidates ) - 1 )];
-               } while ( $again );
+               list( $type, $db ) = $candidates[mt_rand( 0, count( $candidates ) - 1 )];
 
                if ( $this->hasOption( 'types' ) ) {
                        $this->output( $db . " " . $type . "\n" );
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 93415a5..4f854fb 100644 (file)
@@ -118,46 +118,6 @@ return array(
                'targets' => array( 'desktop', 'mobile' ),
        ),
 
-       /**
-        * Skins
-        * Be careful not to add 'scripts' to these modules,
-        * since they are loaded with OutputPage::addModuleStyles so that the skin styles
-        * apply without javascript.
-        * If a skin needs custom js in the interface, register a separate module
-        * and add it to the load queue with OutputPage::addModules.
-        *
-        * See Vector for an example.
-        */
-       'skins.vector.styles' => array(
-               // Used in the web installer. Test it after modifying this definition!
-               'styles' => array(
-                       'screen.less' => array( 'media' => 'screen' ),
-                       'screen-hd.less' => array( 'media' => 'screen and (min-width: 982px)' ),
-               ),
-               'remoteSkinPath' => 'vector',
-               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/vector',
-       ),
-       'skins.monobook.styles' => array(
-               'styles' => array(
-                       'main.css' => array( 'media' => 'screen' ),
-               ),
-               'remoteSkinPath' => 'monobook',
-               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/monobook',
-       ),
-       'skins.vector.js' => array(
-               'scripts' => array(
-                       'collapsibleTabs.js',
-                       'vector.js',
-               ),
-               'position' => 'top',
-               'dependencies' => array(
-                       'jquery.throttle-debounce',
-                       'jquery.tabIndex',
-               ),
-               'remoteSkinPath' => 'vector',
-               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/vector',
-       ),
-
        /* jQuery */
 
        'jquery' => array(
@@ -272,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(
@@ -316,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',
@@ -716,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',
@@ -732,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',
@@ -775,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',
@@ -909,7 +885,7 @@ return array(
                'scripts' => 'resources/src/mediawiki/mediawiki.inspect.js',
                'dependencies' => array(
                        'jquery.byteLength',
-                       'jquery.json',
+                       'json',
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -1229,7 +1205,7 @@ return array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.js',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.css',
                'skinStyles' => array(
-                       'vector' => 'skins/vector/special.less', // FIXME this should use $wgStyleDirectory
+                       'vector' => 'skins/Vector/special.less', // FIXME this should use $wgStyleDirectory
                ),
        ),
        'mediawiki.special.block' => array(
@@ -1270,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',
        ),
@@ -1278,7 +1257,7 @@ return array(
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.preferences.css',
                'position' => 'top',
                'skinStyles' => array(
-                       'vector' => 'skins/vector/special.preferences.less', // FIXME this should use $wgStyleDirectory
+                       'vector' => 'skins/Vector/special.preferences.less', // FIXME this should use $wgStyleDirectory
                ),
                'messages' => array(
                        'prefs-tabs-navigation-hint',
@@ -1480,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',
@@ -1512,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 122be19..de86daf 100644 (file)
@@ -9,7 +9,7 @@
        "ooui-outline-control-move-down": "Лаха яккха элемент",
        "ooui-outline-control-move-up": "Лаккха яккха элемент",
        "ooui-outline-control-remove": "ДӀадаха меттиг",
-       "ooui-toolbar-more": "Кхин тӀе",
+       "ooui-toolbar-more": "Кхин",
        "ooui-dialog-confirm-title": "Бакъдан",
        "ooui-dialog-confirm-default-prompt": "Бакъалла лаьий хӀуна?",
        "ooui-dialog-confirm-default-ok": "ХӀаъ",
index 76b654b..85931f5 100644 (file)
@@ -6,6 +6,8 @@
                ]
        },
        "ooui-dialog-action-close": "ಮುಚ್ಚಿ",
+       "ooui-outline-control-move-down": "ವಸ್ತು ಕೆಲ್ಗೆ ಸ್ಥಲಾನ್ಥರಿಸು",
+       "ooui-outline-control-move-up": "ವಸ್ತು ಮೆಲೆ ಸ್ಥಲಾನ್ಥರಿಸು",
        "ooui-outline-control-remove": "ವಸ್ತು ತೆಗೆ",
        "ooui-toolbar-more": "ಹೆಚ್ಚು",
        "ooui-dialog-confirm-title": "ಧೃಡಪಡಿಸು",
index 8b0bee4..7ad74dc 100644 (file)
@@ -11,5 +11,9 @@
        "ooui-dialog-action-close": "Aizvērt",
        "ooui-outline-control-move-down": "Pārvietot vienumu uz leju",
        "ooui-outline-control-move-up": "Pārvietot vienumu uz augšu",
-       "ooui-toolbar-more": "Vairāk"
+       "ooui-toolbar-more": "Vairāk",
+       "ooui-dialog-confirm-title": "Apstiprināt",
+       "ooui-dialog-confirm-default-prompt": "Vai esat pārliecināts?",
+       "ooui-dialog-confirm-default-ok": "Labi",
+       "ooui-dialog-confirm-default-cancel": "Atcelt"
 }
index df78186..ff52c32 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="apply" style="opacity:0.75;">
-       <polygon id="check" style="fill-rule:evenodd;clip-rule:evenodd;" points="19.062,5.139 17.418,4 8.867,16.357 5.413,12.903 4,14.316 9.021,19.338"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="apply" opacity=".75">
+        <path id="check" fill-rule="evenodd" clip-rule="evenodd" d="M19.062 5.139l-1.644-1.139-8.551 12.357-3.454-3.454-1.413 1.413 5.021 5.022z"/>
+    </g>
 </svg>
index 2620e76..b25d5b7 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="apply" style="opacity:0.75;">
-       <path d="M13,8 L11,8 L11,11 L8,11 L8,13 L11,13 L11,16 L13,16 L13,13 L16,13 L16,11 L13,11 z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="apply" opacity=".75">
+        <path d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+    </g>
 </svg>
index 3e87cab..223b7fc 100644 (file)
@@ -1,17 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="settings" style="opacity:0.75;">
-       <path id="gear" style="fill-rule:evenodd;clip-rule:evenodd;" d="M20.869,13.476C20.948,12.994,21,12.504,21,12
-               s-0.052-0.994-0.131-1.476l-2.463-0.259c-0.149-0.556-0.367-1.082-0.648-1.57l1.558-1.924c-0.576-0.806-1.281-1.511-2.087-2.087
-               l-1.924,1.558c-0.488-0.281-1.015-0.499-1.57-0.648l-0.259-2.463C12.994,3.052,12.504,3,12,3s-0.994,0.052-1.476,0.131
-               l-0.259,2.463C9.71,5.743,9.184,5.961,8.695,6.242L6.771,4.685C5.966,5.261,5.261,5.966,4.685,6.771l1.558,1.924
-               c-0.281,0.488-0.499,1.015-0.648,1.57l-2.463,0.259C3.052,11.006,3,11.496,3,12s0.052,0.994,0.131,1.476l2.463,0.259
-               c0.149,0.556,0.367,1.082,0.648,1.57l-1.558,1.924c0.576,0.806,1.281,1.511,2.087,2.087l1.924-1.558
-               c0.488,0.281,1.015,0.499,1.57,0.648l0.259,2.463C11.006,20.948,11.496,21,12,21s0.994-0.052,1.476-0.131l0.259-2.463
-               c0.556-0.149,1.082-0.367,1.57-0.648l1.924,1.558c0.806-0.576,1.511-1.281,2.087-2.087l-1.558-1.924
-               c0.281-0.488,0.499-1.015,0.648-1.57L20.869,13.476z M12,15.998c-2.209,0-3.998-1.789-3.998-3.998S9.791,8.002,12,8.002
-               S15.998,9.791,15.998,12S14.209,15.998,12,15.998z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="settings" opacity=".75">
+        <path id="gear" d="M20.869 13.476c.079-.482.131-.972.131-1.476s-.052-.994-.131-1.476l-2.463-.259c-.149-.556-.367-1.082-.648-1.57l1.558-1.924c-.576-.806-1.281-1.511-2.087-2.087l-1.924 1.558c-.488-.281-1.015-.499-1.57-.648l-.259-2.463c-.482-.079-.972-.131-1.476-.131s-.994.052-1.476.131l-.259 2.463c-.555.149-1.081.367-1.57.648l-1.924-1.557c-.805.576-1.51 1.281-2.086 2.086l1.558 1.924c-.281.488-.499 1.015-.648 1.57l-2.463.259c-.08.482-.132.972-.132 1.476s.052.994.131 1.476l2.463.259c.149.556.367 1.082.648 1.57l-1.558 1.924c.576.806 1.281 1.511 2.087 2.087l1.924-1.558c.488.281 1.015.499 1.57.648l.259 2.463c.482.079.972.131 1.476.131s.994-.052 1.476-.131l.259-2.463c.556-.149 1.082-.367 1.57-.648l1.924 1.558c.806-.576 1.511-1.281 2.087-2.087l-1.558-1.924c.281-.488.499-1.015.648-1.57l2.463-.259zm-8.869 2.522c-2.209 0-3.998-1.789-3.998-3.998s1.789-3.998 3.998-3.998 3.998 1.789 3.998 3.998-1.789 3.998-3.998 3.998z" fill-rule="evenodd" clip-rule="evenodd"/>
+    </g>
 </svg>
index 886a7c0..fb25766 100644 (file)
@@ -1,10 +1,8 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="alert" style="opacity:0.75;">
-       <rect id="point" x="11" y="16" style="fill-rule:evenodd;clip-rule:evenodd;" width="2" height="2"/>
-       <polygon id="stroke" style="fill-rule:evenodd;clip-rule:evenodd;" points="13.516,10 10.516,10 11,15 13,15"/>
-       <path id="triangle" d="M12.017,5.974L19.536,19H4.496L12.017,5.974 M12.017,3.5c-0.544,0-1.088,0.357-1.5,1.071L2.532,18.402 C1.707,19.831,2.382,21,4.032,21H20c1.65,0,2.325-1.169,1.5-2.599L13.517,4.572C13.104,3.857,12.561,3.5,12.017,3.5L12.017,3.5z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="alert" opacity=".75">
+        <path id="point" fill-rule="evenodd" clip-rule="evenodd" d="M11 16h2v2h-2z"/>
+        <path id="stroke" fill-rule="evenodd" clip-rule="evenodd" d="M13.516 10h-3l.484 5h2z"/>
+        <path id="triangle" d="M12.017 5.974l7.519 13.026h-15.04l7.521-13.026m0-2.474c-.544 0-1.088.357-1.5 1.071l-7.985 13.831c-.825 1.429-.15 2.598 1.5 2.598h15.968c1.65 0 2.325-1.169 1.5-2.599l-7.983-13.829c-.413-.715-.956-1.072-1.5-1.072z"/>
+    </g>
 </svg>
index 5b343a5..88a6a40 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="arched-arrow-ltr" style="opacity:0.75;">
-       <path id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" d="M19.925,14.937l-2.391-6.901l-1.48,2.329 c-0.964-0.845-2.699-1.85-5.513-1.823c-4.887,0.046-6.524,4.244-6.524,4.244s2.753-2.639,6.925-1.949 c1.729,0.286,3.007,1.206,3.675,1.791l-1.474,2.319L19.925,14.937z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="arched-arrow-ltr" opacity=".75">
+        <path id="arrow" d="M19.925 14.937l-2.391-6.901-1.48 2.329c-.964-.845-2.699-1.85-5.513-1.823-4.887.046-6.524 4.244-6.524 4.244s2.753-2.639 6.925-1.949c1.729.286 3.007 1.206 3.675 1.791l-1.474 2.319 6.782-.01z" fill-rule="evenodd" clip-rule="evenodd"/>
+    </g>
 </svg>
index bb5f10e..50541d2 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="arched-arrow-rtl" style="opacity:0.75;">
-       <path id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" d="M13.401,8.542c-2.814-0.027-4.549,0.978-5.513,1.823 l-1.48-2.329l-2.391,6.901l6.782,0.009l-1.474-2.319c0.668-0.584,1.945-1.504,3.675-1.791c4.172-0.69,6.925,1.949,6.925,1.949 S18.288,8.588,13.401,8.542z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="arched-arrow-rtl" opacity=".75">
+        <path id="arrow" d="M13.401 8.542c-2.814-.027-4.549.978-5.513 1.823l-1.48-2.329-2.391 6.901 6.782.009-1.474-2.319c.668-.584 1.945-1.504 3.675-1.791 4.172-.69 6.925 1.949 6.925 1.949s-1.637-4.197-6.524-4.243z" fill-rule="evenodd" clip-rule="evenodd"/>
+    </g>
 </svg>
index e67cd6c..8d4a1f8 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24" height="24" viewBox="0, 0, 24, 24">
-  <g id="check">
-    <path d="M7.105,13.473 L8.527,12.05 L10.428,13.952 L15.238,7 L16.895,8.148 L10.635,17 z" fill="#000000"/>
-  </g>
-  <defs/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+    <g id="check">
+        <path d="M7.105 13.473l1.422-1.423 1.901 1.902 4.81-6.952 1.657 1.148-6.26 8.852z"/>
+    </g>
 </svg>
index d83eb02..484a104 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="clear" style="opacity:0.75;">
-       <path id="circle_with_strike" style="fill-rule:evenodd;clip-rule:evenodd;" d="M11.999,5.022c-3.853,0-6.977,3.124-6.977,6.978 c0,3.853,3.124,6.978,6.977,6.978c3.854,0,6.979-3.125,6.979-6.978C18.978,8.146,15.853,5.022,11.999,5.022z M6.886,12 c0-1.092,0.572-3.25,0.93-2.929l7.113,7.113c0.488,0.525-1.837,0.931-2.93,0.931C9.174,17.114,6.886,14.824,6.886,12z M16.184,14.929L9.07,7.816c-0.445-0.483,1.837-0.931,2.929-0.931c2.827,0,5.115,2.289,5.115,5.114 C17.114,13.092,16.75,15.542,16.184,14.929z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="clear" opacity=".75">
+        <path id="circle_with_strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z" fill-rule="evenodd" clip-rule="evenodd"/>
+    </g>
 </svg>
index a0118c2..15278e9 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="close" style="opacity:0.75;">
-       <polygon id="x" style="fill-rule:evenodd;clip-rule:evenodd;" points="18.717,6.697 17.303,5.283 12,10.586 6.697,5.283 5.283,6.697 10.586,12 5.283,17.303 6.697,18.717 12,13.414 17.303,18.717 18.717,17.303 13.414,12            "/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="close" opacity=".75">
+        <path id="x" fill-rule="evenodd" clip-rule="evenodd" d="M18.717 6.697l-1.414-1.414-5.303 5.303-5.303-5.303-1.414 1.414 5.303 5.303-5.303 5.303 1.414 1.414 5.303-5.303 5.303 5.303 1.414-1.414-5.303-5.303z"/>
+    </g>
 </svg>
index 6f1ed53..a45ab1e 100644 (file)
@@ -1,14 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-        width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
-<g id="code" opacity="0.75">
-       <path id="left-bracket" d="M4,12v-1h1c1,0,1,0,1-1V7.614C6,7.1,6.024,6.718,6.073,6.472C6.127,6.22,6.212,6.009,6.33,5.839
-               C6.534,5.56,6.803,5.364,7.138,5.255C7.473,5.14,8.01,5,8.973,5H10v1H9.248c-0.457,0-0.77,0.191-0.936,0.408
-               C8.145,6.623,8,6.853,8,7.476v1.857c0,0.729-0.041,1.18-0.244,1.493c-0.2,0.307-0.562,0.529-1.09,0.667
-               c0.535,0.155,0.9,0.385,1.096,0.688C7.961,12.484,8,12.938,8,13.665v1.862c0,0.619,0.145,0.848,0.312,1.062
-               c0.166,0.22,0.479,0.407,0.936,0.407L10,17l0,0v1H8.973c-0.963,0-1.5-0.133-1.835-0.248c-0.335-0.109-0.604-0.307-0.808-0.591
-               c-0.118-0.165-0.203-0.374-0.257-0.625C6.024,16.283,6,15.9,6,15.387V13c0-1,0-1-1-1H4z"/>
-       <use transform="matrix(-1,0,0,1,24,0)" id="right-bracket" x="0" y="0" width="24" height="24" xlink:href="#left-bracket" />
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+    <g id="code" opacity=".75">
+        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
+        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
+    </g>
 </svg>
index a89cebf..97bdc50 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="collapse" style="opacity:0.75;">
-       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="6.697,15.714 12,10.412 17.303,15.714 18.717,14.3 12,7.583 5.283,14.3"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="collapse" opacity=".75">
+        <path id="arrow" fill-rule="evenodd" clip-rule="evenodd" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
+    </g>
 </svg>
index e052935..ebb038e 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="comment" style="opacity:0.75;">
-       <path id="speech_bubble" style="fill-rule:evenodd;clip-rule:evenodd;" d="M15,6H9C7.343,6,6,7.344,6,9v4c0,1.656,1.343,3,3,3v3 l3-3h3c1.657,0,3-1.344,3-3V9C18,7.344,16.657,6,15,6z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="comment" opacity=".75">
+        <path id="speech_bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z" fill-rule="evenodd" clip-rule="evenodd"/>
+    </g>
 </svg>
index b542f5f..81c2ec0 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="expand" style="opacity:0.75;">
-       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="17.303,8.283 12,13.586 6.697,8.283 5.283,9.697 12,16.414 18.717,9.697"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="expand" opacity=".75">
+        <path id="arrow" fill-rule="evenodd" clip-rule="evenodd" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
+    </g>
 </svg>
index c68bdda..09117e1 100644 (file)
@@ -1,12 +1,10 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="help" style="opacity:0.75;">
-       <path id="circle" style="fill-rule:evenodd;clip-rule:evenodd;" d="M12.001,2.085c-5.478,0-9.916,4.438-9.916,9.916 c0,5.476,4.438,9.914,9.916,9.914c5.476,0,9.914-4.438,9.914-9.914C21.915,6.523,17.477,2.085,12.001,2.085z M12.002,20.085 c-4.465,0-8.084-3.619-8.084-8.083c0-4.465,3.619-8.084,8.084-8.084c4.464,0,8.083,3.619,8.083,8.084 C20.085,16.466,16.466,20.085,12.002,20.085z"/>
-       <g id="question_mark">
-               <path id="top" style="fill-rule:evenodd;clip-rule:evenodd;" d="M11.766,6.688c-2.5,0-3.219,2.188-3.219,2.188l1.411,0.854 c0,0,0.298-0.791,0.901-1.229c0.516-0.375,1.625-0.625,2.219,0.125c0.701,0.885-0.17,1.587-1.078,2.719 C11.047,12.531,11,15,11,15h1.969c0,0,0.135-2.318,1.041-3.381c0.603-0.707,1.443-1.338,1.443-2.494S14.266,6.688,11.766,6.688z"/>
-               <rect id="bottom" x="11" y="16" style="fill-rule:evenodd;clip-rule:evenodd;" width="2" height="2"/>
-       </g>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="help" opacity=".75" fill-rule="evenodd" clip-rule="evenodd">
+        <path id="circle" d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/>
+        <g id="question_mark">
+            <path id="top" d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
+            <path id="bottom" d="M11 16h2v2h-2z"/>
+        </g>
+    </g>
 </svg>
index 40c0ae3..a89e257 100644 (file)
@@ -1,9 +1,7 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="history" style="opacity:0.75;">
-       <path id="clock_hands" style="fill-rule:evenodd;clip-rule:evenodd;" d="M17.26,15.076c0,0-2.385-1.935-4.005-3.062 c0.72-2.397,1.702-6.559,1.702-6.559s-4.35,5.363-4.877,6.699c-0.463,1.168,1.459,2.209,2.346,1.678 C14.326,14.383,17.26,15.076,17.26,15.076z"/>
-       <path id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" d="M12.086,2.085c-5.478,0-9.916,4.438-9.916,9.916 c0,1.783,0.476,3.454,1.301,4.898l-2.223,2.04h5.688v-5.219l-2.066,1.896c-0.55-1.088-0.866-2.312-0.866-3.615 c0-4.465,3.619-8.084,8.084-8.084c4.464,0,8.083,3.619,8.083,8.084c0,4.464-3.619,8.083-8.083,8.083 c-1.145,0-2.228-0.247-3.213-0.678l-0.833,1.634c1.235,0.557,2.602,0.874,4.045,0.874c5.476,0,9.914-4.438,9.914-9.914 C22,6.523,17.562,2.085,12.086,2.085z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="history" opacity=".75" fill-rule="evenodd" clip-rule="evenodd">
+        <path id="clock_hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
+        <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
+    </g>
 </svg>
index 8c5672a..22ad9be 100644 (file)
@@ -1,10 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24" height="24" viewBox="0, 0, 24, 24">
-  <g id="help" opacity="0.75">
-    <path d="M11.499,17 C8.463,17 6,14.536 6,11.5 C6,8.463 8.462,6 11.499,6 C14.536,6 17,8.462 17,11.5 C17,14.536 14.536,17 11.499,17 z M11.501,5 C7.91,5 5,7.91 5,11.5 C5,15.09 7.91,18 11.501,18 C15.089,18 18,15.089 18,11.5 C18,7.911 15.089,5 11.501,5 z" fill="#000000"/>
-    <path d="M12,10 L12,14 L13,14 L13,15 L10,15 L10,14 L11,14 L11,11 L10,11 L10,10 z" fill="#000000"/>
-    <path d="M11,8 L12,8 L12,9 L11,9 z" fill="#000000"/>
-  </g>
-  <defs/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+    <g id="help" opacity=".75">
+        <path d="M11.499 17c-3.036 0-5.499-2.464-5.499-5.5 0-3.037 2.462-5.5 5.499-5.5 3.037 0 5.501 2.462 5.501 5.5 0 3.036-2.464 5.5-5.501 5.5zm.002-12c-3.591 0-6.501 2.91-6.501 6.5s2.91 6.5 6.501 6.5c3.588 0 6.499-2.911 6.499-6.5s-2.911-6.5-6.499-6.5zM12 10v4h1v1h-3v-1h1v-3h-1v-1zM11 8h1v1h-1z"/>
+    </g>
 </svg>
index dadf69c..7d8a1ef 100644 (file)
@@ -1,15 +1,8 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="link" style="opacity:0.75;">
-       <path id="right" d="M19.188,12.001c0,1.1-0.891,2.015-1.988,2.015l-4.195-0.015C13.543,15.089,13.968,16,15.002,16h3
-               C19.658,16,21,13.657,21,12s-1.342-4-2.998-4h-3c-1.034,0-1.459,0.911-1.998,1.999l4.195-0.015
-               C18.297,9.984,19.188,10.901,19.188,12.001z"/>
-       <path id="center" d="M8,12c0,0.535,0.42,1,0.938,1h6.109c0.518,0,0.938-0.465,0.938-1c0-0.534-0.42-1-0.938-1H8.938
-               C8.42,11,8,11.466,8,12z"/>
-       <path id="left" d="M4.816,11.999c0-1.1,0.891-2.015,1.988-2.015L11,9.999C10.461,8.911,10.036,8,9.002,8h-3
-               c-1.656,0-2.998,2.343-2.998,4s1.342,4,2.998,4h3c1.034,0,1.459-0.911,1.998-1.999l-4.195,0.015
-               C5.707,14.016,4.816,13.099,4.816,11.999z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="link" opacity=".75">
+        <path id="right" d="M19.188 12.001c0 1.1-.891 2.015-1.988 2.015l-4.195-.015c.538 1.088.963 1.999 1.997 1.999h3c1.656 0 2.998-2.343 2.998-4s-1.342-4-2.998-4h-3c-1.034 0-1.459.911-1.998 1.999l4.195-.015c1.098 0 1.989.917 1.989 2.017z"/>
+        <path id="center" d="M8 12c0 .535.42 1 .938 1h6.109c.518 0 .938-.465.938-1 0-.534-.42-1-.938-1h-6.109c-.518 0-.938.466-.938 1z"/>
+        <path id="left" d="M4.816 11.999c0-1.1.891-2.015 1.988-2.015l4.196.015c-.539-1.088-.964-1.999-1.998-1.999h-3c-1.656 0-2.998 2.343-2.998 4s1.342 4 2.998 4h3c1.034 0 1.459-.911 1.998-1.999l-4.195.015c-1.098 0-1.989-.917-1.989-2.017z"/>
+    </g>
 </svg>
index 657fab2..75866f6 100644 (file)
@@ -1,10 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="menu" style="opacity:0.75;">
-       <path id="lines" d="M6,15h12c0.553,0,1,0.447,1,1v1c0,0.553-0.447,1-1,1H6c-0.553,0-1-0.447-1-1v-1C5,15.447,5.447,15,6,15z M5,11v1
-               c0,0.553,0.447,1,1,1h12c0.553,0,1-0.447,1-1v-1c0-0.553-0.447-1-1-1H6C5.447,10,5,10.447,5,11z M5,6v1c0,0.553,0.447,1,1,1h12
-               c0.553,0,1-0.447,1-1V6c0-0.553-0.447-1-1-1H6C5.447,5,5,5.447,5,6z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="menu" opacity=".75">
+        <path id="lines" d="M6 15h12c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-12c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1zm-1-4v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1zm0-5v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1z"/>
+    </g>
 </svg>
index a378a5d..3c19c4f 100644 (file)
@@ -1,9 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="move-ltr" style="opacity:0.75;">
-       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="8.935,7.181 14.237,12.483 8.935,17.786
-               10.349,19.2 17.065,12.483 10.349,5.767"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="move-ltr" opacity=".75">
+        <path id="arrow" fill-rule="evenodd" clip-rule="evenodd" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
+    </g>
 </svg>
index c0b334b..d9f35c1 100644 (file)
@@ -1,9 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="move-rtl" style="opacity:0.75;">
-       <polygon id="arrow_9_" style="fill-rule:evenodd;clip-rule:evenodd;" points="15.065,17.786 9.763,12.483 15.065,7.181
-               13.651,5.767 6.935,12.483 13.651,19.2"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="move-rtl" opacity=".75">
+        <path id="arrow_9_" fill-rule="evenodd" clip-rule="evenodd" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.414-6.716 6.716 6.716 6.717z"/>
+    </g>
 </svg>
index 078ce10..cd4c0f7 100644 (file)
@@ -1,12 +1,8 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="picture" style="opacity:0.75;">
-       <path id="frame" style="fill-rule:evenodd;clip-rule:evenodd;" d="M18,4H6C4,3.993,3,4.993,3,6.993L3.014,16C3,18,4,18.988,6,19h12
-               c2-0.012,2.994-1,3-3.006V6.993C20.994,4.993,20,3.993,18,4z M19,17H5V6h14V17z"/>
-       <polygon id="mountains" style="fill-rule:evenodd;clip-rule:evenodd;" points="6,13.5 9.5,10 11.828,12.312 10.516,13.406
-               11.391,14.438 15.5,11 18,13 18,16 6,16"/>
-       <polygon id="sky" style="fill-rule:evenodd;clip-rule:evenodd;" points="6,12 9.516,7.844 12.562,11.016 15.5,9 18,11 18,7 6,7"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="picture" opacity=".75" fill-rule="evenodd" clip-rule="evenodd">
+        <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
+        <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
+        <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
+    </g>
 </svg>
index b95e7d3..5dd607b 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24" height="24" viewBox="0, 0, 24, 24">
-  <g id="remove-item">
-    <path d="M8,11 L16,11 L16,13 L8,13 z" fill="#000000"/>
-  </g>
-  <defs/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+    <g id="remove-item">
+        <path d="M8 11h8v2h-8z"/>
+    </g>
 </svg>
index 17c8d39..06c89d7 100644 (file)
@@ -1,9 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="remove" style="opacity:0.75;">
-       <path id="trash_can" style="fill-rule:evenodd;clip-rule:evenodd;" d="M12,10h-1v6h1V10z M10,10H9v6h1V10z M14,10h-1v6h1V10z
-                M14,6V5H9v1H6v3h1v7.966l1,1.031v-0.074V18h6.984L15,17.982v0.015l1-1.031V9h1V6H14z M15,17H8V9h7V17z M16,8H7V7h9V8z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="remove" opacity=".75">
+        <path id="trash_can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z" fill-rule="evenodd" clip-rule="evenodd"/>
+    </g>
 </svg>
index 37feda4..ff7144c 100644 (file)
@@ -1,13 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="search" style="opacity:0.75;">
-       <path id="magnifying_glass" d="M16.021,15.96l-2.374-2.375c-0.048-0.047-0.105-0.079-0.169-0.099c0.403-0.566,0.643-1.26,0.643-2.009
-               C14.12,9.557,12.563,8,10.644,8c-1.921,0-3.478,1.557-3.478,3.478c0,1.92,1.557,3.477,3.478,3.477c0.749,0,1.442-0.239,2.01-0.643
-               c0.019,0.063,0.051,0.121,0.098,0.169l2.375,2.374c0.19,0.189,0.543,0.143,0.79-0.104S16.21,16.15,16.021,15.96z M10.644,13.69
-               c-1.221,0-2.213-0.991-2.213-2.213c0-1.221,0.992-2.213,2.213-2.213c1.222,0,2.213,0.992,2.213,2.213
-               C12.856,12.699,11.865,13.69,10.644,13.69z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="search" opacity=".75">
+        <path id="magnifying_glass" d="M16.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+    </g>
 </svg>
index 1464a79..cbc4efc 100644 (file)
@@ -1,16 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24" height="24" viewBox="0, 0, 24, 24">
-  <g id="settings" opacity="0.75">
-    <path d="M3,4 L6,4 L6,6 L3,6 z" fill="#000000"/>
-    <path d="M12,4 L21,4 L21,6 L12,6 z" fill="#000000"/>
-    <path d="M8,3 L10,3 C10.552,3 11,3.448 11,4 L11,6 C11,6.552 10.552,7 10,7 L8,7 C7.448,7 7,6.552 7,6 L7,4 C7,3.448 7.448,3 8,3 z" fill="#000000"/>
-    <path d="M3,11 L12,11 L12,13 L3,13 z" fill="#000000"/>
-    <path d="M18,11 L21,11 L21,13 L18,13 z" fill="#000000"/>
-    <path d="M14,10 L16,10 C16.552,10 17,10.448 17,11 L17,13 C17,13.552 16.552,14 16,14 L14,14 C13.448,14 13,13.552 13,13 L13,11 C13,10.448 13.448,10 14,10 z" fill="#000000"/>
-    <path d="M3,18 L9,18 L9,20 L3,20 z" fill="#000000"/>
-    <path d="M15,18 L21,18 L21,20 L15,20 z" fill="#000000"/>
-    <path d="M11,17 L13,17 C13.552,17 14,17.448 14,18 L14,20 C14,20.552 13.552,21 13,21 L11,21 C10.448,21 10,20.552 10,20 L10,18 C10,17.448 10.448,17 11,17 z" fill="#000000"/>
-  </g>
-  <defs/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+    <g id="settings" opacity=".75">
+        <path d="M3 4h3v2h-3zM12 4h9v2h-9zM8 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 11h9v2h-9zM18 11h3v2h-3zM14 10h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2h-6zM15 18h6v2h-6zM11 17h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1z"/>
+    </g>
 </svg>
index d21e5e3..496e7fc 100644 (file)
@@ -1,11 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="tag" style="opacity:0.75;">
-       <path d="M18.748,11.717c0.389,0.389,0.389,1.025,0,1.414l-4.949,4.95c-0.389,0.389-1.025,0.389-1.414,0l-6.01-6.01
-               c-0.389-0.389-0.707-1.157-0.707-1.707L5.667,6c0-0.55,0.45-1,1-1h4.364c0.55,0,1.318,0.318,1.707,0.707L18.748,11.717z
-                M8.104,7.456C7.525,8.032,7.526,8.97,8.103,9.549c0.578,0.577,1.516,0.577,2.095,0.001c0.576-0.578,0.576-1.517,0-2.095
-               C9.617,6.879,8.68,6.878,8.104,7.456z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="tag" opacity=".75">
+        <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+    </g>
 </svg>
index 621cf2c..ad12773 100644 (file)
@@ -1,10 +1,7 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
-        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
-<g id="window" style="opacity:0.75;">
-       <rect id="title" x="7" y="10" width="10" height="1"/>
-       <path id="window" d="M16,19H8c-2.206,0-4-1.794-4-4V9c0-2.206,1.794-4,4-4h8c2.206,0,4,1.794,4,4v6C20,17.206,18.206,19,16,19z
-                M8,7C6.897,7,6,7.897,6,9v6c0,1.103,0.897,2,2,2h8c1.103,0,2-0.897,2-2V9c0-1.103-0.897-2-2-2H8z"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="window" opacity=".75">
+        <path id="title" d="M7 10h10v1h-10z"/>
+        <path id="window" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+    </g>
 </svg>
index 8ce4b25..7cfde44 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12" height="12" viewBox="0, 0, 12, 12">
-  <g id="deprecated" opacity="0.75">
-    <path d="M6,12 C2.686,12 -0,9.314 -0,6 C-0,2.686 2.686,-0 6,-0 C9.314,-0 12,2.686 12,6 C12,9.314 9.314,12 6,12 z M5,7 L7,7 L7,2 L5,2 z M5,10 L7,10 L7,8 L5,8 z" fill="#000000"/>
-  </g>
-  <defs/>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="deprecated" opacity=".75">
+        <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
+    </g>
 </svg>
index 47ff54c..64e3bac 100644 (file)
Binary files a/resources/lib/oojs-ui/images/indicators/arrow-down.png and b/resources/lib/oojs-ui/images/indicators/arrow-down.png differ
index c871f60..d345ec0 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
-        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
-<g id="down" style="opacity:0.75;">
-       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="2.023,3 5.512,8.953 9,3"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="down" opacity=".75">
+        <path id="arrow" d="M2 3l3.5 6 3.5-6z"/>
+    </g>
 </svg>
index 7984007..4eafd0f 100644 (file)
Binary files a/resources/lib/oojs-ui/images/indicators/arrow-ltr.png and b/resources/lib/oojs-ui/images/indicators/arrow-ltr.png differ
index cbc22a4..5092d88 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
-        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
-<g id="ltr" opacity="0.75">
-       <path d="M3.023,8.977 L3.023,2 L8.976,5.489 z" fill="#000000" id="arrow"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="ltr" opacity=".75">
+        <path id="arrow" d="M3 9v-7l6 3.5z"/>
+    </g>
 </svg>
index eebd509..ce13ba0 100644 (file)
Binary files a/resources/lib/oojs-ui/images/indicators/arrow-rtl.png and b/resources/lib/oojs-ui/images/indicators/arrow-rtl.png differ
index 71f73d5..8d39de8 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
-        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
-<g id="rtl" opacity="0.75">
-       <path d="M3.023,5.489 L8.976,8.977 L8.976,2 z" fill="#000000" id="arrow"/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="rtl" opacity=".75">
+        <path id="arrow" d="M3 5.5l6 3.5v-7z"/>
+    </g>
 </svg>
index b827f6d..401cde6 100644 (file)
Binary files a/resources/lib/oojs-ui/images/indicators/arrow-up.png and b/resources/lib/oojs-ui/images/indicators/arrow-up.png differ
index a5d7f38..78e0115 100644 (file)
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
-        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
-<g id="up" style="opacity:0.75;">
-       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="5.512,2.006 2,8 9.024,8                "/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="up" opacity=".75">
+        <path id="arrow" d="M5.5 2l-3.5 6h7z"/>
+    </g>
 </svg>
index ee1baf7..45035f4 100644 (file)
@@ -1,10 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12" height="12" viewBox="0, 0, 12, 12">
-  <g id="required" opacity="0.75">
-    <path d="M5,1 L7,1 L7,11 L5,11 z" fill="#000000"/>
-    <path d="M9.83,2.634 L10.83,4.366 L2.17,9.366 L1.17,7.634 z" fill="#000000"/>
-    <path d="M1.17,4.366 L2.17,2.634 L10.83,7.634 L9.83,9.366 z" fill="#000000"/>
-  </g>
-  <defs/>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="required" opacity=".75">
+        <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
+    </g>
 </svg>
index 47fce7a..dc999cd 100644 (file)
@@ -1,3 +1,13 @@
+/*!
+ * OOjs UI v0.1.0-pre (85cfc2e735)
+ * 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-07-03T02:33:09Z
+ */
 .oo-ui-dialog-content .oo-ui-window-closeButton {
   position: absolute;
   top: 0;
index 94ebbe3..7018b52 100644 (file)
@@ -1,3 +1,13 @@
+/*!
+ * OOjs UI v0.1.0-pre (85cfc2e735)
+ * 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-07-03T02:33:09Z
+ */
 .oo-ui-dialog {
   background-color: #fff;
   background-color: rgba(255, 255, 255, 0.5);
index 0655397..f2e3202 100644 (file)
@@ -1,16 +1,17 @@
 /*!
- * OOjs UI v0.1.0-pre (c5ae888f67)
+ * OOjs UI v0.1.0-pre (85cfc2e735)
  * 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 11 2014 18:10:09 GMT-0700 (PDT)
+ * Date: 2014-07-03T02:33:09Z
  */
 ( 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.
  *
@@ -486,18 +488,32 @@ OO.ui.Element.scrollIntoView = function ( el, config ) {
        // Configuration initialization
        config = config || {};
 
-       var anim = {},
+       var rel, anim = {},
                callback = typeof config.complete === 'function' && config.complete,
                sc = this.getClosestScrollableContainer( el, config.direction ),
                $sc = $( sc ),
                eld = this.getDimensions( el ),
                scd = this.getDimensions( sc ),
+               $win = $( this.getWindow( el ) );
+
+       // Compute the distances between the edges of el and the edges of the scroll viewport
+       if ( $sc.is( 'body' ) ) {
+               // If the scrollable container is the <body> this is easy
+               rel = {
+                       'top': eld.rect.top,
+                       'bottom': $win.innerHeight() - eld.rect.bottom,
+                       'left': eld.rect.left,
+                       'right': $win.innerWidth() - eld.rect.right
+               };
+       } else {
+               // Otherwise, we have to subtract el's coordinates from sc's coordinates
                rel = {
                        'top': eld.rect.top - ( scd.rect.top + scd.borders.top ),
                        'bottom': scd.rect.bottom - scd.borders.bottom - scd.scrollbar.bottom - eld.rect.bottom,
                        'left': eld.rect.left - ( scd.rect.left + scd.borders.left ),
                        'right': scd.rect.right - scd.borders.right - scd.scrollbar.right - eld.rect.right
                };
+       }
 
        if ( !config.direction || config.direction === 'y' ) {
                if ( rel.top < 0 ) {
@@ -606,6 +622,7 @@ OO.ui.Element.prototype.scrollElementIntoView = function ( config ) {
 /**
  * Bind a handler for an event on this.$element
  *
+ * @deprecated Use jQuery#on instead.
  * @param {string} event
  * @param {Function} callback
  */
@@ -616,6 +633,7 @@ OO.ui.Element.prototype.onDOMEvent = function ( event, callback ) {
 /**
  * Unbind a handler bound with #offDOMEvent
  *
+ * @deprecated Use jQuery#off instead.
  * @param {string} event
  * @param {Function} callback
  */
@@ -624,107 +642,36 @@ OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
 };
 
 ( function () {
-       // Static
-
-       // jQuery 1.8.3 has a bug with handling focusin/focusout events inside iframes.
-       // Firefox doesn't support focusin/focusout at all, so we listen for 'focus'/'blur' on the
-       // document, and simulate a 'focusin'/'focusout' event on the target element and make
-       // it bubble from there.
-       //
-       // - http://jsfiddle.net/sw3hr/
-       // - http://bugs.jquery.com/ticket/14180
-       // - https://github.com/jquery/jquery/commit/1cecf64e5aa4153
-       function specialEvent( simulatedName, realName ) {
-               function handler( e ) {
-                       jQuery.event.simulate(
-                               simulatedName,
-                               e.target,
-                               jQuery.event.fix( e ),
-                               /* bubble = */ true
-                       );
-               }
-
-               return {
-                       setup: function () {
-                               var doc = this.ownerDocument || this,
-                                       attaches = $.data( doc, 'ooui-' + simulatedName + '-attaches' );
-                               if ( !attaches ) {
-                                       doc.addEventListener( realName, handler, true );
-                               }
-                               $.data( doc, 'ooui-' + simulatedName + '-attaches', ( attaches || 0 ) + 1 );
-                       },
-                       teardown: function () {
-                               var doc = this.ownerDocument || this,
-                                       attaches = $.data( doc, 'ooui-' + simulatedName + '-attaches' ) - 1;
-                               if ( !attaches ) {
-                                       doc.removeEventListener( realName, handler, true );
-                                       $.removeData( doc, 'ooui-' + simulatedName + '-attaches' );
-                               } else {
-                                       $.data( doc, 'ooui-' + simulatedName + '-attaches', attaches );
-                               }
-                       }
-               };
-       }
-
-       var hasOwn = Object.prototype.hasOwnProperty,
-               specialEvents = {
-                       focusin: specialEvent( 'focusin', 'focus' ),
-                       focusout: specialEvent( 'focusout', 'blur' )
-               };
-
        /**
         * Bind a handler for an event on a DOM element.
         *
-        * Uses jQuery internally for everything except for events which are
-        * known to have issues in the browser or in jQuery. This method
-        * should become obsolete eventually.
+        * Used to be for working around a jQuery bug (jqbug.com/14180),
+        * but obsolete as of jQuery 1.11.0.
         *
         * @static
+        * @deprecated Use jQuery#on instead.
         * @param {HTMLElement|jQuery} el DOM element
         * @param {string} event Event to bind
         * @param {Function} callback Callback to call when the event fires
         */
        OO.ui.Element.onDOMEvent = function ( el, event, callback ) {
-               var orig;
-
-               if ( hasOwn.call( specialEvents, event ) ) {
-                       // Replace jQuery's override with our own
-                       orig = $.event.special[event];
-                       $.event.special[event] = specialEvents[event];
-
-                       $( el ).on( event, callback );
-
-                       // Restore
-                       $.event.special[event] = orig;
-               } else {
-                       $( el ).on( event, callback );
-               }
+               $( el ).on( event, callback );
        };
 
        /**
         * Unbind a handler bound with #static-method-onDOMEvent.
         *
+        * @deprecated Use jQuery#off instead.
         * @static
         * @param {HTMLElement|jQuery} el DOM element
         * @param {string} event Event to unbind
         * @param {Function} [callback] Callback to unbind
         */
        OO.ui.Element.offDOMEvent = function ( el, event, callback ) {
-               var orig;
-               if ( hasOwn.call( specialEvents, event ) ) {
-                       // Replace jQuery's override with our own
-                       orig = $.event.special[event];
-                       $.event.special[event] = specialEvents[event];
-
-                       $( el ).off( event, callback );
-
-                       // Restore
-                       $.event.special[event] = orig;
-               } else {
-                       $( el ).off( event, callback );
-               }
+               $( el ).off( event, callback );
        };
 }() );
+
 /**
  * Embedded iframe with the same styles as its parent.
  *
@@ -803,6 +750,9 @@ OO.ui.Frame.static.transplantStyles = function ( parentDoc, frameDoc, timeout )
 
        for ( i = 0, numSheets = parentDoc.styleSheets.length; i < numSheets; i++ ) {
                styleNode = parentDoc.styleSheets[i].ownerNode;
+               if ( styleNode.disabled ) {
+                       continue;
+               }
                if ( styleNode.nodeName.toLowerCase() === 'link' ) {
                        // External stylesheet
                        // Create a node with a unique ID that we're going to monitor to see when the CSS
@@ -955,6 +905,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.
  *
@@ -1341,6 +1292,10 @@ OO.ui.Window.prototype.open = function ( data ) {
 
        // Open the window
        this.opening = $.Deferred();
+
+       this.$ariaHidden = $( 'body' ).children().not( this.$element.parentsUntil( 'body' ).last() )
+               .attr( 'aria-hidden', '' );
+
        this.frame.load().done( OO.ui.bind( function () {
                this.$element.show();
                this.visible = true;
@@ -1404,6 +1359,10 @@ OO.ui.Window.prototype.close = function ( data ) {
                        this.opened.resolve();
                }
                this.$element.hide();
+               if ( this.$ariaHidden ) {
+                       this.$ariaHidden.removeAttr( 'aria-hidden' );
+                       this.$ariaHidden = undefined;
+               }
                this.visible = false;
                this.closing.resolve();
                // Now that we are totally done closing, it's safe to allow opening
@@ -1412,6 +1371,7 @@ OO.ui.Window.prototype.close = function ( data ) {
 
        return this.closing.promise();
 };
+
 /**
  * Set of mutually exclusive windows.
  *
@@ -1577,6 +1537,7 @@ OO.ui.WindowSet.prototype.addWindow = function ( win ) {
        } );
        this.$element.append( win.$element );
 };
+
 /**
  * Modal dialog window.
  *
@@ -1608,7 +1569,7 @@ OO.ui.Dialog = function OoUiDialog( config ) {
        this.$element.on( 'mousedown', false );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-dialog' );
+       this.$element.addClass( 'oo-ui-dialog' ).attr( 'role', 'dialog' );
        this.setSize( config.size );
 };
 
@@ -1809,6 +1770,7 @@ OO.ui.Dialog.prototype.popPending = function () {
 
        return this;
 };
+
 /**
  * Container for elements.
  *
@@ -1838,6 +1800,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.
  *
@@ -1923,6 +1886,7 @@ OO.ui.Widget.prototype.setDisabled = function ( disabled ) {
        this.wasDisabled = isDisabled;
        return this;
 };
+
 /**
  * A list of functions, called in sequence.
  *
@@ -2039,6 +2003,7 @@ OO.ui.Process.prototype.next = function ( step, context ) {
        this.steps.push( [ step, context || null ] );
        return this;
 };
+
 /**
  * Dialog for showing a confirmation/warning message.
  *
@@ -2099,8 +2064,6 @@ OO.ui.ConfirmationDialog.prototype.initialize = function () {
                this.okButton.$element,
                this.cancelButton.$element
        );
-
-       this.connect( this, { 'teardown': [ 'close', 'cancel' ] } );
 };
 
 /*
@@ -2144,11 +2107,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.
  *
@@ -2175,11 +2139,12 @@ OO.ui.ButtonedElement = function OoUiButtonedElement( $button, config ) {
        this.$button.on( 'mousedown', OO.ui.bind( this.onMouseDown, this ) );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-buttonedElement' );
+       this.$element
+               .addClass( 'oo-ui-buttonedElement' )
+               .prop( 'tabIndex', config.tabIndex || 0 );
        this.$button
                .addClass( 'oo-ui-buttonedElement-button' )
-               .attr( 'role', 'button' )
-               .prop( 'tabIndex', config.tabIndex || 0 );
+               .attr( 'role', 'button' );
        if ( config.frameless ) {
                this.$element.addClass( 'oo-ui-buttonedElement-frameless' );
        } else {
@@ -2256,6 +2221,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.
  *
@@ -2383,18 +2349,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.
  *
@@ -2494,6 +2465,7 @@ OO.ui.FlaggableElement.prototype.setFlags = function ( flags ) {
        }
        return this;
 };
+
 /**
  * Element containing a sequence of child elements.
  *
@@ -2692,6 +2664,7 @@ OO.ui.GroupElement.prototype.clearItems = function () {
        this.items = [];
        return this;
 };
+
 /**
  * Element containing an icon.
  *
@@ -2779,6 +2752,7 @@ OO.ui.IconedElement.prototype.setIcon = function ( icon ) {
 OO.ui.IconedElement.prototype.getIcon = function () {
        return this.icon;
 };
+
 /**
  * Element containing an indicator.
  *
@@ -2892,6 +2866,7 @@ OO.ui.IndicatedElement.prototype.getIndicator = function () {
 OO.ui.IndicatedElement.prototype.getIndicatorTitle = function () {
        return this.indicatorTitle;
 };
+
 /**
  * Element containing a label.
  *
@@ -2990,6 +2965,7 @@ OO.ui.LabeledElement.prototype.fitLabel = function () {
        }
        return this;
 };
+
 /**
  * Popuppable element.
  *
@@ -3040,6 +3016,7 @@ OO.ui.PopuppableElement.prototype.showPopup = function () {
 OO.ui.PopuppableElement.prototype.hidePopup = function () {
        this.popup.hide();
 };
+
 /**
  * Element with a title.
  *
@@ -3106,6 +3083,7 @@ OO.ui.TitledElement.prototype.setTitle = function ( title ) {
 OO.ui.TitledElement.prototype.getTitle = function () {
        return this.title;
 };
+
 /**
  * Generic toolbar tool.
  *
@@ -3144,7 +3122,9 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
        this.$title.addClass( 'oo-ui-tool-title' );
        this.$link
                .addClass( 'oo-ui-tool-link' )
-               .append( this.$icon, this.$title );
+               .append( this.$icon, this.$title )
+               .prop( 'tabIndex', 0 )
+               .attr( 'role', 'button' );
        this.$element
                .data( 'oo-ui-tool', this )
                .addClass(
@@ -3357,6 +3337,7 @@ OO.ui.Tool.prototype.destroy = function () {
        this.toolbar.disconnect( this );
        this.$element.remove();
 };
+
 /**
  * Collection of tool groups.
  *
@@ -3565,6 +3546,7 @@ OO.ui.Toolbar.prototype.releaseTool = function ( tool ) {
 OO.ui.Toolbar.prototype.getToolAccelerator = function () {
        return undefined;
 };
+
 /**
  * Factory for tools.
  *
@@ -3677,6 +3659,7 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
        }
        return names;
 };
+
 /**
  * Collection of tools.
  *
@@ -3995,6 +3978,7 @@ OO.ui.ToolGroup.prototype.destroy = function () {
        }
        this.$element.remove();
 };
+
 /**
  * Factory for tool groups.
  *
@@ -4033,6 +4017,7 @@ OO.ui.ToolGroupFactory.static.getDefaultClasses = function () {
                OO.ui.MenuToolGroup
        ];
 };
+
 /**
  * Layout made of a fieldset and optional legend.
  *
@@ -4080,6 +4065,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.
  *
@@ -4195,6 +4181,7 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
 
        return this;
 };
+
 /**
  * Layout made of proportionally sized columns and rows.
  *
@@ -4355,6 +4342,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.
  *
@@ -4773,6 +4761,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.
  *
@@ -4805,6 +4794,7 @@ OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
+
 /**
  * Page within an booklet layout.
  *
@@ -4898,6 +4888,7 @@ OO.ui.PageLayout.prototype.setActive = function ( active ) {
                this.emit( 'active', this.active );
        }
 };
+
 /**
  * Layout containing a series of mutually exclusive pages.
  *
@@ -5068,6 +5059,7 @@ OO.ui.StackLayout.prototype.setItem = function ( item ) {
 
        return this;
 };
+
 /**
  * Horizontal bar layout of tools as icon buttons.
  *
@@ -5097,6 +5089,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.
  *
@@ -5249,6 +5242,7 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
                }
        }
 };
+
 /**
  * Drop down list layout of tools as labeled icon buttons.
  *
@@ -5276,6 +5270,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.
  *
@@ -5330,6 +5325,7 @@ OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
 
        this.setLabel( labelTexts.join( ', ' ) || ' ' );
 };
+
 /**
  * Tool that shows a popup when selected.
  *
@@ -5387,6 +5383,7 @@ OO.ui.PopupTool.prototype.onSelect = function () {
 OO.ui.PopupTool.prototype.onUpdateState = function () {
        this.setActive( false );
 };
+
 /**
  * Group widget.
  *
@@ -5437,6 +5434,7 @@ OO.ui.GroupWidget.prototype.setDisabled = function ( disabled ) {
 
        return this;
 };
+
 /**
  * Item widget.
  *
@@ -5481,6 +5479,7 @@ OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
 
        return this;
 };
+
 /**
  * Icon widget.
  *
@@ -5516,6 +5515,7 @@ OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
 /* Static Properties */
 
 OO.ui.IconWidget.static.tagName = 'span';
+
 /**
  * Indicator widget.
  *
@@ -5551,6 +5551,7 @@ OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
 /* Static Properties */
 
 OO.ui.IndicatorWidget.static.tagName = 'span';
+
 /**
  * Container for multiple related buttons.
  *
@@ -5582,6 +5583,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.
  *
@@ -5682,6 +5684,7 @@ OO.ui.ButtonWidget.prototype.onKeyPress = function ( e ) {
        }
        return false;
 };
+
 /**
  * Input widget.
  *
@@ -5877,6 +5880,7 @@ OO.ui.InputWidget.prototype.focus = function () {
        this.$input.focus();
        return this;
 };
+
 /**
  * Checkbox widget.
  *
@@ -5943,6 +5947,7 @@ OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
                }, this ) );
        }
 };
+
 /**
  * Label widget.
  *
@@ -5995,6 +6000,7 @@ OO.ui.LabelWidget.prototype.onClick = function () {
        this.input.simulateLabelClick();
        return false;
 };
+
 /**
  * Lookup input widget.
  *
@@ -6228,6 +6234,7 @@ OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
        // Stub, implemented in subclass
        return [];
 };
+
 /**
  * Option widget.
  *
@@ -6445,6 +6452,7 @@ OO.ui.OptionWidget.prototype.flash = function () {
 OO.ui.OptionWidget.prototype.getData = function () {
        return this.data;
 };
+
 /**
  * Selection of options.
  *
@@ -6956,6 +6964,7 @@ OO.ui.SelectWidget.prototype.clearItems = function () {
 
        return this;
 };
+
 /**
  * Menu item widget.
  *
@@ -6982,6 +6991,7 @@ OO.ui.MenuItemWidget = function OoUiMenuItemWidget( data, config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.MenuItemWidget, OO.ui.OptionWidget );
+
 /**
  * Menu widget.
  *
@@ -7239,6 +7249,7 @@ OO.ui.MenuWidget.prototype.hide = function () {
 
        return this;
 };
+
 /**
  * Inline menu of options.
  *
@@ -7346,6 +7357,7 @@ OO.ui.InlineMenuWidget.prototype.onClick = function ( e ) {
        }
        return false;
 };
+
 /**
  * Menu section item widget.
  *
@@ -7375,6 +7387,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.
  *
@@ -7400,6 +7413,7 @@ OO.ui.OutlineWidget = function OoUiOutlineWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.OutlineWidget, OO.ui.SelectWidget );
+
 /**
  * Creates an OO.ui.OutlineControlsWidget object.
  *
@@ -7513,6 +7527,7 @@ OO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {
        this.downButton.setDisabled( !movable || selectedItem === lastMovable );
        this.removeButton.setDisabled( !removable );
 };
+
 /**
  * Creates an OO.ui.OutlineItemWidget object.
  *
@@ -7639,6 +7654,7 @@ OO.ui.OutlineItemWidget.prototype.setLevel = function ( level ) {
 
        return this;
 };
+
 /**
  * Option widget that looks like a button.
  *
@@ -7692,6 +7708,7 @@ OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
 
        return this;
 };
+
 /**
  * Select widget containing button options.
  *
@@ -7714,6 +7731,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.
  *
@@ -7959,6 +7977,7 @@ OO.ui.PopupWidget.prototype.display = function ( width, height, transition ) {
 
        return this;
 };
+
 /**
  * Button that shows and hides a popup.
  *
@@ -8010,6 +8029,7 @@ OO.ui.PopupButtonWidget.prototype.onClick = function ( e ) {
        }
        return false;
 };
+
 /**
  * Search widget.
  *
@@ -8163,6 +8183,7 @@ OO.ui.SearchWidget.prototype.getQuery = function () {
 OO.ui.SearchWidget.prototype.getResults = function () {
        return this.results;
 };
+
 /**
  * Text input widget.
  *
@@ -8375,6 +8396,7 @@ OO.ui.TextInputWidget.prototype.select = function () {
        this.$input.select();
        return this;
 };
+
 /**
  * Menu for a text input widget.
  *
@@ -8475,6 +8497,7 @@ OO.ui.TextInputMenuWidget.prototype.position = function () {
        this.setIdealSize( $container.width() );
        return this;
 };
+
 /**
  * Width with on and off states.
  *
@@ -8534,6 +8557,7 @@ OO.ui.ToggleWidget.prototype.setValue = function ( value ) {
        }
        return this;
 };
+
 /**
  * Button that toggles on and off.
  *
@@ -8592,6 +8616,7 @@ OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {
 
        return this;
 };
+
 /**
  * Switch that slides on and off.
  *
@@ -8645,4 +8670,5 @@ OO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {
                this.setValue( !this.value );
        }
 };
+
 }( OO ) );
index aa4d42e..a249314 100644 (file)
@@ -1,14 +1,13 @@
 /*!
- * OOjs UI v0.1.0-pre (c5ae888f67)
+ * OOjs UI v0.1.0-pre (85cfc2e735)
  * 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 11 2014 18:10:09 GMT-0700 (PDT)
+ * Date: 2014-07-03T02:33:09Z
  */
-
 /* 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..915cd85
--- /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.stringify instead (module "json" for polyfill).' );
+}( mediaWiki, jQuery ) );
index b3e8193..1931aad 100644 (file)
@@ -7,7 +7,7 @@
 /* Layout helpers
 ----------------------------------*/
 .ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
 .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
 .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
 .ui-helper-clearfix { display: inline-block; }
index 1c47feb..8d38401 100644 (file)
@@ -12,7 +12,7 @@
  *
  * @author Timo Tijhof, 2011-2012
  */
-( function ( $ ) {
+( function ( mw, $ ) {
        'use strict';
 
        var util,
                        }
                        return keys;
                },
-               extend: function () {
-                       var options, name, src, copy,
-                               target = arguments[0] || {},
-                               i = 1,
-                               length = arguments.length;
-
-                       for ( ; i < length; i++ ) {
-                               options = arguments[ i ];
-                               // Only deal with non-null/undefined values
-                               if ( options !== null && options !== undefined ) {
-                                       // Extend the base object
-                                       for ( name in options ) {
-                                               src = target[ name ];
-                                               copy = options[ name ];
-
-                                               // Prevent never-ending loop
-                                               if ( target === copy ) {
-                                                       continue;
-                                               }
-
-                                               if ( copy !== undefined ) {
-                                                       target[ name ] = copy;
-                                               }
-                                       }
-                               }
-                       }
-
-                       // Return the modified object
-                       return target;
-               },
                each: function ( object, callback ) {
                        var name;
                        for ( name in object ) {
@@ -94,6 +64,8 @@
         *  were not called from that instance.
         */
        function CompletenessTest( masterVariable, ignoreFn ) {
+               var warn,
+                       that = this;
 
                // Keep track in these objects. Keyed by strings with the
                // method names (ie. 'my.foo', 'my.bar', etc.) values are boolean true.
                this.lazyLimit = 2000;
                this.lazyCounter = 0;
 
-               var that = this;
-
                // Bind begin and end to QUnit.
                QUnit.begin( function () {
-                       that.walkTheObject( null, masterVariable, masterVariable, [], CompletenessTest.ACTION_INJECT );
-                       log( 'CompletenessTest/walkTheObject/ACTION_INJECT', that );
+                       // Suppress warnings (e.g. deprecation notices for accessing the properties)
+                       warn = mw.log.warn;
+                       mw.log.warn = $.noop;
+
+                       that.walkTheObject( masterVariable, null, masterVariable, [] );
+                       log( 'CompletenessTest/walkTheObject', that );
+
+                       // Restore warnings
+                       mw.log.warn = warn;
+                       warn = undefined;
                });
 
                QUnit.done( function () {
                return this;
        }
 
-       /* Static members */
-       CompletenessTest.ACTION_INJECT = 500;
-       CompletenessTest.ACTION_CHECK = 501;
-
        /* Public methods */
        CompletenessTest.fn = CompletenessTest.prototype = {
 
                 *  Initially this is the same as currVar.
                 * @param parentPathArray {Array} Array of names that indicate our breadcrumb path starting at
                 *  masterVariable. Not including currName.
-                * @param action {Number} What is this function supposed to do (ACTION_INJECT or ACTION_CHECK)
                 */
-               walkTheObject: function ( currName, currVar, masterVariable, parentPathArray, action ) {
+               walkTheObject: function ( currObj, currName, masterVariable, parentPathArray ) {
+                       var key, currVal, type,
+                               ct = this,
+                               currPathArray = parentPathArray;
+
+                       if ( currName ) {
+                               currPathArray.push( currName );
+                               currVal = currObj[currName];
+                       } else {
+                               currName = '(root)';
+                               currVal = currObj;
+                       }
 
-                       var key, value, tmpPathArray,
-                               type = util.type( currVar ),
-                               that = this;
+                       type = util.type( currVal );
 
                        // Hard ignores
-                       if ( this.ignoreFn( currVar, that, parentPathArray ) ) {
+                       if ( this.ignoreFn( currVal, this, currPathArray ) ) {
                                return null;
                        }
 
                        // Handle the lazy limit
                        this.lazyCounter++;
                        if ( this.lazyCounter > this.lazyLimit ) {
-                               log( 'CompletenessTest.fn.walkTheObject> Limit reached: ' + this.lazyCounter, parentPathArray );
+                               log( 'CompletenessTest.fn.walkTheObject> Limit reached: ' + this.lazyCounter, currPathArray );
                                return null;
                        }
 
                        // Functions
                        if ( type === 'function' ) {
-
-                               if ( !currVar.prototype || util.isEmptyObject( currVar.prototype ) ) {
-
-                                       if ( action === CompletenessTest.ACTION_INJECT ) {
-
-                                               that.injectionTracker[ parentPathArray.join( '.' ) ] = true;
-                                               that.injectCheck( masterVariable, parentPathArray, function () {
-                                                       that.methodCallTracker[ parentPathArray.join( '.' ) ] = true;
-                                               } );
-                                       }
-
-                               // We don't support checking object constructors yet...
-                               // ...we can check the prototypes fine, though.
-                               } else {
-                                       if ( action === CompletenessTest.ACTION_INJECT ) {
-
-                                               for ( key in currVar.prototype ) {
-                                                       if ( hasOwn.call( currVar.prototype, key ) ) {
-                                                               value = currVar.prototype[key];
-                                                               if ( key === 'constructor' ) {
-                                                                       continue;
-                                                               }
-
-                                                               // Clone and break reference to parentPathArray
-                                                               tmpPathArray = util.extend( [], parentPathArray );
-                                                               tmpPathArray.push( 'prototype' );
-                                                               tmpPathArray.push( key );
-
-                                                               that.walkTheObject( key, value, masterVariable, tmpPathArray, action );
-                                                       }
-                                               }
-
-                                       }
+                               // Don't put a spy in constructor functions as it messes with
+                               // instanceof etc.
+                               if ( !currVal.prototype || util.isEmptyObject( currVal.prototype ) ) {
+                                       this.injectionTracker[ currPathArray.join( '.' ) ] = true;
+                                       this.injectCheck( currObj, currName, function () {
+                                               ct.methodCallTracker[ currPathArray.join( '.' ) ] = true;
+                                       } );
                                }
-
                        }
 
                        // Recursively. After all, this is the *completeness* test
-                       if ( type === 'function' || type === 'object' ) {
-                               for ( key in currVar ) {
-                                       if ( hasOwn.call( currVar, key ) ) {
-                                               value = currVar[key];
-
-                                               // Clone and break reference to parentPathArray
-                                               tmpPathArray = util.extend( [], parentPathArray );
-                                               tmpPathArray.push( key );
-
-                                               that.walkTheObject( key, value, masterVariable, tmpPathArray, action );
+                       // This also traverses static properties and the prototype of a constructor
+                       if ( type === 'object' || type === 'function' ) {
+                               for ( key in currVal ) {
+                                       if ( hasOwn.call( currVal, key ) ) {
+                                               this.walkTheObject( currVal, key, masterVariable, currPathArray.slice() );
                                        }
                                }
                        }
                 * @param objectPathArray {Array}
                 * @param injectFn {Function}
                 */
-               injectCheck: function ( masterVariable, objectPathArray, injectFn ) {
-                       var i, len, prev, memberName, lastMember,
-                               curr = masterVariable;
-
-                       // Get the object in question through the path from the master variable,
-                       // We can't pass the value directly because we need to re-define the object
-                       // member and keep references to the parent object, member name and member
-                       // value at all times.
-                       for ( i = 0, len = objectPathArray.length; i < len; i++ ) {
-                               memberName = objectPathArray[i];
-
-                               prev = curr;
-                               curr = prev[memberName];
-                               lastMember = memberName;
-                       }
+               injectCheck: function ( obj, key, injectFn ) {
+                       var spy,
+                               val = obj[ key ];
 
-                       // Objects are by reference, members (unless objects) are not.
-                       prev[lastMember] = function () {
+                       spy = function () {
                                injectFn();
-                               return curr.apply( this, arguments );
+                               return val.apply( this, arguments );
                        };
+
+                       // Make the spy inherit from the original so that its static methods are also
+                       // visible in the spy (e.g. when we inject a check into mw.log, mw.log.warn
+                       // must remain accessible).
+                       /*jshint proto:true */
+                       spy.__proto__ = val;
+
+                       // Objects are by reference, members (unless objects) are not.
+                       obj[ key ] = spy;
                }
        };
 
        /* Expose */
        window.CompletenessTest = CompletenessTest;
 
-}( jQuery ) );
+}( 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 e66b9cd..b6ba59f 100644 (file)
@@ -25,6 +25,8 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                                word = word.substr(0, word.length - 2 ) + 'тей';
                        } else if ( word.substr( word.length - 2 ) === 'ды' ) {
                                word = word.substr(0, word.length - 2 ) + 'дов';
+                       } else if ( word.substr( word.length - 1 ) === 'д' ) {
+                               word = word.substr(0, word.length - 1 ) + 'да';
                        } else if ( word.substr( word.length - 3 ) === 'ные' ) {
                                word = word.substr(0, word.length - 3 ) + 'ных';
                        } else if ( word.substr( word.length - 3 ) === 'ник' ) {
@@ -42,6 +44,8 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                                word = word.substr(0, word.length - 2 ) + 'тях';
                        } else if ( word.substr( word.length - 2 ) === 'ды' ) {
                                word = word.substr(0, word.length - 2 ) + 'дах';
+                       } else if ( word.substr( word.length - 1 ) === 'д' ) {
+                               word = word.substr(0, word.length - 1 ) + 'де';
                        } else if ( word.substr( word.length - 3 ) === 'ные' ) {
                                word = word.substr(0, word.length - 3 ) + 'ных';
                        } else if ( word.substr( word.length - 3 ) === 'ник' ) {
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 4819be0..931e312 100644 (file)
@@ -1,93 +1,92 @@
 /*!
- * Change multi-page image navigation so that the current page display can be changed
- * without a page reload. Currently, the only image formats that can be multi-page images are
- * PDF and DjVu files
+ * Implement AJAX navigation for multi-page images so the user may browse without a full page reload.
  */
 ( function ( mw, $ ) {
+       var jqXhr, $multipageimage, $spinner;
 
-       // Initialize ajax request variable
-       var xhr;
-
-       // Use jQuery's load function to specifically select and replace table.multipageimage's child
-       // tr with the new page's table.multipageimage's tr element.
-       // table.multipageimage always has only one row.
-       function loadPage( page, hist ) {
-               if ( xhr ) {
-                       // Abort previous requests to prevent backlog created by
-                       // repeatedly pressing back/forwards buttons
-                       xhr.abort();
+       /* Fetch the next page and use jQuery to swap the table.multipageimage contents.
+        * @param {string} url
+        * @param {boolean} [hist=false] Whether this is a load triggered by history navigation (if
+        *   true, this function won't push a new history state, for the browser did so already).
+        */
+       function loadPage( url, hist ) {
+               var $tr;
+               if ( jqXhr ) {
+                       // Prevent race conditions and piling up pending requests
+                       jqXhr.abort();
+                       jqXhr = undefined;
                }
 
-               var $multipageimage = $( 'table.multipageimage' ),
-                       $spinner;
-
                // Add a new spinner if one doesn't already exist
-               if ( !$multipageimage.find( '.mw-spinner' ).length ) {
-
+               if ( !$spinner ) {
+                       $tr = $multipageimage.find( 'tr' );
                        $spinner = $.createSpinner( {
                                size: 'large',
                                type: 'block'
                        } )
-                               // Set the spinner's dimensions equal to the table's dimensions so that
-                               // the current scroll position is not lost after the table is emptied prior to
-                               // its contents being updated
+                               // Copy the old content dimensions equal so that the current scroll position is not
+                               // lost between emptying the table is and receiving the new contents.
                                .css( {
-                                       height: $multipageimage.find( 'tr' ).height(),
-                                       width: $multipageimage.find( 'tr' ).width()
+                                       height: $tr.outerHeight(),
+                                       width: $tr.outerWidth()
                                } );
 
                        $multipageimage.empty().append( $spinner );
                }
 
-               xhr = $.ajax( {
-                       url: page,
-                       success: function ( data ) {
-                               // Load the page
-                               $multipageimage.empty().append( $( data ).find( 'table.multipageimage tr' ) );
-                               // Fire hook because the page's content has changed
-                               mw.hook( 'wikipage.content' ).fire( $multipageimage );
-                               // Set up the new page for pagination
-                               ajaxifyPageNavigation();
-                               // Add new page of image to history.  To preserve the back-forwards chain in the browser,
-                               // if the user gets here via the back/forward button, don't update the history.
-                               if ( window.history && history.pushState && !hist ) {
-                                       history.pushState( { url: page }, document.title, page );
-                               }
+               // @todo Don't fetch the entire page. Ideally we'd only fetch the content portion or the data
+               // (thumbnail urls) and update the interface manually.
+               jqXhr = $.ajax( url ).done( function ( data ) {
+                       jqXhr = $spinner = undefined;
+
+                       // Replace table contents
+                       $multipageimage.empty().append( $( data ).find( 'table.multipageimage' ).contents() );
+
+                       bindPageNavigation( $multipageimage );
+
+                       // Fire hook because the page's content has changed
+                       mw.hook( 'wikipage.content' ).fire( $multipageimage );
+
+                       // Update browser history and address bar. But not if we came here from a history
+                       // event, in which case the url is already updated by the browser.
+                       if ( history.pushState && !hist ) {
+                               history.pushState( { tag: 'mw-pagination' }, document.title, url );
                        }
                } );
        }
 
-       function ajaxifyPageNavigation() {
-               // Intercept the default action of the links in the thumbnail navigation
-               $( '.multipageimagenavbox' ).one( 'click', 'a', function ( e ) {
+       function bindPageNavigation( $container ) {
+               $container.find( '.multipageimagenavbox' ).one( 'click', 'a', function ( e ) {
                        loadPage( this.href );
                        e.preventDefault();
                } );
 
-               // Prevent the submission of the page select form and instead call loadPage
-               $( 'form[name="pageselector"]' ).one( 'change submit', function ( e ) {
+               $container.find( 'form[name="pageselector"]' ).one( 'change submit', function ( e ) {
                        loadPage( this.action + '?' + $( this ).serialize() );
                        e.preventDefault();
                } );
        }
 
-       $( document ).ready( function () {
-               // The presence of table.multipageimage signifies that this file is a multi-page image
-               if ( mw.config.get( 'wgNamespaceNumber' ) === 6 && $( 'table.multipageimage' ).length !== 0 ) {
-                       ajaxifyPageNavigation();
+       $( function () {
+               if ( mw.config.get( 'wgNamespaceNumber' ) !== 6 ) {
+                       return;
+               }
+               $multipageimage = $( 'table.multipageimage' );
+               if ( !$multipageimage.length ) {
+                       return;
+               }
 
-                       // Set up history.pushState (if available), so that when the user browses to a new page of
-                       // the same file, the browser's history is updated. If the user clicks the back/forward button
-                       // in the midst of navigating a file's pages, load the page inline.
-                       if ( window.history && history.pushState && history.replaceState ) {
-                               history.replaceState( { url: window.location.href }, '' );
-                               $( window ).on( 'popstate', function ( e ) {
-                                       var state = e.originalEvent.state;
-                                       if ( state ) {
-                                               loadPage( state.url, true );
-                                       }
-                               } );
-                       }
+               bindPageNavigation( $multipageimage );
+
+               // Update the url using the History API (if available)
+               if ( history.pushState && history.replaceState ) {
+                       history.replaceState( { tag: 'mw-pagination' }, '' );
+                       $( window ).on( 'popstate', function ( e ) {
+                               var state = e.originalEvent.state;
+                               if ( state && state.tag === 'mw-pagination' ) {
+                                       loadPage( location.href, true );
+                               }
+                       } );
                }
        } );
 }( mediaWiki, jQuery ) );
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..aeed611 100644 (file)
  */
 span.reference {
        font-size: smaller;
-       line-height: normal;
+       line-height: 1;
        vertical-align: super;
 }
 
+sup, sub {
+       line-height: 1;
+}
+
 /**
  * Block media items
  */
@@ -64,8 +68,18 @@ figure[typeof*='mw:Image'] {
                float: left;
        }
 
+       &.mw-halign-none {
+               /* @noflip */
+               margin: 0;
+               /* @noflip */
+               clear: none;
+               /* @noflip */
+               float: none;
+       }
+
        &.mw-halign-center {
                margin: 0 auto .5em auto;
+               display: table;
                clear: none;
                float: none;
        }
@@ -94,7 +108,6 @@ figure[typeof~='mw:Image/Frame'] {
        display: table;
        overflow: auto;
        text-align: center;
-       padding: 3px;
        border: 1px solid #ccc;
        border-bottom: 0; // No border to caption
        border-collapse: collapse;
@@ -110,9 +123,13 @@ figure[typeof~='mw:Image/Thumb'] > *:first-child > img,
 figure[typeof~='mw:Image/Frame'] > *:first-child > img,
 .mw-image-border > *:first-child > img {
        border: 1px solid #cccccc;
-       margin: 4px;
+       margin: 3px;
 }
 
+/* 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 a805f3e..a30a15d 100644 (file)
@@ -5,3 +5,7 @@
 label[for="mw-input-wpConfirm"] {
        font-weight: bold;
 }
+
+tr.mw-block-hideuser {
+       font-weight: bold;
+}
index eb7072c..7ac8154 100644 (file)
@@ -27,11 +27,6 @@ table.mw-allpages-table-form tr {
        vertical-align: top;
 }
 
-/* Special:Block */
-tr.mw-block-hideuser {
-       font-weight: bold;
-}
-
 /* Special:BlockList */
 table.mw-blocklist span.mw-usertoollinks,
 span.mw-blocklist-actions {
@@ -71,173 +66,6 @@ td#mw-prefixindex-nav-form {
        text-align: right;
 }
 
-
-/* Special:Search */
-.searchresults {
-}
-
-.searchresults p {
-       margin-left: 0.4em;
-       margin-top: 1em;
-       margin-bottom: 1.2em;
-}
-div.searchresult {
-       font-size: 95%;
-       width: 38em;
-}
-.mw-search-results {
-       margin-left: 0.4em;
-}
-.mw-search-results li {
-       padding-bottom: 1.2em;
-       list-style: none;
-       list-style-image: none;
-}
-.mw-search-results li a {
-       font-size: 108%;
-}
-.mw-search-result-data {
-       color: green;
-       font-size: 97%;
-}
-.mw-search-formheader {
-       background-color: #f3f3f3;
-       margin-top: 1em;
-       border: 1px solid silver;
-}
-.mw-search-formheader div.search-types {
-       float: left;
-       padding-left: 0.25em;
-}
-.mw-search-formheader div.search-types ul {
-       margin: 0 !important;
-       padding: 0 !important;
-       list-style: none !important;
-}
-.mw-search-formheader div.search-types ul li {
-       float: left;
-       margin: 0;
-       padding: 0;
-}
-.mw-search-formheader div.search-types ul li a {
-       display: block;
-       padding: 0.5em;
-}
-.mw-search-formheader div.search-types ul li.current a {
-       color: #333333;
-       cursor: default;
-}
-.mw-search-formheader div.search-types ul li.current a:hover {
-       text-decoration: none;
-}
-.mw-search-formheader div.results-info {
-       float: right;
-       padding: 0.5em;
-       padding-right: 0.75em;
-}
-.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;
-       border: none;
-       background-color: #f9f9f9;
-       border: 1px solid silver !important;
-       border-top-width: 0 !important;
-}
-fieldset#mw-searchoptions legend {
-       display: none;
-}
-fieldset#mw-searchoptions h4 {
-       padding: 0;
-       margin: 0;
-       float: left;
-}
-fieldset#mw-searchoptions div#mw-search-togglebox {
-       float: right;
-}
-fieldset#mw-searchoptions div#mw-search-togglebox label {
-       margin-right: 0.25em;
-}
-fieldset#mw-searchoptions div#mw-search-togglebox input {
-       margin-left: 0.25em;
-}
-fieldset#mw-searchoptions table {
-       float: left;
-       margin-right: 3em;
-}
-fieldset#mw-searchoptions table td {
-       padding-right: 1em;
-}
-fieldset#mw-searchoptions div.divider {
-       clear: both;
-       border-bottom: 1px solid #DDDDDD;
-       padding-top: 0.5em;
-       margin-bottom: 0.5em;
-}
-td#mw-search-menu {
-       padding-left:6em;
-       font-size:85%;
-}
-div#mw-search-interwiki {
-       float: right;
-       width: 18em;
-       border: 1px solid #AAAAAA;
-       margin-top: 2ex;
-}
-div#mw-search-interwiki li {
-       font-size: 95%;
-}
-.mw-search-interwiki-more {
-       float: right;
-       font-size: 90%;
-}
-div#mw-search-interwiki-caption {
-       text-align: center;
-       font-weight: bold;
-       font-size: 95%;
-}
-.mw-search-interwiki-project {
-       font-size: 97%;
-       text-align: left;
-       padding: 0.15em 0.15em 0.2em 0.2em;
-       background-color: #ececec;
-       border-top: 1px solid #BBBBBB;
-}
-span.searchalttitle {
-       font-size: 95%;
-}
-div.searchdidyoumean {
-       font-size: 127%;
-       margin-top: 0.8em;
-       /* Note that this color won't affect the link, as desired. */
-       color: #c00;
-}
-div.searchdidyoumean em {
-       font-weight: bold;
-}
-.searchmatch {
-       font-weight: bold;
-}
-/* Advanced PowerSearch box */
-td#mw-search-togglebox {
-       text-align: right;
-}
-table#mw-search-powertable {
-       width: 100%;
-}
-form#powersearch {
-       clear: both;
-}
-
 /* Special:Specialpages */
 .mw-specialpagerestricted {
        font-weight: bold;
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 f6ed82c..ef95507 100644 (file)
@@ -1,3 +1,5 @@
+/* Special:Search */
+
 /*
  * Fixes sister projects box moving down the extract
  * of the first result (bug #16886).
 .searchresult {
        display: inline !ie;
 }
+.searchresults {
+}
+.searchresults p {
+       margin-left: 0.4em;
+       margin-top: 1em;
+       margin-bottom: 1.2em;
+}
+div.searchresult {
+       font-size: 95%;
+       width: 38em;
+}
+.mw-search-results {
+       margin-left: 0.4em;
+}
+.mw-search-results li {
+       padding-bottom: 1.2em;
+       list-style: none;
+       list-style-image: none;
+}
+.mw-search-results li a {
+       font-size: 108%;
+}
+.mw-search-result-data {
+       color: green;
+       font-size: 97%;
+}
+.mw-search-formheader {
+       background-color: #f3f3f3;
+       margin-top: 1em;
+       border: 1px solid silver;
+}
+.mw-search-formheader div.search-types {
+       float: left;
+       padding-left: 0.25em;
+}
+.mw-search-formheader div.search-types ul {
+       margin: 0 !important;
+       padding: 0 !important;
+       list-style: none !important;
+}
+.mw-search-formheader div.search-types ul li {
+       float: left;
+       margin: 0;
+       padding: 0;
+}
+.mw-search-formheader div.search-types ul li a {
+       display: block;
+       padding: 0.5em;
+}
+.mw-search-formheader div.search-types ul li.current a {
+       color: #333333;
+       cursor: default;
+}
+.mw-search-formheader div.search-types ul li.current a:hover {
+       text-decoration: none;
+}
+#mw-search-top-table div.results-info {
+       float: right;
+       padding: 0.5em;
+       padding-right: 0.75em;
+       color: #666;
+       font-size: 95%;
+}
+
+fieldset#mw-searchoptions {
+       margin: 0;
+       padding: 0.5em 0.75em 0.75em 0.75em !important;
+       border: none;
+       background-color: #f9f9f9;
+       border: 1px solid silver !important;
+       border-top-width: 0 !important;
+}
+fieldset#mw-searchoptions legend {
+       display: none;
+}
+fieldset#mw-searchoptions h4 {
+       padding: 0;
+       margin: 0;
+       float: left;
+}
+fieldset#mw-searchoptions div#mw-search-togglebox {
+       float: right;
+}
+fieldset#mw-searchoptions div#mw-search-togglebox label {
+       margin-right: 0.25em;
+}
+fieldset#mw-searchoptions div#mw-search-togglebox input {
+       margin-left: 0.25em;
+}
+fieldset#mw-searchoptions table {
+       float: left;
+       margin-right: 3em;
+}
+fieldset#mw-searchoptions table td {
+       padding-right: 1em;
+       white-space: nowrap;
+}
+fieldset#mw-searchoptions div.divider {
+       clear: both;
+       border-bottom: 1px solid #DDDDDD;
+       padding-top: 0.5em;
+       margin-bottom: 0.5em;
+}
+td#mw-search-menu {
+       padding-left:6em;
+       font-size:85%;
+}
+div#mw-search-interwiki {
+       float: right;
+       width: 18em;
+       border: 1px solid #AAAAAA;
+       margin-top: 2ex;
+}
+div#mw-search-interwiki li {
+       font-size: 95%;
+}
+.mw-search-interwiki-more {
+       float: right;
+       font-size: 90%;
+}
+div#mw-search-interwiki-caption {
+       text-align: center;
+       font-weight: bold;
+       font-size: 95%;
+}
+.mw-search-interwiki-project {
+       font-size: 97%;
+       text-align: left;
+       padding: 0.15em 0.15em 0.2em 0.2em;
+       background-color: #ececec;
+       border-top: 1px solid #BBBBBB;
+}
+span.searchalttitle {
+       font-size: 95%;
+}
+div.searchdidyoumean {
+       font-size: 127%;
+       margin-top: 0.8em;
+       /* Note that this color won't affect the link, as desired. */
+       color: #c00;
+}
+div.searchdidyoumean em {
+       font-weight: bold;
+}
+.searchmatch {
+       font-weight: bold;
+}
+/* Advanced PowerSearch box */
+td#mw-search-togglebox {
+       text-align: right;
+}
+table#mw-search-powertable {
+       width: 100%;
+}
+form#powersearch {
+       clear: both;
+}
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 e160579..6533db1 100644 (file)
 
                        this.displaySubmitting();
 
-                       this.api.newSection( this.title, subject, message, ok, err );
+                       this.api.newSection( this.title, subject, message ).done( ok ).fail( err );
                },
 
                /**
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 c1f1844..12888bd 100644 (file)
                                                } catch ( e ) {
                                                        // A user-defined callback raised an exception.
                                                        // Swallow it to protect our state machine!
-                                                       log( 'Exception thrown by job.error', e );
+                                                       log( 'Exception thrown by user callback', e );
                                                }
                                        }
                                }
index 282cf6f..a214cb3 100644 (file)
@@ -22,8 +22,9 @@
                        konqueror: [['>=', '4.11']],
                        docomo: false,
                        blackberry: false,
-                       ipod: false,
-                       iphone: false
+                       // Support for iOS 6 or higher. It has not been tested on iOS 5 or lower
+                       ipod: [['>=', 6]],
+                       iphone: [['>=', 6]]
                };
 
                if ( !$.client.test( map ) ) {
                ];
                $( 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.
diff --git a/skins/MonoBook/IE60Fixes.css b/skins/MonoBook/IE60Fixes.css
new file mode 100644 (file)
index 0000000..cd9399f
--- /dev/null
@@ -0,0 +1,125 @@
+/* 6.0 - only fixes */
+/* content area */
+/* workaround for various ie float bugs */
+div#column-content {
+       float: none;
+       margin-left: 0;
+       height: 1%;
+}
+
+div#column-content div#content {
+       margin-left: 12.2em;
+       margin-top: 3em;
+       height: 1%;
+}
+
+.rtl div#column-content div#content {
+       margin-right: 12.2em;
+       margin-left: 0;
+}
+
+div#column-one {
+       position: absolute;
+       top: 0;
+       left: 0;
+       z-index: 4;
+}
+
+.rtl div#column-one {
+       left: auto;
+       right: 0;
+}
+
+div#footer {
+       margin-left: 13.6em;
+       border-left: 1px solid #fabd23;
+}
+
+.rtl div#footer {
+       margin-left: 0;
+       margin-right: 13.6em;
+       border-left: none;
+       border-right: 1px solid #fabd23;
+}
+
+/* float/negative margin brokenness */
+* html div#footer {
+       margin-top: 0;
+}
+
+* html div#column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+
+/* the tabs */
+
+#p-cactions {
+       z-index: 3;
+}
+
+#p-cactions li {
+       padding-bottom: 0 !important;
+       border: none;
+       background-color: transparent;
+       cursor: default;
+       float: none !important;
+}
+
+#p-cactions li a {
+       display: inline-block !important;
+       vertical-align: top;
+       padding-bottom: 0;
+       border: solid #aaa;
+       border-width: 1px 1px 0;
+}
+
+#p-cactions li.selected a {
+       border-color: #fabd23;
+       padding-bottom: 0.17em;
+}
+
+#p-cactions li a:hover {
+       padding-bottom: 0.17em;
+}
+
+#p-navigation a {
+       display: inline-block;
+       width: 100%;
+}
+
+#portal-personaltools {
+       padding-bottom: 0.1em;
+}
+
+.rtl a.feedlink {
+       background-position: right;
+       padding-right: 0;
+       padding-left: 16px;
+}
+
+/* show the hand */
+#p-logo a,
+#p-logo a:hover {
+       cursor: pointer;
+}
+
+div.visualClear {
+       width: 100%;
+       line-height: 0;
+}
+
+textarea {
+       width: 96%;
+}
+
+#catlinks,
+div.tright,
+div.tleft {
+       position: relative;
+}
+
+/* bug 12846 */
+body.rtl #preftoc a, body.rtl #preftoc a:active {
+       float: left;
+}
diff --git a/skins/MonoBook/IE70Fixes.css b/skins/MonoBook/IE70Fixes.css
new file mode 100644 (file)
index 0000000..42f9ce6
--- /dev/null
@@ -0,0 +1,96 @@
+/* 7.0 - only fixes */
+/* content area */
+/* workaround for various ie float bugs */
+
+/* This bit is needed to make links clickable... WTF */
+div#column-content div#content {
+       margin-left: 12.2em;
+       margin-top: 3em;
+       height: 1%;
+}
+
+.rtl div#column-content div#content {
+       margin-right: 12.2em;
+       margin-left: 0;
+}
+
+.rtl div#column-one {
+       /* For some reason it tries to inherit the padding-top into every div,
+        * and I can't figure out how to get it back off.
+        * Margin works correctly for this use, though.
+        */
+       padding-top: 0;
+       margin-top: 160px;
+}
+
+/* These elements also have padding-left: 20px; in main.css, but in RTL mode this is flipped.
+ * That's good in normal browsers, but in IE7 it needs to not be flipped for some daft reason.
+ * Also clear the right margin (originally margin-left: 1em)
+ */
+li#pt-userpage, li#pt-anonuserpage, li#pt-login {
+       padding-left: 20px;
+       margin-right: 0;
+}
+
+.rtl a.feedlink {
+       background-position: right;
+       padding-right: 0;
+       padding-left: 16px;
+}
+
+/* the tabs */
+
+#p-cactions {
+       z-index: 3;
+}
+
+#p-cactions li {
+       padding-bottom: 0 !important;
+       border: none;
+       background-color: transparent;
+       cursor: default;
+       float: none !important;
+}
+
+#p-cactions li a {
+       display: inline-block !important;
+       vertical-align: top;
+       padding-bottom: 0;
+       border: solid #aaa;
+       border-width: 1px 1px 0;
+}
+
+#p-cactions li.selected a {
+       border-color: #fabd23;
+       padding-bottom: 0.17em;
+}
+
+#p-cactions li a:hover {
+       padding-bottom: 0.17em;
+}
+
+#p-navigation a {
+       display: inline-block;
+       width: 100%;
+}
+
+#portal-personaltools {
+       padding-bottom: 0.1em;
+}
+
+textarea {
+       width: 96%;
+}
+
+/*
+#catlinks,
+div.tright,
+div.tleft {
+       position: relative;
+}
+*/
+
+div#footer li {
+       /* Work around bug with inline <li> tags with right margins and nowrap */
+       margin-right: 0;
+}
diff --git a/skins/MonoBook/MonoBook.php b/skins/MonoBook/MonoBook.php
new file mode 100644 (file)
index 0000000..97c0cd8
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+/**
+ * MonoBook nouveau.
+ *
+ * Translated from gwicke's previous TAL template version to remove
+ * dependency on PHPTAL.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Skins
+ */
+
+$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
+$wgAutoloadClasses['SkinMonoBook'] = __DIR__ . '/SkinMonoBook.php';
+$wgAutoloadClasses['MonoBookTemplate'] = __DIR__ . '/MonoBookTemplate.php';
+$wgMessagesDirs['MonoBook'] = __DIR__ . '/i18n';
+
+// Register skin
+$wgValidSkinNames['monobook'] = 'MonoBook';
+
+// Register modules
+$wgResourceModules['skins.monobook.styles'] = array(
+       'styles' => array(
+               'main.css' => array( 'media' => 'screen' ),
+       ),
+       'remoteSkinPath' => 'MonoBook',
+       'localBasePath' => __DIR__,
+);
diff --git a/skins/MonoBook/MonoBookTemplate.php b/skins/MonoBook/MonoBookTemplate.php
new file mode 100644 (file)
index 0000000..373c004
--- /dev/null
@@ -0,0 +1,380 @@
+<?php
+/**
+ * MonoBook nouveau.
+ *
+ * Translated from gwicke's previous TAL template version to remove
+ * dependency on PHPTAL.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Skins
+ */
+
+/**
+ * @ingroup Skins
+ */
+class MonoBookTemplate extends BaseTemplate {
+
+       /**
+        * Template filter callback for MonoBook skin.
+        * Takes an associative array of data set from a SkinTemplate-based
+        * class, and a wrapper for MediaWiki's localization database, and
+        * outputs a formatted page.
+        *
+        * @access private
+        */
+       function execute() {
+               // Suppress warnings to prevent notices about missing indexes in $this->data
+               wfSuppressWarnings();
+
+               $this->html( 'headelement' );
+               ?><div id="globalWrapper">
+               <div id="column-content">
+                       <div id="content" class="mw-body-primary" role="main">
+                               <a id="top"></a>
+                               <?php
+                               if ( $this->data['sitenotice'] ) {
+                                       ?>
+                                       <div id="siteNotice"><?php
+                                       $this->html( 'sitenotice' )
+                                       ?></div><?php
+                               }
+                               ?>
+
+                               <h1 id="firstHeading" class="firstHeading" lang="<?php
+                               $this->data['pageLanguage'] =
+                                       $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
+                               $this->text( 'pageLanguage' );
+                               ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
+
+                               <div id="bodyContent" class="mw-body">
+                                       <div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
+                                       <div id="contentSub"<?php
+                                       $this->html( 'userlangattributes' ) ?>><?php $this->html( 'subtitle' )
+                                               ?></div>
+                                       <?php if ( $this->data['undelete'] ) { ?>
+                                               <div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
+                                       <?php
+}
+                                       ?><?php
+                                       if ( $this->data['newtalk'] ) {
+                                               ?>
+                                               <div class="usermessage"><?php $this->html( 'newtalk' ) ?></div>
+                                       <?php
+                                       }
+                                       ?>
+                                       <div id="jump-to-nav" class="mw-jump"><?php
+                                               $this->msg( 'jumpto' )
+                                               ?> <a href="#column-one"><?php
+                                                       $this->msg( 'jumptonavigation' )
+                                                       ?></a><?php
+                                               $this->msg( 'comma-separator' )
+                                               ?><a href="#searchInput"><?php
+                                                       $this->msg( 'jumptosearch' )
+                                                       ?></a></div>
+
+                                       <!-- start content -->
+                                       <?php $this->html( 'bodytext' ) ?>
+                                       <?php
+                                       if ( $this->data['catlinks'] ) {
+                                               $this->html( 'catlinks' );
+                                       }
+                                       ?>
+                                       <!-- end content -->
+                                       <?php
+                                       if ( $this->data['dataAfterContent'] ) {
+                                               $this->html( 'dataAfterContent'
+                                               );
+                                       }
+                                       ?>
+                                       <div class="visualClear"></div>
+                               </div>
+                       </div>
+               </div>
+               <div id="column-one"<?php $this->html( 'userlangattributes' ) ?>>
+                       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
+                       <?php $this->cactions(); ?>
+                       <div class="portlet" id="p-personal" role="navigation">
+                               <h3><?php $this->msg( 'personaltools' ) ?></h3>
+
+                               <div class="pBody">
+                                       <ul<?php $this->html( 'userlangattributes' ) ?>>
+                                               <?php foreach ( $this->getPersonalTools() as $key => $item ) { ?>
+                                                       <?php echo $this->makeListItem( $key, $item ); ?>
+
+                                               <?php
+}
+                                               ?>
+                                       </ul>
+                               </div>
+                       </div>
+                       <div class="portlet" id="p-logo" role="banner">
+                               <?php
+                               echo Html::element( 'a', array(
+                                               'href' => $this->data['nav_urls']['mainpage']['href'],
+                                               'style' => "background-image: url({$this->data['logopath']});" )
+                                       + Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ); ?>
+
+                       </div>
+                       <?php
+                       $this->renderPortals( $this->data['sidebar'] );
+                       ?>
+               </div><!-- end of the left (by default at least) column -->
+               <div class="visualClear"></div>
+               <?php
+               $validFooterIcons = $this->getFooterIcons( "icononly" );
+               $validFooterLinks = $this->getFooterLinks( "flat" ); // Additional footer links
+
+               if ( count( $validFooterIcons ) + count( $validFooterLinks ) > 0 ) {
+                       ?>
+                       <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
+                       <?php
+                       $footerEnd = '</div>';
+               } else {
+                       $footerEnd = '';
+               }
+
+               foreach ( $validFooterIcons as $blockName => $footerIcons ) {
+                       ?>
+                       <div id="f-<?php echo htmlspecialchars( $blockName ); ?>ico">
+                               <?php foreach ( $footerIcons as $icon ) { ?>
+                                       <?php echo $this->getSkin()->makeFooterIcon( $icon ); ?>
+
+                               <?php
+}
+                               ?>
+                       </div>
+               <?php
+               }
+
+               if ( count( $validFooterLinks ) > 0 ) {
+                       ?>
+                       <ul id="f-list">
+                               <?php
+                               foreach ( $validFooterLinks as $aLink ) {
+                                       ?>
+                                       <li id="<?php echo $aLink ?>"><?php $this->html( $aLink ) ?></li>
+                               <?php
+                               }
+                               ?>
+                       </ul>
+               <?php
+               }
+
+               echo $footerEnd;
+               ?>
+
+               </div>
+               <?php
+               $this->printTrail();
+               echo Html::closeElement( 'body' );
+               echo Html::closeElement( 'html' );
+               wfRestoreWarnings();
+       } // end of execute() method
+
+       /*************************************************************************************************/
+
+       /**
+        * @param array $sidebar
+        */
+       protected function renderPortals( $sidebar ) {
+               if ( !isset( $sidebar['SEARCH'] ) ) {
+                       $sidebar['SEARCH'] = true;
+               }
+               if ( !isset( $sidebar['TOOLBOX'] ) ) {
+                       $sidebar['TOOLBOX'] = true;
+               }
+               if ( !isset( $sidebar['LANGUAGES'] ) ) {
+                       $sidebar['LANGUAGES'] = true;
+               }
+
+               foreach ( $sidebar as $boxName => $content ) {
+                       if ( $content === false ) {
+                               continue;
+                       }
+
+                       if ( $boxName == 'SEARCH' ) {
+                               $this->searchBox();
+                       } elseif ( $boxName == 'TOOLBOX' ) {
+                               $this->toolbox();
+                       } elseif ( $boxName == 'LANGUAGES' ) {
+                               $this->languageBox();
+                       } else {
+                               $this->customBox( $boxName, $content );
+                       }
+               }
+       }
+
+       function searchBox() {
+               global $wgUseTwoButtonsSearchForm;
+               ?>
+               <div id="p-search" class="portlet" role="search">
+                       <h3><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
+
+                       <div id="searchBody" class="pBody">
+                               <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
+                                       <input type='hidden' name="title" value="<?php $this->text( 'searchtitle' ) ?>"/>
+                                       <?php echo $this->makeSearchInput( array( "id" => "searchInput" ) ); ?>
+
+                                       <?php
+                                       echo $this->makeSearchButton(
+                                               "go",
+                                               array( "id" => "searchGoButton", "class" => "searchButton" )
+                                       );
+
+                                       if ( $wgUseTwoButtonsSearchForm ) {
+                                               ?>&#160;
+                                               <?php echo $this->makeSearchButton(
+                                                       "fulltext",
+                                                       array( "id" => "mw-searchButton", "class" => "searchButton" )
+                                               );
+                                       } else {
+                                               ?>
+
+                                               <div><a href="<?php
+                                               $this->text( 'searchaction' )
+                                               ?>" rel="search"><?php $this->msg( 'powersearch-legend' ) ?></a></div><?php
+                                       } ?>
+
+                               </form>
+
+                               <?php $this->renderAfterPortlet( 'search' ); ?>
+                       </div>
+               </div>
+       <?php
+       }
+
+       /**
+        * Prints the cactions bar.
+        * Shared between MonoBook and Modern
+        */
+       function cactions() {
+               ?>
+               <div id="p-cactions" class="portlet" role="navigation">
+                       <h3><?php $this->msg( 'views' ) ?></h3>
+
+                       <div class="pBody">
+                               <ul><?php
+                                       foreach ( $this->data['content_actions'] as $key => $tab ) {
+                                               echo '
+                               ' . $this->makeListItem( $key, $tab );
+                                       } ?>
+
+                               </ul>
+                               <?php $this->renderAfterPortlet( 'cactions' ); ?>
+                       </div>
+               </div>
+       <?php
+       }
+
+       /*************************************************************************************************/
+       function toolbox() {
+               ?>
+               <div class="portlet" id="p-tb" role="navigation">
+                       <h3><?php $this->msg( 'toolbox' ) ?></h3>
+
+                       <div class="pBody">
+                               <ul>
+                                       <?php
+                                       foreach ( $this->getToolbox() as $key => $tbitem ) {
+                                               ?>
+                                               <?php echo $this->makeListItem( $key, $tbitem ); ?>
+
+                                       <?php
+                                       }
+                                       wfRunHooks( 'MonoBookTemplateToolboxEnd', array( &$this ) );
+                                       wfRunHooks( 'SkinTemplateToolboxEnd', array( &$this, true ) );
+                                       ?>
+                               </ul>
+                               <?php $this->renderAfterPortlet( 'tb' ); ?>
+                       </div>
+               </div>
+       <?php
+       }
+
+       /*************************************************************************************************/
+       function languageBox() {
+               if ( $this->data['language_urls'] !== false ) {
+                       ?>
+                       <div id="p-lang" class="portlet" role="navigation">
+                               <h3<?php $this->html( 'userlangattributes' ) ?>><?php $this->msg( 'otherlanguages' ) ?></h3>
+
+                               <div class="pBody">
+                                       <ul>
+                                               <?php foreach ( $this->data['language_urls'] as $key => $langlink ) { ?>
+                                                       <?php echo $this->makeListItem( $key, $langlink ); ?>
+
+                                               <?php
+}
+                                               ?>
+                                       </ul>
+
+                                       <?php $this->renderAfterPortlet( 'lang' ); ?>
+                               </div>
+                       </div>
+               <?php
+               }
+       }
+
+       /*************************************************************************************************/
+       /**
+        * @param string $bar
+        * @param array|string $cont
+        */
+       function customBox( $bar, $cont ) {
+               $portletAttribs = array(
+                       'class' => 'generated-sidebar portlet',
+                       'id' => Sanitizer::escapeId( "p-$bar" ),
+                       'role' => 'navigation'
+               );
+
+               $tooltip = Linker::titleAttrib( "p-$bar" );
+               if ( $tooltip !== false ) {
+                       $portletAttribs['title'] = $tooltip;
+               }
+               echo '  ' . Html::openElement( 'div', $portletAttribs );
+               $msgObj = wfMessage( $bar );
+               ?>
+
+               <h3><?php echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $bar ); ?></h3>
+               <div class='pBody'>
+                       <?php
+                       if ( is_array( $cont ) ) {
+                               ?>
+                               <ul>
+                                       <?php
+                                       foreach ( $cont as $key => $val ) {
+                                               ?>
+                                               <?php echo $this->makeListItem( $key, $val ); ?>
+
+                                       <?php
+                                       }
+                                       ?>
+                               </ul>
+                       <?php
+                       } else {
+                               # allow raw HTML block to be defined by extensions
+                               print $cont;
+                       }
+
+                       $this->renderAfterPortlet( $bar );
+                       ?>
+               </div>
+               </div>
+       <?php
+       }
+} // end of class
diff --git a/skins/MonoBook/SkinMonoBook.php b/skins/MonoBook/SkinMonoBook.php
new file mode 100644 (file)
index 0000000..16fbd00
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/**
+ * MonoBook nouveau.
+ *
+ * Translated from gwicke's previous TAL template version to remove
+ * dependency on PHPTAL.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Skins
+ */
+
+/**
+ * Inherit main code from SkinTemplate, set the CSS and template filter.
+ * @ingroup Skins
+ */
+class SkinMonoBook extends SkinTemplate {
+       /** Using MonoBook. */
+       public $skinname = 'monobook';
+       public $stylename = 'MonoBook';
+       public $template = 'MonoBookTemplate';
+
+       /**
+        * @param OutputPage $out
+        */
+       function setupSkinUserCss( OutputPage $out ) {
+               parent::setupSkinUserCss( $out );
+
+               $out->addModuleStyles( array( 'mediawiki.skinning.interface', 'skins.monobook.styles' ) );
+
+               // TODO: Migrate all of these
+               $out->addStyle( $this->stylename . '/IE60Fixes.css', 'screen', 'IE 6' );
+               $out->addStyle( $this->stylename . '/IE70Fixes.css', 'screen', 'IE 7' );
+       }
+}
diff --git a/skins/MonoBook/audio.png b/skins/MonoBook/audio.png
new file mode 100644 (file)
index 0000000..68c8768
Binary files /dev/null and b/skins/MonoBook/audio.png differ
diff --git a/skins/MonoBook/bullet.gif b/skins/MonoBook/bullet.gif
new file mode 100644 (file)
index 0000000..b43de48
Binary files /dev/null and b/skins/MonoBook/bullet.gif differ
diff --git a/skins/MonoBook/discussionitem_icon.gif b/skins/MonoBook/discussionitem_icon.gif
new file mode 100644 (file)
index 0000000..e3ca6d9
Binary files /dev/null and b/skins/MonoBook/discussionitem_icon.gif differ
diff --git a/skins/MonoBook/document.png b/skins/MonoBook/document.png
new file mode 100644 (file)
index 0000000..ee46a50
Binary files /dev/null and b/skins/MonoBook/document.png differ
diff --git a/skins/MonoBook/external-ltr.png b/skins/MonoBook/external-ltr.png
new file mode 100644 (file)
index 0000000..6308383
Binary files /dev/null and b/skins/MonoBook/external-ltr.png differ
diff --git a/skins/MonoBook/external-rtl.png b/skins/MonoBook/external-rtl.png
new file mode 100644 (file)
index 0000000..5313234
Binary files /dev/null and b/skins/MonoBook/external-rtl.png differ
diff --git a/skins/MonoBook/file_icon.gif b/skins/MonoBook/file_icon.gif
new file mode 100644 (file)
index 0000000..69dbeaf
Binary files /dev/null and b/skins/MonoBook/file_icon.gif differ
diff --git a/skins/MonoBook/headbg.jpg b/skins/MonoBook/headbg.jpg
new file mode 100644 (file)
index 0000000..5491c6e
Binary files /dev/null and b/skins/MonoBook/headbg.jpg differ
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 */"
+}
diff --git a/skins/MonoBook/i18n/en.json b/skins/MonoBook/i18n/en.json
new file mode 100644 (file)
index 0000000..0b27e6b
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "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..48d424c
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sanbec",
+                       "Vivaelcelta",
+                       "Fitoschido"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook-desc": "El tema clásico de MediaWiki desde 2004, cuyo nombre viene de la foto en blanco y negro de un libro en el fondo",
+       "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..02a0185
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Reza1615"
+               ]
+       },
+       "skinname-monobook": "مونوبوک",
+       "monobook-desc": "پوسته کلاسیک مدیاویکی از سال ۲۰۰۴ از عکس سیاه و سفید در زمینه صفحه  کتاب نام گرفت",
+       "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..95ba71a
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Robby"
+               ]
+       },
+       "skinname-monobook": "MonoBook",
+       "monobook-desc": "De klassesche Look vu MediaWiki zanter 2004, benannt no der Schwaarzwäissfoto vun engem Buch am Hannergrond vun der Säit",
+       "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..b08e117
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Siebrand",
+                       "Sjoerddebruin"
+               ]
+       },
+       "skinname-monobook": "Monobook",
+       "monobook-desc": "De klassieke MediaWiki-vormgeving sinds 2004, genoemd naar de zwart-witfoto van een boek op de achtergrond van de pagina",
+       "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..4c7031a
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sp5uhe",
+                       "Matma Rex"
+               ]
+       },
+       "skinname-monobook": "Książka",
+       "monobook-desc": "Klasyczna skórka MediaWiki, stworzona w 2004 roku, nazwana od czarno-białego zdjęcia książki w tle strony",
+       "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 */"
+}
diff --git a/skins/MonoBook/i18n/qqq.json b/skins/MonoBook/i18n/qqq.json
new file mode 100644 (file)
index 0000000..5056ddb
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Meno25",
+                       "Umherirrender",
+                       "Matma Rex"
+               ]
+       },
+       "skinname-monobook": "{{optional}}",
+       "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..c3b1d46
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AlexSm",
+                       "Kaganer",
+                       "Okras"
+               ]
+       },
+       "monobook-desc": "Классическая тема оформления MediaWiki, созданная в 2004 году и названая в честь чёрно-белой фотографии книги с фонового изображения страницы",
+       "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..289f50e
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Dim Grits",
+                       "Matma Rex",
+                       "Ата"
+               ]
+       },
+       "skinname-monobook": "Моно-книга",
+       "monobook-desc": "Класична тема оформлення MediaWiki з 2004 року, названа за чорно-білим фото книги на фоні сторінки",
+       "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..67566f6
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Minh Nguyen"
+               ]
+       },
+       "monobook-desc": "Giao diện MediaWiki cổ điển năm 2004, được đặt tên theo bức hình nền cuốn sách đen trắng",
+       "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/MonoBook/link_icon.gif b/skins/MonoBook/link_icon.gif
new file mode 100644 (file)
index 0000000..168c1a2
Binary files /dev/null and b/skins/MonoBook/link_icon.gif differ
diff --git a/skins/MonoBook/lock_icon.gif b/skins/MonoBook/lock_icon.gif
new file mode 100644 (file)
index 0000000..f71cd9b
Binary files /dev/null and b/skins/MonoBook/lock_icon.gif differ
diff --git a/skins/MonoBook/magnify-clip.png b/skins/MonoBook/magnify-clip.png
new file mode 100644 (file)
index 0000000..ffd7637
Binary files /dev/null and b/skins/MonoBook/magnify-clip.png differ
diff --git a/skins/MonoBook/mail_icon.gif b/skins/MonoBook/mail_icon.gif
new file mode 100644 (file)
index 0000000..cf5680d
Binary files /dev/null and b/skins/MonoBook/mail_icon.gif differ
diff --git a/skins/MonoBook/main.css b/skins/MonoBook/main.css
new file mode 100644 (file)
index 0000000..cb76ae3
--- /dev/null
@@ -0,0 +1,913 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+div#column-content {
+       width: 100%;
+       float: right;
+       margin: 0 0 .6em -12.2em;
+       padding: 0;
+}
+
+div#content {
+       margin: 2.8em 0 0 12.2em;
+       padding: 1em;
+       position: relative;
+       z-index: 2;
+}
+
+div#column-one {
+       padding-top: 160px;
+}
+
+/* Hide, but keep accessible for screen-readers */
+#column-one h2 {
+       position: absolute;
+       top: -9999px;
+}
+
+div#content {
+       background: white;
+       color: black;
+       border: 1px solid #aaa;
+       border-right: none;
+       line-height: 1.5em;
+}
+
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font: x-small sans-serif;
+       /* @embed */
+       background: #f9f9f9 url(headbg.jpg) 0 0 no-repeat;
+       color: black;
+       margin: 0;
+       padding: 0;
+       direction: ltr; /* Needed for RTL flipping */
+       unicode-bidi: embed;
+}
+
+/* scale back up to a sane default */
+div#globalWrapper {
+       font-size: 127%;
+       width: 100%;
+       margin: 0;
+       padding: 0;
+}
+
+/* general styles */
+a {
+       color: #002bb8;
+}
+
+a:visited {
+       color: #5a3696;
+}
+
+a.new,
+#p-personal a.new {
+       color: #cc2200;
+}
+
+ul {
+       list-style-type: square;
+       /* @embed */
+       list-style-image: url(bullet.gif);
+}
+
+input.historysubmit {
+       padding: 0 .3em .3em .3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.6em;
+}
+
+pre, .mw-code {
+       line-height: 1.1em;
+}
+
+#firstHeading {
+       padding-top: 0;
+}
+
+/*
+** the main content area
+*/
+
+#siteNotice {
+       font-size: 95%;
+       padding: 0 0.9em;
+}
+
+#localNotice {
+       margin: 0;
+}
+
+#siteNotice p {
+       margin: 0;
+       padding: 0;
+}
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float: right;
+       position: relative;
+       margin-left: 1em;
+       margin-bottom: 1em;
+       text-align: center;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+#bodyContent a.external {
+       /* @embed */
+       background: url(external-ltr.png) center right no-repeat;
+       padding-right: 13px;
+}
+
+#bodyContent a.external[href ^="https://"],
+.link-https {
+       /* @embed */
+       background: url(lock_icon.gif) center right no-repeat;
+       padding-right: 16px;
+}
+
+#bodyContent a.external[href ^="mailto:"],
+.link-mailto {
+       /* @embed */
+       background: url(mail_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+
+#bodyContent a.external[href ^="news:"] {
+       /* @embed */
+       background: url(news_icon.png) center right no-repeat;
+       padding-right: 18px;
+}
+
+#bodyContent a.external[href ^="ftp://"],
+.link-ftp {
+       /* @embed */
+       background: url(file_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+
+#bodyContent a.external[href ^="irc://"],
+#bodyContent a.external[href ^="ircs://"],
+.link-irc {
+       /* @embed */
+       background: url(discussionitem_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+       /* @embed */
+       background: url(audio.png) center right no-repeat;
+       padding-right: 13px;
+}
+
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+       /* @embed */
+       background: url(video.png) center right no-repeat;
+       padding-right: 13px;
+}
+
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+       /* @embed */
+       background: url(document.png) center right no-repeat;
+       padding-right: 12px;
+}
+
+/* Interwiki Styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #36b;
+}
+
+/* External links */
+#bodyContent a.external {
+       color: #36b;
+}
+
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 .5em;
+       padding: 0;
+       float: none;
+       width: 11.6em;
+       overflow: hidden;
+}
+
+.portlet h3 {
+       background: transparent;
+       padding: 0 1em 0 .5em;
+       display: inline;
+       height: 1em;
+       text-transform: lowercase;
+       font-size: 91%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+
+.pBody {
+       font-size: 95%;
+       background-color: white;
+       color: black;
+       border-collapse: collapse;
+       border: 1px solid #aaa;
+       padding: 0 .8em .3em .5em;
+}
+
+/* allows .pBody styles to wrap around content added via BaseTemplateAfterPortlet hook */
+.pBody:after {
+       content: '';
+       clear: both;
+       display: block;
+}
+
+.portlet ul {
+       line-height: 1.5em;
+       font-size: 95%;
+}
+
+.portlet li {
+       padding: 0;
+       margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+#p-logo {
+       top: 0;
+       left: 0;
+       position: absolute; /*needed to use z-index */
+       z-index: 3;
+       height: 155px;
+       width: 12em;
+       overflow: visible;
+}
+
+#p-logo h3 {
+       display: none;
+}
+
+#p-logo a,
+#p-logo a:hover {
+       display: block;
+       height: 155px;
+       width: 12.2em;
+       background-repeat: no-repeat;
+       background-position: 35% 50% !important;
+       text-decoration: none;
+}
+
+/*
+** Search portlet
+*/
+#p-search {
+       position: relative;
+       z-index: 3;
+}
+
+input.searchButton {
+       margin-top: 1px;
+       font-size: 95%;
+}
+
+#searchGoButton {
+       padding-left: .5em;
+       padding-right: .5em;
+       font-weight: bold;
+}
+
+#searchInput {
+       width: 10.9em;
+       margin: 0;
+       font-size: 95%;
+}
+
+#p-search .pBody {
+       padding: .5em .4em .4em .4em;
+       text-align: center;
+}
+
+#p-search #searchform div div {
+       margin-top: .4em;
+       font-size: 95%;
+}
+
+/*
+** the personal toolbar
+*/
+#p-personal {
+       position: absolute;
+       left: 0;
+       top: 0;
+       z-index: 3;
+}
+
+#p-personal {
+       width: 100%;
+       white-space: nowrap;
+       padding: 0;
+       margin: 0;
+       border: none;
+       background: none;
+       overflow: visible;
+       line-height: 1.2em;
+}
+
+#p-personal h3 {
+       display: none;
+}
+
+#p-personal .portlet,
+#p-personal .pBody {
+       z-index: 0;
+       padding: 0;
+       margin: 0;
+       border: none;
+       overflow: visible;
+       background: none;
+}
+
+/* this is the ul contained in the portlet */
+#p-personal ul {
+       border: none;
+       line-height: 1.4em;
+       color: #2f6fab;
+       padding: 0 2em 0 3em;
+       margin: 0;
+       text-align: right;
+       list-style-type: none;
+       list-style-image: none;
+       z-index: 0;
+       background: none;
+       cursor: default;
+}
+
+#p-personal li {
+       z-index: 0;
+       border: none;
+       padding: 0;
+       display: inline;
+       color: #2f6fab;
+       margin-left: 1em;
+       line-height: 1.2em;
+       background: none;
+}
+
+#p-personal li a {
+       text-decoration: none;
+       color: #005896;
+       padding-bottom: .2em;
+       background: none;
+}
+
+#p-personal li a:hover {
+       background-color: white;
+       padding-bottom: .2em;
+       text-decoration: none;
+}
+
+#p-personal li.active a:hover {
+       background-color: transparent;
+}
+
+/* The icon in front of the username / login link */
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login {
+       /* @embed */
+       background: url(user.gif) top left no-repeat;
+       padding-left: 20px;
+}
+
+#p-personal ul {
+       text-transform: lowercase;
+}
+
+/* Don't lowercase username or IP addresses (IPv6) */
+li#pt-userpage,
+li#pt-anonuserpage {
+       text-transform: none;
+}
+
+#p-personal li.active {
+       font-weight: bold;
+}
+
+/*
+** the page-related actions- page/talk, edit etc
+*/
+#p-cactions {
+       position: absolute;
+       top: 1.3em;
+       left: 11.5em;
+       margin: 0;
+       white-space: nowrap;
+       width: 76%;
+       line-height: 1.1em;
+       overflow: visible;
+       background: none;
+       border-collapse: collapse;
+       padding-left: 1em;
+       font-size: 95%;
+}
+
+#p-cactions ul {
+       list-style-type: none;
+       list-style-image: none;
+}
+
+#p-cactions li {
+       display: inline;
+       border: 1px solid #aaa;
+       border-bottom: none;
+       padding: 0 0 1em 0;
+       margin: 0 .3em 0 0;
+       overflow: visible;
+       background: white;
+}
+
+#p-cactions li.selected {
+       border-color: #fabd23;
+       font-weight: bold;
+}
+
+#p-cactions li a {
+       background-color: #fbfbfb;
+       color: #002bb8;
+       border: none;
+       padding: 0 .8em .3em;
+       position: relative;
+       z-index: 0;
+       margin: 0;
+       text-decoration: none;
+}
+
+#p-cactions li.selected a {
+       z-index: 3;
+       background-color: white;
+}
+
+#p-cactions .new a {
+       color: #ba0000;
+}
+
+#p-cactions li a:hover {
+       z-index: 3;
+       text-decoration: none;
+       background-color: white;
+}
+
+#p-cactions h3 {
+       display: none;
+}
+
+#p-cactions li.istalk {
+       margin-right: 0;
+}
+
+#p-cactions li.istalk a {
+       padding-right: .5em;
+}
+
+#p-cactions #ca-addsection a {
+       padding-left: .4em;
+       padding-right: .4em;
+}
+
+/* offsets to distinguish the tab groups */
+li#ca-talk {
+       margin-right: 1.6em;
+}
+
+li#ca-watch,
+li#ca-unwatch,
+li#ca-varlang-0,
+li#ca-print {
+       margin-left: 1.6em;
+}
+
+#p-cactions .pBody {
+       font-size: 1em;
+       background-color: transparent;
+       color: inherit;
+       border-collapse: inherit;
+       border: 0;
+       padding: 0;
+}
+
+#p-cactions li a {
+       text-transform: lowercase;
+}
+
+#p-lang {
+       position: relative;
+       z-index: 3;
+}
+
+/* Override text-transform on languages where capitalization is significant */
+.capitalize-all-nouns .portlet h3,
+.capitalize-all-nouns #p-personal ul,
+.capitalize-all-nouns #p-cactions ul li a {
+       text-transform: none;
+}
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+       color: #999;
+}
+
+/*
+** footer
+*/
+div#footer {
+       background-color: white;
+       border-top: 1px solid #fabd23;
+       border-bottom: 1px solid #fabd23;
+       margin: .6em 0 1em 0;
+       overflow: hidden;
+       padding: .4em 0 .3em 0;
+       text-align: center;
+       font-size: 90%;
+}
+
+div#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+.mw-htmlform-submit {
+       font-weight: bold;
+       padding-left: .3em;
+       padding-right: .3em;
+       margin-right: 2em;
+}
+
+/* js pref toc */
+#preftoc {
+       margin: 0;
+       padding: 0;
+       width: 100%;
+       clear: both;
+}
+
+#preftoc li {
+       background-color: #f0f0f0;
+       color: #000;
+}
+
+#preftoc li {
+       margin: 1px -2px 1px 2px;
+       float: left;
+       padding: 2px 0 3px 0;
+       border: 1px solid #fff;
+       border-right-color: #716f64;
+       border-bottom: 0;
+       position: relative;
+       white-space: nowrap;
+       list-style-type: none;
+       list-style-image: none;
+       z-index: 3;
+}
+
+#preftoc li.selected {
+       font-weight: bold;
+       background-color: #f9f9f9;
+       border: 1px solid #aaa;
+       border-bottom: none;
+       cursor: default;
+       top: 1px;
+       padding-top: 2px;
+       margin-right: -3px;
+}
+
+#preftoc > li.selected {
+       top: 2px;
+}
+
+#preftoc a,
+#preftoc a:active {
+       display: block;
+       color: #000;
+       padding: 0 .7em;
+       position: relative;
+       text-decoration: none;
+}
+
+#preftoc li.selected a {
+       cursor: default;
+       text-decoration: none;
+}
+
+#preferences {
+       margin: 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em;
+       background-color: #F9F9F9;
+}
+
+.prefsection {
+       border: none;
+       padding: 0;
+       margin: 0;
+}
+
+.prefsection legend {
+       font-weight: bold;
+}
+
+.prefsection table, .prefsection legend {
+       background-color: #F9F9F9;
+}
+
+.mainLegend {
+       display: none;
+}
+
+td.htmlform-tip {
+       font-size: x-small;
+       padding: .2em 2em;
+       color: #666;
+}
+
+.preferences-login {
+       clear: both;
+       margin-bottom: 1.5em;
+}
+
+.prefcache {
+       font-size: 90%;
+       margin-top: 2em;
+}
+
+#userloginprompt, #languagelinks {
+       font-size: 85%;
+}
+
+#login-sectiontip {
+       font-size: 85%;
+       line-height: 1.2;
+       padding-top: 2em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+       font-weight: bold;
+}
+
+/**
+ * This was originally added by Gabriel Wicke in r3681 (committed on 25 May 2004)
+ * with the commit message "tweaks to page history".
+ * Unlike the other IE/Mac fixes that used to be present here, this seems to get
+ * applied on more modern browsers, so let's keep it here until someone has the
+ * time to properly test it out.
+ */
+#pagehistory li.selected {
+       position: relative;
+}
+
+.redirectText {
+       font-size: 150%;
+       margin: 5px;
+}
+
+div.patrollink {
+       clear: both;
+}
+
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+span.updatedmarker {
+       color: black;
+       background-color: #0f0;
+}
+
+.editExternally {
+       border: 1px solid gray;
+       background-color: #ffffff;
+       padding: 3px;
+       margin-top: 0.5em;
+       float: left;
+       font-size: small;
+       text-align: center;
+}
+
+.editExternallyHelp {
+       font-style: italic;
+       color: gray;
+}
+
+.toggle {
+       margin-left: 2em;
+       text-indent: -2em;
+}
+
+/* @bug 1714 */
+input#wpSave,
+input#wpDiff {
+       margin-right: 0.33em;
+}
+
+#wpSave {
+       font-weight: bold;
+}
+
+/* noarticletext */
+div.noarticletext {
+       border: 1px solid #ccc;
+       background: #fff;
+       padding: .2em 1em;
+       color: #000;
+}
+
+div#searchTargetContainer {
+       left: 10px;
+       top: 10px;
+       width: 90%;
+       background: white;
+}
+
+div#searchTarget {
+       padding: 3px;
+       margin: 5px;
+       background: #F0F0F0;
+       border: solid 1px blue;
+}
+
+div#searchTarget ul li {
+       list-style-type: none;
+       list-style-image: none;
+}
+
+div#searchTarget ul li:before {
+       color: orange;
+       content: "\00BB \0020";
+}
+
+div#searchTargetHide {
+       float: right;
+       border: solid 1px black;
+       background: #DCDCDC;
+       padding: 2px;
+}
+
+#powersearch p {
+       margin-top: 0;
+}
+
+div.multipageimagenavbox {
+       border: solid 1px silver;
+       padding: 4px;
+       margin: 1em;
+       background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+       border: none;
+       margin-left: 2em;
+       margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+       margin: 6px;
+}
+
+table.multipageimage td {
+       text-align: center;
+}
+
+.templatesUsed {
+       margin-top: 1.5em;
+}
+
+.mw-summary-preview {
+       margin: 0.1em 0;
+}
+
+/* Friendlier slave lag warnings */
+div.mw-lag-warn-normal,
+div.mw-lag-warn-high {
+       padding: 3px;
+       text-align: center;
+       margin: 3px auto;
+}
+
+div.mw-lag-warn-normal {
+       border: 1px solid #FFCC66;
+       background-color: #FFFFCC;
+}
+
+div.mw-lag-warn-high {
+       font-weight: bold;
+       border: 2px solid #FF0033;
+       background-color: #FFCCCC;
+}
+
+.MediaTransformError {
+       background-color: #ccc;
+       padding: 0.1em;
+}
+
+.MediaTransformError td {
+       text-align: center;
+       vertical-align: middle;
+       font-size: 90%;
+}
+
+/* God-damned hack for the crappy layout */
+.os-suggest {
+       font-size: 127%;
+}
+
+/* Sometimes people don't want personal tools to be lowercase! */
+.no-text-transform {
+       text-transform: none;
+}
+
+/* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */
+.tipsy {
+       font-size: 127%;
+}
+
+/* mediawiki.notification */
+.skin-monobook .mw-notification {
+       box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.125);
+}
diff --git a/skins/MonoBook/news_icon.png b/skins/MonoBook/news_icon.png
new file mode 100644 (file)
index 0000000..4d3cb47
Binary files /dev/null and b/skins/MonoBook/news_icon.png differ
diff --git a/skins/MonoBook/required.gif b/skins/MonoBook/required.gif
new file mode 100644 (file)
index 0000000..bd71976
Binary files /dev/null and b/skins/MonoBook/required.gif differ
diff --git a/skins/MonoBook/user.gif b/skins/MonoBook/user.gif
new file mode 100644 (file)
index 0000000..34b4839
Binary files /dev/null and b/skins/MonoBook/user.gif differ
diff --git a/skins/MonoBook/video.png b/skins/MonoBook/video.png
new file mode 100644 (file)
index 0000000..d86dbe0
Binary files /dev/null and b/skins/MonoBook/video.png differ
diff --git a/skins/MonoBook/wiki-indexed.png b/skins/MonoBook/wiki-indexed.png
new file mode 100644 (file)
index 0000000..799ebac
Binary files /dev/null and b/skins/MonoBook/wiki-indexed.png differ
diff --git a/skins/MonoBook/wiki.png b/skins/MonoBook/wiki.png
new file mode 100644 (file)
index 0000000..8c42118
Binary files /dev/null and b/skins/MonoBook/wiki.png differ
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.
diff --git a/skins/Vector/SkinVector.php b/skins/Vector/SkinVector.php
new file mode 100644 (file)
index 0000000..237a241
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Vector - Modern version of MonoBook with fresh look and many usability
+ * improvements.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Skins
+ */
+
+/**
+ * SkinTemplate class for Vector skin
+ * @ingroup Skins
+ */
+class SkinVector extends SkinTemplate {
+       public $skinname = 'vector';
+       public $stylename = 'Vector';
+       public $template = 'VectorTemplate';
+
+       protected static $bodyClasses = array( 'vector-animateLayout' );
+
+       /**
+        * Initializes output page and sets up skin-specific parameters
+        * @param OutputPage $out Object to initialize
+        */
+       public function initPage( OutputPage $out ) {
+               global $wgLocalStylePath;
+
+               parent::initPage( $out );
+
+               // Append CSS which includes IE only behavior fixes for hover support -
+               // this is better than including this in a CSS file since it doesn't
+               // wait for the CSS file to load before fetching the HTC file.
+               $min = $this->getRequest()->getFuzzyBool( 'debug' ) ? '' : '.min';
+               $out->addHeadItem( 'csshover',
+                       '<!--[if lt IE 7]><style type="text/css">body{behavior:url("' .
+                               htmlspecialchars( $wgLocalStylePath ) .
+                               "/{$this->stylename}/csshover{$min}.htc\")}</style><![endif]-->"
+               );
+
+               $out->addModules( array( 'skins.vector.js' ) );
+       }
+
+       /**
+        * Loads skin and user CSS files.
+        * @param OutputPage $out
+        */
+       function setupSkinUserCss( OutputPage $out ) {
+               parent::setupSkinUserCss( $out );
+
+               $styles = array( 'mediawiki.skinning.interface', 'skins.vector.styles' );
+               wfRunHooks( 'SkinVectorStyleModules', array( $this, &$styles ) );
+               $out->addModuleStyles( $styles );
+       }
+
+       /**
+        * Adds classes to the body element.
+        *
+        * @param OutputPage $out
+        * @param array &$bodyAttrs Array of attributes that will be set on the body element
+        */
+       function addToBodyAttributes( $out, &$bodyAttrs ) {
+               if ( isset( $bodyAttrs['class'] ) && strlen( $bodyAttrs['class'] ) > 0 ) {
+                       $bodyAttrs['class'] .= ' ' . implode( ' ', static::$bodyClasses );
+               } else {
+                       $bodyAttrs['class'] = implode( ' ', static::$bodyClasses );
+               }
+       }
+}
diff --git a/skins/Vector/Vector.php b/skins/Vector/Vector.php
new file mode 100644 (file)
index 0000000..be8719a
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Vector - Modern version of MonoBook with fresh look and many usability
+ * improvements.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Skins
+ */
+
+$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
+$wgAutoloadClasses['SkinVector'] = __DIR__ . '/SkinVector.php';
+$wgAutoloadClasses['VectorTemplate'] = __DIR__ . '/VectorTemplate.php';
+$wgMessagesDirs['Vector'] = __DIR__ . '/i18n';
+
+// Register skin
+$wgValidSkinNames['vector'] = 'Vector';
+
+// Register modules
+$wgResourceModules['skins.vector.styles'] = array(
+       'styles' => array(
+               'screen.less' => array( 'media' => 'screen' ),
+               'screen-hd.less' => array( 'media' => 'screen and (min-width: 982px)' ),
+       ),
+       'remoteSkinPath' => 'Vector',
+       'localBasePath' => __DIR__,
+);
+$wgResourceModules['skins.vector.js'] = array(
+       'scripts' => array(
+               'collapsibleTabs.js',
+               'vector.js',
+       ),
+       'position' => 'top',
+       'dependencies' => array(
+               'jquery.throttle-debounce',
+               'jquery.tabIndex',
+       ),
+       'remoteSkinPath' => 'Vector',
+       'localBasePath' => __DIR__,
+);
diff --git a/skins/Vector/VectorTemplate.php b/skins/Vector/VectorTemplate.php
new file mode 100644 (file)
index 0000000..7dc376a
--- /dev/null
@@ -0,0 +1,596 @@
+<?php
+/**
+ * Vector - Modern version of MonoBook with fresh look and many usability
+ * improvements.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Skins
+ */
+
+/**
+ * QuickTemplate class for Vector skin
+ * @ingroup Skins
+ */
+class VectorTemplate extends BaseTemplate {
+       /* Functions */
+
+       /**
+        * Outputs the entire contents of the (X)HTML page
+        */
+       public function execute() {
+               global $wgVectorUseIconWatch;
+
+               // Build additional attributes for navigation urls
+               $nav = $this->data['content_navigation'];
+
+               if ( $wgVectorUseIconWatch ) {
+                       $mode = $this->getSkin()->getUser()->isWatched( $this->getSkin()->getRelevantTitle() )
+                               ? 'unwatch'
+                               : 'watch';
+
+                       if ( isset( $nav['actions'][$mode] ) ) {
+                               $nav['views'][$mode] = $nav['actions'][$mode];
+                               $nav['views'][$mode]['class'] = rtrim( 'icon ' . $nav['views'][$mode]['class'], ' ' );
+                               $nav['views'][$mode]['primary'] = true;
+                               unset( $nav['actions'][$mode] );
+                       }
+               }
+
+               $xmlID = '';
+               foreach ( $nav as $section => $links ) {
+                       foreach ( $links as $key => $link ) {
+                               if ( $section == 'views' && !( isset( $link['primary'] ) && $link['primary'] ) ) {
+                                       $link['class'] = rtrim( 'collapsible ' . $link['class'], ' ' );
+                               }
+
+                               $xmlID = isset( $link['id'] ) ? $link['id'] : 'ca-' . $xmlID;
+                               $nav[$section][$key]['attributes'] =
+                                       ' id="' . Sanitizer::escapeId( $xmlID ) . '"';
+                               if ( $link['class'] ) {
+                                       $nav[$section][$key]['attributes'] .=
+                                               ' class="' . htmlspecialchars( $link['class'] ) . '"';
+                                       unset( $nav[$section][$key]['class'] );
+                               }
+                               if ( isset( $link['tooltiponly'] ) && $link['tooltiponly'] ) {
+                                       $nav[$section][$key]['key'] =
+                                               Linker::tooltip( $xmlID );
+                               } else {
+                                       $nav[$section][$key]['key'] =
+                                               Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( $xmlID ) );
+                               }
+                       }
+               }
+               $this->data['namespace_urls'] = $nav['namespaces'];
+               $this->data['view_urls'] = $nav['views'];
+               $this->data['action_urls'] = $nav['actions'];
+               $this->data['variant_urls'] = $nav['variants'];
+
+               // Reverse horizontally rendered navigation elements
+               if ( $this->data['rtl'] ) {
+                       $this->data['view_urls'] =
+                               array_reverse( $this->data['view_urls'] );
+                       $this->data['namespace_urls'] =
+                               array_reverse( $this->data['namespace_urls'] );
+                       $this->data['personal_urls'] =
+                               array_reverse( $this->data['personal_urls'] );
+               }
+               // Output HTML Page
+               $this->html( 'headelement' );
+               ?>
+               <div id="mw-page-base" class="noprint"></div>
+               <div id="mw-head-base" class="noprint"></div>
+               <div id="content" class="mw-body" role="main">
+                       <a id="top"></a>
+
+                       <div id="mw-js-message" style="display:none;"<?php $this->html( 'userlangattributes' ) ?>></div>
+                       <?php
+                       if ( $this->data['sitenotice'] ) {
+                               ?>
+                               <div id="siteNotice"><?php $this->html( 'sitenotice' ) ?></div>
+                       <?php
+                       }
+                       ?>
+                       <h1 id="firstHeading" class="firstHeading" lang="<?php
+                       $this->data['pageLanguage'] =
+                               $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
+                       $this->text( 'pageLanguage' );
+                       ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
+                       <?php $this->html( 'prebodyhtml' ) ?>
+                       <div id="bodyContent" class="mw-body-content">
+                               <?php
+                               if ( $this->data['isarticle'] ) {
+                                       ?>
+                                       <div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
+                               <?php
+                               }
+                               ?>
+                               <div id="contentSub"<?php
+                               $this->html( 'userlangattributes' )
+                               ?>><?php $this->html( 'subtitle' ) ?></div>
+                               <?php
+                               if ( $this->data['undelete'] ) {
+                                       ?>
+                                       <div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
+                               <?php
+                               }
+                               ?>
+                               <?php
+                               if ( $this->data['newtalk'] ) {
+                                       ?>
+                                       <div class="usermessage"><?php $this->html( 'newtalk' ) ?></div>
+                               <?php
+                               }
+                               ?>
+                               <div id="jump-to-nav" class="mw-jump">
+                                       <?php $this->msg( 'jumpto' ) ?>
+                                       <a href="#mw-navigation"><?php
+                                               $this->msg( 'jumptonavigation' )
+                                               ?></a><?php
+                                       $this->msg( 'comma-separator' )
+                                       ?>
+                                       <a href="#p-search"><?php $this->msg( 'jumptosearch' ) ?></a>
+                               </div>
+                               <?php $this->html( 'bodycontent' ) ?>
+                               <?php
+                               if ( $this->data['printfooter'] ) {
+                                       ?>
+                                       <div class="printfooter">
+                                               <?php $this->html( 'printfooter' ); ?>
+                                       </div>
+                               <?php
+                               }
+                               ?>
+                               <?php
+                               if ( $this->data['catlinks'] ) {
+                                       ?>
+                                       <?php
+                                       $this->html( 'catlinks' );
+                                       ?>
+                               <?php
+                               }
+                               ?>
+                               <?php
+                               if ( $this->data['dataAfterContent'] ) {
+                                       ?>
+                                       <?php
+                                       $this->html( 'dataAfterContent' );
+                                       ?>
+                               <?php
+                               }
+                               ?>
+                               <div class="visualClear"></div>
+                               <?php $this->html( 'debughtml' ); ?>
+                       </div>
+               </div>
+               <div id="mw-navigation">
+                       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
+
+                       <div id="mw-head">
+                               <?php $this->renderNavigation( 'PERSONAL' ); ?>
+                               <div id="left-navigation">
+                                       <?php $this->renderNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?>
+                               </div>
+                               <div id="right-navigation">
+                                       <?php $this->renderNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?>
+                               </div>
+                       </div>
+                       <div id="mw-panel">
+                               <div id="p-logo" role="banner"><a style="background-image: url(<?php
+                                       $this->text( 'logopath' )
+                                       ?>);" href="<?php
+                                       echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] )
+                                       ?>" <?php
+                                       echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) )
+                                       ?>></a></div>
+                               <?php $this->renderPortals( $this->data['sidebar'] ); ?>
+                       </div>
+               </div>
+               <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
+                       <?php
+                       foreach ( $this->getFooterLinks() as $category => $links ) {
+                               ?>
+                               <ul id="footer-<?php
+                               echo $category
+                               ?>">
+                                       <?php
+                                       foreach ( $links as $link ) {
+                                               ?>
+                                               <li id="footer-<?php
+                                               echo $category
+                                               ?>-<?php
+                                               echo $link
+                                               ?>"><?php
+                                                       $this->html( $link )
+                                                       ?></li>
+                                       <?php
+                                       }
+                                       ?>
+                               </ul>
+                       <?php
+                       }
+                       ?>
+                       <?php $footericons = $this->getFooterIcons( "icononly" );
+                       if ( count( $footericons ) > 0 ) {
+                               ?>
+                               <ul id="footer-icons" class="noprint">
+                                       <?php
+                                       foreach ( $footericons as $blockName => $footerIcons ) {
+                                               ?>
+                                               <li id="footer-<?php
+                                               echo htmlspecialchars( $blockName ); ?>ico">
+                                                       <?php
+                                                       foreach ( $footerIcons as $icon ) {
+                                                               ?>
+                                                               <?php
+                                                               echo $this->getSkin()->makeFooterIcon( $icon );
+                                                               ?>
+
+                                                       <?php
+                                                       }
+                                                       ?>
+                                               </li>
+                                       <?php
+                                       }
+                                       ?>
+                               </ul>
+                       <?php
+                       }
+                       ?>
+                       <div style="clear:both"></div>
+               </div>
+               <?php $this->printTrail(); ?>
+
+       </body>
+</html>
+       <?php
+       }
+
+       /**
+        * Render a series of portals
+        *
+        * @param array $portals
+        */
+       protected function renderPortals( $portals ) {
+               // Force the rendering of the following portals
+               if ( !isset( $portals['SEARCH'] ) ) {
+                       $portals['SEARCH'] = true;
+               }
+               if ( !isset( $portals['TOOLBOX'] ) ) {
+                       $portals['TOOLBOX'] = true;
+               }
+               if ( !isset( $portals['LANGUAGES'] ) ) {
+                       $portals['LANGUAGES'] = true;
+               }
+               // Render portals
+               foreach ( $portals as $name => $content ) {
+                       if ( $content === false ) {
+                               continue;
+                       }
+
+                       switch ( $name ) {
+                               case 'SEARCH':
+                                       break;
+                               case 'TOOLBOX':
+                                       $this->renderPortal( 'tb', $this->getToolbox(), 'toolbox', 'SkinTemplateToolboxEnd' );
+                                       break;
+                               case 'LANGUAGES':
+                                       if ( $this->data['language_urls'] !== false ) {
+                                               $this->renderPortal( 'lang', $this->data['language_urls'], 'otherlanguages' );
+                                       }
+                                       break;
+                               default:
+                                       $this->renderPortal( $name, $content );
+                                       break;
+                       }
+               }
+       }
+
+       /**
+        * @param string $name
+        * @param array $content
+        * @param null|string $msg
+        * @param null|string|array $hook
+        */
+       protected function renderPortal( $name, $content, $msg = null, $hook = null ) {
+               if ( $msg === null ) {
+                       $msg = $name;
+               }
+               $msgObj = wfMessage( $msg );
+               ?>
+               <div class="portal" role="navigation" id='<?php
+               echo Sanitizer::escapeId( "p-$name" )
+               ?>'<?php
+               echo Linker::tooltip( 'p-' . $name )
+               ?> aria-labelledby='<?php echo Sanitizer::escapeId( "p-$name-label" ) ?>'>
+                       <h3<?php
+                       $this->html( 'userlangattributes' )
+                       ?> id='<?php
+                       echo Sanitizer::escapeId( "p-$name-label" )
+                       ?>'><?php
+                               echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg );
+                               ?></h3>
+
+                       <div class="body">
+                               <?php
+                               if ( is_array( $content ) ) {
+                                       ?>
+                                       <ul>
+                                               <?php
+                                               foreach ( $content as $key => $val ) {
+                                                       ?>
+                                                       <?php echo $this->makeListItem( $key, $val ); ?>
+
+                                               <?php
+                                               }
+                                               if ( $hook !== null ) {
+                                                       wfRunHooks( $hook, array( &$this, true ) );
+                                               }
+                                               ?>
+                                       </ul>
+                               <?php
+                               } else {
+                                       ?>
+                                       <?php
+                                       echo $content; /* Allow raw HTML block to be defined by extensions */
+                               }
+
+                               $this->renderAfterPortlet( $name );
+                               ?>
+                       </div>
+               </div>
+       <?php
+       }
+
+       /**
+        * Render one or more navigations elements by name, automatically reveresed
+        * when UI is in RTL mode
+        *
+        * @param array $elements
+        */
+       protected function renderNavigation( $elements ) {
+               global $wgVectorUseSimpleSearch;
+
+               // If only one element was given, wrap it in an array, allowing more
+               // flexible arguments
+               if ( !is_array( $elements ) ) {
+                       $elements = array( $elements );
+                       // If there's a series of elements, reverse them when in RTL mode
+               } elseif ( $this->data['rtl'] ) {
+                       $elements = array_reverse( $elements );
+               }
+               // Render elements
+               foreach ( $elements as $name => $element ) {
+                       switch ( $element ) {
+                               case 'NAMESPACES':
+                                       ?>
+                                       <div id="p-namespaces" role="navigation" class="vectorTabs<?php
+                                       if ( count( $this->data['namespace_urls'] ) == 0 ) {
+                                               echo ' emptyPortlet';
+                                       }
+                                       ?>" aria-labelledby="p-namespaces-label">
+                                               <h3 id="p-namespaces-label"><?php $this->msg( 'namespaces' ) ?></h3>
+                                               <ul<?php $this->html( 'userlangattributes' ) ?>>
+                                                       <?php
+                                                       foreach ( $this->data['namespace_urls'] as $link ) {
+                                                               ?>
+                                                               <li <?php
+                                                               echo $link['attributes']
+                                                               ?>><span><a href="<?php
+                                                                               echo htmlspecialchars( $link['href'] )
+                                                                               ?>" <?php
+                                                                               echo $link['key']
+                                                                               ?>><?php
+                                                                                       echo htmlspecialchars( $link['text'] )
+                                                                                       ?></a></span></li>
+                                                       <?php
+                                                       }
+                                                       ?>
+                                               </ul>
+                                       </div>
+                                       <?php
+                                       break;
+                               case 'VARIANTS':
+                                       ?>
+                                       <div id="p-variants" role="navigation" class="vectorMenu<?php
+                                       if ( count( $this->data['variant_urls'] ) == 0 ) {
+                                               echo ' emptyPortlet';
+                                       }
+                                       ?>" aria-labelledby="p-variants-label">
+                                               <h3 id="mw-vector-current-variant">
+                                                       <?php
+                                                       foreach ( $this->data['variant_urls'] as $link ) {
+                                                               ?>
+                                                               <?php
+                                                               if ( stripos( $link['attributes'], 'selected' ) !== false ) {
+                                                                       ?>
+                                                                       <?php
+                                                                       echo htmlspecialchars( $link['text'] )
+                                                                       ?>
+                                                               <?php
+                                                               }
+                                                               ?>
+                                                       <?php
+                                                       }
+                                                       ?>
+                                               </h3>
+
+                                               <h3 id="p-variants-label"><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h3>
+
+                                               <div class="menu">
+                                                       <ul>
+                                                               <?php
+                                                               foreach ( $this->data['variant_urls'] as $link ) {
+                                                                       ?>
+                                                                       <li<?php
+                                                                       echo $link['attributes']
+                                                                       ?>><a href="<?php
+                                                                               echo htmlspecialchars( $link['href'] )
+                                                                               ?>" lang="<?php
+                                                                               echo htmlspecialchars( $link['lang'] )
+                                                                               ?>" hreflang="<?php
+                                                                               echo htmlspecialchars( $link['hreflang'] )
+                                                                               ?>" <?php
+                                                                               echo $link['key']
+                                                                               ?>><?php
+                                                                                       echo htmlspecialchars( $link['text'] )
+                                                                                       ?></a></li>
+                                                               <?php
+                                                               }
+                                                               ?>
+                                                       </ul>
+                                               </div>
+                                       </div>
+                                       <?php
+                                       break;
+                               case 'VIEWS':
+                                       ?>
+                                       <div id="p-views" role="navigation" class="vectorTabs<?php
+                                       if ( count( $this->data['view_urls'] ) == 0 ) {
+                                               echo ' emptyPortlet';
+                                       }
+                                       ?>" aria-labelledby="p-views-label">
+                                               <h3 id="p-views-label"><?php $this->msg( 'views' ) ?></h3>
+                                               <ul<?php
+                                               $this->html( 'userlangattributes' )
+                                               ?>>
+                                                       <?php
+                                                       foreach ( $this->data['view_urls'] as $link ) {
+                                                               ?>
+                                                               <li<?php
+                                                               echo $link['attributes']
+                                                               ?>><span><a href="<?php
+                                                                               echo htmlspecialchars( $link['href'] )
+                                                                               ?>" <?php
+                                                                               echo $link['key']
+                                                                               ?>><?php
+                                                                                       // $link['text'] can be undefined - bug 27764
+                                                                                       if ( array_key_exists( 'text', $link ) ) {
+                                                                                               echo array_key_exists( 'img', $link )
+                                                                                                       ? '<img src="' . $link['img'] . '" alt="' . $link['text'] . '" />'
+                                                                                                       : htmlspecialchars( $link['text'] );
+                                                                                       }
+                                                                                       ?></a></span></li>
+                                                       <?php
+                                                       }
+                                                       ?>
+                                               </ul>
+                                       </div>
+                                       <?php
+                                       break;
+                               case 'ACTIONS':
+                                       ?>
+                                       <div id="p-cactions" role="navigation" class="vectorMenu<?php
+                                       if ( count( $this->data['action_urls'] ) == 0 ) {
+                                               echo ' emptyPortlet';
+                                       }
+                                       ?>" aria-labelledby="p-cactions-label">
+                                               <h3 id="p-cactions-label"><span><?php $this->msg( 'vector-more-actions' ) ?></span><a href="#"></a></h3>
+
+                                               <div class="menu">
+                                                       <ul<?php $this->html( 'userlangattributes' ) ?>>
+                                                               <?php
+                                                               foreach ( $this->data['action_urls'] as $link ) {
+                                                                       ?>
+                                                                       <li<?php
+                                                                       echo $link['attributes']
+                                                                       ?>>
+                                                                               <a href="<?php
+                                                                               echo htmlspecialchars( $link['href'] )
+                                                                               ?>" <?php
+                                                                               echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] )
+                                                                                       ?></a>
+                                                                       </li>
+                                                               <?php
+                                                               }
+                                                               ?>
+                                                       </ul>
+                                               </div>
+                                       </div>
+                                       <?php
+                                       break;
+                               case 'PERSONAL':
+                                       ?>
+                                       <div id="p-personal" role="navigation" class="<?php
+                                       if ( count( $this->data['personal_urls'] ) == 0 ) {
+                                               echo ' emptyPortlet';
+                                       }
+                                       ?>" aria-labelledby="p-personal-label">
+                                               <h3 id="p-personal-label"><?php $this->msg( 'personaltools' ) ?></h3>
+                                               <ul<?php $this->html( 'userlangattributes' ) ?>>
+                                                       <?php
+                                                       $personalTools = $this->getPersonalTools();
+                                                       foreach ( $personalTools as $key => $item ) {
+                                                               echo $this->makeListItem( $key, $item );
+                                                       }
+                                                       ?>
+                                               </ul>
+                                       </div>
+                                       <?php
+                                       break;
+                               case 'SEARCH':
+                                       ?>
+                                       <div id="p-search" role="search">
+                                               <h3<?php $this->html( 'userlangattributes' ) ?>>
+                                                       <label for="searchInput"><?php $this->msg( 'search' ) ?></label>
+                                               </h3>
+
+                                               <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
+                                                       <?php
+                                                       if ($wgVectorUseSimpleSearch) {
+                                                       ?>
+                                                       <div id="simpleSearch">
+                                                               <?php
+                                                       } else {
+                                                       ?>
+                                                               <div>
+                                                                       <?php
+                                                       }
+                                                       ?>
+                                                       <?php
+                                                       echo $this->makeSearchInput( array( 'id' => 'searchInput' ) );
+                                                       echo Html::hidden( 'title', $this->get( 'searchtitle' ) );
+                                                       // We construct two buttons (for 'go' and 'fulltext' search modes),
+                                                       // but only one will be visible and actionable at a time (they are
+                                                       // overlaid on top of each other in CSS).
+                                                       // * Browsers will use the 'fulltext' one by default (as it's the
+                                                       //   first in tree-order), which is desirable when they are unable
+                                                       //   to show search suggestions (either due to being broken or
+                                                       //   having JavaScript turned off).
+                                                       // * The mediawiki.searchSuggest module, after doing tests for the
+                                                       //   broken browsers, removes the 'fulltext' button and handles
+                                                       //   'fulltext' search itself; this will reveal the 'go' button and
+                                                       //   cause it to be used.
+                                                       echo $this->makeSearchButton(
+                                                               'fulltext',
+                                                               array( 'id' => 'mw-searchButton', 'class' => 'searchButton mw-fallbackSearchButton' )
+                                                       );
+                                                       echo $this->makeSearchButton(
+                                                               'go',
+                                                               array( 'id' => 'searchButton', 'class' => 'searchButton' )
+                                                       );
+                                                       ?>
+                                                               </div>
+                                               </form>
+                                       </div>
+                                       <?php
+
+                                       break;
+                       }
+               }
+       }
+}
diff --git a/skins/Vector/collapsibleTabs.js b/skins/Vector/collapsibleTabs.js
new file mode 100644 (file)
index 0000000..e24bea9
--- /dev/null
@@ -0,0 +1,207 @@
+/**
+ * Collapsible tabs jQuery Plugin
+ */
+( function ( $ ) {
+       var rtl = $( 'html' ).attr( 'dir' ) === 'rtl';
+       $.fn.collapsibleTabs = function ( options ) {
+               // return if the function is called on an empty jquery object
+               if ( !this.length ) {
+                       return this;
+               }
+               // Merge options into the defaults
+               var settings = $.extend( {}, $.collapsibleTabs.defaults, options );
+
+               this.each( function () {
+                       var $el = $( this );
+                       // add the element to our array of collapsible managers
+                       $.collapsibleTabs.instances = ( $.collapsibleTabs.instances.length === 0 ?
+                               $el : $.collapsibleTabs.instances.add( $el ) );
+                       // attach the settings to the elements
+                       $el.data( 'collapsibleTabsSettings', settings );
+                       // attach data to our collapsible elements
+                       $el.children( settings.collapsible ).each( function () {
+                               $.collapsibleTabs.addData( $( this ) );
+                       } );
+               } );
+
+               // if we haven't already bound our resize handler, bind it now
+               if ( !$.collapsibleTabs.boundEvent ) {
+                       $( window ).on( 'resize', $.debounce( 500, function () {
+                               $.collapsibleTabs.handleResize();
+                       } ) );
+                       $.collapsibleTabs.boundEvent = true;
+               }
+
+               // call our resize handler to setup the page
+               $.collapsibleTabs.handleResize();
+               return this;
+       };
+       $.collapsibleTabs = {
+               instances: [],
+               boundEvent: null,
+               defaults: {
+                       expandedContainer: '#p-views ul',
+                       collapsedContainer: '#p-cactions ul',
+                       collapsible: 'li.collapsible',
+                       shifting: false,
+                       expandCondition: function ( eleWidth ) {
+                               // If there are at least eleWidth + 1 pixels of free space, expand.
+                               // We add 1 because .width() will truncate fractional values but .offset() will not.
+                               return $.collapsibleTabs.calculateTabDistance() >= eleWidth + 1;
+                       },
+                       collapseCondition: function () {
+                               // If there's an overlap, collapse.
+                               return $.collapsibleTabs.calculateTabDistance() < 0;
+                       }
+               },
+               addData: function ( $collapsible ) {
+                       var settings = $collapsible.parent().data( 'collapsibleTabsSettings' );
+                       if ( settings ) {
+                               $collapsible.data( 'collapsibleTabsSettings', {
+                                       expandedContainer: settings.expandedContainer,
+                                       collapsedContainer: settings.collapsedContainer,
+                                       expandedWidth: $collapsible.width(),
+                                       prevElement: $collapsible.prev()
+                               } );
+                       }
+               },
+               getSettings: function ( $collapsible ) {
+                       var settings = $collapsible.data( 'collapsibleTabsSettings' );
+                       if ( !settings ) {
+                               $.collapsibleTabs.addData( $collapsible );
+                               settings = $collapsible.data( 'collapsibleTabsSettings' );
+                       }
+                       return settings;
+               },
+               handleResize: function () {
+                       $.collapsibleTabs.instances.each( function () {
+                               var $el = $( this ),
+                                       data = $.collapsibleTabs.getSettings( $el );
+
+                               if ( data.shifting ) {
+                                       return;
+                               }
+
+                               // if the two navigations are colliding
+                               if ( $el.children( data.collapsible ).length > 0 && data.collapseCondition() ) {
+
+                                       $el.trigger( 'beforeTabCollapse' );
+                                       // move the element to the dropdown menu
+                                       $.collapsibleTabs.moveToCollapsed( $el.children( data.collapsible + ':last' ) );
+                               }
+
+                               // if there are still moveable items in the dropdown menu,
+                               // and there is sufficient space to place them in the tab container
+                               if ( $( data.collapsedContainer + ' ' + data.collapsible ).length > 0 &&
+                                               data.expandCondition( $.collapsibleTabs.getSettings( $( data.collapsedContainer ).children(
+                                                               data.collapsible + ':first' ) ).expandedWidth ) ) {
+                                       //move the element from the dropdown to the tab
+                                       $el.trigger( 'beforeTabExpand' );
+                                       $.collapsibleTabs
+                                               .moveToExpanded( data.collapsedContainer + ' ' + data.collapsible + ':first' );
+                               }
+                       } );
+               },
+               moveToCollapsed: function ( ele ) {
+                       var outerData, expContainerSettings, target,
+                               $moving = $( ele );
+
+                       outerData = $.collapsibleTabs.getSettings( $moving );
+                       if ( !outerData ) {
+                               return;
+                       }
+                       expContainerSettings = $.collapsibleTabs.getSettings( $( outerData.expandedContainer ) );
+                       if ( !expContainerSettings ) {
+                               return;
+                       }
+                       expContainerSettings.shifting = true;
+
+                       // Remove the element from where it's at and put it in the dropdown menu
+                       target = outerData.collapsedContainer;
+                       $moving.css( 'position', 'relative' )
+                               .css( ( rtl ? 'left' : 'right' ), 0 )
+                               .animate( { width: '1px' }, 'normal', function () {
+                                       var data, expContainerSettings;
+                                       $( this ).hide();
+                                       // add the placeholder
+                                       $( '<span class="placeholder" style="display: none;"></span>' ).insertAfter( this );
+                                       $( this ).detach().prependTo( target ).data( 'collapsibleTabsSettings', outerData );
+                                       $( this ).attr( 'style', 'display: list-item;' );
+                                       data = $.collapsibleTabs.getSettings( $( ele ) );
+                                       if ( data ) {
+                                               expContainerSettings = $.collapsibleTabs.getSettings( $( data.expandedContainer ) );
+                                               if ( expContainerSettings ) {
+                                                       expContainerSettings.shifting = false;
+                                                       $.collapsibleTabs.handleResize();
+                                               }
+                                       }
+                               } );
+               },
+               moveToExpanded: function ( ele ) {
+                       var data, expContainerSettings, $target, expandedWidth,
+                               $moving = $( ele );
+
+                       data = $.collapsibleTabs.getSettings( $moving );
+                       if ( !data ) {
+                               return;
+                       }
+                       expContainerSettings = $.collapsibleTabs.getSettings( $( data.expandedContainer ) );
+                       if ( !expContainerSettings ) {
+                               return;
+                       }
+                       expContainerSettings.shifting = true;
+
+                       // grab the next appearing placeholder so we can use it for replacing
+                       $target = $( data.expandedContainer ).find( 'span.placeholder:first' );
+                       expandedWidth = data.expandedWidth;
+                       $moving.css( 'position', 'relative' ).css( ( rtl ? 'right' : 'left' ), 0 ).css( 'width', '1px' );
+                       $target.replaceWith(
+                               $moving
+                               .detach()
+                               .css( 'width', '1px' )
+                               .data( 'collapsibleTabsSettings', data )
+                               .animate( { width: expandedWidth + 'px' }, 'normal', function () {
+                                       $( this ).attr( 'style', 'display: block;' );
+                                       var data, expContainerSettings;
+                                       data = $.collapsibleTabs.getSettings( $( this ) );
+                                       if ( data ) {
+                                               expContainerSettings = $.collapsibleTabs.getSettings( $( data.expandedContainer ) );
+                                               if ( expContainerSettings ) {
+                                                       expContainerSettings.shifting = false;
+                                                       $.collapsibleTabs.handleResize();
+                                               }
+                                       }
+                               } )
+                       );
+               },
+               /**
+                * Returns the amount of horizontal distance between the two tabs groups
+                * (#left-navigation and #right-navigation), in pixels. If negative, this
+                * means that the tabs overlap, and the value is the width of overlapping
+                * parts.
+                *
+                * Used in default expandCondition and collapseCondition.
+                *
+                * @return {Numeric} distance/overlap in pixels
+                */
+               calculateTabDistance: function () {
+                       var $leftTab, $rightTab, leftEnd, rightStart;
+
+                       // In RTL, #right-navigation is actually on the left and vice versa.
+                       // Hooray for descriptive naming.
+                       if ( !rtl ) {
+                               $leftTab = $( '#left-navigation' );
+                               $rightTab = $( '#right-navigation' );
+                       } else {
+                               $leftTab = $( '#right-navigation' );
+                               $rightTab = $( '#left-navigation' );
+                       }
+
+                       leftEnd = $leftTab.offset().left + $leftTab.width();
+                       rightStart = $rightTab.offset().left;
+
+                       return rightStart - leftEnd;
+               }
+       };
+
+}( jQuery ) );
diff --git a/skins/Vector/components/animations.less b/skins/Vector/components/animations.less
new file mode 100644 (file)
index 0000000..9163779
--- /dev/null
@@ -0,0 +1,28 @@
+/* Animate between standard and high definition layouts */
+body.vector-animateLayout {
+       div#content,
+       div#footer,
+       #left-navigation {
+               .transition(margin-left 250ms, padding 250ms;);
+       }
+
+       #p-logo {
+               .transition(left 250ms);
+       }
+
+       #mw-panel {
+               .transition(padding-right 250ms);
+       }
+
+       #p-search {
+               .transition(margin-right 250ms);
+       }
+
+       #p-personal {
+               .transition(right 250ms);
+       }
+
+       #mw-head-base {
+               .transition(margin-left 250ms);
+       }
+}
diff --git a/skins/Vector/components/common.less b/skins/Vector/components/common.less
new file mode 100644 (file)
index 0000000..33cd230
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Any rules which should not be flipped automatically in right-to-left situations should be
+ * prepended with @noflip in a comment block.
+ *
+ * This stylesheet employs a few CSS trick to accomplish compatibility with a wide range of web
+ * browsers. The most common trick is to use some styles in IE6 only. This is accomplished by using
+ * a rule that makes things work in IE6, and then following it with a rule that begins with
+ * "html > body" or use a child selector ">", which is ignored by IE6 because it does not support
+ * the child selector. You can spot this by looking for the "OVERRIDDEN BY COMPLIANT BROWSERS" and
+ * "IGNORED BY IE6" comments.
+ */
+@import "mediawiki.mixins";
+
+/* Framework */
+html {
+       font-size: @html-font-size;
+}
+html,
+body {
+       height: 100%;
+       margin: 0;
+       padding: 0;
+       font-family: @content-font-family;
+}
+body {
+       background-color: @menu-background-color;
+}
+
+/* Content */
+div#content {
+       margin-left: 10em;
+       padding: @content-padding;
+       /* Border on top, left, and bottom side */
+       border: 1px solid @content-border-color;
+       border-right-width: 0;
+       /* Merge the border with tabs' one (in their background image) */
+       margin-top: -1px;
+       background-color: @body-background-color;
+       color: @content-font-color;
+       direction: ltr;
+
+       .mw-editsection,
+       .mw-editsection-like {
+               font-family: @content-font-family;
+       }
+
+       p {
+               line-height: inherit;
+               margin: 0.5em 0;
+       }
+
+       h1,
+       h2,
+       #firstHeading {
+               font-family: @content-heading-font-family;
+               line-height: @heading-line-height;
+               margin-bottom: 0.25em;
+               padding: 0;
+       }
+
+       h1,
+       #firstHeading {
+               font-size: @content-heading-font-size;
+       }
+
+       h2 {
+               font-size: 1.5em;
+               margin-top: 1em;
+       }
+
+       h3,
+       h4,
+       h5,
+       h6 {
+               line-height: @content-line-height;
+               margin-top: 0.3em;
+               margin-bottom: 0;
+               padding-bottom: 0;
+       }
+
+       h3 {
+               font-size: 1.17em;
+       }
+
+       h3,
+       h4 {
+               font-weight: bold;
+       }
+
+       h4,
+       h5,
+       h6 {
+               font-size: 100%; /* (reset) */
+       }
+
+       #toc h2,
+       .toc h2 {
+               font-size: 100%; /* (reset) */
+               font-family: @content-font-family;
+       }
+}
+
+/* Hide empty portlets */
+div.emptyPortlet {
+               display: none;
+}
+
+ul {
+       list-style-type: disc;
+       .list-style-image('images/bullet-icon.png');
+}
+
+pre, .mw-code {
+       line-height: 1.3em;
+}
+
+/* Site Notice (includes notices from CentralNotice extension) */
+#siteNotice {
+       font-size: 0.8em;
+}
+
+.redirectText {
+       font-size: 140%;
+}
+
+.redirectMsg img {
+       vertical-align: text-bottom;
+}
+
+.mw-body-content {
+       position: relative;
+       line-height: @content-line-height;
+       font-size: @content-font-size;
+}
+
+/* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */
+// FIXME: Should be part of jquery.tipsy.css
+.tipsy {
+       font-size: 0.8em;
+}
diff --git a/skins/Vector/components/externalLinks.less b/skins/Vector/components/externalLinks.less
new file mode 100644 (file)
index 0000000..91388c6
--- /dev/null
@@ -0,0 +1,10 @@
+@import "mediawiki.mixins.less";
+// External links
+#content {
+       .external {
+               background-position: center right;
+               background-repeat: no-repeat;
+               .background-image-svg('images/external-link-ltr-icon.svg', 'images/external-link-ltr-icon.png');
+               padding-right: 13px;
+       }
+}
diff --git a/skins/Vector/components/footer.less b/skins/Vector/components/footer.less
new file mode 100644 (file)
index 0000000..3d61b66
--- /dev/null
@@ -0,0 +1,57 @@
+/* Footer */
+div#footer {
+       margin-left: 10em;
+       margin-top: 0;
+       padding: 0.75em;
+       direction: ltr;
+
+       ul {
+               list-style-type: none;
+               list-style-image: none;
+               margin: 0;
+               padding: 0;
+
+               li {
+                       margin: 0;
+                       padding: 0;
+                       padding-top: 0.5em;
+                       padding-bottom: 0.5em;
+                       color: #333;
+                       font-size: 0.7em;
+               }
+       }
+
+       #footer-icons {
+               float: right;
+
+               li {
+                       float: left;
+                       margin-left: 0.5em;
+                       line-height: 2em;
+                       text-align: right;
+               }
+       }
+
+       #footer-info {
+               li {
+                       line-height: 1.4em;
+               }
+       }
+
+       #footer-places {
+               li {
+                       float: left;
+                       margin-right: 1em;
+                       line-height: 2em;
+               }
+       }
+}
+
+body.ltr {
+       div#footer {
+               #footer-places {
+                       /* @noflip */
+                       float: left;
+               }
+       }
+}
diff --git a/skins/Vector/components/navigation.less b/skins/Vector/components/navigation.less
new file mode 100644 (file)
index 0000000..8b384ac
--- /dev/null
@@ -0,0 +1,144 @@
+@import "mediawiki.mixins";
+@import "personalMenu";
+@import "search";
+@import "tabs";
+
+/* Hide, but keep accessible for screen-readers */
+#mw-navigation h2 {
+       position: absolute;
+       top: -9999px;
+}
+
+/* Head */
+#mw-page-base {
+       height: 5em;
+       background-position: bottom left;
+       background-repeat: repeat-x;
+       /* This image is only a fallback (for IE 6-9), so we do not @embed it. */
+       background-image: url('images/page-fade.png');
+       .vertical-gradient(@body-background-color, @menu-background-color, 50%, 100%);
+       background-color: @body-background-color;
+}
+
+#mw-head-base {
+       margin-top: -5em;
+       margin-left: 10em;
+       height: 5em;
+}
+
+div#mw-head {
+       position: absolute;
+       top: 0;
+       right: 0;
+       width: 100%;
+
+       h3 {
+               margin: 0;
+               padding: 0;
+       }
+}
+
+/* Navigation Containers */
+#left-navigation {
+       float: left;
+       margin-left: 10em;
+       margin-top: 2.5em;
+       /* When right nav would overlap left nav, it's placed below it
+          (normal CSS floats behavior). This rule ensures that no empty space
+          is shown between them due to right nav's margin-top. Page layout
+          is still broken, but at least the nav overlaps only the page title
+          instead of half the content. */
+       margin-bottom: -2.5em;
+       /* IE 6 double-margin bug fix */
+       display: inline;
+}
+
+#right-navigation {
+       float: right;
+       margin-top: 2.5em;
+}
+
+/* Logo */
+#p-logo {
+       position: absolute;
+       top: -160px;
+       left: 0;
+       width: 10em;
+       height: 160px;
+
+       a {
+               display: block;
+               width: 10em;
+               height: 160px;
+               background-repeat: no-repeat;
+               background-position: center center;
+               text-decoration: none;
+       }
+}
+
+/* Panel */
+div#mw-panel {
+       font-size: @menu-main-font-size;
+       position: absolute;
+       top: 160px;
+       padding-top: 1em;
+       width: 10em;
+       left: 0;
+
+       div.portal {
+               margin: 0 0.6em 0 0.7em;
+               padding: 0.25em 0;
+               direction: ltr;
+               background-position: top left;
+               background-repeat: no-repeat;
+               .background-image('images/portal-break.png');
+
+               h3 {
+                       font-size: @menu-main-heading-font-size;
+                       color: @menu-main-heading-color;
+                       font-weight: normal;
+                       margin: 0;
+                       padding: @menu-main-heading-padding;
+                       cursor: default;
+                       border: none;
+               }
+
+               div.body {
+                       margin: @menu-main-body-margin;
+                       padding-top: 0;
+
+                       ul {
+                               list-style-type: none;
+                               list-style-image: none;
+                               margin: 0;
+                               padding: @menu-main-body-padding;
+
+                               li {
+                                       line-height: 1.125em;
+                                       margin: 0;
+                                       padding: 0.25em 0;
+                                       font-size: @menu-main-body-font-size;
+                                       word-wrap: break-word;
+
+                                       a {
+                                               color: @menu-main-body-link-color;
+                                               &:visited {
+                                                       color: @menu-main-body-link-visited-color;
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               &.first {
+                       background-image: none;
+                       margin-top: 0;
+                       h3 {
+                               display: none;
+                       }
+                       div.body {
+                               margin-left: 0.5em;
+                       }
+               }
+       }
+}
diff --git a/skins/Vector/components/notifications.less b/skins/Vector/components/notifications.less
new file mode 100644 (file)
index 0000000..05a1e61
--- /dev/null
@@ -0,0 +1,19 @@
+/* mediawiki.notification */
+.skin-vector {
+       .mw-notification-area {
+               font-size: 0.8em;
+       }
+
+       .mw-notification-area-layout {
+               top: 7em;
+       }
+
+       .mw-notification {
+               background-color: #fff;
+               background-color: rgba(255, 255, 255, 0.93);
+               padding: 0.75em 1.5em;
+               border: solid 1px @content-border-color;
+               border-radius: 0.75em;
+               box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
+       }
+}
diff --git a/skins/Vector/components/personalMenu.less b/skins/Vector/components/personalMenu.less
new file mode 100644 (file)
index 0000000..7256929
--- /dev/null
@@ -0,0 +1,41 @@
+/* Personal */
+#p-personal {
+       position: absolute;
+       top: 0.33em;
+       right: 0.75em;
+       /* Display on top of page tabs - bugs 37158, 48078 */
+       z-index: 100;
+
+       h3 {
+               display: none;
+       }
+
+       ul {
+               list-style-type: none;
+               list-style-image: none;
+               margin: 0;
+               padding-left: 10em; /* Keep from overlapping logo */
+       }
+
+       li {
+               line-height: 1.125em;
+               /* @noflip */
+               float: left;
+               margin-left: 0.75em;
+               margin-top: 0.5em;
+               font-size: @menu-personal-font-size;
+               white-space: nowrap;
+       }
+}
+
+/* Icon for Usernames */
+#pt-userpage,
+#pt-anonuserpage,
+#pt-login {
+       background-position: left top;
+       background-repeat: no-repeat;
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG) */
+       .background-image-svg('images/user-icon.svg', 'images/user-icon.png');
+       padding-left: 15px !important;
+}
diff --git a/skins/Vector/components/search.less b/skins/Vector/components/search.less
new file mode 100644 (file)
index 0000000..46c3030
--- /dev/null
@@ -0,0 +1,113 @@
+/* Search */
+#p-search {
+       /* @noflip */
+       float: left;
+       margin-right: 0.5em;
+       margin-left: 0.5em;
+
+       h3 {
+               display: none;
+       }
+
+       form,
+       input {
+               margin: 0;
+               margin-top: 0.4em;
+       }
+}
+
+div#simpleSearch {
+       display: block;
+       width: 14em;
+       height: 1.4em;
+       margin-top: 0.65em;
+       position: relative;
+       min-height: 1px; /* Gotta trigger hasLayout for IE7 */
+       border: solid 1px #aaa;
+       color: black;
+       background-color: white;
+       .background-image('images/search-fade.png');
+       background-position: top left;
+       background-repeat: repeat-x;
+
+       // Styles for both the search input and the button
+       input {
+               position: absolute;
+               margin: 0;
+               padding: 0;
+               border: 0;
+               background-color: transparent;
+               color: black;
+       }
+
+       // The search input
+       #searchInput {
+               top: 0;
+               left: 0;
+               width: 90%;
+               padding: 0.2em 0 0.2em 0.2em;
+               font-size: 13px;
+               direction: ltr;
+
+               &:focus {
+                       outline: none;
+               }
+
+               // These rules MAY NOT be merged because of how CSS requires browsers
+               // to parse unrecognized selectors!
+               // Note these rules ensure that placeholder text can be distinguished from
+               // standard text. In browsers which make this distinction clear these rules
+               // are not necessary.
+               // For inputs that use jquery.placeholder.js e.g. IE9-
+               &.placeholder {
+                       color: #999;
+               }
+               // Distinguish placeholder text in IE10+
+               &:-ms-input-placeholder {
+                       color: #999;
+               }
+               // Distinguish placeholder text in Firefox 18-
+               &:-moz-placeholder {
+                       color: #999;
+               }
+
+               // Undo the styles Webkit browsers apply to type=search fields,
+               // we provide our own
+               -webkit-appearance: textfield;
+
+               &::-webkit-search-decoration,
+               &::-webkit-search-cancel-button,
+               &::-webkit-search-results-button,
+               &::-webkit-search-results-decoration {
+                       -webkit-appearance: textfield;
+               }
+       }
+
+       // The buttons. They are displayed in the same position, and if both are
+       // present the fulltext search one obscures the 'Go' one.
+       #searchButton,
+       #mw-searchButton {
+               top: 0;
+               right: 0;
+               width: 10%;
+               height: 100%;
+               cursor: pointer;
+               /* Hide button text and replace it with the image. */
+               /* This would be 100% if not for Firefox shenanigans (bug 60900). */
+               text-indent: 200%;
+               /* Needed to make IE6 respect the text-indent. */
+               line-height: 1;
+               /* Opera 12 on RTL flips the text in a funny way without this. */
+               /* @noflip */
+               direction: ltr;
+               white-space: nowrap;
+               overflow: hidden;
+               .background-image-svg('images/search-ltr.svg', 'images/search-ltr.png');
+               background-position: center center;
+               background-repeat: no-repeat;
+       }
+
+       #mw-searchButton {
+               z-index: 1;
+       }
+}
diff --git a/skins/Vector/components/tabs.less b/skins/Vector/components/tabs.less
new file mode 100644 (file)
index 0000000..9e39fbb
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+Styling for namespace tabs (page, discussion) and views (read, edit, view history, watch and other actions)
+*/
+
+/* Navigation Labels */
+div.vectorTabs h3 {
+       display: none;
+}
+
+/* Namespaces and Views */
+div.vectorTabs {
+       /* @noflip */
+       float: left;
+       height: 2.5em;
+       .background-image('images/tab-break.png');
+       background-position: bottom left;
+       background-repeat: no-repeat;
+       padding-left: 1px;
+
+       ul {
+               /* @noflip */
+               float: left;
+               height: 100%;
+               list-style-type: none;
+               list-style-image: none;
+               margin: 0;
+               padding: 0;
+               .background-image('images/tab-break.png');
+               background-position: right bottom;
+               background-repeat: no-repeat;
+
+               li {
+                       /* @noflip */
+                       float: left;
+                       line-height: 1.125em;
+                       /* For IE6, overridden later to display:block by modern browsers */
+                       display: inline-block;
+                       height: 100%;
+                       margin: 0;
+                       padding: 0;
+                       background-color: #f3f3f3;
+                       .background-image('images/tab-normal-fade.png');
+                       background-position: bottom left;
+                       background-repeat: repeat-x;
+                       white-space: nowrap;
+               }
+
+               /* IGNORED BY IE6 which doesn't support child selector */
+               > li {
+                       display: block;
+               }
+       }
+
+       li {
+               &.new {
+                       a,
+                       a:visited{
+                               color: #a55858;
+                       }
+               }
+
+               &.selected {
+                       .background-image('images/tab-current-fade.png');
+                       a,
+                       a:visited{
+                               color: #333;
+                               text-decoration: none;
+                       }
+               }
+
+               &.icon {
+                       a {
+                               background-position: bottom right;
+                               background-repeat: no-repeat;
+                       }
+               }
+
+               a {
+                       /* For IE6, overridden later to display:block by modern browsers */
+                       display: inline-block;
+                       height: 1.9em;
+                       padding-left: 0.5em;
+                       padding-right: 0.5em;
+                       color: @menu-link-color;
+                       cursor: pointer;
+                       font-size: 0.8em;
+               }
+
+               /* Ignored by IE6 which doesn't support child selector */
+               > a {
+                       display: block;
+               }
+       }
+
+       span {
+               display: inline-block;
+               .background-image('images/tab-break.png');
+               background-position: bottom right;
+               background-repeat: no-repeat;
+
+               a  {
+                       /* For IE6, overridden later to display:block by modern browsers */
+                       display: inline-block;
+                       padding-top: 1.25em;
+               }
+
+               /* Ignored by IE6 which doesn't support child selector */
+               > a {
+                       /* @noflip */
+                       float: left;
+                       display: block;
+               }
+       }
+}
+
+/* Variants and Actions */
+div.vectorMenu {
+       /* @noflip */
+       direction: ltr;
+       /* @noflip */
+       float: left;
+       cursor: pointer;
+       position: relative;
+}
+
+body.rtl div.vectorMenu {
+       /* @noflip */
+       direction: rtl;
+}
+
+div#mw-head div.vectorMenu h3 {
+       /* @noflip */
+       float: left;
+       .background-image('images/tab-break.png');
+       background-repeat: no-repeat;
+       background-position: bottom right;
+       margin-left: -1px;
+       font-size: 1em;
+       height: 2.5em;
+       // This effectively moves the "background border" outside of the element to act like a real
+       // border. It is necessary for the dropdown (div.vectorMenu div.menu) to align well.
+       padding-right: 1px;
+       margin-right: -1px;
+}
+
+// The "Variants" menu has a really funny structure
+div#mw-head div.vectorMenu#p-variants {
+       #p-variants-label span {
+               display: none;
+       }
+
+       #mw-vector-current-variant {
+               display: inline-block;
+               float: left;
+               padding-right: 20px;
+               font-size: 0.8em;
+               padding-left: 0.5em;
+               padding-top: 1.375em;
+               font-weight: normal;
+               border: none;
+               background-image: none;
+       }
+}
+
+div.vectorMenu h3 span {
+       display: block;
+       font-size: 0.8em;
+       padding-left: 0.7em;
+       padding-top: 1.375em;
+       margin-right: 20px;
+       font-weight: normal;
+       color: @menu-main-heading-color;
+}
+
+div.vectorMenu h3 a {
+       position: absolute;
+       top: 0;
+       right: 0;
+       width: 20px;
+       height: 2.5em;
+       .background-image-svg('images/arrow-down-icon.svg', 'images/arrow-down-icon.png');
+       background-position: 100% 70%;
+       background-repeat: no-repeat;
+       .transition(background-position 250ms);
+}
+
+div.vectorMenu.menuForceShow h3 a {
+       background-position: 100% 100%;
+}
+
+div.vectorMenuFocus h3 a {
+       .background-image-svg('images/arrow-down-focus-icon.svg', 'images/arrow-down-focus-icon.png');
+}
+
+div.vectorMenu div.menu {
+       // Match the width of the dropdown "heading" (the tab)
+       min-width: 100%;
+       position: absolute;
+       top: 2.5em;
+       left: -1px;
+       background-color: white;
+       border: solid 1px silver;
+       border-top-width: 0;
+       clear: both;
+       text-align: left;
+       display: none;
+}
+
+/* Enable forcing showing of the menu for accessibility */
+div.vectorMenu:hover div.menu,
+div.vectorMenu.menuForceShow div.menu {
+       display: block;
+}
+
+div.vectorMenu ul {
+       list-style-type: none;
+       list-style-image: none;
+       padding: 0;
+       margin: 0;
+       text-align: left;
+}
+
+/* Fixes old versions of FireFox */
+div.vectorMenu ul,
+x:-moz-any-link {
+       min-width: 5em;
+}
+
+/* Returns things back to normal in modern versions of FireFox */
+div.vectorMenu ul,
+x:-moz-any-link,
+x:default {
+       min-width: 0;
+}
+
+div.vectorMenu li {
+       padding: 0;
+       margin: 0;
+       text-align: left;
+       line-height: 1em;
+}
+
+/* OVERRIDDEN BY COMPLIANT BROWSERS */
+div.vectorMenu li a {
+       display: inline-block;
+       padding: 0.5em;
+       white-space: nowrap;
+       color: @menu-link-color;
+       cursor: pointer;
+       font-size: 0.8em;
+}
+
+/* IGNORED BY IE6 */
+div.vectorMenu li > a {
+       display: block;
+}
+
+div.vectorMenu li.selected a,
+div.vectorMenu li.selected a:visited {
+       color: #333;
+       text-decoration: none;
+}
+
+@import 'watchstar.less';
diff --git a/skins/Vector/components/watchstar.less b/skins/Vector/components/watchstar.less
new file mode 100644 (file)
index 0000000..a389ed6
--- /dev/null
@@ -0,0 +1,48 @@
+@import "mediawiki.mixins.rotation"
+
+/* Watch/Unwatch Icon Styling */
+#ca-unwatch.icon a,
+#ca-watch.icon a {
+       margin: 0;
+       padding: 0;
+       display: block;
+       width: 26px;
+       /* This hides the text but shows the background image */
+       padding-top: 3.1em;
+       margin-top: 0;
+       /* Only applied in IE6 */
+       margin-top: -0.8em !ie;
+       height: 0;
+       overflow: hidden;
+       background-position: 5px 60%;
+}
+#ca-unwatch.icon a {
+       .background-image-svg('images/unwatch-icon.svg', 'images/unwatch-icon.png');
+}
+#ca-watch.icon a {
+       .background-image-svg('images/watch-icon.svg', 'images/watch-icon.png');
+}
+#ca-unwatch.icon a:hover,
+#ca-unwatch.icon a:focus {
+       .background-image-svg('images/unwatch-icon-hl.svg', 'images/unwatch-icon-hl.png');
+}
+#ca-watch.icon a:hover,
+#ca-watch.icon a:focus {
+       .background-image-svg('images/watch-icon-hl.svg', 'images/watch-icon-hl.png');
+}
+#ca-unwatch.icon a.loading,
+#ca-watch.icon a.loading {
+       .background-image-svg('images/watch-icon-loading.svg', 'images/watch-icon-loading.png');
+       .rotation(700ms);
+       /* Suppress the hilarious rotating focus outline on Firefox */
+       outline: none;
+       cursor: default;
+       pointer-events: none;
+       background-position: 50% 60%;
+       -webkit-transform-origin: 50% 57%;
+       transform-origin: 50% 57%;
+}
+#ca-unwatch.icon a span,
+#ca-watch.icon a span {
+       display: none;
+}
diff --git a/skins/Vector/csshover.htc b/skins/Vector/csshover.htc
new file mode 100644 (file)
index 0000000..a13ea68
--- /dev/null
@@ -0,0 +1,284 @@
+<public:attach event="ondocumentready" onevent="CSSHover()" />
+<script>
+/**
+ *     Whatever:hover - V3.11
+ *     ------------------------------------------------------------
+ *     Author  - Peter Nederlof, http://www.xs4all.nl/~peterned
+ *     License - http://creativecommons.org/licenses/LGPL/2.1
+ *
+ *     Special thanks to Sergiu Dumitriu, http://purl.org/net/sergiu,
+ *     for fixing the expression loop.
+ *
+ *     Whatever:hover is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation; either
+ *     version 2.1 of the License, or (at your option) any later version.
+ *
+ *     Whatever:hover 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
+ *     Lesser General Public License for more details.
+ *
+ *     howto: body { behavior:url("csshover3.htc"); }
+ *     ------------------------------------------------------------
+ */
+
+window.CSSHover = (function(){
+
+       // regular expressions, used and explained later on.
+       var REG_INTERACTIVE = /(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active|focus))/i;
+       var REG_AFFECTED = /(.*?)\:(hover|active|focus)/i;
+       var REG_PSEUDO = /[^:]+:([a-z\-]+).*/i;
+       var REG_SELECT = /(\.([a-z0-9_\-]+):[a-z]+)|(:[a-z]+)/gi;
+       var REG_CLASS = /\.([a-z0-9_\-]*on(hover|active|focus))/i;
+       var REG_MSIE = /msie (5|6|7)/i;
+       var REG_COMPAT = /backcompat/i;
+
+       // property mapping, real css properties must be used in order to clear expressions later on...
+       // Uses obscure css properties that no-one is likely to use. The properties are borrowed to
+       // set an expression, and are then restored to the most likely correct value.
+       var Properties = {
+               index: 0,
+               list: ['text-kashida', 'text-kashida-space', 'text-justify'],
+               get: function() {
+                       return this.list[(this.index++)%this.list.length];
+               }
+       };
+
+       // camelize is used to convert css properties from (eg) text-kashida to textKashida
+       var camelize = function(str) {
+               return str.replace(/-(.)/mg, function(result, match){
+                       return match.toUpperCase();
+               });
+       };
+       
+       /**
+        *      Local CSSHover object
+        *      --------------------------
+        */
+       
+       var CSSHover = {
+               
+               // array of CSSHoverElements, used to unload created events
+               elements: [], 
+               
+               // buffer used for checking on duplicate expressions
+               callbacks: {}, 
+               
+               // init, called once ondomcontentready via the exposed window.CSSHover function
+               init:function() {
+                       // don't run in IE8 standards; expressions don't work in standards mode anyway, 
+                       // and the stuff we're trying to fix should already work properly
+                       if(!REG_MSIE.test(navigator.userAgent) && !REG_COMPAT.test(window.document.compatMode)) {
+                               return;
+                       }
+
+                       // start parsing the existing stylesheets
+                       var sheets = window.document.styleSheets, l = sheets.length;
+                       for(var i=0; i<l; i++) {
+                               this.parseStylesheet(sheets[i]);
+                       }
+               },
+
+               // called from init, parses individual stylesheets
+               parseStylesheet:function(sheet) {
+                       // check sheet imports and parse those recursively
+                       if(sheet.imports) {
+                               try {
+                                       var imports = sheet.imports;
+                                       var l = imports.length;
+                                       for(var i=0; i<l; i++) {
+                                               this.parseStylesheet(sheet.imports[i]);
+                                       }
+                               } catch(securityException){
+                                       // trycatch for various possible errors
+                               }
+                       }
+                       
+                       // interate the sheet's rules and send them to the parser
+                       try {
+                               var rules = sheet.rules;
+                               var r = rules.length;
+                               for(var j=0; j<r; j++) {
+                                       this.parseCSSRule(rules[j], sheet);
+                               }
+                       } catch(someException){
+                               // trycatch for various errors, most likely accessing the sheet's rules.
+                       }
+               },
+
+               // magic starts here ...
+               parseCSSRule:function(rule, sheet) {
+                       
+                       // The sheet is used to insert new rules into, this must be the same sheet the rule 
+                       // came from, to ensure that relative paths keep pointing to the right location.
+
+                       // only parse a rule if it contains an interactive pseudo.
+                       var select = rule.selectorText;
+                       if(REG_INTERACTIVE.test(select)) {
+                               var style = rule.style.cssText;
+                                       
+                               // affected elements are found by truncating the selector after the interactive pseudo,
+                               // eg: "div li:hover" >>  "div li"
+                               var affected = REG_AFFECTED.exec(select)[1];
+                                       
+                               // that pseudo is needed for a classname, and defines the type of interaction (focus, hover, active)
+                               // eg: "li:hover" >> "onhover"
+                               var pseudo = select.replace(REG_PSEUDO, 'on$1');
+                                       
+                               // the new selector is going to use that classname in a new css rule,
+                               // since IE6 doesn't support multiple classnames, this is merged into one classname
+                               // eg: "li:hover" >> "li.onhover",  "li.folder:hover" >> "li.folderonhover"
+                               var newSelect = select.replace(REG_SELECT, '.$2' + pseudo);
+                                       
+                               // the classname is needed for the events that are going to be set on affected nodes
+                               // eg: "li.folder:hover" >> "folderonhover"
+                               var className = REG_CLASS.exec(newSelect)[1];
+
+                               // no need to set the same callback more than once when the same selector uses the same classname
+                               var hash = affected + className;
+                               if(!this.callbacks[hash]) {
+                                       
+                                       // affected elements are given an expression under a borrowed css property, because fake properties
+                                       // can't have their expressions cleared. Different properties are used per pseudo, to avoid
+                                       // expressions from overwriting eachother. The expression does a callback to CSSHover.patch, 
+                                       // rerouted via the exposed window.CSSHover function.
+                                       var property = Properties.get();
+                                       var atRuntime = camelize(property);
+
+                                       // because the expression is added to the stylesheet, and styles are always applied to html that is
+                                       // dynamically added to the dom, the expression will also trigger for those new elements (provided
+                                       // they are selected by the affected selector). 
+                                       sheet.addRule(affected, property + ':expression(CSSHover(this, "'+pseudo+'", "'+className+'", "'+atRuntime+'"))');
+                                       
+                                       // hash it, so an identical selector/class combo does not duplicate the expression
+                                       this.callbacks[hash] = true;
+                               }
+                               
+                               // duplicate expressions need not be set, but the style could differ
+                               sheet.addRule(newSelect, style);
+                       }
+               },
+
+               // called via the expression, patches individual nodes
+               patch:function(node, type, className, property) {
+
+                       // restores the borrowed css property to the value of its immediate parent, clearing
+                       // the expression so that it's not repeatedly called. 
+                       try {
+                               var value = node.parentNode.currentStyle[property];
+                               node.style[property] = value;   
+                       } catch(e) {
+                               // the above reset should never fail, but just in case, clear the runtimeStyle if it does.
+                               // this will also stop the expression.
+                               node.runtimeStyle[property] = '';
+                       }                       
+               
+                       // just to make sure, also keep track of patched classnames locally on the node
+                       if(!node.csshover) {
+                               node.csshover = [];
+                       }
+
+                       // and check for it to prevent duplicate events with the same classname from being set
+                       if(!node.csshover[className]) {
+                               node.csshover[className] = true;
+
+                               // create an instance for the given type and class
+                               var element = new CSSHoverElement(node, type, className);
+                               
+                               // and store that instance for unloading later on
+                               this.elements.push(element);
+                       }
+
+                       // returns a dummy value to the expression
+                       return type;
+               },
+
+               // unload stuff onbeforeunload
+               unload:function() {
+                       try {
+                               
+                               // remove events
+                               var l = this.elements.length;
+                               for(var i=0; i<l; i++) {
+                                       this.elements[i].unload();
+                               }
+
+                               // and set properties to null 
+                               this.elements = [];
+                               this.callbacks = {};
+
+                       } catch (e) {
+                       }
+               }
+       };
+
+       /**
+        *      CSSHoverElement
+        *      --------------------------
+        */
+
+       // the event types associated with the interactive pseudos
+       var CSSEvents = {
+               onhover:  { activator: 'onmouseenter', deactivator: 'onmouseleave' },
+               onactive: { activator: 'onmousedown',  deactivator: 'onmouseup' },
+               onfocus:  { activator: 'onfocus',      deactivator: 'onblur' }
+       };
+       
+       // CSSHoverElement constructor, called via CSSHover.patch
+       function CSSHoverElement(node, type, className) {
+
+               // the CSSHoverElement patches individual nodes by manually applying the events that should 
+               // have fired by the css pseudoclasses, eg mouseenter and mouseleave for :hover. 
+
+               this.node = node;
+               this.type = type;
+               var replacer = new RegExp('(^|\\s)'+className+'(\\s|$)', 'g');
+
+               // store event handlers for removal onunload
+               this.activator =   function(){ node.className += ' ' + className; };
+               this.deactivator = function(){ node.className = node.className.replace(replacer, ' '); };
+               
+               // add the events
+               node.attachEvent(CSSEvents[type].activator, this.activator);
+               node.attachEvent(CSSEvents[type].deactivator, this.deactivator);
+       }
+       
+       CSSHoverElement.prototype = {
+               // onbeforeunload, called via CSSHover.unload
+               unload:function() {
+
+                       // remove events 
+                       this.node.detachEvent(CSSEvents[this.type].activator, this.activator);
+                       this.node.detachEvent(CSSEvents[this.type].deactivator, this.deactivator);
+
+                       // and set properties to null 
+                       this.activator = null;
+                       this.deactivator = null;
+                       this.node = null;
+                       this.type = null;
+               }
+       };
+
+       // add the unload to the onbeforeunload event
+       window.attachEvent('onbeforeunload', function(){
+               CSSHover.unload();
+       });
+
+       /**
+        *      Public hook
+        *      --------------------------
+        */
+       
+       return function(node, type, className, property) {
+               if(node) {
+                       // called via the css expression; patches individual nodes
+                       return CSSHover.patch(node, type, className, property);
+               } else {
+                       // called ondomcontentready via the public:attach node
+                       CSSHover.init();
+               }
+       };
+
+})();
+</script>
\ No newline at end of file
diff --git a/skins/Vector/csshover.min.htc b/skins/Vector/csshover.min.htc
new file mode 100644 (file)
index 0000000..7e5c57b
--- /dev/null
@@ -0,0 +1,12 @@
+<public:attach event="ondocumentready" onevent="CSSHover()" />
+<script>
+/**
+ * Whatever:hover - V3.11
+ * http://www.xs4all.nl/~peterned/
+ *     
+ * Copyright (c) 2009 Peter Nederlof
+ * Licensed under the LGPL license
+ * http://creativecommons.org/licenses/LGPL/2.1
+ */
+window.CSSHover=(function(){var m=/(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active|focus))/i;var n=/(.*?)\:(hover|active|focus)/i;var o=/[^:]+:([a-z\-]+).*/i;var p=/(\.([a-z0-9_\-]+):[a-z]+)|(:[a-z]+)/gi;var q=/\.([a-z0-9_\-]*on(hover|active|focus))/i;var s=/msie (5|6|7)/i;var t=/backcompat/i;var u={index:0,list:['text-kashida','text-kashida-space','text-justify'],get:function(){return this.list[(this.index++)%this.list.length]}};var v=function(c){return c.replace(/-(.)/mg,function(a,b){return b.toUpperCase()})};var w={elements:[],callbacks:{},init:function(){if(!s.test(navigator.userAgent)&&!t.test(window.document.compatMode)){return}var a=window.document.styleSheets,l=a.length;for(var i=0;i<l;i++){this.parseStylesheet(a[i])}},parseStylesheet:function(a){if(a.imports){try{var b=a.imports;var l=b.length;for(var i=0;i<l;i++){this.parseStylesheet(a.imports[i])}}catch(securityException){}}try{var c=a.rules;var r=c.length;for(var j=0;j<r;j++){this.parseCSSRule(c[j],a)}}catch(someException){}},parseCSSRule:function(a,b){var c=a.selectorText;if(m.test(c)){var d=a.style.cssText;var e=n.exec(c)[1];var f=c.replace(o,'on$1');var g=c.replace(p,'.$2'+f);var h=q.exec(g)[1];var i=e+h;if(!this.callbacks[i]){var j=u.get();var k=v(j);b.addRule(e,j+':expression(CSSHover(this, "'+f+'", "'+h+'", "'+k+'"))');this.callbacks[i]=true}b.addRule(g,d)}},patch:function(a,b,c,d){try{var f=a.parentNode.currentStyle[d];a.style[d]=f}catch(e){a.runtimeStyle[d]=''}if(!a.csshover){a.csshover=[]}if(!a.csshover[c]){a.csshover[c]=true;var g=new CSSHoverElement(a,b,c);this.elements.push(g)}return b},unload:function(){try{var l=this.elements.length;for(var i=0;i<l;i++){this.elements[i].unload()}this.elements=[];this.callbacks={}}catch(e){}}};var x={onhover:{activator:'onmouseenter',deactivator:'onmouseleave'},onactive:{activator:'onmousedown',deactivator:'onmouseup'},onfocus:{activator:'onfocus',deactivator:'onblur'}};function CSSHoverElement(a,b,c){this.node=a;this.type=b;var d=new RegExp('(^|\\s)'+c+'(\\s|$)','g');this.activator=function(){a.className+=' '+c};this.deactivator=function(){a.className=a.className.replace(d,' ')};a.attachEvent(x[b].activator,this.activator);a.attachEvent(x[b].deactivator,this.deactivator)}CSSHoverElement.prototype={unload:function(){this.node.detachEvent(x[this.type].activator,this.activator);this.node.detachEvent(x[this.type].deactivator,this.deactivator);this.activator=null;this.deactivator=null;this.node=null;this.type=null}};window.attachEvent('onbeforeunload',function(){w.unload()});return function(a,b,c,d){if(a){return w.patch(a,b,c,d)}else{w.init()}}})();
+</script>
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..97a3500
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Icemandeaf"
+               ]
+       },
+       "skinname-vector": "M509x575S10e20494x425S14a20493x459S16d20492x478S1fb20494x502S17620493x525S11a20493x545",
+       "vector-skin-desc": "M535x520S19a00507x481S19a08465x481S22f14465x506S22f04509x506 M515x598S18d20494x403S17620499x432S11920493x452S17620499x482S14720500x502S17620499x528S17620499x548S14020485x568 M521x508S1f748479x493S1f740501x493 M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M534x547S2ff00482x483S10001513x517S2e305488x487 S38700463x496 M535x536S20300516x521S20308470x521S26500516x502S26510470x502S14c30511x465S14c38465x465 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M520x540S37606481x460S15a40508x513S28801499x491S20500488x492",
+       "vector.css": "/* M509x529S16d20492x471S20320493x495S20320493x514 M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M525x525S10004510x475S22a04511x510S1000c476x475S22a14477x510 M534x518S2ff00482x483S15a10522x486S2b700514x458 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M521x508S1f748479x493S1f740501x493 M509x575S10e20494x425S14a20493x459S16d20492x478S1fb20494x502S17620493x525S11a20493x545 M517x524S15a02484x477S15a20489x484S21100504x492S22a04504x509 */",
+       "vector.js": "/* M520x523S1f540480x477S2a204497x495 M519x527S19220498x489S2a20c482x473S20320498x512 M525x525S10004510x475S22a04511x510S1000c476x475S22a14477x510 M534x518S2ff00482x483S15a10522x486S2b700514x458 M524x539S14402493x485S1440a486x461S22b00508x509S22b10476x483 M536x521S2ff00482x483S10011515x491S28108515x461 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M509x575S10e20494x425S14a20493x459S16d20492x478S1fb20494x502S17620493x525S11a20493x545 M517x524S15a02484x477S15a20489x484S21100504x492S22a04504x509 */",
+       "vector-action-addsection": "M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M522x522S15a37478x479S10041485x492S20600500x492",
+       "vector-action-delete": "M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468",
+       "vector-action-move": "M552x509S18520488x494S18528449x494S26626522x492",
+       "vector-action-protect": "M512x519S15a19488x482S15a11489x482S20600488x508",
+       "vector-action-undelete": "M515x538S15a0a486x463S10050500x467S2330b485x516S20e00491x501 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468",
+       "vector-action-unprotect": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M512x519S15a19488x482S15a11489x482S20600488x508",
+       "vector-view-create": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501",
+       "vector-view-edit": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "vector-view-history": "M525x524S2ff00482x483S10e00507x494S26500511x474 M514x523S11541487x478S22f04489x509",
+       "vector-view-view": "M513x540S15a06486x459S10e50494x474S22b04493x510",
+       "vector-view-viewsource": "M525x524S2ff00482x483S10e00507x494S26500511x474 M509x545S16d20492x456S17620493x480S10120493x497S14a20494x530",
+       "vector-more-actions": "M526x508S18510501x493S18518475x493"
+}
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..75053d7
--- /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": "МеттахӀоттае",
+       "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..081783b
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mormegil"
+               ]
+       },
+       "skinname-vector": "Vektor",
+       "vector-skin-desc": "Moderní verze MonoBooku s novějším vzhledem a vylepšenou použitelností",
+       "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..99d4dc3
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@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",
+       "vector-more-actions": "Rhagor"
+}
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": "Περισσότερα"
+}
diff --git a/skins/Vector/i18n/en.json b/skins/Vector/i18n/en.json
new file mode 100644 (file)
index 0000000..949218e
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "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",
+       "vector-action-delete": "Delete",
+       "vector-action-move": "Move",
+       "vector-action-protect": "Protect",
+       "vector-action-undelete": "Undelete",
+       "vector-action-unprotect": "Change protection",
+       "vector-view-create": "Create",
+       "vector-view-edit": "Edit",
+       "vector-view-history": "View history",
+       "vector-view-view": "Read",
+       "vector-view-viewsource": "View source",
+       "vector-more-actions": "More"
+}
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..75352a5
--- /dev/null
@@ -0,0 +1,32 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Armando-Martin",
+                       "Crazymadlover",
+                       "Dalton2",
+                       "Fitoschido",
+                       "Locos epraix",
+                       "Manuelt15",
+                       "MarcoAurelio",
+                       "Miguel2706",
+                       "Platonides",
+                       "Vivaelcelta"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector-skin-desc": "Versión moderna de MonoBook, con un aspecto actualizado y muchas mejoras de usabilidad",
+       "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": "Sección nueva",
+       "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..856742c
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Unai Fdz. de Betoño",
+                       "Xabier Armendaritz",
+                       "Fitoschido"
+               ]
+       },
+       "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",
+       "vector-more-actions": "Gehiago"
+}
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..1d329ff
--- /dev/null
@@ -0,0 +1,25 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Calak",
+                       "Ebraminio",
+                       "Huji",
+                       "Reza1615",
+                       "Zack90"
+               ]
+       },
+       "skinname-vector": "برداری",
+       "vector-skin-desc": "نسخه مدرن منوبوک با نگاه تازه و بهبود قابلیت استفاده",
+       "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..f9ff0a3
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Murma174",
+                       "Pyt"
+               ]
+       },
+       "vector-skin-desc": "Modern werjuun faan Monobook mä frisk skak an föl muar mögelkhaiden",
+       "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",
+       "vector-more-actions": "Muar"
+}
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..3593350
--- /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..cb26439
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Robby"
+               ]
+       },
+       "vector-skin-desc": "Modern Versioun vu Monobook mat frëschem Look a ville Verbesserunge vun der Benotzerfrëndlechkeet",
+       "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..07c18d9
--- /dev/null
@@ -0,0 +1,28 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Calak",
+                       "Romaine",
+                       "SPQRobin",
+                       "Siebrand",
+                       "Troefkaart",
+                       "Sjoerddebruin"
+               ]
+       },
+       "skinname-vector": "Vector",
+       "vector-skin-desc": "Moderne versie van MonoBook met een fris uiterlijk en verbeteringen op het gebied van gebruiksvriendelijkheid",
+       "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..5cf2082
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Matma Rex",
+                       "Sp5uhe"
+               ]
+       },
+       "skinname-vector": "Wektor",
+       "vector-skin-desc": "Odświeżona wersja skórki Książka, z nowym wyglądem i usprawnieniami",
+       "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"
+}
diff --git a/skins/Vector/i18n/qqq.json b/skins/Vector/i18n/qqq.json
new file mode 100644 (file)
index 0000000..fea395b
--- /dev/null
@@ -0,0 +1,28 @@
+{
+       "@metadata": {
+               "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}}",
+       "vector-action-delete": "Used in the Vector skin, as the name of a tab at the top of the page. See for example {{canonicalurl:Main_Page|useskin=vector}}\n\n{{Identical|Delete}}",
+       "vector-action-move": "Used in the Vector skin, on the tabs at the top of the page. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}\n\n{{Identical|Move}}",
+       "vector-action-protect": "Tab at top of page, in vector skin\n\n{{Identical|Protect}}",
+       "vector-action-undelete": "Tab at top of page, in vector skin.\n{{Identical|Undelete}}",
+       "vector-action-unprotect": "Tab at top of page, in vector skin.\n{{Identical|Change protection}}",
+       "vector-view-create": "Tab label in the Vector skin. See for example {{canonicalurl:Foo|useskin=vector}}\n{{Identical|Create}}",
+       "vector-view-edit": "Tab label in the Vector skin. See for example {{canonicalurl:Main_Page|useskin=vector}}\n{{Identical|Edit}}",
+       "vector-view-history": "Tab label in the Vector skin. See for example {{canonicalurl:Main_Page|useskin=vector}}\n{{Identical|View history}}",
+       "vector-view-view": "Tab label in the Vector skin (verb). See for example {{canonicalurl:Main_Page|useskin=vector}}.\n{{Identical|Read}}",
+       "vector-view-viewsource": "Tab label in the Vector skin.\n{{Identical|View source}}",
+       "vector-more-actions": "Label in the Vector skin's menu for the less-important or rarer actions which are not shown as tabs (like moving the page, or for sysops deleting or protecting the page), as well as (for users with a narrow viewing window in their browser) the less-important tab actions which the user's browser is unable to fit in. {{Identical|More}}"
+}
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..2bf1407
--- /dev/null
@@ -0,0 +1,31 @@
+{
+       "@metadata": {
+               "authors": [
+                       "AS",
+                       "Ahonc",
+                       "Base",
+                       "Calak",
+                       "Dim Grits",
+                       "NickK",
+                       "Prima klasy4na",
+                       "Тест",
+                       "Ата"
+               ]
+       },
+       "skinname-vector": "Векторне",
+       "vector-skin-desc": "Сучасна версія MonoBook зі свіжим виглядом і багатьма зручними покращеннями",
+       "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..a59d9b4
--- /dev/null
@@ -0,0 +1,25 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Minh Nguyen",
+                       "Vinhtantran",
+                       "Withoutaname"
+               ]
+       },
+       "skinname-vector": "Vectơ",
+       "vector-skin-desc": "Giao diện làm lại từ MonoBook có màu tươi và khả dụng hơn",
+       "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/skins/Vector/images/arrow-collapsed-ltr.png b/skins/Vector/images/arrow-collapsed-ltr.png
new file mode 100644 (file)
index 0000000..063ac6f
Binary files /dev/null and b/skins/Vector/images/arrow-collapsed-ltr.png differ
diff --git a/skins/Vector/images/arrow-collapsed-ltr.svg b/skins/Vector/images/arrow-collapsed-ltr.svg
new file mode 100644 (file)
index 0000000..b943caa
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M6.001 2.998l5.001 5-5.001 5z" fill="#797979"/></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/arrow-collapsed-rtl.png b/skins/Vector/images/arrow-collapsed-rtl.png
new file mode 100644 (file)
index 0000000..c346218
Binary files /dev/null and b/skins/Vector/images/arrow-collapsed-rtl.png differ
diff --git a/skins/Vector/images/arrow-collapsed-rtl.svg b/skins/Vector/images/arrow-collapsed-rtl.svg
new file mode 100644 (file)
index 0000000..5faf356
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M9.999 13.002l-5.001-5 5.001-5z" fill="#797979"/></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/arrow-down-focus-icon.png b/skins/Vector/images/arrow-down-focus-icon.png
new file mode 100644 (file)
index 0000000..7640bd1
Binary files /dev/null and b/skins/Vector/images/arrow-down-focus-icon.png differ
diff --git a/skins/Vector/images/arrow-down-focus-icon.svg b/skins/Vector/images/arrow-down-focus-icon.svg
new file mode 100644 (file)
index 0000000..826c280
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="22" height="16"><path d="M15.502 6.001l-5 5.001-5-5.001z" fill="#929292"/></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/arrow-down-icon.png b/skins/Vector/images/arrow-down-icon.png
new file mode 100644 (file)
index 0000000..12e3b93
Binary files /dev/null and b/skins/Vector/images/arrow-down-icon.png differ
diff --git a/skins/Vector/images/arrow-down-icon.svg b/skins/Vector/images/arrow-down-icon.svg
new file mode 100644 (file)
index 0000000..8e31b2f
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="22" height="16"><path d="M15.502 6.001l-5 5.001-5-5.001z" fill="#797979"/></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/arrow-expanded.png b/skins/Vector/images/arrow-expanded.png
new file mode 100644 (file)
index 0000000..0221028
Binary files /dev/null and b/skins/Vector/images/arrow-expanded.png differ
diff --git a/skins/Vector/images/arrow-expanded.svg b/skins/Vector/images/arrow-expanded.svg
new file mode 100644 (file)
index 0000000..e744ec3
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M13.002 6.001l-5 5.001-5-5.001z" fill="#797979"/></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/bullet-icon.png b/skins/Vector/images/bullet-icon.png
new file mode 100644 (file)
index 0000000..7bae98f
Binary files /dev/null and b/skins/Vector/images/bullet-icon.png differ
diff --git a/skins/Vector/images/external-link-ltr-icon.png b/skins/Vector/images/external-link-ltr-icon.png
new file mode 100644 (file)
index 0000000..6308383
Binary files /dev/null and b/skins/Vector/images/external-link-ltr-icon.png differ
diff --git a/skins/Vector/images/external-link-ltr-icon.svg b/skins/Vector/images/external-link-ltr-icon.svg
new file mode 100644 (file)
index 0000000..5969d03
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><g transform="translate(-826.429 -698.791)"><rect width="5.982" height="5.982" x="826.929" y="702.309" fill="#fff" stroke="#06c"/><g><path d="M831.194 698.791h5.234v5.391l-1.571 1.545-1.31-1.31-2.725 2.725-2.689-2.689 2.808-2.808-1.311-1.311z" fill="#06f"/><path d="M835.424 699.795l.022 4.885-1.817-1.817-2.881 2.881-1.228-1.228 2.881-2.881-1.851-1.851z" fill="#fff"/></g></g></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/external-link-rtl-icon.png b/skins/Vector/images/external-link-rtl-icon.png
new file mode 100644 (file)
index 0000000..5313234
Binary files /dev/null and b/skins/Vector/images/external-link-rtl-icon.png differ
diff --git a/skins/Vector/images/external-link-rtl-icon.svg b/skins/Vector/images/external-link-rtl-icon.svg
new file mode 100644 (file)
index 0000000..75a7025
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><g transform="translate(-826.429 -698.791)"><rect width="5.982" height="5.982" x="-835.929" y="702.309" transform="scale(-1 1)" fill="#fff" stroke="#06c"/><g><path d="M831.663 698.791h-5.234v5.391l1.571 1.545 1.31-1.31 2.725 2.725 2.689-2.689-2.808-2.808 1.311-1.311z" fill="#06f"/><path d="M827.433 699.795l-.022 4.885 1.817-1.817 2.881 2.881 1.228-1.228-2.881-2.881 1.851-1.851z" fill="#fff"/></g></g></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/link-icon.png b/skins/Vector/images/link-icon.png
new file mode 100644 (file)
index 0000000..b70efaa
Binary files /dev/null and b/skins/Vector/images/link-icon.png differ
diff --git a/skins/Vector/images/magnify-clip.png b/skins/Vector/images/magnify-clip.png
new file mode 100644 (file)
index 0000000..00a9cee
Binary files /dev/null and b/skins/Vector/images/magnify-clip.png differ
diff --git a/skins/Vector/images/page-fade.png b/skins/Vector/images/page-fade.png
new file mode 100644 (file)
index 0000000..b4a6034
Binary files /dev/null and b/skins/Vector/images/page-fade.png differ
diff --git a/skins/Vector/images/portal-break-ltr.png b/skins/Vector/images/portal-break-ltr.png
new file mode 100644 (file)
index 0000000..20bf366
Binary files /dev/null and b/skins/Vector/images/portal-break-ltr.png differ
diff --git a/skins/Vector/images/portal-break-rtl.png b/skins/Vector/images/portal-break-rtl.png
new file mode 100644 (file)
index 0000000..e5f6223
Binary files /dev/null and b/skins/Vector/images/portal-break-rtl.png differ
diff --git a/skins/Vector/images/portal-break.png b/skins/Vector/images/portal-break.png
new file mode 100644 (file)
index 0000000..90c3918
Binary files /dev/null and b/skins/Vector/images/portal-break.png differ
diff --git a/skins/Vector/images/preferences/break.png b/skins/Vector/images/preferences/break.png
new file mode 100644 (file)
index 0000000..b529308
Binary files /dev/null and b/skins/Vector/images/preferences/break.png differ
diff --git a/skins/Vector/images/preferences/fade.png b/skins/Vector/images/preferences/fade.png
new file mode 100644 (file)
index 0000000..638084d
Binary files /dev/null and b/skins/Vector/images/preferences/fade.png differ
diff --git a/skins/Vector/images/search-fade.png b/skins/Vector/images/search-fade.png
new file mode 100644 (file)
index 0000000..6cb7d28
Binary files /dev/null and b/skins/Vector/images/search-fade.png differ
diff --git a/skins/Vector/images/search-ltr.png b/skins/Vector/images/search-ltr.png
new file mode 100644 (file)
index 0000000..1db2eb2
Binary files /dev/null and b/skins/Vector/images/search-ltr.png differ
diff --git a/skins/Vector/images/search-ltr.svg b/skins/Vector/images/search-ltr.svg
new file mode 100644 (file)
index 0000000..0720f20
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="13"><g stroke-width="2" stroke="#6c6c6c" fill="none"><path d="M11.29 11.71l-4-4"/><circle cx="5" cy="5" r="4"/></g></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/search-rtl.png b/skins/Vector/images/search-rtl.png
new file mode 100644 (file)
index 0000000..c26c8d0
Binary files /dev/null and b/skins/Vector/images/search-rtl.png differ
diff --git a/skins/Vector/images/search-rtl.svg b/skins/Vector/images/search-rtl.svg
new file mode 100644 (file)
index 0000000..622d5f9
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="13"><g stroke-width="2" stroke="#6c6c6c" fill="none"><path d="M.71 11.71l4-4"/><circle cx="7" cy="5" r="4"/></g></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/tab-break.png b/skins/Vector/images/tab-break.png
new file mode 100644 (file)
index 0000000..6d37af5
Binary files /dev/null and b/skins/Vector/images/tab-break.png differ
diff --git a/skins/Vector/images/tab-current-fade.png b/skins/Vector/images/tab-current-fade.png
new file mode 100644 (file)
index 0000000..b8f772f
Binary files /dev/null and b/skins/Vector/images/tab-current-fade.png differ
diff --git a/skins/Vector/images/tab-normal-fade.png b/skins/Vector/images/tab-normal-fade.png
new file mode 100644 (file)
index 0000000..f719a88
Binary files /dev/null and b/skins/Vector/images/tab-normal-fade.png differ
diff --git a/skins/Vector/images/unwatch-icon-hl.png b/skins/Vector/images/unwatch-icon-hl.png
new file mode 100644 (file)
index 0000000..6b2b502
Binary files /dev/null and b/skins/Vector/images/unwatch-icon-hl.png differ
diff --git a/skins/Vector/images/unwatch-icon-hl.svg b/skins/Vector/images/unwatch-icon-hl.svg
new file mode 100644 (file)
index 0000000..d52d547
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><linearGradient id="a"><stop offset="0" stop-color="#c2edff"/><stop offset=".5" stop-color="#68bdff"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient x1="13.47" y1="14.363" x2="4.596" y2="3.397" id="b" xlink:href="#a" gradientUnits="userSpaceOnUse"/></defs><path d="M8.103 1.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z" fill="url(#b)" stroke="#c8b250" stroke-width="0.9999199999999999"/></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/unwatch-icon.png b/skins/Vector/images/unwatch-icon.png
new file mode 100644 (file)
index 0000000..9fd9436
Binary files /dev/null and b/skins/Vector/images/unwatch-icon.png differ
diff --git a/skins/Vector/images/unwatch-icon.svg b/skins/Vector/images/unwatch-icon.svg
new file mode 100644 (file)
index 0000000..cde7bc5
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><linearGradient id="a"><stop offset="0" stop-color="#c2edff"/><stop offset=".5" stop-color="#68bdff"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient x1="13.47" y1="14.363" x2="4.596" y2="3.397" id="b" xlink:href="#a" gradientUnits="userSpaceOnUse"/></defs><path d="M8.103 1.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z" fill="url(#b)" stroke="#7cb5d1" stroke-width="0.9999199999999999"/></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/user-icon.png b/skins/Vector/images/user-icon.png
new file mode 100644 (file)
index 0000000..57f9f8d
Binary files /dev/null and b/skins/Vector/images/user-icon.png differ
diff --git a/skins/Vector/images/user-icon.svg b/skins/Vector/images/user-icon.svg
new file mode 100644 (file)
index 0000000..4335bcf
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="12" height="13.837"><defs><linearGradient id="e"><stop offset="0"/><stop offset="1" stop-opacity="0"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#3b74bc"/><stop offset="1" stop-color="#2d5990"/></linearGradient><linearGradient id="c"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#c9c9c9"/></linearGradient><linearGradient id="a"><stop offset="0"/><stop offset="1" stop-opacity="0"/></linearGradient><linearGradient id="d"><stop offset="0" stop-color="#f4d9b1"/><stop offset="1" stop-color="#df9725"/></linearGradient><radialGradient cx="31.113" cy="19.009" r="8.662" fx="31.113" fy="19.009" id="f" xlink:href="#a" gradientUnits="userSpaceOnUse"/><radialGradient cx="28.09" cy="27.203" r="13.565" fx="28.09" fy="27.203" id="g" xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.298 0 0 .885 -8.359 4.94)"/><linearGradient x1="30.936" y1="29.553" x2="30.936" y2="35.803" id="h" xlink:href="#c" gradientUnits="userSpaceOnUse"/><radialGradient cx="31.113" cy="19.009" r="8.662" fx="31.113" fy="19.009" id="i" xlink:href="#a" gradientUnits="userSpaceOnUse"/><radialGradient cx="29.345" cy="17.064" r="9.162" fx="29.345" fy="17.064" id="j" xlink:href="#d" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.788 0 0 .788 6.221 3.618)"/><linearGradient x1="20.662" y1="35.818" x2="22.627" y2="36.218" id="k" xlink:href="#e" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.983 .182 -.182 .983 6.232 -2.651)"/><linearGradient x1="22.687" y1="36.39" x2="21.408" y2="35.74" id="l" xlink:href="#e" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-.978 .21 .21 .978 55.11 -3.945)"/></defs><g color="#000"><path d="M39.775 19.009a8.662 8.662 0 1 1-17.324 0 8.662 8.662 0 1 1 17.324 0z" transform="matrix(.693 0 0 .374 -15.548 3.481)" fill="url(#f)" fill-rule="evenodd" overflow="visible"/><path d="M4.046 12.398h4.137c1.172 0 2.332-.43 2.758-1.655.404-1.163.069-3.378-2.551-5.171h-4.895c-2.62 1.655-2.947 3.917-2.344 5.24.614 1.347 1.655 1.586 2.896 1.586z" fill="url(#g)" fill-rule="evenodd" stroke="#204a87" stroke-linecap="round" stroke-linejoin="round" overflow="visible" stroke-width="0.39"/><path d="M4.321 6.193c1.241 1.103 1.793 5.102 1.793 5.102s.552-3.999 1.517-5.171l-3.309.069z" fill="url(#h)" fill-rule="evenodd" overflow="visible"/><path d="M5.21 6.607s-.839.648-.767 1.428c-.796-.702-.819-2.048-.819-2.048l1.586.62z" fill="#729fcf" fill-rule="evenodd" overflow="visible"/><path d="M4.018 11.992l4.092-.009c1.029 0 2.049-.377 2.422-1.453.355-1.022-.037-2.967-2.338-4.542l-4.495-.095c-2.301 1.453-2.747 3.441-2.208 4.697.538 1.256 1.324 1.393 2.526 1.401z" opacity=".215" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" overflow="visible" fill="none" stroke-width="0.39"/><path d="M6.941 6.607s.839.648.767 1.428c.796-.702.819-2.048.819-2.048l-1.586.62z" fill="#729fcf" fill-rule="evenodd" overflow="visible"/><path d="M39.775 19.009a8.662 8.662 0 1 1-17.324 0 8.662 8.662 0 1 1 17.324 0z" transform="matrix(.39 0 0 .39 -6.138 -2.475)" fill="url(#i)" fill-rule="evenodd" overflow="visible"/><path d="M39.775 19.009a8.662 8.662 0 1 1-17.324 0 8.662 8.662 0 1 1 17.324 0z" fill="url(#j)" fill-rule="evenodd" stroke="#c17d11" stroke-linecap="round" stroke-linejoin="round" overflow="visible" transform="matrix(.39 0 0 .39 -6.089 -3.84)"/><path d="M39.775 19.009a8.662 8.662 0 1 1-17.324 0 8.662 8.662 0 1 1 17.324 0z" transform="matrix(.342 0 0 .342 -4.598 -2.929)" opacity=".196" stroke="#fff" stroke-width="1.14" stroke-linecap="round" stroke-linejoin="round" overflow="visible" fill="none"/><path d="M2.433 12.062c-.487-.213-.704-.725-.704-.725.328-1.587 1.451-2.748 1.451-2.748s-.889 2.5-.746 3.473z" opacity=".228" fill="url(#k)" fill-rule="evenodd" overflow="visible"/><path d="M9.806 11.728c.48-.227.704-.781.704-.781-.374-1.577-1.551-2.669-1.551-2.669s.961 2.474.847 3.45z" opacity=".228" fill="url(#l)" fill-rule="evenodd" overflow="visible"/></g></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/watch-icon-hl.png b/skins/Vector/images/watch-icon-hl.png
new file mode 100644 (file)
index 0000000..4cb87cd
Binary files /dev/null and b/skins/Vector/images/watch-icon-hl.png differ
diff --git a/skins/Vector/images/watch-icon-hl.svg b/skins/Vector/images/watch-icon-hl.svg
new file mode 100644 (file)
index 0000000..664c671
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M8.103 1.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z" fill="#fff" stroke="#c8b250" stroke-width="0.9999199999999999"/></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/watch-icon-loading.png b/skins/Vector/images/watch-icon-loading.png
new file mode 100644 (file)
index 0000000..5f0c490
Binary files /dev/null and b/skins/Vector/images/watch-icon-loading.png differ
diff --git a/skins/Vector/images/watch-icon-loading.svg b/skins/Vector/images/watch-icon-loading.svg
new file mode 100644 (file)
index 0000000..751eb14
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M8.103 1.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z" fill="#fff" stroke="#d1d1d1" stroke-width="0.9999199999999999"/></svg>
\ No newline at end of file
diff --git a/skins/Vector/images/watch-icon.png b/skins/Vector/images/watch-icon.png
new file mode 100644 (file)
index 0000000..39daff2
Binary files /dev/null and b/skins/Vector/images/watch-icon.png differ
diff --git a/skins/Vector/images/watch-icon.svg b/skins/Vector/images/watch-icon.svg
new file mode 100644 (file)
index 0000000..907b05b
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M8.103 1.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z" fill="#fff" stroke="#7cb5d1" stroke-width="0.9999199999999999"/></svg>
\ No newline at end of file
diff --git a/skins/Vector/screen-hd.less b/skins/Vector/screen-hd.less
new file mode 100644 (file)
index 0000000..8b286f4
--- /dev/null
@@ -0,0 +1,30 @@
+/* Vector screen styles for high definition displays */
+
+@import "variables.less";
+
+div#content {
+       margin-left: 11em;
+       padding: 1.25em 1.5em 1.5em 1.5em;
+}
+#p-logo {
+       left: @menu-main-logo-left;
+}
+div#footer {
+       margin-left: 11em;
+       padding: 1.25em;
+}
+#mw-panel {
+       padding-left: 0.5em;
+}
+#p-search {
+       margin-right: 1em;
+}
+#left-navigation {
+       margin-left: 11em;
+}
+#p-personal {
+       right: 1em;
+}
+#mw-head-base {
+       margin-left: 11em;
+}
diff --git a/skins/Vector/screen.less b/skins/Vector/screen.less
new file mode 100644 (file)
index 0000000..f7b374f
--- /dev/null
@@ -0,0 +1,10 @@
+/* Vector screen styles */
+
+@import "variables.less";
+
+@import "components/common.less";
+@import "components/animations.less";
+@import "components/navigation.less";
+@import "components/footer.less";
+@import 'components/notifications.less';
+@import "components/externalLinks.less";
diff --git a/skins/Vector/special.less b/skins/Vector/special.less
new file mode 100644 (file)
index 0000000..6af4b1e
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * Adjusts for decreased margin-bottom for h2 elements inside #content div
+ * introduced in March / April 2014 typography update.
+ */
+table.mw-specialpages-table {
+       margin-top: 0;
+}
diff --git a/skins/Vector/special.preferences.less b/skins/Vector/special.preferences.less
new file mode 100644 (file)
index 0000000..a9b1006
--- /dev/null
@@ -0,0 +1,114 @@
+@import "mediawiki.mixins";
+@import "variables";
+
+/**
+ * The following code is highly modified from monobook. It would be nice if the
+ * preftoc id was more human readable like preferences-toc for instance,
+ * howerver this would require backporting the other skins.
+ */
+
+#preftoc {
+       /* Tabs */
+       width: 100%;
+       float: left;
+       clear: both;
+       margin: 0 !important;
+       padding: 0 !important;
+       .background-image('images/preferences/break.png');
+       background-position: bottom left;
+       background-repeat: no-repeat;
+
+       li {
+               /* Tab */
+               float: left;
+               margin: 0;
+               padding: 0;
+               padding-right: 1px;
+               height: 2.25em;
+               white-space: nowrap;
+               list-style-type: none;
+               list-style-image: none;
+               .background-image('images/preferences/break.png');
+               background-position: bottom right;
+               background-repeat: no-repeat;
+
+               /* Sadly, IE6 won't understand this */
+               &:first-child {
+                       margin-left: 1px;
+               }
+
+               &.selected {
+                       a {
+                               .background-image('images/preferences/fade.png');
+                               background-position: bottom;
+                               background-repeat: repeat-x;
+                               color: #333;
+                               text-decoration: none;
+                       }
+               }
+       }
+
+       a,
+       a:active {
+               display: inline-block;
+               position: relative;
+               color: @menu-link-color;
+               padding: 0.5em;
+               text-decoration: none;
+               background-image: none;
+               font-size: 0.9em;
+       }
+
+       a:hover,
+       a:focus {
+               text-decoration: underline;
+       }
+}
+
+#preferences {
+       float: left;
+       width: 100%;
+       margin: 0;
+       margin-top: -2px;
+       clear: both;
+       border: solid 1px #ccc;
+       background-color: #fafafa;
+
+       fieldset {
+               border: none;
+               border-top: solid 1px #ccc;
+
+               &.prefsection {
+                       border: none;
+                       padding: 0;
+                       margin: 1em;
+
+                       legend.mainLegend {
+                               display: none;
+                       }
+               }
+       }
+
+       legend {
+               color: #666;
+       }
+
+       td {
+               padding-left: 0.5em;
+               padding-right: 0.5em;
+       }
+
+       div.mw-prefs-buttons {
+               padding: 1em;
+
+               input {
+                       margin-right: 0.25em;
+               }
+       }
+}
+
+.htmlform-tip {
+       font-size: x-small;
+       padding: .2em 2em;
+       color: #666;
+}
diff --git a/skins/Vector/variables.less b/skins/Vector/variables.less
new file mode 100644 (file)
index 0000000..b17d15c
--- /dev/null
@@ -0,0 +1,39 @@
+@html-font-size: 100%;
+
+// Page content
+// FIXME: Use global variable since Echo and CentralNotice use this variable
+@content-border-color: #a7d7f9;
+// FIXME: Find an open font that works with this stack and is readable by Windows users
+@content-font-family: sans-serif;
+@content-font-color: #252525;
+@content-font-size: 0.875em;
+@content-line-height: 1.6;
+@content-padding: 1em;
+@content-heading-font-size: 1.8em;
+@content-heading-font-family: "Linux Libertine", Georgia, Times, serif;
+@body-background-color: #fff;
+@heading-line-height: 1.3;
+
+// Navigation
+@menu-background-color: #f6f6f6;
+
+// Common menu
+@menu-link-color: #0645ad;
+
+// Main menu
+@menu-main-font-size: inherit;
+
+@menu-main-heading-font-size: 0.75em;
+@menu-main-heading-padding: 0.25em 0 0.25em 0.25em;
+@menu-main-heading-color: #4d4d4d;
+
+@menu-main-body-font-size: 0.75em;
+@menu-main-body-link-color: #0645ad;
+@menu-main-body-link-visited-color: #0b0080;
+@menu-main-body-margin: 0 0 0 1.25em;
+@menu-main-body-padding: 0;
+
+@menu-main-logo-left: 0.5em;
+
+// Personal menu
+@menu-personal-font-size: 0.75em;
diff --git a/skins/Vector/vector.js b/skins/Vector/vector.js
new file mode 100644 (file)
index 0000000..7be3535
--- /dev/null
@@ -0,0 +1,107 @@
+/**
+ * Vector-specific scripts
+ */
+jQuery( function ( $ ) {
+       /**
+        * Focus search input at the very end
+        */
+       $( '#searchInput' ).attr( 'tabindex', $( document ).lastTabIndex() + 1 );
+
+       /**
+        * Dropdown menu accessibility
+        */
+       $( 'div.vectorMenu' ).each( function () {
+               var $el = $( this );
+               $el.find( '> h3 > a' ).parent()
+                       .attr( 'tabindex', '0' )
+                       // For accessibility, show the menu when the h3 is clicked (bug 24298/46486)
+                       .on( 'click keypress', function ( e ) {
+                               if ( e.type === 'click' || e.which === 13 ) {
+                                       $el.toggleClass( 'menuForceShow' );
+                                       e.preventDefault();
+                               }
+                       } )
+                       // When the heading has focus, also set a class that will change the arrow icon
+                       .focus( function () {
+                               $el.find( '> a' ).addClass( 'vectorMenuFocus' );
+                       } )
+                       .blur( function () {
+                               $el.find( '> a' ).removeClass( 'vectorMenuFocus' );
+                       } )
+                       .find( '> a:first' )
+                       // As the h3 can already be focused there's no need for the link to be focusable
+                       .attr( 'tabindex', '-1' );
+       } );
+
+       /**
+        * Sidebar
+        */
+       $( '#mw-panel > .portal:first' ).addClass( 'first' );
+
+       /**
+        * Collapsible tabs
+        */
+       var $cactions = $( '#p-cactions' ),
+               $tabContainer = $( '#p-views ul' ),
+               originalDropdownWidth = $cactions.width();
+
+       // Bind callback functions to animate our drop down menu in and out
+       // and then call the collapsibleTabs function on the menu
+       $tabContainer
+               .bind( 'beforeTabCollapse', function () {
+                       // If the dropdown was hidden, show it
+                       if ( $cactions.hasClass( 'emptyPortlet' ) ) {
+                               $cactions
+                                       .removeClass( 'emptyPortlet' )
+                                       .find( 'h3' )
+                                               .css( 'width', '1px' ).animate( { 'width': originalDropdownWidth }, 'normal' );
+                       }
+               } )
+               .bind( 'beforeTabExpand', function () {
+                       // If we're removing the last child node right now, hide the dropdown
+                       if ( $cactions.find( 'li' ).length === 1 ) {
+                               $cactions.find( 'h3' ).animate( { 'width': '1px' }, 'normal', function () {
+                                       $( this ).attr( 'style', '' )
+                                               .parent().addClass( 'emptyPortlet' );
+                               });
+                       }
+               } )
+               .collapsibleTabs( {
+                       expandCondition: function ( eleWidth ) {
+                               // (This looks a bit awkward because we're doing expensive queries as late as possible.)
+
+                               var distance = $.collapsibleTabs.calculateTabDistance();
+                               // If there are at least eleWidth + 1 pixels of free space, expand.
+                               // We add 1 because .width() will truncate fractional values but .offset() will not.
+                               if ( distance >= eleWidth + 1 ) {
+                                       return true;
+                               } else {
+                                       // Maybe we can still expand? Account for the width of the "Actions" dropdown if the
+                                       // expansion would hide it.
+                                       if ( $cactions.find( 'li' ).length === 1 ) {
+                                               return distance >= eleWidth + 1 - originalDropdownWidth;
+                                       } else {
+                                               return false;
+                                       }
+                               }
+                       },
+                       collapseCondition: function () {
+                               // (This looks a bit awkward because we're doing expensive queries as late as possible.)
+                               // TODO The dropdown itself should probably "fold" to just the down-arrow (hiding the text)
+                               // if it can't fit on the line?
+
+                               // If there's an overlap, collapse.
+                               if ( $.collapsibleTabs.calculateTabDistance() < 0 ) {
+                                       // But only if the width of the tab to collapse is smaller than the width of the dropdown
+                                       // we would have to insert. An example language where this happens is Lithuanian (lt).
+                                       if ( $cactions.hasClass( 'emptyPortlet' ) ) {
+                                               return $tabContainer.children( 'li.collapsible:last' ).width() > originalDropdownWidth;
+                                       } else {
+                                               return true;
+                                       }
+                               } else {
+                                       return false;
+                               }
+                       }
+               } );
+} );
diff --git a/skins/common/images/icons/fileicon-xcf.png b/skins/common/images/icons/fileicon-xcf.png
new file mode 100644 (file)
index 0000000..1037b50
Binary files /dev/null and b/skins/common/images/icons/fileicon-xcf.png differ
diff --git a/skins/monobook/IE60Fixes.css b/skins/monobook/IE60Fixes.css
deleted file mode 100644 (file)
index cd9399f..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/* 6.0 - only fixes */
-/* content area */
-/* workaround for various ie float bugs */
-div#column-content {
-       float: none;
-       margin-left: 0;
-       height: 1%;
-}
-
-div#column-content div#content {
-       margin-left: 12.2em;
-       margin-top: 3em;
-       height: 1%;
-}
-
-.rtl div#column-content div#content {
-       margin-right: 12.2em;
-       margin-left: 0;
-}
-
-div#column-one {
-       position: absolute;
-       top: 0;
-       left: 0;
-       z-index: 4;
-}
-
-.rtl div#column-one {
-       left: auto;
-       right: 0;
-}
-
-div#footer {
-       margin-left: 13.6em;
-       border-left: 1px solid #fabd23;
-}
-
-.rtl div#footer {
-       margin-left: 0;
-       margin-right: 13.6em;
-       border-left: none;
-       border-right: 1px solid #fabd23;
-}
-
-/* float/negative margin brokenness */
-* html div#footer {
-       margin-top: 0;
-}
-
-* html div#column-content {
-       display: inline;
-       margin-bottom: 0;
-}
-
-/* the tabs */
-
-#p-cactions {
-       z-index: 3;
-}
-
-#p-cactions li {
-       padding-bottom: 0 !important;
-       border: none;
-       background-color: transparent;
-       cursor: default;
-       float: none !important;
-}
-
-#p-cactions li a {
-       display: inline-block !important;
-       vertical-align: top;
-       padding-bottom: 0;
-       border: solid #aaa;
-       border-width: 1px 1px 0;
-}
-
-#p-cactions li.selected a {
-       border-color: #fabd23;
-       padding-bottom: 0.17em;
-}
-
-#p-cactions li a:hover {
-       padding-bottom: 0.17em;
-}
-
-#p-navigation a {
-       display: inline-block;
-       width: 100%;
-}
-
-#portal-personaltools {
-       padding-bottom: 0.1em;
-}
-
-.rtl a.feedlink {
-       background-position: right;
-       padding-right: 0;
-       padding-left: 16px;
-}
-
-/* show the hand */
-#p-logo a,
-#p-logo a:hover {
-       cursor: pointer;
-}
-
-div.visualClear {
-       width: 100%;
-       line-height: 0;
-}
-
-textarea {
-       width: 96%;
-}
-
-#catlinks,
-div.tright,
-div.tleft {
-       position: relative;
-}
-
-/* bug 12846 */
-body.rtl #preftoc a, body.rtl #preftoc a:active {
-       float: left;
-}
diff --git a/skins/monobook/IE70Fixes.css b/skins/monobook/IE70Fixes.css
deleted file mode 100644 (file)
index 42f9ce6..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/* 7.0 - only fixes */
-/* content area */
-/* workaround for various ie float bugs */
-
-/* This bit is needed to make links clickable... WTF */
-div#column-content div#content {
-       margin-left: 12.2em;
-       margin-top: 3em;
-       height: 1%;
-}
-
-.rtl div#column-content div#content {
-       margin-right: 12.2em;
-       margin-left: 0;
-}
-
-.rtl div#column-one {
-       /* For some reason it tries to inherit the padding-top into every div,
-        * and I can't figure out how to get it back off.
-        * Margin works correctly for this use, though.
-        */
-       padding-top: 0;
-       margin-top: 160px;
-}
-
-/* These elements also have padding-left: 20px; in main.css, but in RTL mode this is flipped.
- * That's good in normal browsers, but in IE7 it needs to not be flipped for some daft reason.
- * Also clear the right margin (originally margin-left: 1em)
- */
-li#pt-userpage, li#pt-anonuserpage, li#pt-login {
-       padding-left: 20px;
-       margin-right: 0;
-}
-
-.rtl a.feedlink {
-       background-position: right;
-       padding-right: 0;
-       padding-left: 16px;
-}
-
-/* the tabs */
-
-#p-cactions {
-       z-index: 3;
-}
-
-#p-cactions li {
-       padding-bottom: 0 !important;
-       border: none;
-       background-color: transparent;
-       cursor: default;
-       float: none !important;
-}
-
-#p-cactions li a {
-       display: inline-block !important;
-       vertical-align: top;
-       padding-bottom: 0;
-       border: solid #aaa;
-       border-width: 1px 1px 0;
-}
-
-#p-cactions li.selected a {
-       border-color: #fabd23;
-       padding-bottom: 0.17em;
-}
-
-#p-cactions li a:hover {
-       padding-bottom: 0.17em;
-}
-
-#p-navigation a {
-       display: inline-block;
-       width: 100%;
-}
-
-#portal-personaltools {
-       padding-bottom: 0.1em;
-}
-
-textarea {
-       width: 96%;
-}
-
-/*
-#catlinks,
-div.tright,
-div.tleft {
-       position: relative;
-}
-*/
-
-div#footer li {
-       /* Work around bug with inline <li> tags with right margins and nowrap */
-       margin-right: 0;
-}
diff --git a/skins/monobook/MonoBook.php b/skins/monobook/MonoBook.php
deleted file mode 100644 (file)
index 7385d0e..0000000
+++ /dev/null
@@ -1,411 +0,0 @@
-<?php
-/**
- * MonoBook nouveau.
- *
- * Translated from gwicke's previous TAL template version to remove
- * dependency on PHPTAL.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @todo document
- * @file
- * @ingroup Skins
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
-       die( -1 );
-}
-
-/**
- * Inherit main code from SkinTemplate, set the CSS and template filter.
- * @todo document
- * @ingroup Skins
- */
-class SkinMonoBook extends SkinTemplate {
-       /** Using monobook. */
-       public $skinname = 'monobook';
-       public $stylename = 'monobook';
-       public $template = 'MonoBookTemplate';
-
-       /**
-        * @param OutputPage $out
-        */
-       function setupSkinUserCss( OutputPage $out ) {
-               parent::setupSkinUserCss( $out );
-
-               $out->addModuleStyles( array( 'mediawiki.skinning.interface', 'skins.monobook.styles' ) );
-
-               // TODO: Migrate all of these
-               $out->addStyle( 'monobook/IE60Fixes.css', 'screen', 'IE 6' );
-               $out->addStyle( 'monobook/IE70Fixes.css', 'screen', 'IE 7' );
-       }
-}
-
-/**
- * @todo document
- * @ingroup Skins
- */
-class MonoBookTemplate extends BaseTemplate {
-
-       /**
-        * Template filter callback for MonoBook skin.
-        * Takes an associative array of data set from a SkinTemplate-based
-        * class, and a wrapper for MediaWiki's localization database, and
-        * outputs a formatted page.
-        *
-        * @access private
-        */
-       function execute() {
-               // Suppress warnings to prevent notices about missing indexes in $this->data
-               wfSuppressWarnings();
-
-               $this->html( 'headelement' );
-               ?><div id="globalWrapper">
-               <div id="column-content">
-                       <div id="content" class="mw-body-primary" role="main">
-                               <a id="top"></a>
-                               <?php
-                               if ( $this->data['sitenotice'] ) {
-                                       ?>
-                                       <div id="siteNotice"><?php
-                                       $this->html( 'sitenotice' )
-                                       ?></div><?php
-                               }
-                               ?>
-
-                               <h1 id="firstHeading" class="firstHeading" lang="<?php
-                               $this->data['pageLanguage'] =
-                                       $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
-                               $this->text( 'pageLanguage' );
-                               ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
-
-                               <div id="bodyContent" class="mw-body">
-                                       <div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
-                                       <div id="contentSub"<?php
-                                       $this->html( 'userlangattributes' ) ?>><?php $this->html( 'subtitle' )
-                                               ?></div>
-                                       <?php if ( $this->data['undelete'] ) { ?>
-                                               <div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
-                                       <?php
-}
-                                       ?><?php
-                                       if ( $this->data['newtalk'] ) {
-                                               ?>
-                                               <div class="usermessage"><?php $this->html( 'newtalk' ) ?></div>
-                                       <?php
-                                       }
-                                       ?>
-                                       <div id="jump-to-nav" class="mw-jump"><?php
-                                               $this->msg( 'jumpto' )
-                                               ?> <a href="#column-one"><?php
-                                                       $this->msg( 'jumptonavigation' )
-                                                       ?></a><?php
-                                               $this->msg( 'comma-separator' )
-                                               ?><a href="#searchInput"><?php
-                                                       $this->msg( 'jumptosearch' )
-                                                       ?></a></div>
-
-                                       <!-- start content -->
-                                       <?php $this->html( 'bodytext' ) ?>
-                                       <?php
-                                       if ( $this->data['catlinks'] ) {
-                                               $this->html( 'catlinks' );
-                                       }
-                                       ?>
-                                       <!-- end content -->
-                                       <?php
-                                       if ( $this->data['dataAfterContent'] ) {
-                                               $this->html( 'dataAfterContent'
-                                               );
-                                       }
-                                       ?>
-                                       <div class="visualClear"></div>
-                               </div>
-                       </div>
-               </div>
-               <div id="column-one"<?php $this->html( 'userlangattributes' ) ?>>
-                       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
-                       <?php $this->cactions(); ?>
-                       <div class="portlet" id="p-personal" role="navigation">
-                               <h3><?php $this->msg( 'personaltools' ) ?></h3>
-
-                               <div class="pBody">
-                                       <ul<?php $this->html( 'userlangattributes' ) ?>>
-                                               <?php foreach ( $this->getPersonalTools() as $key => $item ) { ?>
-                                                       <?php echo $this->makeListItem( $key, $item ); ?>
-
-                                               <?php
-}
-                                               ?>
-                                       </ul>
-                               </div>
-                       </div>
-                       <div class="portlet" id="p-logo" role="banner">
-                               <?php
-                               echo Html::element( 'a', array(
-                                               'href' => $this->data['nav_urls']['mainpage']['href'],
-                                               'style' => "background-image: url({$this->data['logopath']});" )
-                                       + Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ); ?>
-
-                       </div>
-                       <?php
-                       $this->renderPortals( $this->data['sidebar'] );
-                       ?>
-               </div><!-- end of the left (by default at least) column -->
-               <div class="visualClear"></div>
-               <?php
-               $validFooterIcons = $this->getFooterIcons( "icononly" );
-               $validFooterLinks = $this->getFooterLinks( "flat" ); // Additional footer links
-
-               if ( count( $validFooterIcons ) + count( $validFooterLinks ) > 0 ) {
-                       ?>
-                       <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
-                       <?php
-                       $footerEnd = '</div>';
-               } else {
-                       $footerEnd = '';
-               }
-
-               foreach ( $validFooterIcons as $blockName => $footerIcons ) {
-                       ?>
-                       <div id="f-<?php echo htmlspecialchars( $blockName ); ?>ico">
-                               <?php foreach ( $footerIcons as $icon ) { ?>
-                                       <?php echo $this->getSkin()->makeFooterIcon( $icon ); ?>
-
-                               <?php
-}
-                               ?>
-                       </div>
-               <?php
-               }
-
-               if ( count( $validFooterLinks ) > 0 ) {
-                       ?>
-                       <ul id="f-list">
-                               <?php
-                               foreach ( $validFooterLinks as $aLink ) {
-                                       ?>
-                                       <li id="<?php echo $aLink ?>"><?php $this->html( $aLink ) ?></li>
-                               <?php
-                               }
-                               ?>
-                       </ul>
-               <?php
-               }
-
-               echo $footerEnd;
-               ?>
-
-               </div>
-               <?php
-               $this->printTrail();
-               echo Html::closeElement( 'body' );
-               echo Html::closeElement( 'html' );
-               wfRestoreWarnings();
-       } // end of execute() method
-
-       /*************************************************************************************************/
-
-       /**
-        * @param array $sidebar
-        */
-       protected function renderPortals( $sidebar ) {
-               if ( !isset( $sidebar['SEARCH'] ) ) {
-                       $sidebar['SEARCH'] = true;
-               }
-               if ( !isset( $sidebar['TOOLBOX'] ) ) {
-                       $sidebar['TOOLBOX'] = true;
-               }
-               if ( !isset( $sidebar['LANGUAGES'] ) ) {
-                       $sidebar['LANGUAGES'] = true;
-               }
-
-               foreach ( $sidebar as $boxName => $content ) {
-                       if ( $content === false ) {
-                               continue;
-                       }
-
-                       if ( $boxName == 'SEARCH' ) {
-                               $this->searchBox();
-                       } elseif ( $boxName == 'TOOLBOX' ) {
-                               $this->toolbox();
-                       } elseif ( $boxName == 'LANGUAGES' ) {
-                               $this->languageBox();
-                       } else {
-                               $this->customBox( $boxName, $content );
-                       }
-               }
-       }
-
-       function searchBox() {
-               global $wgUseTwoButtonsSearchForm;
-               ?>
-               <div id="p-search" class="portlet" role="search">
-                       <h3><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
-
-                       <div id="searchBody" class="pBody">
-                               <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
-                                       <input type='hidden' name="title" value="<?php $this->text( 'searchtitle' ) ?>"/>
-                                       <?php echo $this->makeSearchInput( array( "id" => "searchInput" ) ); ?>
-
-                                       <?php
-                                       echo $this->makeSearchButton(
-                                               "go",
-                                               array( "id" => "searchGoButton", "class" => "searchButton" )
-                                       );
-
-                                       if ( $wgUseTwoButtonsSearchForm ) {
-                                               ?>&#160;
-                                               <?php echo $this->makeSearchButton(
-                                                       "fulltext",
-                                                       array( "id" => "mw-searchButton", "class" => "searchButton" )
-                                               );
-                                       } else {
-                                               ?>
-
-                                               <div><a href="<?php
-                                               $this->text( 'searchaction' )
-                                               ?>" rel="search"><?php $this->msg( 'powersearch-legend' ) ?></a></div><?php
-                                       } ?>
-
-                               </form>
-
-                               <?php $this->renderAfterPortlet( 'search' ); ?>
-                       </div>
-               </div>
-       <?php
-       }
-
-       /**
-        * Prints the cactions bar.
-        * Shared between MonoBook and Modern
-        */
-       function cactions() {
-               ?>
-               <div id="p-cactions" class="portlet" role="navigation">
-                       <h3><?php $this->msg( 'views' ) ?></h3>
-
-                       <div class="pBody">
-                               <ul><?php
-                                       foreach ( $this->data['content_actions'] as $key => $tab ) {
-                                               echo '
-                               ' . $this->makeListItem( $key, $tab );
-                                       } ?>
-
-                               </ul>
-                               <?php $this->renderAfterPortlet( 'cactions' ); ?>
-                       </div>
-               </div>
-       <?php
-       }
-
-       /*************************************************************************************************/
-       function toolbox() {
-               ?>
-               <div class="portlet" id="p-tb" role="navigation">
-                       <h3><?php $this->msg( 'toolbox' ) ?></h3>
-
-                       <div class="pBody">
-                               <ul>
-                                       <?php
-                                       foreach ( $this->getToolbox() as $key => $tbitem ) {
-                                               ?>
-                                               <?php echo $this->makeListItem( $key, $tbitem ); ?>
-
-                                       <?php
-                                       }
-                                       wfRunHooks( 'MonoBookTemplateToolboxEnd', array( &$this ) );
-                                       wfRunHooks( 'SkinTemplateToolboxEnd', array( &$this, true ) );
-                                       ?>
-                               </ul>
-                               <?php $this->renderAfterPortlet( 'tb' ); ?>
-                       </div>
-               </div>
-       <?php
-       }
-
-       /*************************************************************************************************/
-       function languageBox() {
-               if ( $this->data['language_urls'] !== false ) {
-                       ?>
-                       <div id="p-lang" class="portlet" role="navigation">
-                               <h3<?php $this->html( 'userlangattributes' ) ?>><?php $this->msg( 'otherlanguages' ) ?></h3>
-
-                               <div class="pBody">
-                                       <ul>
-                                               <?php foreach ( $this->data['language_urls'] as $key => $langlink ) { ?>
-                                                       <?php echo $this->makeListItem( $key, $langlink ); ?>
-
-                                               <?php
-}
-                                               ?>
-                                       </ul>
-
-                                       <?php $this->renderAfterPortlet( 'lang' ); ?>
-                               </div>
-                       </div>
-               <?php
-               }
-       }
-
-       /*************************************************************************************************/
-       /**
-        * @param string $bar
-        * @param array|string $cont
-        */
-       function customBox( $bar, $cont ) {
-               $portletAttribs = array(
-                       'class' => 'generated-sidebar portlet',
-                       'id' => Sanitizer::escapeId( "p-$bar" ),
-                       'role' => 'navigation'
-               );
-
-               $tooltip = Linker::titleAttrib( "p-$bar" );
-               if ( $tooltip !== false ) {
-                       $portletAttribs['title'] = $tooltip;
-               }
-               echo '  ' . Html::openElement( 'div', $portletAttribs );
-               $msgObj = wfMessage( $bar );
-               ?>
-
-               <h3><?php echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $bar ); ?></h3>
-               <div class='pBody'>
-                       <?php
-                       if ( is_array( $cont ) ) {
-                               ?>
-                               <ul>
-                                       <?php
-                                       foreach ( $cont as $key => $val ) {
-                                               ?>
-                                               <?php echo $this->makeListItem( $key, $val ); ?>
-
-                                       <?php
-                                       }
-                                       ?>
-                               </ul>
-                       <?php
-                       } else {
-                               # allow raw HTML block to be defined by extensions
-                               print $cont;
-                       }
-
-                       $this->renderAfterPortlet( $bar );
-                       ?>
-               </div>
-               </div>
-       <?php
-       }
-} // end of class
diff --git a/skins/monobook/audio.png b/skins/monobook/audio.png
deleted file mode 100644 (file)
index 68c8768..0000000
Binary files a/skins/monobook/audio.png and /dev/null differ
diff --git a/skins/monobook/bullet.gif b/skins/monobook/bullet.gif
deleted file mode 100644 (file)
index b43de48..0000000
Binary files a/skins/monobook/bullet.gif and /dev/null differ
diff --git a/skins/monobook/discussionitem_icon.gif b/skins/monobook/discussionitem_icon.gif
deleted file mode 100644 (file)
index e3ca6d9..0000000
Binary files a/skins/monobook/discussionitem_icon.gif and /dev/null differ
diff --git a/skins/monobook/document.png b/skins/monobook/document.png
deleted file mode 100644 (file)
index ee46a50..0000000
Binary files a/skins/monobook/document.png and /dev/null differ
diff --git a/skins/monobook/external-ltr.png b/skins/monobook/external-ltr.png
deleted file mode 100644 (file)
index 6308383..0000000
Binary files a/skins/monobook/external-ltr.png and /dev/null differ
diff --git a/skins/monobook/external-rtl.png b/skins/monobook/external-rtl.png
deleted file mode 100644 (file)
index 5313234..0000000
Binary files a/skins/monobook/external-rtl.png and /dev/null differ
diff --git a/skins/monobook/file_icon.gif b/skins/monobook/file_icon.gif
deleted file mode 100644 (file)
index 69dbeaf..0000000
Binary files a/skins/monobook/file_icon.gif and /dev/null differ
diff --git a/skins/monobook/headbg.jpg b/skins/monobook/headbg.jpg
deleted file mode 100644 (file)
index 5491c6e..0000000
Binary files a/skins/monobook/headbg.jpg and /dev/null differ
diff --git a/skins/monobook/link_icon.gif b/skins/monobook/link_icon.gif
deleted file mode 100644 (file)
index 168c1a2..0000000
Binary files a/skins/monobook/link_icon.gif and /dev/null differ
diff --git a/skins/monobook/lock_icon.gif b/skins/monobook/lock_icon.gif
deleted file mode 100644 (file)
index f71cd9b..0000000
Binary files a/skins/monobook/lock_icon.gif and /dev/null differ
diff --git a/skins/monobook/magnify-clip.png b/skins/monobook/magnify-clip.png
deleted file mode 100644 (file)
index ffd7637..0000000
Binary files a/skins/monobook/magnify-clip.png and /dev/null differ
diff --git a/skins/monobook/mail_icon.gif b/skins/monobook/mail_icon.gif
deleted file mode 100644 (file)
index cf5680d..0000000
Binary files a/skins/monobook/mail_icon.gif and /dev/null differ
diff --git a/skins/monobook/main.css b/skins/monobook/main.css
deleted file mode 100644 (file)
index cb76ae3..0000000
+++ /dev/null
@@ -1,913 +0,0 @@
-/*
-** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
-** Copyright Gabriel Wicke - http://wikidev.net/
-** License: GPL (http://www.gnu.org/copyleft/gpl.html)
-**
-** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
-** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
-** Michael Zeltner and Geir Bækholt)
-** All you guys rock :)
-*/
-
-div#column-content {
-       width: 100%;
-       float: right;
-       margin: 0 0 .6em -12.2em;
-       padding: 0;
-}
-
-div#content {
-       margin: 2.8em 0 0 12.2em;
-       padding: 1em;
-       position: relative;
-       z-index: 2;
-}
-
-div#column-one {
-       padding-top: 160px;
-}
-
-/* Hide, but keep accessible for screen-readers */
-#column-one h2 {
-       position: absolute;
-       top: -9999px;
-}
-
-div#content {
-       background: white;
-       color: black;
-       border: 1px solid #aaa;
-       border-right: none;
-       line-height: 1.5em;
-}
-
-/* the left column width is specified in class .portlet */
-
-/* Font size:
-** We take advantage of keyword scaling- browsers won't go below 9px
-** More at http://www.w3.org/2003/07/30-font-size
-** http://style.cleverchimp.com/font_size_intervals/altintervals.html
-*/
-
-body {
-       font: x-small sans-serif;
-       /* @embed */
-       background: #f9f9f9 url(headbg.jpg) 0 0 no-repeat;
-       color: black;
-       margin: 0;
-       padding: 0;
-       direction: ltr; /* Needed for RTL flipping */
-       unicode-bidi: embed;
-}
-
-/* scale back up to a sane default */
-div#globalWrapper {
-       font-size: 127%;
-       width: 100%;
-       margin: 0;
-       padding: 0;
-}
-
-/* general styles */
-a {
-       color: #002bb8;
-}
-
-a:visited {
-       color: #5a3696;
-}
-
-a.new,
-#p-personal a.new {
-       color: #cc2200;
-}
-
-ul {
-       list-style-type: square;
-       /* @embed */
-       list-style-image: url(bullet.gif);
-}
-
-input.historysubmit {
-       padding: 0 .3em .3em .3em !important;
-       font-size: 94%;
-       cursor: pointer;
-       height: 1.7em !important;
-       margin-left: 1.6em;
-}
-
-pre, .mw-code {
-       line-height: 1.1em;
-}
-
-#firstHeading {
-       padding-top: 0;
-}
-
-/*
-** the main content area
-*/
-
-#siteNotice {
-       font-size: 95%;
-       padding: 0 0.9em;
-}
-
-#localNotice {
-       margin: 0;
-}
-
-#siteNotice p {
-       margin: 0;
-       padding: 0;
-}
-
-/*
-** classes for special content elements like town boxes
-** intended to be referenced directly from the wiki src
-*/
-
-/*
-** User styles
-*/
-/* table standards */
-table.rimage {
-       float: right;
-       position: relative;
-       margin-left: 1em;
-       margin-bottom: 1em;
-       text-align: center;
-}
-
-/*
-** edit views etc
-*/
-.special li {
-       line-height: 1.4em;
-       margin: 0;
-       padding: 0;
-}
-
-/*
-** keep the whitespace in front of the ^=, hides rule from konqueror
-** this is css3, the validator doesn't like it when validating as css2
-*/
-#bodyContent a.external {
-       /* @embed */
-       background: url(external-ltr.png) center right no-repeat;
-       padding-right: 13px;
-}
-
-#bodyContent a.external[href ^="https://"],
-.link-https {
-       /* @embed */
-       background: url(lock_icon.gif) center right no-repeat;
-       padding-right: 16px;
-}
-
-#bodyContent a.external[href ^="mailto:"],
-.link-mailto {
-       /* @embed */
-       background: url(mail_icon.gif) center right no-repeat;
-       padding-right: 18px;
-}
-
-#bodyContent a.external[href ^="news:"] {
-       /* @embed */
-       background: url(news_icon.png) center right no-repeat;
-       padding-right: 18px;
-}
-
-#bodyContent a.external[href ^="ftp://"],
-.link-ftp {
-       /* @embed */
-       background: url(file_icon.gif) center right no-repeat;
-       padding-right: 18px;
-}
-
-#bodyContent a.external[href ^="irc://"],
-#bodyContent a.external[href ^="ircs://"],
-.link-irc {
-       /* @embed */
-       background: url(discussionitem_icon.gif) center right no-repeat;
-       padding-right: 18px;
-}
-
-#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
-#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
-#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
-#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
-#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
-#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
-.link-audio {
-       /* @embed */
-       background: url(audio.png) center right no-repeat;
-       padding-right: 13px;
-}
-
-#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
-#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
-#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
-#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
-.link-video {
-       /* @embed */
-       background: url(video.png) center right no-repeat;
-       padding-right: 13px;
-}
-
-#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
-#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
-#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
-.link-document {
-       /* @embed */
-       background: url(document.png) center right no-repeat;
-       padding-right: 12px;
-}
-
-/* Interwiki Styling */
-#bodyContent a.extiw,
-#bodyContent a.extiw:active {
-       color: #36b;
-}
-
-/* External links */
-#bodyContent a.external {
-       color: #36b;
-}
-
-/*
-** Structural Elements
-*/
-
-/*
-** general portlet styles (elements in the quickbar)
-*/
-.portlet {
-       border: none;
-       margin: 0 0 .5em;
-       padding: 0;
-       float: none;
-       width: 11.6em;
-       overflow: hidden;
-}
-
-.portlet h3 {
-       background: transparent;
-       padding: 0 1em 0 .5em;
-       display: inline;
-       height: 1em;
-       text-transform: lowercase;
-       font-size: 91%;
-       font-weight: normal;
-       white-space: nowrap;
-}
-
-.pBody {
-       font-size: 95%;
-       background-color: white;
-       color: black;
-       border-collapse: collapse;
-       border: 1px solid #aaa;
-       padding: 0 .8em .3em .5em;
-}
-
-/* allows .pBody styles to wrap around content added via BaseTemplateAfterPortlet hook */
-.pBody:after {
-       content: '';
-       clear: both;
-       display: block;
-}
-
-.portlet ul {
-       line-height: 1.5em;
-       font-size: 95%;
-}
-
-.portlet li {
-       padding: 0;
-       margin: 0;
-}
-
-/*
-** Logo properties
-*/
-
-#p-logo {
-       top: 0;
-       left: 0;
-       position: absolute; /*needed to use z-index */
-       z-index: 3;
-       height: 155px;
-       width: 12em;
-       overflow: visible;
-}
-
-#p-logo h3 {
-       display: none;
-}
-
-#p-logo a,
-#p-logo a:hover {
-       display: block;
-       height: 155px;
-       width: 12.2em;
-       background-repeat: no-repeat;
-       background-position: 35% 50% !important;
-       text-decoration: none;
-}
-
-/*
-** Search portlet
-*/
-#p-search {
-       position: relative;
-       z-index: 3;
-}
-
-input.searchButton {
-       margin-top: 1px;
-       font-size: 95%;
-}
-
-#searchGoButton {
-       padding-left: .5em;
-       padding-right: .5em;
-       font-weight: bold;
-}
-
-#searchInput {
-       width: 10.9em;
-       margin: 0;
-       font-size: 95%;
-}
-
-#p-search .pBody {
-       padding: .5em .4em .4em .4em;
-       text-align: center;
-}
-
-#p-search #searchform div div {
-       margin-top: .4em;
-       font-size: 95%;
-}
-
-/*
-** the personal toolbar
-*/
-#p-personal {
-       position: absolute;
-       left: 0;
-       top: 0;
-       z-index: 3;
-}
-
-#p-personal {
-       width: 100%;
-       white-space: nowrap;
-       padding: 0;
-       margin: 0;
-       border: none;
-       background: none;
-       overflow: visible;
-       line-height: 1.2em;
-}
-
-#p-personal h3 {
-       display: none;
-}
-
-#p-personal .portlet,
-#p-personal .pBody {
-       z-index: 0;
-       padding: 0;
-       margin: 0;
-       border: none;
-       overflow: visible;
-       background: none;
-}
-
-/* this is the ul contained in the portlet */
-#p-personal ul {
-       border: none;
-       line-height: 1.4em;
-       color: #2f6fab;
-       padding: 0 2em 0 3em;
-       margin: 0;
-       text-align: right;
-       list-style-type: none;
-       list-style-image: none;
-       z-index: 0;
-       background: none;
-       cursor: default;
-}
-
-#p-personal li {
-       z-index: 0;
-       border: none;
-       padding: 0;
-       display: inline;
-       color: #2f6fab;
-       margin-left: 1em;
-       line-height: 1.2em;
-       background: none;
-}
-
-#p-personal li a {
-       text-decoration: none;
-       color: #005896;
-       padding-bottom: .2em;
-       background: none;
-}
-
-#p-personal li a:hover {
-       background-color: white;
-       padding-bottom: .2em;
-       text-decoration: none;
-}
-
-#p-personal li.active a:hover {
-       background-color: transparent;
-}
-
-/* The icon in front of the username / login link */
-li#pt-userpage,
-li#pt-anonuserpage,
-li#pt-login {
-       /* @embed */
-       background: url(user.gif) top left no-repeat;
-       padding-left: 20px;
-}
-
-#p-personal ul {
-       text-transform: lowercase;
-}
-
-/* Don't lowercase username or IP addresses (IPv6) */
-li#pt-userpage,
-li#pt-anonuserpage {
-       text-transform: none;
-}
-
-#p-personal li.active {
-       font-weight: bold;
-}
-
-/*
-** the page-related actions- page/talk, edit etc
-*/
-#p-cactions {
-       position: absolute;
-       top: 1.3em;
-       left: 11.5em;
-       margin: 0;
-       white-space: nowrap;
-       width: 76%;
-       line-height: 1.1em;
-       overflow: visible;
-       background: none;
-       border-collapse: collapse;
-       padding-left: 1em;
-       font-size: 95%;
-}
-
-#p-cactions ul {
-       list-style-type: none;
-       list-style-image: none;
-}
-
-#p-cactions li {
-       display: inline;
-       border: 1px solid #aaa;
-       border-bottom: none;
-       padding: 0 0 1em 0;
-       margin: 0 .3em 0 0;
-       overflow: visible;
-       background: white;
-}
-
-#p-cactions li.selected {
-       border-color: #fabd23;
-       font-weight: bold;
-}
-
-#p-cactions li a {
-       background-color: #fbfbfb;
-       color: #002bb8;
-       border: none;
-       padding: 0 .8em .3em;
-       position: relative;
-       z-index: 0;
-       margin: 0;
-       text-decoration: none;
-}
-
-#p-cactions li.selected a {
-       z-index: 3;
-       background-color: white;
-}
-
-#p-cactions .new a {
-       color: #ba0000;
-}
-
-#p-cactions li a:hover {
-       z-index: 3;
-       text-decoration: none;
-       background-color: white;
-}
-
-#p-cactions h3 {
-       display: none;
-}
-
-#p-cactions li.istalk {
-       margin-right: 0;
-}
-
-#p-cactions li.istalk a {
-       padding-right: .5em;
-}
-
-#p-cactions #ca-addsection a {
-       padding-left: .4em;
-       padding-right: .4em;
-}
-
-/* offsets to distinguish the tab groups */
-li#ca-talk {
-       margin-right: 1.6em;
-}
-
-li#ca-watch,
-li#ca-unwatch,
-li#ca-varlang-0,
-li#ca-print {
-       margin-left: 1.6em;
-}
-
-#p-cactions .pBody {
-       font-size: 1em;
-       background-color: transparent;
-       color: inherit;
-       border-collapse: inherit;
-       border: 0;
-       padding: 0;
-}
-
-#p-cactions li a {
-       text-transform: lowercase;
-}
-
-#p-lang {
-       position: relative;
-       z-index: 3;
-}
-
-/* Override text-transform on languages where capitalization is significant */
-.capitalize-all-nouns .portlet h3,
-.capitalize-all-nouns #p-personal ul,
-.capitalize-all-nouns #p-cactions ul li a {
-       text-transform: none;
-}
-
-/* TODO: #t-iscite is only used by the Cite extension, come up with some
- * system which allows extensions to add to this file on the fly
- */
-#t-ispermalink, #t-iscite {
-       color: #999;
-}
-
-/*
-** footer
-*/
-div#footer {
-       background-color: white;
-       border-top: 1px solid #fabd23;
-       border-bottom: 1px solid #fabd23;
-       margin: .6em 0 1em 0;
-       overflow: hidden;
-       padding: .4em 0 .3em 0;
-       text-align: center;
-       font-size: 90%;
-}
-
-div#footer li {
-       display: inline;
-       margin: 0 1.3em;
-}
-
-#f-poweredbyico, #f-copyrightico {
-       margin: 0 8px;
-       position: relative;
-       top: -2px; /* Bump it up just a tad */
-}
-
-#f-poweredbyico {
-       float: right;
-       height: 1%;
-}
-
-#f-copyrightico {
-       float: left;
-       height: 1%;
-}
-
-.mw-htmlform-submit {
-       font-weight: bold;
-       padding-left: .3em;
-       padding-right: .3em;
-       margin-right: 2em;
-}
-
-/* js pref toc */
-#preftoc {
-       margin: 0;
-       padding: 0;
-       width: 100%;
-       clear: both;
-}
-
-#preftoc li {
-       background-color: #f0f0f0;
-       color: #000;
-}
-
-#preftoc li {
-       margin: 1px -2px 1px 2px;
-       float: left;
-       padding: 2px 0 3px 0;
-       border: 1px solid #fff;
-       border-right-color: #716f64;
-       border-bottom: 0;
-       position: relative;
-       white-space: nowrap;
-       list-style-type: none;
-       list-style-image: none;
-       z-index: 3;
-}
-
-#preftoc li.selected {
-       font-weight: bold;
-       background-color: #f9f9f9;
-       border: 1px solid #aaa;
-       border-bottom: none;
-       cursor: default;
-       top: 1px;
-       padding-top: 2px;
-       margin-right: -3px;
-}
-
-#preftoc > li.selected {
-       top: 2px;
-}
-
-#preftoc a,
-#preftoc a:active {
-       display: block;
-       color: #000;
-       padding: 0 .7em;
-       position: relative;
-       text-decoration: none;
-}
-
-#preftoc li.selected a {
-       cursor: default;
-       text-decoration: none;
-}
-
-#preferences {
-       margin: 0;
-       border: 1px solid #aaa;
-       clear: both;
-       padding: 1.5em;
-       background-color: #F9F9F9;
-}
-
-.prefsection {
-       border: none;
-       padding: 0;
-       margin: 0;
-}
-
-.prefsection legend {
-       font-weight: bold;
-}
-
-.prefsection table, .prefsection legend {
-       background-color: #F9F9F9;
-}
-
-.mainLegend {
-       display: none;
-}
-
-td.htmlform-tip {
-       font-size: x-small;
-       padding: .2em 2em;
-       color: #666;
-}
-
-.preferences-login {
-       clear: both;
-       margin-bottom: 1.5em;
-}
-
-.prefcache {
-       font-size: 90%;
-       margin-top: 2em;
-}
-
-#userloginprompt, #languagelinks {
-       font-size: 85%;
-}
-
-#login-sectiontip {
-       font-size: 85%;
-       line-height: 1.2;
-       padding-top: 2em;
-}
-
-#userloginlink a, #wpLoginattempt, #wpCreateaccount {
-       font-weight: bold;
-}
-
-/**
- * This was originally added by Gabriel Wicke in r3681 (committed on 25 May 2004)
- * with the commit message "tweaks to page history".
- * Unlike the other IE/Mac fixes that used to be present here, this seems to get
- * applied on more modern browsers, so let's keep it here until someone has the
- * time to properly test it out.
- */
-#pagehistory li.selected {
-       position: relative;
-}
-
-.redirectText {
-       font-size: 150%;
-       margin: 5px;
-}
-
-div.patrollink {
-       clear: both;
-}
-
-.sharedUploadNotice {
-       font-style: italic;
-}
-
-span.updatedmarker {
-       color: black;
-       background-color: #0f0;
-}
-
-.editExternally {
-       border: 1px solid gray;
-       background-color: #ffffff;
-       padding: 3px;
-       margin-top: 0.5em;
-       float: left;
-       font-size: small;
-       text-align: center;
-}
-
-.editExternallyHelp {
-       font-style: italic;
-       color: gray;
-}
-
-.toggle {
-       margin-left: 2em;
-       text-indent: -2em;
-}
-
-/* @bug 1714 */
-input#wpSave,
-input#wpDiff {
-       margin-right: 0.33em;
-}
-
-#wpSave {
-       font-weight: bold;
-}
-
-/* noarticletext */
-div.noarticletext {
-       border: 1px solid #ccc;
-       background: #fff;
-       padding: .2em 1em;
-       color: #000;
-}
-
-div#searchTargetContainer {
-       left: 10px;
-       top: 10px;
-       width: 90%;
-       background: white;
-}
-
-div#searchTarget {
-       padding: 3px;
-       margin: 5px;
-       background: #F0F0F0;
-       border: solid 1px blue;
-}
-
-div#searchTarget ul li {
-       list-style-type: none;
-       list-style-image: none;
-}
-
-div#searchTarget ul li:before {
-       color: orange;
-       content: "\00BB \0020";
-}
-
-div#searchTargetHide {
-       float: right;
-       border: solid 1px black;
-       background: #DCDCDC;
-       padding: 2px;
-}
-
-#powersearch p {
-       margin-top: 0;
-}
-
-div.multipageimagenavbox {
-       border: solid 1px silver;
-       padding: 4px;
-       margin: 1em;
-       background: #f0f0f0;
-}
-
-div.multipageimagenavbox div.thumb {
-       border: none;
-       margin-left: 2em;
-       margin-right: 2em;
-}
-
-div.multipageimagenavbox hr {
-       margin: 6px;
-}
-
-table.multipageimage td {
-       text-align: center;
-}
-
-.templatesUsed {
-       margin-top: 1.5em;
-}
-
-.mw-summary-preview {
-       margin: 0.1em 0;
-}
-
-/* Friendlier slave lag warnings */
-div.mw-lag-warn-normal,
-div.mw-lag-warn-high {
-       padding: 3px;
-       text-align: center;
-       margin: 3px auto;
-}
-
-div.mw-lag-warn-normal {
-       border: 1px solid #FFCC66;
-       background-color: #FFFFCC;
-}
-
-div.mw-lag-warn-high {
-       font-weight: bold;
-       border: 2px solid #FF0033;
-       background-color: #FFCCCC;
-}
-
-.MediaTransformError {
-       background-color: #ccc;
-       padding: 0.1em;
-}
-
-.MediaTransformError td {
-       text-align: center;
-       vertical-align: middle;
-       font-size: 90%;
-}
-
-/* God-damned hack for the crappy layout */
-.os-suggest {
-       font-size: 127%;
-}
-
-/* Sometimes people don't want personal tools to be lowercase! */
-.no-text-transform {
-       text-transform: none;
-}
-
-/* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */
-.tipsy {
-       font-size: 127%;
-}
-
-/* mediawiki.notification */
-.skin-monobook .mw-notification {
-       box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.125);
-}
diff --git a/skins/monobook/news_icon.png b/skins/monobook/news_icon.png
deleted file mode 100644 (file)
index 4d3cb47..0000000
Binary files a/skins/monobook/news_icon.png and /dev/null differ
diff --git a/skins/monobook/required.gif b/skins/monobook/required.gif
deleted file mode 100644 (file)
index bd71976..0000000
Binary files a/skins/monobook/required.gif and /dev/null differ
diff --git a/skins/monobook/user.gif b/skins/monobook/user.gif
deleted file mode 100644 (file)
index 34b4839..0000000
Binary files a/skins/monobook/user.gif and /dev/null differ
diff --git a/skins/monobook/video.png b/skins/monobook/video.png
deleted file mode 100644 (file)
index d86dbe0..0000000
Binary files a/skins/monobook/video.png and /dev/null differ
diff --git a/skins/monobook/wiki-indexed.png b/skins/monobook/wiki-indexed.png
deleted file mode 100644 (file)
index 799ebac..0000000
Binary files a/skins/monobook/wiki-indexed.png and /dev/null differ
diff --git a/skins/monobook/wiki.png b/skins/monobook/wiki.png
deleted file mode 100644 (file)
index 8c42118..0000000
Binary files a/skins/monobook/wiki.png and /dev/null differ
diff --git a/skins/vector/Vector.php b/skins/vector/Vector.php
deleted file mode 100644 (file)
index 650a52b..0000000
+++ /dev/null
@@ -1,660 +0,0 @@
-<?php
-/**
- * Vector - Modern version of MonoBook with fresh look and many usability
- * improvements.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @todo document
- * @file
- * @ingroup Skins
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
-       die( -1 );
-}
-
-/**
- * SkinTemplate class for Vector skin
- * @ingroup Skins
- */
-class SkinVector extends SkinTemplate {
-       public $skinname = 'vector';
-       public $stylename = 'vector';
-       public $template = 'VectorTemplate';
-
-       protected static $bodyClasses = array( 'vector-animateLayout' );
-
-       /**
-        * Initializes output page and sets up skin-specific parameters
-        * @param OutputPage $out Object to initialize
-        */
-       public function initPage( OutputPage $out ) {
-               global $wgLocalStylePath;
-
-               parent::initPage( $out );
-
-               // Append CSS which includes IE only behavior fixes for hover support -
-               // this is better than including this in a CSS file since it doesn't
-               // wait for the CSS file to load before fetching the HTC file.
-               $min = $this->getRequest()->getFuzzyBool( 'debug' ) ? '' : '.min';
-               $out->addHeadItem( 'csshover',
-                       '<!--[if lt IE 7]><style type="text/css">body{behavior:url("' .
-                               htmlspecialchars( $wgLocalStylePath ) .
-                               "/{$this->stylename}/csshover{$min}.htc\")}</style><![endif]-->"
-               );
-
-               $out->addModules( array( 'skins.vector.js' ) );
-       }
-
-       /**
-        * Loads skin and user CSS files.
-        * @param OutputPage $out
-        */
-       function setupSkinUserCss( OutputPage $out ) {
-               parent::setupSkinUserCss( $out );
-
-               $styles = array( 'mediawiki.skinning.interface', 'skins.vector.styles' );
-               wfRunHooks( 'SkinVectorStyleModules', array( $this, &$styles ) );
-               $out->addModuleStyles( $styles );
-       }
-
-       /**
-        * Adds classes to the body element.
-        *
-        * @param OutputPage $out
-        * @param array &$bodyAttrs Array of attributes that will be set on the body element
-        */
-       function addToBodyAttributes( $out, &$bodyAttrs ) {
-               if ( isset( $bodyAttrs['class'] ) && strlen( $bodyAttrs['class'] ) > 0 ) {
-                       $bodyAttrs['class'] .= ' ' . implode( ' ', static::$bodyClasses );
-               } else {
-                       $bodyAttrs['class'] = implode( ' ', static::$bodyClasses );
-               }
-       }
-}
-
-/**
- * QuickTemplate class for Vector skin
- * @ingroup Skins
- */
-class VectorTemplate extends BaseTemplate {
-       /* Functions */
-
-       /**
-        * Outputs the entire contents of the (X)HTML page
-        */
-       public function execute() {
-               global $wgVectorUseIconWatch;
-
-               // Build additional attributes for navigation urls
-               $nav = $this->data['content_navigation'];
-
-               if ( $wgVectorUseIconWatch ) {
-                       $mode = $this->getSkin()->getUser()->isWatched( $this->getSkin()->getRelevantTitle() )
-                               ? 'unwatch'
-                               : 'watch';
-
-                       if ( isset( $nav['actions'][$mode] ) ) {
-                               $nav['views'][$mode] = $nav['actions'][$mode];
-                               $nav['views'][$mode]['class'] = rtrim( 'icon ' . $nav['views'][$mode]['class'], ' ' );
-                               $nav['views'][$mode]['primary'] = true;
-                               unset( $nav['actions'][$mode] );
-                       }
-               }
-
-               $xmlID = '';
-               foreach ( $nav as $section => $links ) {
-                       foreach ( $links as $key => $link ) {
-                               if ( $section == 'views' && !( isset( $link['primary'] ) && $link['primary'] ) ) {
-                                       $link['class'] = rtrim( 'collapsible ' . $link['class'], ' ' );
-                               }
-
-                               $xmlID = isset( $link['id'] ) ? $link['id'] : 'ca-' . $xmlID;
-                               $nav[$section][$key]['attributes'] =
-                                       ' id="' . Sanitizer::escapeId( $xmlID ) . '"';
-                               if ( $link['class'] ) {
-                                       $nav[$section][$key]['attributes'] .=
-                                               ' class="' . htmlspecialchars( $link['class'] ) . '"';
-                                       unset( $nav[$section][$key]['class'] );
-                               }
-                               if ( isset( $link['tooltiponly'] ) && $link['tooltiponly'] ) {
-                                       $nav[$section][$key]['key'] =
-                                               Linker::tooltip( $xmlID );
-                               } else {
-                                       $nav[$section][$key]['key'] =
-                                               Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( $xmlID ) );
-                               }
-                       }
-               }
-               $this->data['namespace_urls'] = $nav['namespaces'];
-               $this->data['view_urls'] = $nav['views'];
-               $this->data['action_urls'] = $nav['actions'];
-               $this->data['variant_urls'] = $nav['variants'];
-
-               // Reverse horizontally rendered navigation elements
-               if ( $this->data['rtl'] ) {
-                       $this->data['view_urls'] =
-                               array_reverse( $this->data['view_urls'] );
-                       $this->data['namespace_urls'] =
-                               array_reverse( $this->data['namespace_urls'] );
-                       $this->data['personal_urls'] =
-                               array_reverse( $this->data['personal_urls'] );
-               }
-               // Output HTML Page
-               $this->html( 'headelement' );
-               ?>
-               <div id="mw-page-base" class="noprint"></div>
-               <div id="mw-head-base" class="noprint"></div>
-               <div id="content" class="mw-body" role="main">
-                       <a id="top"></a>
-
-                       <?php
-                       if ( $this->data['sitenotice'] ) {
-                               ?>
-                               <div id="siteNotice"><?php $this->html( 'sitenotice' ) ?></div>
-                       <?php
-                       }
-                       ?>
-                       <h1 id="firstHeading" class="firstHeading" lang="<?php
-                       $this->data['pageLanguage'] =
-                               $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
-                       $this->text( 'pageLanguage' );
-                       ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
-                       <?php $this->html( 'prebodyhtml' ) ?>
-                       <div id="bodyContent" class="mw-body-content">
-                               <?php
-                               if ( $this->data['isarticle'] ) {
-                                       ?>
-                                       <div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
-                               <?php
-                               }
-                               ?>
-                               <div id="contentSub"<?php
-                               $this->html( 'userlangattributes' )
-                               ?>><?php $this->html( 'subtitle' ) ?></div>
-                               <?php
-                               if ( $this->data['undelete'] ) {
-                                       ?>
-                                       <div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
-                               <?php
-                               }
-                               ?>
-                               <?php
-                               if ( $this->data['newtalk'] ) {
-                                       ?>
-                                       <div class="usermessage"><?php $this->html( 'newtalk' ) ?></div>
-                               <?php
-                               }
-                               ?>
-                               <div id="jump-to-nav" class="mw-jump">
-                                       <?php $this->msg( 'jumpto' ) ?>
-                                       <a href="#mw-navigation"><?php
-                                               $this->msg( 'jumptonavigation' )
-                                               ?></a><?php
-                                       $this->msg( 'comma-separator' )
-                                       ?>
-                                       <a href="#p-search"><?php $this->msg( 'jumptosearch' ) ?></a>
-                               </div>
-                               <?php $this->html( 'bodycontent' ) ?>
-                               <?php
-                               if ( $this->data['printfooter'] ) {
-                                       ?>
-                                       <div class="printfooter">
-                                               <?php $this->html( 'printfooter' ); ?>
-                                       </div>
-                               <?php
-                               }
-                               ?>
-                               <?php
-                               if ( $this->data['catlinks'] ) {
-                                       ?>
-                                       <?php
-                                       $this->html( 'catlinks' );
-                                       ?>
-                               <?php
-                               }
-                               ?>
-                               <?php
-                               if ( $this->data['dataAfterContent'] ) {
-                                       ?>
-                                       <?php
-                                       $this->html( 'dataAfterContent' );
-                                       ?>
-                               <?php
-                               }
-                               ?>
-                               <div class="visualClear"></div>
-                               <?php $this->html( 'debughtml' ); ?>
-                       </div>
-               </div>
-               <div id="mw-navigation">
-                       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
-
-                       <div id="mw-head">
-                               <?php $this->renderNavigation( 'PERSONAL' ); ?>
-                               <div id="left-navigation">
-                                       <?php $this->renderNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?>
-                               </div>
-                               <div id="right-navigation">
-                                       <?php $this->renderNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?>
-                               </div>
-                       </div>
-                       <div id="mw-panel">
-                               <div id="p-logo" role="banner"><a style="background-image: url(<?php
-                                       $this->text( 'logopath' )
-                                       ?>);" href="<?php
-                                       echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] )
-                                       ?>" <?php
-                                       echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) )
-                                       ?>></a></div>
-                               <?php $this->renderPortals( $this->data['sidebar'] ); ?>
-                       </div>
-               </div>
-               <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
-                       <?php
-                       foreach ( $this->getFooterLinks() as $category => $links ) {
-                               ?>
-                               <ul id="footer-<?php
-                               echo $category
-                               ?>">
-                                       <?php
-                                       foreach ( $links as $link ) {
-                                               ?>
-                                               <li id="footer-<?php
-                                               echo $category
-                                               ?>-<?php
-                                               echo $link
-                                               ?>"><?php
-                                                       $this->html( $link )
-                                                       ?></li>
-                                       <?php
-                                       }
-                                       ?>
-                               </ul>
-                       <?php
-                       }
-                       ?>
-                       <?php $footericons = $this->getFooterIcons( "icononly" );
-                       if ( count( $footericons ) > 0 ) {
-                               ?>
-                               <ul id="footer-icons" class="noprint">
-                                       <?php
-                                       foreach ( $footericons as $blockName => $footerIcons ) {
-                                               ?>
-                                               <li id="footer-<?php
-                                               echo htmlspecialchars( $blockName ); ?>ico">
-                                                       <?php
-                                                       foreach ( $footerIcons as $icon ) {
-                                                               ?>
-                                                               <?php
-                                                               echo $this->getSkin()->makeFooterIcon( $icon );
-                                                               ?>
-
-                                                       <?php
-                                                       }
-                                                       ?>
-                                               </li>
-                                       <?php
-                                       }
-                                       ?>
-                               </ul>
-                       <?php
-                       }
-                       ?>
-                       <div style="clear:both"></div>
-               </div>
-               <?php $this->printTrail(); ?>
-
-       </body>
-</html>
-       <?php
-       }
-
-       /**
-        * Render a series of portals
-        *
-        * @param array $portals
-        */
-       protected function renderPortals( $portals ) {
-               // Force the rendering of the following portals
-               if ( !isset( $portals['SEARCH'] ) ) {
-                       $portals['SEARCH'] = true;
-               }
-               if ( !isset( $portals['TOOLBOX'] ) ) {
-                       $portals['TOOLBOX'] = true;
-               }
-               if ( !isset( $portals['LANGUAGES'] ) ) {
-                       $portals['LANGUAGES'] = true;
-               }
-               // Render portals
-               foreach ( $portals as $name => $content ) {
-                       if ( $content === false ) {
-                               continue;
-                       }
-
-                       switch ( $name ) {
-                               case 'SEARCH':
-                                       break;
-                               case 'TOOLBOX':
-                                       $this->renderPortal( 'tb', $this->getToolbox(), 'toolbox', 'SkinTemplateToolboxEnd' );
-                                       break;
-                               case 'LANGUAGES':
-                                       if ( $this->data['language_urls'] !== false ) {
-                                               $this->renderPortal( 'lang', $this->data['language_urls'], 'otherlanguages' );
-                                       }
-                                       break;
-                               default:
-                                       $this->renderPortal( $name, $content );
-                                       break;
-                       }
-               }
-       }
-
-       /**
-        * @param string $name
-        * @param array $content
-        * @param null|string $msg
-        * @param null|string|array $hook
-        */
-       protected function renderPortal( $name, $content, $msg = null, $hook = null ) {
-               if ( $msg === null ) {
-                       $msg = $name;
-               }
-               $msgObj = wfMessage( $msg );
-               ?>
-               <div class="portal" role="navigation" id='<?php
-               echo Sanitizer::escapeId( "p-$name" )
-               ?>'<?php
-               echo Linker::tooltip( 'p-' . $name )
-               ?> aria-labelledby='<?php echo Sanitizer::escapeId( "p-$name-label" ) ?>'>
-                       <h3<?php
-                       $this->html( 'userlangattributes' )
-                       ?> id='<?php
-                       echo Sanitizer::escapeId( "p-$name-label" )
-                       ?>'><?php
-                               echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg );
-                               ?></h3>
-
-                       <div class="body">
-                               <?php
-                               if ( is_array( $content ) ) {
-                                       ?>
-                                       <ul>
-                                               <?php
-                                               foreach ( $content as $key => $val ) {
-                                                       ?>
-                                                       <?php echo $this->makeListItem( $key, $val ); ?>
-
-                                               <?php
-                                               }
-                                               if ( $hook !== null ) {
-                                                       wfRunHooks( $hook, array( &$this, true ) );
-                                               }
-                                               ?>
-                                       </ul>
-                               <?php
-                               } else {
-                                       ?>
-                                       <?php
-                                       echo $content; /* Allow raw HTML block to be defined by extensions */
-                               }
-
-                               $this->renderAfterPortlet( $name );
-                               ?>
-                       </div>
-               </div>
-       <?php
-       }
-
-       /**
-        * Render one or more navigations elements by name, automatically reveresed
-        * when UI is in RTL mode
-        *
-        * @param array $elements
-        */
-       protected function renderNavigation( $elements ) {
-               global $wgVectorUseSimpleSearch;
-
-               // If only one element was given, wrap it in an array, allowing more
-               // flexible arguments
-               if ( !is_array( $elements ) ) {
-                       $elements = array( $elements );
-                       // If there's a series of elements, reverse them when in RTL mode
-               } elseif ( $this->data['rtl'] ) {
-                       $elements = array_reverse( $elements );
-               }
-               // Render elements
-               foreach ( $elements as $name => $element ) {
-                       switch ( $element ) {
-                               case 'NAMESPACES':
-                                       ?>
-                                       <div id="p-namespaces" role="navigation" class="vectorTabs<?php
-                                       if ( count( $this->data['namespace_urls'] ) == 0 ) {
-                                               echo ' emptyPortlet';
-                                       }
-                                       ?>" aria-labelledby="p-namespaces-label">
-                                               <h3 id="p-namespaces-label"><?php $this->msg( 'namespaces' ) ?></h3>
-                                               <ul<?php $this->html( 'userlangattributes' ) ?>>
-                                                       <?php
-                                                       foreach ( $this->data['namespace_urls'] as $link ) {
-                                                               ?>
-                                                               <li <?php
-                                                               echo $link['attributes']
-                                                               ?>><span><a href="<?php
-                                                                               echo htmlspecialchars( $link['href'] )
-                                                                               ?>" <?php
-                                                                               echo $link['key']
-                                                                               ?>><?php
-                                                                                       echo htmlspecialchars( $link['text'] )
-                                                                                       ?></a></span></li>
-                                                       <?php
-                                                       }
-                                                       ?>
-                                               </ul>
-                                       </div>
-                                       <?php
-                                       break;
-                               case 'VARIANTS':
-                                       ?>
-                                       <div id="p-variants" role="navigation" class="vectorMenu<?php
-                                       if ( count( $this->data['variant_urls'] ) == 0 ) {
-                                               echo ' emptyPortlet';
-                                       }
-                                       ?>" aria-labelledby="p-variants-label">
-                                               <h3 id="mw-vector-current-variant">
-                                                       <?php
-                                                       foreach ( $this->data['variant_urls'] as $link ) {
-                                                               ?>
-                                                               <?php
-                                                               if ( stripos( $link['attributes'], 'selected' ) !== false ) {
-                                                                       ?>
-                                                                       <?php
-                                                                       echo htmlspecialchars( $link['text'] )
-                                                                       ?>
-                                                               <?php
-                                                               }
-                                                               ?>
-                                                       <?php
-                                                       }
-                                                       ?>
-                                               </h3>
-
-                                               <h3 id="p-variants-label"><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h3>
-
-                                               <div class="menu">
-                                                       <ul>
-                                                               <?php
-                                                               foreach ( $this->data['variant_urls'] as $link ) {
-                                                                       ?>
-                                                                       <li<?php
-                                                                       echo $link['attributes']
-                                                                       ?>><a href="<?php
-                                                                               echo htmlspecialchars( $link['href'] )
-                                                                               ?>" lang="<?php
-                                                                               echo htmlspecialchars( $link['lang'] )
-                                                                               ?>" hreflang="<?php
-                                                                               echo htmlspecialchars( $link['hreflang'] )
-                                                                               ?>" <?php
-                                                                               echo $link['key']
-                                                                               ?>><?php
-                                                                                       echo htmlspecialchars( $link['text'] )
-                                                                                       ?></a></li>
-                                                               <?php
-                                                               }
-                                                               ?>
-                                                       </ul>
-                                               </div>
-                                       </div>
-                                       <?php
-                                       break;
-                               case 'VIEWS':
-                                       ?>
-                                       <div id="p-views" role="navigation" class="vectorTabs<?php
-                                       if ( count( $this->data['view_urls'] ) == 0 ) {
-                                               echo ' emptyPortlet';
-                                       }
-                                       ?>" aria-labelledby="p-views-label">
-                                               <h3 id="p-views-label"><?php $this->msg( 'views' ) ?></h3>
-                                               <ul<?php
-                                               $this->html( 'userlangattributes' )
-                                               ?>>
-                                                       <?php
-                                                       foreach ( $this->data['view_urls'] as $link ) {
-                                                               ?>
-                                                               <li<?php
-                                                               echo $link['attributes']
-                                                               ?>><span><a href="<?php
-                                                                               echo htmlspecialchars( $link['href'] )
-                                                                               ?>" <?php
-                                                                               echo $link['key']
-                                                                               ?>><?php
-                                                                                       // $link['text'] can be undefined - bug 27764
-                                                                                       if ( array_key_exists( 'text', $link ) ) {
-                                                                                               echo array_key_exists( 'img', $link )
-                                                                                                       ? '<img src="' . $link['img'] . '" alt="' . $link['text'] . '" />'
-                                                                                                       : htmlspecialchars( $link['text'] );
-                                                                                       }
-                                                                                       ?></a></span></li>
-                                                       <?php
-                                                       }
-                                                       ?>
-                                               </ul>
-                                       </div>
-                                       <?php
-                                       break;
-                               case 'ACTIONS':
-                                       ?>
-                                       <div id="p-cactions" role="navigation" class="vectorMenu<?php
-                                       if ( count( $this->data['action_urls'] ) == 0 ) {
-                                               echo ' emptyPortlet';
-                                       }
-                                       ?>" aria-labelledby="p-cactions-label">
-                                               <h3 id="p-cactions-label"><span><?php $this->msg( 'vector-more-actions' ) ?></span><a href="#"></a></h3>
-
-                                               <div class="menu">
-                                                       <ul<?php $this->html( 'userlangattributes' ) ?>>
-                                                               <?php
-                                                               foreach ( $this->data['action_urls'] as $link ) {
-                                                                       ?>
-                                                                       <li<?php
-                                                                       echo $link['attributes']
-                                                                       ?>>
-                                                                               <a href="<?php
-                                                                               echo htmlspecialchars( $link['href'] )
-                                                                               ?>" <?php
-                                                                               echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] )
-                                                                                       ?></a>
-                                                                       </li>
-                                                               <?php
-                                                               }
-                                                               ?>
-                                                       </ul>
-                                               </div>
-                                       </div>
-                                       <?php
-                                       break;
-                               case 'PERSONAL':
-                                       ?>
-                                       <div id="p-personal" role="navigation" class="<?php
-                                       if ( count( $this->data['personal_urls'] ) == 0 ) {
-                                               echo ' emptyPortlet';
-                                       }
-                                       ?>" aria-labelledby="p-personal-label">
-                                               <h3 id="p-personal-label"><?php $this->msg( 'personaltools' ) ?></h3>
-                                               <ul<?php $this->html( 'userlangattributes' ) ?>>
-                                                       <?php
-                                                       $personalTools = $this->getPersonalTools();
-                                                       foreach ( $personalTools as $key => $item ) {
-                                                               echo $this->makeListItem( $key, $item );
-                                                       }
-                                                       ?>
-                                               </ul>
-                                       </div>
-                                       <?php
-                                       break;
-                               case 'SEARCH':
-                                       ?>
-                                       <div id="p-search" role="search">
-                                               <h3<?php $this->html( 'userlangattributes' ) ?>>
-                                                       <label for="searchInput"><?php $this->msg( 'search' ) ?></label>
-                                               </h3>
-
-                                               <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
-                                                       <?php
-                                                       if ($wgVectorUseSimpleSearch) {
-                                                       ?>
-                                                       <div id="simpleSearch">
-                                                               <?php
-                                                       } else {
-                                                       ?>
-                                                               <div>
-                                                                       <?php
-                                                       }
-                                                       ?>
-                                                       <?php
-                                                       echo $this->makeSearchInput( array( 'id' => 'searchInput' ) );
-                                                       echo Html::hidden( 'title', $this->get( 'searchtitle' ) );
-                                                       // We construct two buttons (for 'go' and 'fulltext' search modes),
-                                                       // but only one will be visible and actionable at a time (they are
-                                                       // overlaid on top of each other in CSS).
-                                                       // * Browsers will use the 'fulltext' one by default (as it's the
-                                                       //   first in tree-order), which is desirable when they are unable
-                                                       //   to show search suggestions (either due to being broken or
-                                                       //   having JavaScript turned off).
-                                                       // * The mediawiki.searchSuggest module, after doing tests for the
-                                                       //   broken browsers, removes the 'fulltext' button and handles
-                                                       //   'fulltext' search itself; this will reveal the 'go' button and
-                                                       //   cause it to be used.
-                                                       echo $this->makeSearchButton(
-                                                               'fulltext',
-                                                               array( 'id' => 'mw-searchButton', 'class' => 'searchButton mw-fallbackSearchButton' )
-                                                       );
-                                                       echo $this->makeSearchButton(
-                                                               'go',
-                                                               array( 'id' => 'searchButton', 'class' => 'searchButton' )
-                                                       );
-                                                       ?>
-                                                               </div>
-                                               </form>
-                                       </div>
-                                       <?php
-
-                                       break;
-                       }
-               }
-       }
-}
diff --git a/skins/vector/collapsibleTabs.js b/skins/vector/collapsibleTabs.js
deleted file mode 100644 (file)
index e24bea9..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/**
- * Collapsible tabs jQuery Plugin
- */
-( function ( $ ) {
-       var rtl = $( 'html' ).attr( 'dir' ) === 'rtl';
-       $.fn.collapsibleTabs = function ( options ) {
-               // return if the function is called on an empty jquery object
-               if ( !this.length ) {
-                       return this;
-               }
-               // Merge options into the defaults
-               var settings = $.extend( {}, $.collapsibleTabs.defaults, options );
-
-               this.each( function () {
-                       var $el = $( this );
-                       // add the element to our array of collapsible managers
-                       $.collapsibleTabs.instances = ( $.collapsibleTabs.instances.length === 0 ?
-                               $el : $.collapsibleTabs.instances.add( $el ) );
-                       // attach the settings to the elements
-                       $el.data( 'collapsibleTabsSettings', settings );
-                       // attach data to our collapsible elements
-                       $el.children( settings.collapsible ).each( function () {
-                               $.collapsibleTabs.addData( $( this ) );
-                       } );
-               } );
-
-               // if we haven't already bound our resize handler, bind it now
-               if ( !$.collapsibleTabs.boundEvent ) {
-                       $( window ).on( 'resize', $.debounce( 500, function () {
-                               $.collapsibleTabs.handleResize();
-                       } ) );
-                       $.collapsibleTabs.boundEvent = true;
-               }
-
-               // call our resize handler to setup the page
-               $.collapsibleTabs.handleResize();
-               return this;
-       };
-       $.collapsibleTabs = {
-               instances: [],
-               boundEvent: null,
-               defaults: {
-                       expandedContainer: '#p-views ul',
-                       collapsedContainer: '#p-cactions ul',
-                       collapsible: 'li.collapsible',
-                       shifting: false,
-                       expandCondition: function ( eleWidth ) {
-                               // If there are at least eleWidth + 1 pixels of free space, expand.
-                               // We add 1 because .width() will truncate fractional values but .offset() will not.
-                               return $.collapsibleTabs.calculateTabDistance() >= eleWidth + 1;
-                       },
-                       collapseCondition: function () {
-                               // If there's an overlap, collapse.
-                               return $.collapsibleTabs.calculateTabDistance() < 0;
-                       }
-               },
-               addData: function ( $collapsible ) {
-                       var settings = $collapsible.parent().data( 'collapsibleTabsSettings' );
-                       if ( settings ) {
-                               $collapsible.data( 'collapsibleTabsSettings', {
-                                       expandedContainer: settings.expandedContainer,
-                                       collapsedContainer: settings.collapsedContainer,
-                                       expandedWidth: $collapsible.width(),
-                                       prevElement: $collapsible.prev()
-                               } );
-                       }
-               },
-               getSettings: function ( $collapsible ) {
-                       var settings = $collapsible.data( 'collapsibleTabsSettings' );
-                       if ( !settings ) {
-                               $.collapsibleTabs.addData( $collapsible );
-                               settings = $collapsible.data( 'collapsibleTabsSettings' );
-                       }
-                       return settings;
-               },
-               handleResize: function () {
-                       $.collapsibleTabs.instances.each( function () {
-                               var $el = $( this ),
-                                       data = $.collapsibleTabs.getSettings( $el );
-
-                               if ( data.shifting ) {
-                                       return;
-                               }
-
-                               // if the two navigations are colliding
-                               if ( $el.children( data.collapsible ).length > 0 && data.collapseCondition() ) {
-
-                                       $el.trigger( 'beforeTabCollapse' );
-                                       // move the element to the dropdown menu
-                                       $.collapsibleTabs.moveToCollapsed( $el.children( data.collapsible + ':last' ) );
-                               }
-
-                               // if there are still moveable items in the dropdown menu,
-                               // and there is sufficient space to place them in the tab container
-                               if ( $( data.collapsedContainer + ' ' + data.collapsible ).length > 0 &&
-                                               data.expandCondition( $.collapsibleTabs.getSettings( $( data.collapsedContainer ).children(
-                                                               data.collapsible + ':first' ) ).expandedWidth ) ) {
-                                       //move the element from the dropdown to the tab
-                                       $el.trigger( 'beforeTabExpand' );
-                                       $.collapsibleTabs
-                                               .moveToExpanded( data.collapsedContainer + ' ' + data.collapsible + ':first' );
-                               }
-                       } );
-               },
-               moveToCollapsed: function ( ele ) {
-                       var outerData, expContainerSettings, target,
-                               $moving = $( ele );
-
-                       outerData = $.collapsibleTabs.getSettings( $moving );
-                       if ( !outerData ) {
-                               return;
-                       }
-                       expContainerSettings = $.collapsibleTabs.getSettings( $( outerData.expandedContainer ) );
-                       if ( !expContainerSettings ) {
-                               return;
-                       }
-                       expContainerSettings.shifting = true;
-
-                       // Remove the element from where it's at and put it in the dropdown menu
-                       target = outerData.collapsedContainer;
-                       $moving.css( 'position', 'relative' )
-                               .css( ( rtl ? 'left' : 'right' ), 0 )
-                               .animate( { width: '1px' }, 'normal', function () {
-                                       var data, expContainerSettings;
-                                       $( this ).hide();
-                                       // add the placeholder
-                                       $( '<span class="placeholder" style="display: none;"></span>' ).insertAfter( this );
-                                       $( this ).detach().prependTo( target ).data( 'collapsibleTabsSettings', outerData );
-                                       $( this ).attr( 'style', 'display: list-item;' );
-                                       data = $.collapsibleTabs.getSettings( $( ele ) );
-                                       if ( data ) {
-                                               expContainerSettings = $.collapsibleTabs.getSettings( $( data.expandedContainer ) );
-                                               if ( expContainerSettings ) {
-                                                       expContainerSettings.shifting = false;
-                                                       $.collapsibleTabs.handleResize();
-                                               }
-                                       }
-                               } );
-               },
-               moveToExpanded: function ( ele ) {
-                       var data, expContainerSettings, $target, expandedWidth,
-                               $moving = $( ele );
-
-                       data = $.collapsibleTabs.getSettings( $moving );
-                       if ( !data ) {
-                               return;
-                       }
-                       expContainerSettings = $.collapsibleTabs.getSettings( $( data.expandedContainer ) );
-                       if ( !expContainerSettings ) {
-                               return;
-                       }
-                       expContainerSettings.shifting = true;
-
-                       // grab the next appearing placeholder so we can use it for replacing
-                       $target = $( data.expandedContainer ).find( 'span.placeholder:first' );
-                       expandedWidth = data.expandedWidth;
-                       $moving.css( 'position', 'relative' ).css( ( rtl ? 'right' : 'left' ), 0 ).css( 'width', '1px' );
-                       $target.replaceWith(
-                               $moving
-                               .detach()
-                               .css( 'width', '1px' )
-                               .data( 'collapsibleTabsSettings', data )
-                               .animate( { width: expandedWidth + 'px' }, 'normal', function () {
-                                       $( this ).attr( 'style', 'display: block;' );
-                                       var data, expContainerSettings;
-                                       data = $.collapsibleTabs.getSettings( $( this ) );
-                                       if ( data ) {
-                                               expContainerSettings = $.collapsibleTabs.getSettings( $( data.expandedContainer ) );
-                                               if ( expContainerSettings ) {
-                                                       expContainerSettings.shifting = false;
-                                                       $.collapsibleTabs.handleResize();
-                                               }
-                                       }
-                               } )
-                       );
-               },
-               /**
-                * Returns the amount of horizontal distance between the two tabs groups
-                * (#left-navigation and #right-navigation), in pixels. If negative, this
-                * means that the tabs overlap, and the value is the width of overlapping
-                * parts.
-                *
-                * Used in default expandCondition and collapseCondition.
-                *
-                * @return {Numeric} distance/overlap in pixels
-                */
-               calculateTabDistance: function () {
-                       var $leftTab, $rightTab, leftEnd, rightStart;
-
-                       // In RTL, #right-navigation is actually on the left and vice versa.
-                       // Hooray for descriptive naming.
-                       if ( !rtl ) {
-                               $leftTab = $( '#left-navigation' );
-                               $rightTab = $( '#right-navigation' );
-                       } else {
-                               $leftTab = $( '#right-navigation' );
-                               $rightTab = $( '#left-navigation' );
-                       }
-
-                       leftEnd = $leftTab.offset().left + $leftTab.width();
-                       rightStart = $rightTab.offset().left;
-
-                       return rightStart - leftEnd;
-               }
-       };
-
-}( jQuery ) );
diff --git a/skins/vector/components/animations.less b/skins/vector/components/animations.less
deleted file mode 100644 (file)
index 9163779..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Animate between standard and high definition layouts */
-body.vector-animateLayout {
-       div#content,
-       div#footer,
-       #left-navigation {
-               .transition(margin-left 250ms, padding 250ms;);
-       }
-
-       #p-logo {
-               .transition(left 250ms);
-       }
-
-       #mw-panel {
-               .transition(padding-right 250ms);
-       }
-
-       #p-search {
-               .transition(margin-right 250ms);
-       }
-
-       #p-personal {
-               .transition(right 250ms);
-       }
-
-       #mw-head-base {
-               .transition(margin-left 250ms);
-       }
-}
diff --git a/skins/vector/components/common.less b/skins/vector/components/common.less
deleted file mode 100644 (file)
index f70c7a4..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Any rules which should not be flipped automatically in right-to-left situations should be
- * prepended with @noflip in a comment block.
- *
- * This stylesheet employs a few CSS trick to accomplish compatibility with a wide range of web
- * browsers. The most common trick is to use some styles in IE6 only. This is accomplished by using
- * a rule that makes things work in IE6, and then following it with a rule that begins with
- * "html > body" or use a child selector ">", which is ignored by IE6 because it does not support
- * the child selector. You can spot this by looking for the "OVERRIDDEN BY COMPLIANT BROWSERS" and
- * "IGNORED BY IE6" comments.
- */
-@import "mediawiki.mixins";
-
-/* Framework */
-html {
-       font-size: @html-font-size;
-}
-html,
-body {
-       height: 100%;
-       margin: 0;
-       padding: 0;
-       font-family: @content-font-family;
-}
-body {
-       background-color: @menu-background-color;
-}
-
-/* Content */
-div#content {
-       margin-left: 10em;
-       padding: @content-padding;
-       /* Border on top, left, and bottom side */
-       border: 1px solid @content-border-color;
-       border-right-width: 0;
-       /* Merge the border with tabs' one (in their background image) */
-       margin-top: -1px;
-       background-color: @body-background-color;
-       color: @content-font-color;
-       direction: ltr;
-
-       .mw-editsection,
-       .mw-editsection-like {
-               font-family: @content-font-family;
-       }
-
-       p {
-               line-height: inherit;
-               margin: 0.5em 0;
-       }
-
-       h1,
-       h2,
-       #firstHeading {
-               font-family: @content-heading-font-family;
-               line-height: @heading-line-height;
-               margin-bottom: 0.25em;
-               padding: 0;
-       }
-
-       h1,
-       #firstHeading {
-               font-size: @content-heading-font-size;
-       }
-
-       h2 {
-               font-size: 1.5em;
-               margin-top: 1em;
-       }
-
-       h3,
-       h4,
-       h5,
-       h6 {
-               line-height: @content-line-height;
-               margin-top: 0.3em;
-               margin-bottom: 0;
-               padding-bottom: 0;
-       }
-
-       h3 {
-               font-size: 1.17em;
-       }
-
-       h3,
-       h4 {
-               font-weight: bold;
-       }
-
-       h4,
-       h5,
-       h6 {
-               font-size: 100%; /* (reset) */
-       }
-
-       #toc h2,
-       .toc h2 {
-               font-size: 100%; /* (reset) */
-               font-family: @content-font-family;
-       }
-}
-
-/* Hide empty portlets */
-div.emptyPortlet {
-               display: none;
-}
-
-ul {
-       list-style-type: disc;
-       .list-style-image('images/bullet-icon.png');
-}
-
-pre, .mw-code {
-       line-height: 1.3em;
-}
-
-/* Site Notice (includes notices from CentralNotice extension) */
-#siteNotice {
-       font-size: 0.8em;
-}
-
-.redirectText {
-       font-size: 140%;
-}
-
-.redirectMsg img {
-       vertical-align: text-bottom;
-}
-
-/* TODO: Remove #bodyContent selector (kept for backwards compatibility with cached html) */
-#bodyContent,
-.mw-body-content {
-       position: relative;
-       line-height: @content-line-height;
-       font-size: @content-font-size;
-}
-
-/* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */
-// FIXME: Should be part of jquery.tipsy.css
-.tipsy {
-       font-size: 0.8em;
-}
diff --git a/skins/vector/components/externalLinks.less b/skins/vector/components/externalLinks.less
deleted file mode 100644 (file)
index 91388c6..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-@import "mediawiki.mixins.less";
-// External links
-#content {
-       .external {
-               background-position: center right;
-               background-repeat: no-repeat;
-               .background-image-svg('images/external-link-ltr-icon.svg', 'images/external-link-ltr-icon.png');
-               padding-right: 13px;
-       }
-}
diff --git a/skins/vector/components/footer.less b/skins/vector/components/footer.less
deleted file mode 100644 (file)
index 3d61b66..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Footer */
-div#footer {
-       margin-left: 10em;
-       margin-top: 0;
-       padding: 0.75em;
-       direction: ltr;
-
-       ul {
-               list-style-type: none;
-               list-style-image: none;
-               margin: 0;
-               padding: 0;
-
-               li {
-                       margin: 0;
-                       padding: 0;
-                       padding-top: 0.5em;
-                       padding-bottom: 0.5em;
-                       color: #333;
-                       font-size: 0.7em;
-               }
-       }
-
-       #footer-icons {
-               float: right;
-
-               li {
-                       float: left;
-                       margin-left: 0.5em;
-                       line-height: 2em;
-                       text-align: right;
-               }
-       }
-
-       #footer-info {
-               li {
-                       line-height: 1.4em;
-               }
-       }
-
-       #footer-places {
-               li {
-                       float: left;
-                       margin-right: 1em;
-                       line-height: 2em;
-               }
-       }
-}
-
-body.ltr {
-       div#footer {
-               #footer-places {
-                       /* @noflip */
-                       float: left;
-               }
-       }
-}
diff --git a/skins/vector/components/navigation.less b/skins/vector/components/navigation.less
deleted file mode 100644 (file)
index 8b384ac..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-@import "mediawiki.mixins";
-@import "personalMenu";
-@import "search";
-@import "tabs";
-
-/* Hide, but keep accessible for screen-readers */
-#mw-navigation h2 {
-       position: absolute;
-       top: -9999px;
-}
-
-/* Head */
-#mw-page-base {
-       height: 5em;
-       background-position: bottom left;
-       background-repeat: repeat-x;
-       /* This image is only a fallback (for IE 6-9), so we do not @embed it. */
-       background-image: url('images/page-fade.png');
-       .vertical-gradient(@body-background-color, @menu-background-color, 50%, 100%);
-       background-color: @body-background-color;
-}
-
-#mw-head-base {
-       margin-top: -5em;
-       margin-left: 10em;
-       height: 5em;
-}
-
-div#mw-head {
-       position: absolute;
-       top: 0;
-       right: 0;
-       width: 100%;
-
-       h3 {
-               margin: 0;
-               padding: 0;
-       }
-}
-
-/* Navigation Containers */
-#left-navigation {
-       float: left;
-       margin-left: 10em;
-       margin-top: 2.5em;
-       /* When right nav would overlap left nav, it's placed below it
-          (normal CSS floats behavior). This rule ensures that no empty space
-          is shown between them due to right nav's margin-top. Page layout
-          is still broken, but at least the nav overlaps only the page title
-          instead of half the content. */
-       margin-bottom: -2.5em;
-       /* IE 6 double-margin bug fix */
-       display: inline;
-}
-
-#right-navigation {
-       float: right;
-       margin-top: 2.5em;
-}
-
-/* Logo */
-#p-logo {
-       position: absolute;
-       top: -160px;
-       left: 0;
-       width: 10em;
-       height: 160px;
-
-       a {
-               display: block;
-               width: 10em;
-               height: 160px;
-               background-repeat: no-repeat;
-               background-position: center center;
-               text-decoration: none;
-       }
-}
-
-/* Panel */
-div#mw-panel {
-       font-size: @menu-main-font-size;
-       position: absolute;
-       top: 160px;
-       padding-top: 1em;
-       width: 10em;
-       left: 0;
-
-       div.portal {
-               margin: 0 0.6em 0 0.7em;
-               padding: 0.25em 0;
-               direction: ltr;
-               background-position: top left;
-               background-repeat: no-repeat;
-               .background-image('images/portal-break.png');
-
-               h3 {
-                       font-size: @menu-main-heading-font-size;
-                       color: @menu-main-heading-color;
-                       font-weight: normal;
-                       margin: 0;
-                       padding: @menu-main-heading-padding;
-                       cursor: default;
-                       border: none;
-               }
-
-               div.body {
-                       margin: @menu-main-body-margin;
-                       padding-top: 0;
-
-                       ul {
-                               list-style-type: none;
-                               list-style-image: none;
-                               margin: 0;
-                               padding: @menu-main-body-padding;
-
-                               li {
-                                       line-height: 1.125em;
-                                       margin: 0;
-                                       padding: 0.25em 0;
-                                       font-size: @menu-main-body-font-size;
-                                       word-wrap: break-word;
-
-                                       a {
-                                               color: @menu-main-body-link-color;
-                                               &:visited {
-                                                       color: @menu-main-body-link-visited-color;
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               &.first {
-                       background-image: none;
-                       margin-top: 0;
-                       h3 {
-                               display: none;
-                       }
-                       div.body {
-                               margin-left: 0.5em;
-                       }
-               }
-       }
-}
diff --git a/skins/vector/components/notifications.less b/skins/vector/components/notifications.less
deleted file mode 100644 (file)
index 05a1e61..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/* mediawiki.notification */
-.skin-vector {
-       .mw-notification-area {
-               font-size: 0.8em;
-       }
-
-       .mw-notification-area-layout {
-               top: 7em;
-       }
-
-       .mw-notification {
-               background-color: #fff;
-               background-color: rgba(255, 255, 255, 0.93);
-               padding: 0.75em 1.5em;
-               border: solid 1px @content-border-color;
-               border-radius: 0.75em;
-               box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
-       }
-}
diff --git a/skins/vector/components/personalMenu.less b/skins/vector/components/personalMenu.less
deleted file mode 100644 (file)
index 7256929..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Personal */
-#p-personal {
-       position: absolute;
-       top: 0.33em;
-       right: 0.75em;
-       /* Display on top of page tabs - bugs 37158, 48078 */
-       z-index: 100;
-
-       h3 {
-               display: none;
-       }
-
-       ul {
-               list-style-type: none;
-               list-style-image: none;
-               margin: 0;
-               padding-left: 10em; /* Keep from overlapping logo */
-       }
-
-       li {
-               line-height: 1.125em;
-               /* @noflip */
-               float: left;
-               margin-left: 0.75em;
-               margin-top: 0.5em;
-               font-size: @menu-personal-font-size;
-               white-space: nowrap;
-       }
-}
-
-/* Icon for Usernames */
-#pt-userpage,
-#pt-anonuserpage,
-#pt-login {
-       background-position: left top;
-       background-repeat: no-repeat;
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG) */
-       .background-image-svg('images/user-icon.svg', 'images/user-icon.png');
-       padding-left: 15px !important;
-}
diff --git a/skins/vector/components/search.less b/skins/vector/components/search.less
deleted file mode 100644 (file)
index 46c3030..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Search */
-#p-search {
-       /* @noflip */
-       float: left;
-       margin-right: 0.5em;
-       margin-left: 0.5em;
-
-       h3 {
-               display: none;
-       }
-
-       form,
-       input {
-               margin: 0;
-               margin-top: 0.4em;
-       }
-}
-
-div#simpleSearch {
-       display: block;
-       width: 14em;
-       height: 1.4em;
-       margin-top: 0.65em;
-       position: relative;
-       min-height: 1px; /* Gotta trigger hasLayout for IE7 */
-       border: solid 1px #aaa;
-       color: black;
-       background-color: white;
-       .background-image('images/search-fade.png');
-       background-position: top left;
-       background-repeat: repeat-x;
-
-       // Styles for both the search input and the button
-       input {
-               position: absolute;
-               margin: 0;
-               padding: 0;
-               border: 0;
-               background-color: transparent;
-               color: black;
-       }
-
-       // The search input
-       #searchInput {
-               top: 0;
-               left: 0;
-               width: 90%;
-               padding: 0.2em 0 0.2em 0.2em;
-               font-size: 13px;
-               direction: ltr;
-
-               &:focus {
-                       outline: none;
-               }
-
-               // These rules MAY NOT be merged because of how CSS requires browsers
-               // to parse unrecognized selectors!
-               // Note these rules ensure that placeholder text can be distinguished from
-               // standard text. In browsers which make this distinction clear these rules
-               // are not necessary.
-               // For inputs that use jquery.placeholder.js e.g. IE9-
-               &.placeholder {
-                       color: #999;
-               }
-               // Distinguish placeholder text in IE10+
-               &:-ms-input-placeholder {
-                       color: #999;
-               }
-               // Distinguish placeholder text in Firefox 18-
-               &:-moz-placeholder {
-                       color: #999;
-               }
-
-               // Undo the styles Webkit browsers apply to type=search fields,
-               // we provide our own
-               -webkit-appearance: textfield;
-
-               &::-webkit-search-decoration,
-               &::-webkit-search-cancel-button,
-               &::-webkit-search-results-button,
-               &::-webkit-search-results-decoration {
-                       -webkit-appearance: textfield;
-               }
-       }
-
-       // The buttons. They are displayed in the same position, and if both are
-       // present the fulltext search one obscures the 'Go' one.
-       #searchButton,
-       #mw-searchButton {
-               top: 0;
-               right: 0;
-               width: 10%;
-               height: 100%;
-               cursor: pointer;
-               /* Hide button text and replace it with the image. */
-               /* This would be 100% if not for Firefox shenanigans (bug 60900). */
-               text-indent: 200%;
-               /* Needed to make IE6 respect the text-indent. */
-               line-height: 1;
-               /* Opera 12 on RTL flips the text in a funny way without this. */
-               /* @noflip */
-               direction: ltr;
-               white-space: nowrap;
-               overflow: hidden;
-               .background-image-svg('images/search-ltr.svg', 'images/search-ltr.png');
-               background-position: center center;
-               background-repeat: no-repeat;
-       }
-
-       #mw-searchButton {
-               z-index: 1;
-       }
-}
diff --git a/skins/vector/components/tabs.less b/skins/vector/components/tabs.less
deleted file mode 100644 (file)
index 9e39fbb..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
-Styling for namespace tabs (page, discussion) and views (read, edit, view history, watch and other actions)
-*/
-
-/* Navigation Labels */
-div.vectorTabs h3 {
-       display: none;
-}
-
-/* Namespaces and Views */
-div.vectorTabs {
-       /* @noflip */
-       float: left;
-       height: 2.5em;
-       .background-image('images/tab-break.png');
-       background-position: bottom left;
-       background-repeat: no-repeat;
-       padding-left: 1px;
-
-       ul {
-               /* @noflip */
-               float: left;
-               height: 100%;
-               list-style-type: none;
-               list-style-image: none;
-               margin: 0;
-               padding: 0;
-               .background-image('images/tab-break.png');
-               background-position: right bottom;
-               background-repeat: no-repeat;
-
-               li {
-                       /* @noflip */
-                       float: left;
-                       line-height: 1.125em;
-                       /* For IE6, overridden later to display:block by modern browsers */
-                       display: inline-block;
-                       height: 100%;
-                       margin: 0;
-                       padding: 0;
-                       background-color: #f3f3f3;
-                       .background-image('images/tab-normal-fade.png');
-                       background-position: bottom left;
-                       background-repeat: repeat-x;
-                       white-space: nowrap;
-               }
-
-               /* IGNORED BY IE6 which doesn't support child selector */
-               > li {
-                       display: block;
-               }
-       }
-
-       li {
-               &.new {
-                       a,
-                       a:visited{
-                               color: #a55858;
-                       }
-               }
-
-               &.selected {
-                       .background-image('images/tab-current-fade.png');
-                       a,
-                       a:visited{
-                               color: #333;
-                               text-decoration: none;
-                       }
-               }
-
-               &.icon {
-                       a {
-                               background-position: bottom right;
-                               background-repeat: no-repeat;
-                       }
-               }
-
-               a {
-                       /* For IE6, overridden later to display:block by modern browsers */
-                       display: inline-block;
-                       height: 1.9em;
-                       padding-left: 0.5em;
-                       padding-right: 0.5em;
-                       color: @menu-link-color;
-                       cursor: pointer;
-                       font-size: 0.8em;
-               }
-
-               /* Ignored by IE6 which doesn't support child selector */
-               > a {
-                       display: block;
-               }
-       }
-
-       span {
-               display: inline-block;
-               .background-image('images/tab-break.png');
-               background-position: bottom right;
-               background-repeat: no-repeat;
-
-               a  {
-                       /* For IE6, overridden later to display:block by modern browsers */
-                       display: inline-block;
-                       padding-top: 1.25em;
-               }
-
-               /* Ignored by IE6 which doesn't support child selector */
-               > a {
-                       /* @noflip */
-                       float: left;
-                       display: block;
-               }
-       }
-}
-
-/* Variants and Actions */
-div.vectorMenu {
-       /* @noflip */
-       direction: ltr;
-       /* @noflip */
-       float: left;
-       cursor: pointer;
-       position: relative;
-}
-
-body.rtl div.vectorMenu {
-       /* @noflip */
-       direction: rtl;
-}
-
-div#mw-head div.vectorMenu h3 {
-       /* @noflip */
-       float: left;
-       .background-image('images/tab-break.png');
-       background-repeat: no-repeat;
-       background-position: bottom right;
-       margin-left: -1px;
-       font-size: 1em;
-       height: 2.5em;
-       // This effectively moves the "background border" outside of the element to act like a real
-       // border. It is necessary for the dropdown (div.vectorMenu div.menu) to align well.
-       padding-right: 1px;
-       margin-right: -1px;
-}
-
-// The "Variants" menu has a really funny structure
-div#mw-head div.vectorMenu#p-variants {
-       #p-variants-label span {
-               display: none;
-       }
-
-       #mw-vector-current-variant {
-               display: inline-block;
-               float: left;
-               padding-right: 20px;
-               font-size: 0.8em;
-               padding-left: 0.5em;
-               padding-top: 1.375em;
-               font-weight: normal;
-               border: none;
-               background-image: none;
-       }
-}
-
-div.vectorMenu h3 span {
-       display: block;
-       font-size: 0.8em;
-       padding-left: 0.7em;
-       padding-top: 1.375em;
-       margin-right: 20px;
-       font-weight: normal;
-       color: @menu-main-heading-color;
-}
-
-div.vectorMenu h3 a {
-       position: absolute;
-       top: 0;
-       right: 0;
-       width: 20px;
-       height: 2.5em;
-       .background-image-svg('images/arrow-down-icon.svg', 'images/arrow-down-icon.png');
-       background-position: 100% 70%;
-       background-repeat: no-repeat;
-       .transition(background-position 250ms);
-}
-
-div.vectorMenu.menuForceShow h3 a {
-       background-position: 100% 100%;
-}
-
-div.vectorMenuFocus h3 a {
-       .background-image-svg('images/arrow-down-focus-icon.svg', 'images/arrow-down-focus-icon.png');
-}
-
-div.vectorMenu div.menu {
-       // Match the width of the dropdown "heading" (the tab)
-       min-width: 100%;
-       position: absolute;
-       top: 2.5em;
-       left: -1px;
-       background-color: white;
-       border: solid 1px silver;
-       border-top-width: 0;
-       clear: both;
-       text-align: left;
-       display: none;
-}
-
-/* Enable forcing showing of the menu for accessibility */
-div.vectorMenu:hover div.menu,
-div.vectorMenu.menuForceShow div.menu {
-       display: block;
-}
-
-div.vectorMenu ul {
-       list-style-type: none;
-       list-style-image: none;
-       padding: 0;
-       margin: 0;
-       text-align: left;
-}
-
-/* Fixes old versions of FireFox */
-div.vectorMenu ul,
-x:-moz-any-link {
-       min-width: 5em;
-}
-
-/* Returns things back to normal in modern versions of FireFox */
-div.vectorMenu ul,
-x:-moz-any-link,
-x:default {
-       min-width: 0;
-}
-
-div.vectorMenu li {
-       padding: 0;
-       margin: 0;
-       text-align: left;
-       line-height: 1em;
-}
-
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div.vectorMenu li a {
-       display: inline-block;
-       padding: 0.5em;
-       white-space: nowrap;
-       color: @menu-link-color;
-       cursor: pointer;
-       font-size: 0.8em;
-}
-
-/* IGNORED BY IE6 */
-div.vectorMenu li > a {
-       display: block;
-}
-
-div.vectorMenu li.selected a,
-div.vectorMenu li.selected a:visited {
-       color: #333;
-       text-decoration: none;
-}
-
-@import 'watchstar.less';
diff --git a/skins/vector/components/watchstar.less b/skins/vector/components/watchstar.less
deleted file mode 100644 (file)
index a389ed6..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-@import "mediawiki.mixins.rotation"
-
-/* Watch/Unwatch Icon Styling */
-#ca-unwatch.icon a,
-#ca-watch.icon a {
-       margin: 0;
-       padding: 0;
-       display: block;
-       width: 26px;
-       /* This hides the text but shows the background image */
-       padding-top: 3.1em;
-       margin-top: 0;
-       /* Only applied in IE6 */
-       margin-top: -0.8em !ie;
-       height: 0;
-       overflow: hidden;
-       background-position: 5px 60%;
-}
-#ca-unwatch.icon a {
-       .background-image-svg('images/unwatch-icon.svg', 'images/unwatch-icon.png');
-}
-#ca-watch.icon a {
-       .background-image-svg('images/watch-icon.svg', 'images/watch-icon.png');
-}
-#ca-unwatch.icon a:hover,
-#ca-unwatch.icon a:focus {
-       .background-image-svg('images/unwatch-icon-hl.svg', 'images/unwatch-icon-hl.png');
-}
-#ca-watch.icon a:hover,
-#ca-watch.icon a:focus {
-       .background-image-svg('images/watch-icon-hl.svg', 'images/watch-icon-hl.png');
-}
-#ca-unwatch.icon a.loading,
-#ca-watch.icon a.loading {
-       .background-image-svg('images/watch-icon-loading.svg', 'images/watch-icon-loading.png');
-       .rotation(700ms);
-       /* Suppress the hilarious rotating focus outline on Firefox */
-       outline: none;
-       cursor: default;
-       pointer-events: none;
-       background-position: 50% 60%;
-       -webkit-transform-origin: 50% 57%;
-       transform-origin: 50% 57%;
-}
-#ca-unwatch.icon a span,
-#ca-watch.icon a span {
-       display: none;
-}
diff --git a/skins/vector/csshover.htc b/skins/vector/csshover.htc
deleted file mode 100644 (file)
index a13ea68..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-<public:attach event="ondocumentready" onevent="CSSHover()" />
-<script>
-/**
- *     Whatever:hover - V3.11
- *     ------------------------------------------------------------
- *     Author  - Peter Nederlof, http://www.xs4all.nl/~peterned
- *     License - http://creativecommons.org/licenses/LGPL/2.1
- *
- *     Special thanks to Sergiu Dumitriu, http://purl.org/net/sergiu,
- *     for fixing the expression loop.
- *
- *     Whatever:hover is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation; either
- *     version 2.1 of the License, or (at your option) any later version.
- *
- *     Whatever:hover 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
- *     Lesser General Public License for more details.
- *
- *     howto: body { behavior:url("csshover3.htc"); }
- *     ------------------------------------------------------------
- */
-
-window.CSSHover = (function(){
-
-       // regular expressions, used and explained later on.
-       var REG_INTERACTIVE = /(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active|focus))/i;
-       var REG_AFFECTED = /(.*?)\:(hover|active|focus)/i;
-       var REG_PSEUDO = /[^:]+:([a-z\-]+).*/i;
-       var REG_SELECT = /(\.([a-z0-9_\-]+):[a-z]+)|(:[a-z]+)/gi;
-       var REG_CLASS = /\.([a-z0-9_\-]*on(hover|active|focus))/i;
-       var REG_MSIE = /msie (5|6|7)/i;
-       var REG_COMPAT = /backcompat/i;
-
-       // property mapping, real css properties must be used in order to clear expressions later on...
-       // Uses obscure css properties that no-one is likely to use. The properties are borrowed to
-       // set an expression, and are then restored to the most likely correct value.
-       var Properties = {
-               index: 0,
-               list: ['text-kashida', 'text-kashida-space', 'text-justify'],
-               get: function() {
-                       return this.list[(this.index++)%this.list.length];
-               }
-       };
-
-       // camelize is used to convert css properties from (eg) text-kashida to textKashida
-       var camelize = function(str) {
-               return str.replace(/-(.)/mg, function(result, match){
-                       return match.toUpperCase();
-               });
-       };
-       
-       /**
-        *      Local CSSHover object
-        *      --------------------------
-        */
-       
-       var CSSHover = {
-               
-               // array of CSSHoverElements, used to unload created events
-               elements: [], 
-               
-               // buffer used for checking on duplicate expressions
-               callbacks: {}, 
-               
-               // init, called once ondomcontentready via the exposed window.CSSHover function
-               init:function() {
-                       // don't run in IE8 standards; expressions don't work in standards mode anyway, 
-                       // and the stuff we're trying to fix should already work properly
-                       if(!REG_MSIE.test(navigator.userAgent) && !REG_COMPAT.test(window.document.compatMode)) {
-                               return;
-                       }
-
-                       // start parsing the existing stylesheets
-                       var sheets = window.document.styleSheets, l = sheets.length;
-                       for(var i=0; i<l; i++) {
-                               this.parseStylesheet(sheets[i]);
-                       }
-               },
-
-               // called from init, parses individual stylesheets
-               parseStylesheet:function(sheet) {
-                       // check sheet imports and parse those recursively
-                       if(sheet.imports) {
-                               try {
-                                       var imports = sheet.imports;
-                                       var l = imports.length;
-                                       for(var i=0; i<l; i++) {
-                                               this.parseStylesheet(sheet.imports[i]);
-                                       }
-                               } catch(securityException){
-                                       // trycatch for various possible errors
-                               }
-                       }
-                       
-                       // interate the sheet's rules and send them to the parser
-                       try {
-                               var rules = sheet.rules;
-                               var r = rules.length;
-                               for(var j=0; j<r; j++) {
-                                       this.parseCSSRule(rules[j], sheet);
-                               }
-                       } catch(someException){
-                               // trycatch for various errors, most likely accessing the sheet's rules.
-                       }
-               },
-
-               // magic starts here ...
-               parseCSSRule:function(rule, sheet) {
-                       
-                       // The sheet is used to insert new rules into, this must be the same sheet the rule 
-                       // came from, to ensure that relative paths keep pointing to the right location.
-
-                       // only parse a rule if it contains an interactive pseudo.
-                       var select = rule.selectorText;
-                       if(REG_INTERACTIVE.test(select)) {
-                               var style = rule.style.cssText;
-                                       
-                               // affected elements are found by truncating the selector after the interactive pseudo,
-                               // eg: "div li:hover" >>  "div li"
-                               var affected = REG_AFFECTED.exec(select)[1];
-                                       
-                               // that pseudo is needed for a classname, and defines the type of interaction (focus, hover, active)
-                               // eg: "li:hover" >> "onhover"
-                               var pseudo = select.replace(REG_PSEUDO, 'on$1');
-                                       
-                               // the new selector is going to use that classname in a new css rule,
-                               // since IE6 doesn't support multiple classnames, this is merged into one classname
-                               // eg: "li:hover" >> "li.onhover",  "li.folder:hover" >> "li.folderonhover"
-                               var newSelect = select.replace(REG_SELECT, '.$2' + pseudo);
-                                       
-                               // the classname is needed for the events that are going to be set on affected nodes
-                               // eg: "li.folder:hover" >> "folderonhover"
-                               var className = REG_CLASS.exec(newSelect)[1];
-
-                               // no need to set the same callback more than once when the same selector uses the same classname
-                               var hash = affected + className;
-                               if(!this.callbacks[hash]) {
-                                       
-                                       // affected elements are given an expression under a borrowed css property, because fake properties
-                                       // can't have their expressions cleared. Different properties are used per pseudo, to avoid
-                                       // expressions from overwriting eachother. The expression does a callback to CSSHover.patch, 
-                                       // rerouted via the exposed window.CSSHover function.
-                                       var property = Properties.get();
-                                       var atRuntime = camelize(property);
-
-                                       // because the expression is added to the stylesheet, and styles are always applied to html that is
-                                       // dynamically added to the dom, the expression will also trigger for those new elements (provided
-                                       // they are selected by the affected selector). 
-                                       sheet.addRule(affected, property + ':expression(CSSHover(this, "'+pseudo+'", "'+className+'", "'+atRuntime+'"))');
-                                       
-                                       // hash it, so an identical selector/class combo does not duplicate the expression
-                                       this.callbacks[hash] = true;
-                               }
-                               
-                               // duplicate expressions need not be set, but the style could differ
-                               sheet.addRule(newSelect, style);
-                       }
-               },
-
-               // called via the expression, patches individual nodes
-               patch:function(node, type, className, property) {
-
-                       // restores the borrowed css property to the value of its immediate parent, clearing
-                       // the expression so that it's not repeatedly called. 
-                       try {
-                               var value = node.parentNode.currentStyle[property];
-                               node.style[property] = value;   
-                       } catch(e) {
-                               // the above reset should never fail, but just in case, clear the runtimeStyle if it does.
-                               // this will also stop the expression.
-                               node.runtimeStyle[property] = '';
-                       }                       
-               
-                       // just to make sure, also keep track of patched classnames locally on the node
-                       if(!node.csshover) {
-                               node.csshover = [];
-                       }
-
-                       // and check for it to prevent duplicate events with the same classname from being set
-                       if(!node.csshover[className]) {
-                               node.csshover[className] = true;
-
-                               // create an instance for the given type and class
-                               var element = new CSSHoverElement(node, type, className);
-                               
-                               // and store that instance for unloading later on
-                               this.elements.push(element);
-                       }
-
-                       // returns a dummy value to the expression
-                       return type;
-               },
-
-               // unload stuff onbeforeunload
-               unload:function() {
-                       try {
-                               
-                               // remove events
-                               var l = this.elements.length;
-                               for(var i=0; i<l; i++) {
-                                       this.elements[i].unload();
-                               }
-
-                               // and set properties to null 
-                               this.elements = [];
-                               this.callbacks = {};
-
-                       } catch (e) {
-                       }
-               }
-       };
-
-       /**
-        *      CSSHoverElement
-        *      --------------------------
-        */
-
-       // the event types associated with the interactive pseudos
-       var CSSEvents = {
-               onhover:  { activator: 'onmouseenter', deactivator: 'onmouseleave' },
-               onactive: { activator: 'onmousedown',  deactivator: 'onmouseup' },
-               onfocus:  { activator: 'onfocus',      deactivator: 'onblur' }
-       };
-       
-       // CSSHoverElement constructor, called via CSSHover.patch
-       function CSSHoverElement(node, type, className) {
-
-               // the CSSHoverElement patches individual nodes by manually applying the events that should 
-               // have fired by the css pseudoclasses, eg mouseenter and mouseleave for :hover. 
-
-               this.node = node;
-               this.type = type;
-               var replacer = new RegExp('(^|\\s)'+className+'(\\s|$)', 'g');
-
-               // store event handlers for removal onunload
-               this.activator =   function(){ node.className += ' ' + className; };
-               this.deactivator = function(){ node.className = node.className.replace(replacer, ' '); };
-               
-               // add the events
-               node.attachEvent(CSSEvents[type].activator, this.activator);
-               node.attachEvent(CSSEvents[type].deactivator, this.deactivator);
-       }
-       
-       CSSHoverElement.prototype = {
-               // onbeforeunload, called via CSSHover.unload
-               unload:function() {
-
-                       // remove events 
-                       this.node.detachEvent(CSSEvents[this.type].activator, this.activator);
-                       this.node.detachEvent(CSSEvents[this.type].deactivator, this.deactivator);
-
-                       // and set properties to null 
-                       this.activator = null;
-                       this.deactivator = null;
-                       this.node = null;
-                       this.type = null;
-               }
-       };
-
-       // add the unload to the onbeforeunload event
-       window.attachEvent('onbeforeunload', function(){
-               CSSHover.unload();
-       });
-
-       /**
-        *      Public hook
-        *      --------------------------
-        */
-       
-       return function(node, type, className, property) {
-               if(node) {
-                       // called via the css expression; patches individual nodes
-                       return CSSHover.patch(node, type, className, property);
-               } else {
-                       // called ondomcontentready via the public:attach node
-                       CSSHover.init();
-               }
-       };
-
-})();
-</script>
\ No newline at end of file
diff --git a/skins/vector/csshover.min.htc b/skins/vector/csshover.min.htc
deleted file mode 100644 (file)
index 7e5c57b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<public:attach event="ondocumentready" onevent="CSSHover()" />
-<script>
-/**
- * Whatever:hover - V3.11
- * http://www.xs4all.nl/~peterned/
- *     
- * Copyright (c) 2009 Peter Nederlof
- * Licensed under the LGPL license
- * http://creativecommons.org/licenses/LGPL/2.1
- */
-window.CSSHover=(function(){var m=/(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active|focus))/i;var n=/(.*?)\:(hover|active|focus)/i;var o=/[^:]+:([a-z\-]+).*/i;var p=/(\.([a-z0-9_\-]+):[a-z]+)|(:[a-z]+)/gi;var q=/\.([a-z0-9_\-]*on(hover|active|focus))/i;var s=/msie (5|6|7)/i;var t=/backcompat/i;var u={index:0,list:['text-kashida','text-kashida-space','text-justify'],get:function(){return this.list[(this.index++)%this.list.length]}};var v=function(c){return c.replace(/-(.)/mg,function(a,b){return b.toUpperCase()})};var w={elements:[],callbacks:{},init:function(){if(!s.test(navigator.userAgent)&&!t.test(window.document.compatMode)){return}var a=window.document.styleSheets,l=a.length;for(var i=0;i<l;i++){this.parseStylesheet(a[i])}},parseStylesheet:function(a){if(a.imports){try{var b=a.imports;var l=b.length;for(var i=0;i<l;i++){this.parseStylesheet(a.imports[i])}}catch(securityException){}}try{var c=a.rules;var r=c.length;for(var j=0;j<r;j++){this.parseCSSRule(c[j],a)}}catch(someException){}},parseCSSRule:function(a,b){var c=a.selectorText;if(m.test(c)){var d=a.style.cssText;var e=n.exec(c)[1];var f=c.replace(o,'on$1');var g=c.replace(p,'.$2'+f);var h=q.exec(g)[1];var i=e+h;if(!this.callbacks[i]){var j=u.get();var k=v(j);b.addRule(e,j+':expression(CSSHover(this, "'+f+'", "'+h+'", "'+k+'"))');this.callbacks[i]=true}b.addRule(g,d)}},patch:function(a,b,c,d){try{var f=a.parentNode.currentStyle[d];a.style[d]=f}catch(e){a.runtimeStyle[d]=''}if(!a.csshover){a.csshover=[]}if(!a.csshover[c]){a.csshover[c]=true;var g=new CSSHoverElement(a,b,c);this.elements.push(g)}return b},unload:function(){try{var l=this.elements.length;for(var i=0;i<l;i++){this.elements[i].unload()}this.elements=[];this.callbacks={}}catch(e){}}};var x={onhover:{activator:'onmouseenter',deactivator:'onmouseleave'},onactive:{activator:'onmousedown',deactivator:'onmouseup'},onfocus:{activator:'onfocus',deactivator:'onblur'}};function CSSHoverElement(a,b,c){this.node=a;this.type=b;var d=new RegExp('(^|\\s)'+c+'(\\s|$)','g');this.activator=function(){a.className+=' '+c};this.deactivator=function(){a.className=a.className.replace(d,' ')};a.attachEvent(x[b].activator,this.activator);a.attachEvent(x[b].deactivator,this.deactivator)}CSSHoverElement.prototype={unload:function(){this.node.detachEvent(x[this.type].activator,this.activator);this.node.detachEvent(x[this.type].deactivator,this.deactivator);this.activator=null;this.deactivator=null;this.node=null;this.type=null}};window.attachEvent('onbeforeunload',function(){w.unload()});return function(a,b,c,d){if(a){return w.patch(a,b,c,d)}else{w.init()}}})();
-</script>
diff --git a/skins/vector/images/arrow-collapsed-ltr.png b/skins/vector/images/arrow-collapsed-ltr.png
deleted file mode 100644 (file)
index 063ac6f..0000000
Binary files a/skins/vector/images/arrow-collapsed-ltr.png and /dev/null differ
diff --git a/skins/vector/images/arrow-collapsed-ltr.svg b/skins/vector/images/arrow-collapsed-ltr.svg
deleted file mode 100644 (file)
index b943caa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M6.001 2.998l5.001 5-5.001 5z" fill="#797979"/></svg>
\ No newline at end of file
diff --git a/skins/vector/images/arrow-collapsed-rtl.png b/skins/vector/images/arrow-collapsed-rtl.png
deleted file mode 100644 (file)
index c346218..0000000
Binary files a/skins/vector/images/arrow-collapsed-rtl.png and /dev/null differ
diff --git a/skins/vector/images/arrow-collapsed-rtl.svg b/skins/vector/images/arrow-collapsed-rtl.svg
deleted file mode 100644 (file)
index 5faf356..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M9.999 13.002l-5.001-5 5.001-5z" fill="#797979"/></svg>
\ No newline at end of file
diff --git a/skins/vector/images/arrow-down-focus-icon.png b/skins/vector/images/arrow-down-focus-icon.png
deleted file mode 100644 (file)
index 7640bd1..0000000
Binary files a/skins/vector/images/arrow-down-focus-icon.png and /dev/null differ
diff --git a/skins/vector/images/arrow-down-focus-icon.svg b/skins/vector/images/arrow-down-focus-icon.svg
deleted file mode 100644 (file)
index 826c280..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="22" height="16"><path d="M15.502 6.001l-5 5.001-5-5.001z" fill="#929292"/></svg>
\ No newline at end of file
diff --git a/skins/vector/images/arrow-down-icon.png b/skins/vector/images/arrow-down-icon.png
deleted file mode 100644 (file)
index 12e3b93..0000000
Binary files a/skins/vector/images/arrow-down-icon.png and /dev/null differ
diff --git a/skins/vector/images/arrow-down-icon.svg b/skins/vector/images/arrow-down-icon.svg
deleted file mode 100644 (file)
index 8e31b2f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="22" height="16"><path d="M15.502 6.001l-5 5.001-5-5.001z" fill="#797979"/></svg>
\ No newline at end of file
diff --git a/skins/vector/images/arrow-expanded.png b/skins/vector/images/arrow-expanded.png
deleted file mode 100644 (file)
index 0221028..0000000
Binary files a/skins/vector/images/arrow-expanded.png and /dev/null differ
diff --git a/skins/vector/images/arrow-expanded.svg b/skins/vector/images/arrow-expanded.svg
deleted file mode 100644 (file)
index e744ec3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M13.002 6.001l-5 5.001-5-5.001z" fill="#797979"/></svg>
\ No newline at end of file
diff --git a/skins/vector/images/bullet-icon.png b/skins/vector/images/bullet-icon.png
deleted file mode 100644 (file)
index 7bae98f..0000000
Binary files a/skins/vector/images/bullet-icon.png and /dev/null differ
diff --git a/skins/vector/images/external-link-ltr-icon.png b/skins/vector/images/external-link-ltr-icon.png
deleted file mode 100644 (file)
index 6308383..0000000
Binary files a/skins/vector/images/external-link-ltr-icon.png and /dev/null differ
diff --git a/skins/vector/images/external-link-ltr-icon.svg b/skins/vector/images/external-link-ltr-icon.svg
deleted file mode 100644 (file)
index 5969d03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><g transform="translate(-826.429 -698.791)"><rect width="5.982" height="5.982" x="826.929" y="702.309" fill="#fff" stroke="#06c"/><g><path d="M831.194 698.791h5.234v5.391l-1.571 1.545-1.31-1.31-2.725 2.725-2.689-2.689 2.808-2.808-1.311-1.311z" fill="#06f"/><path d="M835.424 699.795l.022 4.885-1.817-1.817-2.881 2.881-1.228-1.228 2.881-2.881-1.851-1.851z" fill="#fff"/></g></g></svg>
\ No newline at end of file
diff --git a/skins/vector/images/external-link-rtl-icon.png b/skins/vector/images/external-link-rtl-icon.png
deleted file mode 100644 (file)
index 5313234..0000000
Binary files a/skins/vector/images/external-link-rtl-icon.png and /dev/null differ
diff --git a/skins/vector/images/external-link-rtl-icon.svg b/skins/vector/images/external-link-rtl-icon.svg
deleted file mode 100644 (file)
index 75a7025..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><g transform="translate(-826.429 -698.791)"><rect width="5.982" height="5.982" x="-835.929" y="702.309" transform="scale(-1 1)" fill="#fff" stroke="#06c"/><g><path d="M831.663 698.791h-5.234v5.391l1.571 1.545 1.31-1.31 2.725 2.725 2.689-2.689-2.808-2.808 1.311-1.311z" fill="#06f"/><path d="M827.433 699.795l-.022 4.885 1.817-1.817 2.881 2.881 1.228-1.228-2.881-2.881 1.851-1.851z" fill="#fff"/></g></g></svg>
\ No newline at end of file
diff --git a/skins/vector/images/link-icon.png b/skins/vector/images/link-icon.png
deleted file mode 100644 (file)
index b70efaa..0000000
Binary files a/skins/vector/images/link-icon.png and /dev/null differ
diff --git a/skins/vector/images/magnify-clip.png b/skins/vector/images/magnify-clip.png
deleted file mode 100644 (file)
index 00a9cee..0000000
Binary files a/skins/vector/images/magnify-clip.png and /dev/null differ
diff --git a/skins/vector/images/page-fade.png b/skins/vector/images/page-fade.png
deleted file mode 100644 (file)
index b4a6034..0000000
Binary files a/skins/vector/images/page-fade.png and /dev/null differ
diff --git a/skins/vector/images/portal-break-ltr.png b/skins/vector/images/portal-break-ltr.png
deleted file mode 100644 (file)
index 20bf366..0000000
Binary files a/skins/vector/images/portal-break-ltr.png and /dev/null differ
diff --git a/skins/vector/images/portal-break-rtl.png b/skins/vector/images/portal-break-rtl.png
deleted file mode 100644 (file)
index e5f6223..0000000
Binary files a/skins/vector/images/portal-break-rtl.png and /dev/null differ
diff --git a/skins/vector/images/portal-break.png b/skins/vector/images/portal-break.png
deleted file mode 100644 (file)
index 90c3918..0000000
Binary files a/skins/vector/images/portal-break.png and /dev/null differ
diff --git a/skins/vector/images/preferences/break.png b/skins/vector/images/preferences/break.png
deleted file mode 100644 (file)
index b529308..0000000
Binary files a/skins/vector/images/preferences/break.png and /dev/null differ
diff --git a/skins/vector/images/preferences/fade.png b/skins/vector/images/preferences/fade.png
deleted file mode 100644 (file)
index 638084d..0000000
Binary files a/skins/vector/images/preferences/fade.png and /dev/null differ
diff --git a/skins/vector/images/search-fade.png b/skins/vector/images/search-fade.png
deleted file mode 100644 (file)
index 6cb7d28..0000000
Binary files a/skins/vector/images/search-fade.png and /dev/null differ
diff --git a/skins/vector/images/search-ltr.png b/skins/vector/images/search-ltr.png
deleted file mode 100644 (file)
index 1db2eb2..0000000
Binary files a/skins/vector/images/search-ltr.png and /dev/null differ
diff --git a/skins/vector/images/search-ltr.svg b/skins/vector/images/search-ltr.svg
deleted file mode 100644 (file)
index 0720f20..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="13"><g stroke-width="2" stroke="#6c6c6c" fill="none"><path d="M11.29 11.71l-4-4"/><circle cx="5" cy="5" r="4"/></g></svg>
\ No newline at end of file
diff --git a/skins/vector/images/search-rtl.png b/skins/vector/images/search-rtl.png
deleted file mode 100644 (file)
index c26c8d0..0000000
Binary files a/skins/vector/images/search-rtl.png and /dev/null differ
diff --git a/skins/vector/images/search-rtl.svg b/skins/vector/images/search-rtl.svg
deleted file mode 100644 (file)
index 622d5f9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="13"><g stroke-width="2" stroke="#6c6c6c" fill="none"><path d="M.71 11.71l4-4"/><circle cx="7" cy="5" r="4"/></g></svg>
\ No newline at end of file
diff --git a/skins/vector/images/tab-break.png b/skins/vector/images/tab-break.png
deleted file mode 100644 (file)
index 6d37af5..0000000
Binary files a/skins/vector/images/tab-break.png and /dev/null differ
diff --git a/skins/vector/images/tab-current-fade.png b/skins/vector/images/tab-current-fade.png
deleted file mode 100644 (file)
index b8f772f..0000000
Binary files a/skins/vector/images/tab-current-fade.png and /dev/null differ
diff --git a/skins/vector/images/tab-normal-fade.png b/skins/vector/images/tab-normal-fade.png
deleted file mode 100644 (file)
index f719a88..0000000
Binary files a/skins/vector/images/tab-normal-fade.png and /dev/null differ
diff --git a/skins/vector/images/unwatch-icon-hl.png b/skins/vector/images/unwatch-icon-hl.png
deleted file mode 100644 (file)
index 6b2b502..0000000
Binary files a/skins/vector/images/unwatch-icon-hl.png and /dev/null differ
diff --git a/skins/vector/images/unwatch-icon-hl.svg b/skins/vector/images/unwatch-icon-hl.svg
deleted file mode 100644 (file)
index d52d547..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><linearGradient id="a"><stop offset="0" stop-color="#c2edff"/><stop offset=".5" stop-color="#68bdff"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient x1="13.47" y1="14.363" x2="4.596" y2="3.397" id="b" xlink:href="#a" gradientUnits="userSpaceOnUse"/></defs><path d="M8.103 1.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z" fill="url(#b)" stroke="#c8b250" stroke-width="0.9999199999999999"/></svg>
\ No newline at end of file
diff --git a/skins/vector/images/unwatch-icon.png b/skins/vector/images/unwatch-icon.png
deleted file mode 100644 (file)
index 9fd9436..0000000
Binary files a/skins/vector/images/unwatch-icon.png and /dev/null differ
diff --git a/skins/vector/images/unwatch-icon.svg b/skins/vector/images/unwatch-icon.svg
deleted file mode 100644 (file)
index cde7bc5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><linearGradient id="a"><stop offset="0" stop-color="#c2edff"/><stop offset=".5" stop-color="#68bdff"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient x1="13.47" y1="14.363" x2="4.596" y2="3.397" id="b" xlink:href="#a" gradientUnits="userSpaceOnUse"/></defs><path d="M8.103 1.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z" fill="url(#b)" stroke="#7cb5d1" stroke-width="0.9999199999999999"/></svg>
\ No newline at end of file
diff --git a/skins/vector/images/user-icon.png b/skins/vector/images/user-icon.png
deleted file mode 100644 (file)
index 57f9f8d..0000000
Binary files a/skins/vector/images/user-icon.png and /dev/null differ
diff --git a/skins/vector/images/user-icon.svg b/skins/vector/images/user-icon.svg
deleted file mode 100644 (file)
index 4335bcf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="12" height="13.837"><defs><linearGradient id="e"><stop offset="0"/><stop offset="1" stop-opacity="0"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#3b74bc"/><stop offset="1" stop-color="#2d5990"/></linearGradient><linearGradient id="c"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#c9c9c9"/></linearGradient><linearGradient id="a"><stop offset="0"/><stop offset="1" stop-opacity="0"/></linearGradient><linearGradient id="d"><stop offset="0" stop-color="#f4d9b1"/><stop offset="1" stop-color="#df9725"/></linearGradient><radialGradient cx="31.113" cy="19.009" r="8.662" fx="31.113" fy="19.009" id="f" xlink:href="#a" gradientUnits="userSpaceOnUse"/><radialGradient cx="28.09" cy="27.203" r="13.565" fx="28.09" fy="27.203" id="g" xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.298 0 0 .885 -8.359 4.94)"/><linearGradient x1="30.936" y1="29.553" x2="30.936" y2="35.803" id="h" xlink:href="#c" gradientUnits="userSpaceOnUse"/><radialGradient cx="31.113" cy="19.009" r="8.662" fx="31.113" fy="19.009" id="i" xlink:href="#a" gradientUnits="userSpaceOnUse"/><radialGradient cx="29.345" cy="17.064" r="9.162" fx="29.345" fy="17.064" id="j" xlink:href="#d" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.788 0 0 .788 6.221 3.618)"/><linearGradient x1="20.662" y1="35.818" x2="22.627" y2="36.218" id="k" xlink:href="#e" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.983 .182 -.182 .983 6.232 -2.651)"/><linearGradient x1="22.687" y1="36.39" x2="21.408" y2="35.74" id="l" xlink:href="#e" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-.978 .21 .21 .978 55.11 -3.945)"/></defs><g color="#000"><path d="M39.775 19.009a8.662 8.662 0 1 1-17.324 0 8.662 8.662 0 1 1 17.324 0z" transform="matrix(.693 0 0 .374 -15.548 3.481)" fill="url(#f)" fill-rule="evenodd" overflow="visible"/><path d="M4.046 12.398h4.137c1.172 0 2.332-.43 2.758-1.655.404-1.163.069-3.378-2.551-5.171h-4.895c-2.62 1.655-2.947 3.917-2.344 5.24.614 1.347 1.655 1.586 2.896 1.586z" fill="url(#g)" fill-rule="evenodd" stroke="#204a87" stroke-linecap="round" stroke-linejoin="round" overflow="visible" stroke-width="0.39"/><path d="M4.321 6.193c1.241 1.103 1.793 5.102 1.793 5.102s.552-3.999 1.517-5.171l-3.309.069z" fill="url(#h)" fill-rule="evenodd" overflow="visible"/><path d="M5.21 6.607s-.839.648-.767 1.428c-.796-.702-.819-2.048-.819-2.048l1.586.62z" fill="#729fcf" fill-rule="evenodd" overflow="visible"/><path d="M4.018 11.992l4.092-.009c1.029 0 2.049-.377 2.422-1.453.355-1.022-.037-2.967-2.338-4.542l-4.495-.095c-2.301 1.453-2.747 3.441-2.208 4.697.538 1.256 1.324 1.393 2.526 1.401z" opacity=".215" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" overflow="visible" fill="none" stroke-width="0.39"/><path d="M6.941 6.607s.839.648.767 1.428c.796-.702.819-2.048.819-2.048l-1.586.62z" fill="#729fcf" fill-rule="evenodd" overflow="visible"/><path d="M39.775 19.009a8.662 8.662 0 1 1-17.324 0 8.662 8.662 0 1 1 17.324 0z" transform="matrix(.39 0 0 .39 -6.138 -2.475)" fill="url(#i)" fill-rule="evenodd" overflow="visible"/><path d="M39.775 19.009a8.662 8.662 0 1 1-17.324 0 8.662 8.662 0 1 1 17.324 0z" fill="url(#j)" fill-rule="evenodd" stroke="#c17d11" stroke-linecap="round" stroke-linejoin="round" overflow="visible" transform="matrix(.39 0 0 .39 -6.089 -3.84)"/><path d="M39.775 19.009a8.662 8.662 0 1 1-17.324 0 8.662 8.662 0 1 1 17.324 0z" transform="matrix(.342 0 0 .342 -4.598 -2.929)" opacity=".196" stroke="#fff" stroke-width="1.14" stroke-linecap="round" stroke-linejoin="round" overflow="visible" fill="none"/><path d="M2.433 12.062c-.487-.213-.704-.725-.704-.725.328-1.587 1.451-2.748 1.451-2.748s-.889 2.5-.746 3.473z" opacity=".228" fill="url(#k)" fill-rule="evenodd" overflow="visible"/><path d="M9.806 11.728c.48-.227.704-.781.704-.781-.374-1.577-1.551-2.669-1.551-2.669s.961 2.474.847 3.45z" opacity=".228" fill="url(#l)" fill-rule="evenodd" overflow="visible"/></g></svg>
\ No newline at end of file
diff --git a/skins/vector/images/watch-icon-hl.png b/skins/vector/images/watch-icon-hl.png
deleted file mode 100644 (file)
index 4cb87cd..0000000
Binary files a/skins/vector/images/watch-icon-hl.png and /dev/null differ
diff --git a/skins/vector/images/watch-icon-hl.svg b/skins/vector/images/watch-icon-hl.svg
deleted file mode 100644 (file)
index 664c671..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M8.103 1.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z" fill="#fff" stroke="#c8b250" stroke-width="0.9999199999999999"/></svg>
\ No newline at end of file
diff --git a/skins/vector/images/watch-icon-loading.png b/skins/vector/images/watch-icon-loading.png
deleted file mode 100644 (file)
index 5f0c490..0000000
Binary files a/skins/vector/images/watch-icon-loading.png and /dev/null differ
diff --git a/skins/vector/images/watch-icon-loading.svg b/skins/vector/images/watch-icon-loading.svg
deleted file mode 100644 (file)
index 751eb14..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M8.103 1.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z" fill="#fff" stroke="#d1d1d1" stroke-width="0.9999199999999999"/></svg>
\ No newline at end of file
diff --git a/skins/vector/images/watch-icon.png b/skins/vector/images/watch-icon.png
deleted file mode 100644 (file)
index 39daff2..0000000
Binary files a/skins/vector/images/watch-icon.png and /dev/null differ
diff --git a/skins/vector/images/watch-icon.svg b/skins/vector/images/watch-icon.svg
deleted file mode 100644 (file)
index 907b05b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M8.103 1.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z" fill="#fff" stroke="#7cb5d1" stroke-width="0.9999199999999999"/></svg>
\ No newline at end of file
diff --git a/skins/vector/screen-hd.less b/skins/vector/screen-hd.less
deleted file mode 100644 (file)
index 8b286f4..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Vector screen styles for high definition displays */
-
-@import "variables.less";
-
-div#content {
-       margin-left: 11em;
-       padding: 1.25em 1.5em 1.5em 1.5em;
-}
-#p-logo {
-       left: @menu-main-logo-left;
-}
-div#footer {
-       margin-left: 11em;
-       padding: 1.25em;
-}
-#mw-panel {
-       padding-left: 0.5em;
-}
-#p-search {
-       margin-right: 1em;
-}
-#left-navigation {
-       margin-left: 11em;
-}
-#p-personal {
-       right: 1em;
-}
-#mw-head-base {
-       margin-left: 11em;
-}
diff --git a/skins/vector/screen.less b/skins/vector/screen.less
deleted file mode 100644 (file)
index f7b374f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Vector screen styles */
-
-@import "variables.less";
-
-@import "components/common.less";
-@import "components/animations.less";
-@import "components/navigation.less";
-@import "components/footer.less";
-@import 'components/notifications.less';
-@import "components/externalLinks.less";
diff --git a/skins/vector/special.less b/skins/vector/special.less
deleted file mode 100644 (file)
index 6af4b1e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Adjusts for decreased margin-bottom for h2 elements inside #content div
- * introduced in March / April 2014 typography update.
- */
-table.mw-specialpages-table {
-       margin-top: 0;
-}
diff --git a/skins/vector/special.preferences.less b/skins/vector/special.preferences.less
deleted file mode 100644 (file)
index a9b1006..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-@import "mediawiki.mixins";
-@import "variables";
-
-/**
- * The following code is highly modified from monobook. It would be nice if the
- * preftoc id was more human readable like preferences-toc for instance,
- * howerver this would require backporting the other skins.
- */
-
-#preftoc {
-       /* Tabs */
-       width: 100%;
-       float: left;
-       clear: both;
-       margin: 0 !important;
-       padding: 0 !important;
-       .background-image('images/preferences/break.png');
-       background-position: bottom left;
-       background-repeat: no-repeat;
-
-       li {
-               /* Tab */
-               float: left;
-               margin: 0;
-               padding: 0;
-               padding-right: 1px;
-               height: 2.25em;
-               white-space: nowrap;
-               list-style-type: none;
-               list-style-image: none;
-               .background-image('images/preferences/break.png');
-               background-position: bottom right;
-               background-repeat: no-repeat;
-
-               /* Sadly, IE6 won't understand this */
-               &:first-child {
-                       margin-left: 1px;
-               }
-
-               &.selected {
-                       a {
-                               .background-image('images/preferences/fade.png');
-                               background-position: bottom;
-                               background-repeat: repeat-x;
-                               color: #333;
-                               text-decoration: none;
-                       }
-               }
-       }
-
-       a,
-       a:active {
-               display: inline-block;
-               position: relative;
-               color: @menu-link-color;
-               padding: 0.5em;
-               text-decoration: none;
-               background-image: none;
-               font-size: 0.9em;
-       }
-
-       a:hover,
-       a:focus {
-               text-decoration: underline;
-       }
-}
-
-#preferences {
-       float: left;
-       width: 100%;
-       margin: 0;
-       margin-top: -2px;
-       clear: both;
-       border: solid 1px #ccc;
-       background-color: #fafafa;
-
-       fieldset {
-               border: none;
-               border-top: solid 1px #ccc;
-
-               &.prefsection {
-                       border: none;
-                       padding: 0;
-                       margin: 1em;
-
-                       legend.mainLegend {
-                               display: none;
-                       }
-               }
-       }
-
-       legend {
-               color: #666;
-       }
-
-       td {
-               padding-left: 0.5em;
-               padding-right: 0.5em;
-       }
-
-       div.mw-prefs-buttons {
-               padding: 1em;
-
-               input {
-                       margin-right: 0.25em;
-               }
-       }
-}
-
-.htmlform-tip {
-       font-size: x-small;
-       padding: .2em 2em;
-       color: #666;
-}
diff --git a/skins/vector/variables.less b/skins/vector/variables.less
deleted file mode 100644 (file)
index b17d15c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-@html-font-size: 100%;
-
-// Page content
-// FIXME: Use global variable since Echo and CentralNotice use this variable
-@content-border-color: #a7d7f9;
-// FIXME: Find an open font that works with this stack and is readable by Windows users
-@content-font-family: sans-serif;
-@content-font-color: #252525;
-@content-font-size: 0.875em;
-@content-line-height: 1.6;
-@content-padding: 1em;
-@content-heading-font-size: 1.8em;
-@content-heading-font-family: "Linux Libertine", Georgia, Times, serif;
-@body-background-color: #fff;
-@heading-line-height: 1.3;
-
-// Navigation
-@menu-background-color: #f6f6f6;
-
-// Common menu
-@menu-link-color: #0645ad;
-
-// Main menu
-@menu-main-font-size: inherit;
-
-@menu-main-heading-font-size: 0.75em;
-@menu-main-heading-padding: 0.25em 0 0.25em 0.25em;
-@menu-main-heading-color: #4d4d4d;
-
-@menu-main-body-font-size: 0.75em;
-@menu-main-body-link-color: #0645ad;
-@menu-main-body-link-visited-color: #0b0080;
-@menu-main-body-margin: 0 0 0 1.25em;
-@menu-main-body-padding: 0;
-
-@menu-main-logo-left: 0.5em;
-
-// Personal menu
-@menu-personal-font-size: 0.75em;
diff --git a/skins/vector/vector.js b/skins/vector/vector.js
deleted file mode 100644 (file)
index 7be3535..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * Vector-specific scripts
- */
-jQuery( function ( $ ) {
-       /**
-        * Focus search input at the very end
-        */
-       $( '#searchInput' ).attr( 'tabindex', $( document ).lastTabIndex() + 1 );
-
-       /**
-        * Dropdown menu accessibility
-        */
-       $( 'div.vectorMenu' ).each( function () {
-               var $el = $( this );
-               $el.find( '> h3 > a' ).parent()
-                       .attr( 'tabindex', '0' )
-                       // For accessibility, show the menu when the h3 is clicked (bug 24298/46486)
-                       .on( 'click keypress', function ( e ) {
-                               if ( e.type === 'click' || e.which === 13 ) {
-                                       $el.toggleClass( 'menuForceShow' );
-                                       e.preventDefault();
-                               }
-                       } )
-                       // When the heading has focus, also set a class that will change the arrow icon
-                       .focus( function () {
-                               $el.find( '> a' ).addClass( 'vectorMenuFocus' );
-                       } )
-                       .blur( function () {
-                               $el.find( '> a' ).removeClass( 'vectorMenuFocus' );
-                       } )
-                       .find( '> a:first' )
-                       // As the h3 can already be focused there's no need for the link to be focusable
-                       .attr( 'tabindex', '-1' );
-       } );
-
-       /**
-        * Sidebar
-        */
-       $( '#mw-panel > .portal:first' ).addClass( 'first' );
-
-       /**
-        * Collapsible tabs
-        */
-       var $cactions = $( '#p-cactions' ),
-               $tabContainer = $( '#p-views ul' ),
-               originalDropdownWidth = $cactions.width();
-
-       // Bind callback functions to animate our drop down menu in and out
-       // and then call the collapsibleTabs function on the menu
-       $tabContainer
-               .bind( 'beforeTabCollapse', function () {
-                       // If the dropdown was hidden, show it
-                       if ( $cactions.hasClass( 'emptyPortlet' ) ) {
-                               $cactions
-                                       .removeClass( 'emptyPortlet' )
-                                       .find( 'h3' )
-                                               .css( 'width', '1px' ).animate( { 'width': originalDropdownWidth }, 'normal' );
-                       }
-               } )
-               .bind( 'beforeTabExpand', function () {
-                       // If we're removing the last child node right now, hide the dropdown
-                       if ( $cactions.find( 'li' ).length === 1 ) {
-                               $cactions.find( 'h3' ).animate( { 'width': '1px' }, 'normal', function () {
-                                       $( this ).attr( 'style', '' )
-                                               .parent().addClass( 'emptyPortlet' );
-                               });
-                       }
-               } )
-               .collapsibleTabs( {
-                       expandCondition: function ( eleWidth ) {
-                               // (This looks a bit awkward because we're doing expensive queries as late as possible.)
-
-                               var distance = $.collapsibleTabs.calculateTabDistance();
-                               // If there are at least eleWidth + 1 pixels of free space, expand.
-                               // We add 1 because .width() will truncate fractional values but .offset() will not.
-                               if ( distance >= eleWidth + 1 ) {
-                                       return true;
-                               } else {
-                                       // Maybe we can still expand? Account for the width of the "Actions" dropdown if the
-                                       // expansion would hide it.
-                                       if ( $cactions.find( 'li' ).length === 1 ) {
-                                               return distance >= eleWidth + 1 - originalDropdownWidth;
-                                       } else {
-                                               return false;
-                                       }
-                               }
-                       },
-                       collapseCondition: function () {
-                               // (This looks a bit awkward because we're doing expensive queries as late as possible.)
-                               // TODO The dropdown itself should probably "fold" to just the down-arrow (hiding the text)
-                               // if it can't fit on the line?
-
-                               // If there's an overlap, collapse.
-                               if ( $.collapsibleTabs.calculateTabDistance() < 0 ) {
-                                       // But only if the width of the tab to collapse is smaller than the width of the dropdown
-                                       // we would have to insert. An example language where this happens is Lithuanian (lt).
-                                       if ( $cactions.hasClass( 'emptyPortlet' ) ) {
-                                               return $tabContainer.children( 'li.collapsible:last' ).width() > originalDropdownWidth;
-                                       } else {
-                                               return true;
-                                       }
-                               } else {
-                                       return false;
-                               }
-                       }
-               } );
-} );
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..3be33b7
--- /dev/null
@@ -0,0 +1,7 @@
+#ruby=ruby-2.1.2
+#ruby-gemset=core
+
+source "https://rubygems.org"
+
+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..92784bf
--- /dev/null
@@ -0,0 +1,79 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    builder (3.2.2)
+    childprocess (0.5.3)
+      ffi (~> 1.0, >= 1.0.11)
+    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.3)
+      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.5)
+    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
+  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..29dd1c1
--- /dev/null
@@ -0,0 +1,9 @@
+@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @login @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"
diff --git a/tests/browser/features/edit_page.feature b/tests/browser/features/edit_page.feature
new file mode 100644 (file)
index 0000000..c190a78
--- /dev/null
@@ -0,0 +1,11 @@
+@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @login @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 click Preview
+      And I click Show Changes
+      And I save the edit
+    Then the edited page content should contain "Edited and a random string"
diff --git a/tests/browser/features/file.feature b/tests/browser/features/file.feature
new file mode 100644 (file)
index 0000000..2d3b708
--- /dev/null
@@ -0,0 +1,23 @@
+#
+# 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 @en.wikipedia.beta.wmflabs.org @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs @test2.wikipedia.org
+Feature: File
+
+ Scenario: Anonymous goes to file that does not exist
+   Given I am at file that does not exist
+   Then page should show that no such file exists
+
+ @login
+ Scenario: Logged-in user goes to file that does not exist
+   Given I am logged in
+     And I am at file that does not exist
+   Then page should show that no such file exists
\ No newline at end of file
diff --git a/tests/browser/features/login.feature b/tests/browser/features/login.feature
new file mode 100644 (file)
index 0000000..9ff2a2a
--- /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
+#
+@chrome @en.wikipedia.beta.wmflabs.org @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs @test2.wikipedia.org
+Feature: Log in
+
+  Background:
+    Given I am at Log in page
+
+  Scenario: Go to Log in page
+    Then Username element should be there
+      And Password element should be there
+      And Log in element should be there
+
+  Scenario: Log in without entering credentials
+    When I log in without entering credentials
+    Then error box should be visible
+
+  Scenario: Log in without entering password
+    When I log in without entering password
+    Then error box should be visible
+
+  Scenario: Log in with incorrect username
+    When I log in with incorrect username
+    Then error box should be visible
+
+  Scenario: Log in with incorrect password
+    When I log in with incorrect password
+    Then error box should be visible
+
+  @login
+  Scenario: Log in with valid credentials
+    When I am logged in
+    Then error box should not be visible
\ No newline at end of file
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..5ab02be
--- /dev/null
@@ -0,0 +1,24 @@
+When(/^I click Edit$/) do
+  on(MainPage).edit_link
+end
+
+When(/^I click Preview$/) do
+  on(EditPage).preview_button
+end
+
+When(/^I click Show Changes$/) do
+  on(EditPage).show_changes_button
+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/file_steps.rb b/tests/browser/features/step_definitions/file_steps.rb
new file mode 100644 (file)
index 0000000..a2ed1bf
--- /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 am at file that does not exist$/) do
+  visit(FileDoesNotExistPage, using_params: {page_name: @random_string})
+end
+
+Then(/^page should show that no such file exists$/) do
+  on(FileDoesNotExistPage).file_does_not_exist_message_element.should be_visible
+end
diff --git a/tests/browser/features/step_definitions/login_steps.rb b/tests/browser/features/step_definitions/login_steps.rb
new file mode 100644 (file)
index 0000000..b654b2d
--- /dev/null
@@ -0,0 +1,65 @@
+#
+# 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 am at Log in page$/) do
+  visit LoginPage
+end
+
+When(/^I log in with incorrect password$/) do
+  on(LoginPage).login_with(ENV["MEDIAWIKI_USER"], "incorrect password", false)
+end
+
+When(/^I log in with incorrect username$/) do
+  on(LoginPage).login_with("incorrect username", ENV["MEDIAWIKI_PASSWORD"], false)
+end
+
+When(/^I log in without entering credentials$/) do
+  on(LoginPage).login_with("", "", false)
+end
+
+When(/^I log in without entering password$/) do
+  on(LoginPage).login_with(ENV["MEDIAWIKI_USER"], "", false)
+end
+
+Then(/^error box should be visible$/) do
+  on(LoginErrorPage).error_box_element.should be_visible
+end
+
+Then(/^error box should not be visible$/) do
+  on(LoginErrorPage).error_box_element.should_not be_visible
+end
+
+Then(/^feedback should be (.+)$/) do |feedback|
+  on(LoginPage) do |page|
+    page.feedback_element.when_present.click
+    page.feedback.should match Regexp.escape(feedback)
+  end
+end
+
+Then(/^Log in element should be there$/) do
+  on(LoginPage).login_element.should exist
+end
+
+Then(/^main page should open$/) do
+  @browser.url.should == on(MainPage).class.url
+end
+
+Then(/^Password element should be there$/) do
+  on(LoginPage).password_element.should exist
+end
+
+Then(/^there should be a link to (.+)$/) do |text|
+  on(LoginPage).username_displayed_element.when_present.text.should == text
+end
+
+Then(/^Username element should be there$/) do
+  on(LoginPage).username_element.should exist
+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..7c12236
--- /dev/null
@@ -0,0 +1,2 @@
+require "mediawiki_api"
+require "mediawiki_selenium"
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..b619c34
--- /dev/null
@@ -0,0 +1,8 @@
+class EditPage
+  include PageObject
+
+  text_area(:edit_page_content, id: "wpTextbox1")
+  button(:preview_button, id: "wpPreview")
+  button(:show_changes_button, id: "wpDiff")
+  button(:save_button, id: "wpSave")
+end
\ No newline at end of file
diff --git a/tests/browser/features/support/pages/file_does_not_exist_page.rb b/tests/browser/features/support/pages/file_does_not_exist_page.rb
new file mode 100644 (file)
index 0000000..c8491f3
--- /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 FileDoesNotExistPage
+  include PageObject
+
+  include URL
+  page_url URL.url("File:<%=params[:page_name]%>")
+
+  div(:file_does_not_exist_message, id: "mw-imagepage-nofile")
+end
diff --git a/tests/browser/features/support/pages/login_error_page.rb b/tests/browser/features/support/pages/login_error_page.rb
new file mode 100644 (file)
index 0000000..4fc9ca7
--- /dev/null
@@ -0,0 +1,5 @@
+class LoginErrorPage
+  include PageObject
+
+  div(:error_box, class: "errorbox")
+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 7276349..6097370 100644 (file)
@@ -87,12 +87,6 @@ Template:tbl-end
 |}
 !! endarticle
 
-!! article
-Template:!
-!! text
-|
-!! endarticle
-
 !! article
 Template:echo
 !! text
@@ -1093,6 +1087,99 @@ Non-html5 tags should be accepted
 </p>
 !! end
 
+## a 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>明日</rb><rp>(</rp><rt>Ashita</rt><rp> </rp><rtc>あした</rtc><rp>)</rp></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>明日</rb><rp>(</rp><rt>Ashita</rt><rp> </rp><rtc>あした</rtc><rp>)</rp></ruby>
+<bdi>text</bdi>
+<bdo>text</bdo>
+<span>text</span>
+<wbr />
+</p>
+!! end
+
+# test cases taken from
+# http://www.w3.org/TR/html5/text-level-semantics.html#the-ruby-element
+!! test
+Ruby markup (W3C-style)
+!! wikitext
+; Mono-ruby for individual base characters
+: <ruby>日<rt>に</rt>本<rt>ほん</rt>語<rt>ご</rt></ruby>
+; Group ruby
+: <ruby>今日<rt>きょう</rt></ruby>
+; Jukugo ruby
+: <ruby>法<rb>華</rb><rb>経</rb><rt>ほ</rt><rt>け</rt><rt>きょう</rt></ruby>
+; Inline ruby
+: <ruby>東<rb>京</rb><rp>(</rp><rt>とう</rt><rt>きょう</rt><rp>)</rp></ruby>
+; Double-sided ruby
+: <ruby><rb>旧</rb><rb>金</rb><rb>山</rb><rt>jiù</rt><rt>jīn</rt><rt>shān</rt><rtc>San Francisco</rtc></ruby>
+
+<ruby>
+<rb>♥</rb><rtc><rt>Heart</rt></rtc><rtc lang=fr><rt>Cœur</rt></rtc>
+<rb>☘</rb><rtc><rt>Shamrock</rt></rtc><rtc lang=fr><rt>Trèfle</rt></rtc>
+<rb>✶</rb><rtc><rt>Star</rt></rtc><rtc lang=fr><rt>Étoile</rt></rtc>
+</ruby>
+!! html
+<dl><dt> Mono-ruby for individual base characters</dt>
+<dd> <ruby>日<rt>に</rt>本<rt>ほん</rt>語<rt>ご</rt></ruby></dd>
+<dt> Group ruby</dt>
+<dd> <ruby>今日<rt>きょう</rt></ruby></dd>
+<dt> Jukugo ruby</dt>
+<dd> <ruby>法<rb>華</rb><rb>経</rb><rt>ほ</rt><rt>け</rt><rt>きょう</rt></ruby></dd>
+<dt> Inline ruby</dt>
+<dd> <ruby>東<rb>京</rb><rp>(</rp><rt>とう</rt><rt>きょう</rt><rp>)</rp></ruby></dd>
+<dt> Double-sided ruby</dt>
+<dd> <ruby><rb>旧</rb><rb>金</rb><rb>山</rb><rt>jiù</rt><rt>jīn</rt><rt>shān</rt><rtc>San Francisco</rtc></ruby></dd></dl>
+<p><ruby>
+<rb>♥</rb><rtc><rt>Heart</rt></rtc><rtc lang="fr"><rt>Cœur</rt></rtc>
+<rb>☘</rb><rtc><rt>Shamrock</rt></rtc><rtc lang="fr"><rt>Trèfle</rt></rtc>
+<rb>✶</rb><rtc><rt>Star</rt></rtc><rtc lang="fr"><rt>Étoile</rt></rtc>
+</ruby>
+</p>
+!! end
+
 !! test
 Non-word characters don't terminate tag names (bug 17663, 40670, 52022)
 !! wikitext
@@ -1223,6 +1310,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 +4555,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 +5292,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 +5473,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 +6447,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
@@ -8325,20 +8507,24 @@ Template:MSGNW test
 * interpreted
  but rather passed unmodified
 {{test}}
+<gallery>
+File:Foobar.jpg
+</gallery>
 !! endarticle
 
 # hmm, fix this or just deprecate msgnw and document its behavior?
 !! test
 msgnw keyword
-!! options
-disabled
 !! wikitext
 {{msgnw:MSGNW test}}
 !! html
-<p>''None'' of '''this''' should be 
-* interpreted
- but rather passed unmodified
-{{test}}
+<p>&#39;&#39;None&#39;&#39; of &#39;&#39;&#39;this&#39;&#39;&#39; should be 
+&#42; interpreted
+&#32;but rather passed unmodified
+&#123;&#123;test&#125;&#125;
+&#60;gallery&#62;
+File:Foobar.jpg
+&#60;/gallery&#62;
 </p>
 !! end
 
@@ -15130,6 +15316,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
@@ -19764,6 +20024,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)
@@ -20435,21 +20709,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 daf4bd9..f316f56 100644 (file)
@@ -43,6 +43,8 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
        protected $dependencies = array();
        protected $group = null;
        protected $source = 'local';
+       protected $script = '';
+       protected $styles = '';
        protected $skipFunction = null;
        protected $targets = array( 'test' );
 
@@ -52,6 +54,14 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
                }
        }
 
+       public function getScript( ResourceLoaderContext $context ) {
+               return $this->script;
+       }
+
+       public function getStyles( ResourceLoaderContext $context ) {
+               return array( '' => $this->styles );
+       }
+
        public function getDependencies() {
                return $this->dependencies;
        }
index ca132a4..9913f68 100644 (file)
@@ -55,3 +55,7 @@ Bishzilla_blink.gif
 https://commons.wikimedia.org/wiki/File:Bishzilla_blink.gif
 Public domain
 Bishonen
+
+say-test.ogg
+Public domain
+Brian Wolff
diff --git a/tests/phpunit/data/media/say-test.ogg b/tests/phpunit/data/media/say-test.ogg
new file mode 100644 (file)
index 0000000..5d814fb
Binary files /dev/null and b/tests/phpunit/data/media/say-test.ogg differ
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 7c684d5..e22f505 100644 (file)
@@ -6,7 +6,7 @@ class GitInfoTest extends MediaWikiTestCase {
 
        protected function setUp() {
                parent::setUp();
-               $this->setMwGlobals( 'wgCacheDirectory', __DIR__ . '/../data' );
+               $this->setMwGlobals( 'wgGitInfoCacheDirectory', __DIR__ . '/../data/gitinfo' );
        }
 
        public function testValidJsonData() {
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 6335d11..fac9b88 100644 (file)
@@ -87,8 +87,15 @@ class WfTimestampTest extends MediaWikiTestCase {
         * See r74778 and bug 25451
         * @dataProvider provideOldTimestamps
         */
-       public function testOldTimestamps( $input, $format, $output, $desc ) {
-               $this->assertEquals( $output, wfTimestamp( $format, $input ), $desc );
+       public function testOldTimestamps( $input, $outputType, $output, $message ) {
+               $timestamp = wfTimestamp( $outputType, $input );
+               if ( substr( $output, 0, 1 ) === '/' ) {
+                       // Bug 64946: Day of the week calculations for very old
+                       // timestamps varies from system to system.
+                       $this->assertRegExp(  $output, $timestamp, $message );
+               } else {
+                       $this->assertEquals( $output, $timestamp, $message );
+               }
        }
 
        public static function provideOldTimestamps() {
@@ -117,12 +124,12 @@ class WfTimestampTest extends MediaWikiTestCase {
                        array(
                                '0117-08-09 12:34:56',
                                TS_RFC2822,
-                               'Tue, 09 Aug 0117 12:34:56 GMT',
+                               '/, 09 Aug 0117 12:34:56 GMT$/',
                                'Death of Roman Emperor [[Trajan]]'
                        ),
 
                        /* @todo FIXME: 00 to 101 years are taken as being in [1970-2069] */
-                       array( '-58979923200', TS_RFC2822, 'Sun, 01 Jan 0101 00:00:00 GMT', '1/1/101' ),
+                       array( '-58979923200', TS_RFC2822, '/, 01 Jan 0101 00:00:00 GMT$/', '1/1/101' ),
                        array( '-62135596800', TS_RFC2822, 'Mon, 01 Jan 0001 00:00:00 GMT', 'Year 1' ),
 
                        /* It is not clear if we should generate a year 0 or not
diff --git a/tests/phpunit/includes/ImagePage404Test.php b/tests/phpunit/includes/ImagePage404Test.php
new file mode 100644 (file)
index 0000000..3660456
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+/**
+ * For doing Image Page tests that rely on 404 thumb handling
+ */
+class ImagePage404Test extends MediaWikiMediaTestCase {
+
+       protected function getRepoOptions() {
+               return parent::getRepoOptions() + array( 'transformVia404' => true );
+       }
+
+       function setUp() {
+               $this->setMwGlobals( 'wgImageLimits', array(
+                       array( 320, 240 ),
+                       array( 640, 480 ),
+                       array( 800, 600 ),
+                       array( 1024, 768 ),
+                       array( 1280, 1024 )
+               ) );
+               parent::setUp();
+       }
+
+       function getImagePage( $filename ) {
+               $title = Title::makeTitleSafe( NS_FILE, $filename );
+               $file = $this->dataFile( $filename );
+               $iPage = new ImagePage( $title );
+               $iPage->setFile( $file );
+               return $iPage;
+       }
+
+       /**
+        * @dataProvider providerGetThumbSizes
+        * @param $filename String
+        * @param $expectedNumberThumbs integer How many thumbnails to show
+        */
+       function testGetThumbSizes( $filename, $expectedNumberThumbs ) {
+               $iPage = $this->getImagePage( $filename );
+               $reflection = new ReflectionClass( $iPage );
+               $reflMethod = $reflection->getMethod( 'getThumbSizes' );
+               $reflMethod->setAccessible( true );
+
+               $actual = $reflMethod->invoke( $iPage, 545, 700 );
+               $this->assertEquals( count( $actual ), $expectedNumberThumbs );
+       }
+
+       function providerGetThumbSizes() {
+               return array(
+                       array( 'animated.gif', 6 ),
+                       array( 'Toll_Texas_1.svg', 6 ),
+                       array( '80x60-Greyscale.xcf', 6 ),
+                       array( 'jpeg-comment-binary.jpg', 6 ),
+               );
+       }
+}
diff --git a/tests/phpunit/includes/ImagePageTest.php b/tests/phpunit/includes/ImagePageTest.php
new file mode 100644 (file)
index 0000000..d5ecb95
--- /dev/null
@@ -0,0 +1,90 @@
+<?php
+class ImagePageTest extends MediaWikiMediaTestCase {
+
+       function setUp() {
+               $this->setMwGlobals( 'wgImageLimits', array(
+                       array( 320, 240 ),
+                       array( 640, 480 ),
+                       array( 800, 600 ),
+                       array( 1024, 768 ),
+                       array( 1280, 1024 )
+               ) );
+               parent::setUp();
+       }
+
+       function getImagePage( $filename ) {
+               $title = Title::makeTitleSafe( NS_FILE, $filename );
+               $file = $this->dataFile( $filename );
+               $iPage = new ImagePage( $title );
+               $iPage->setFile( $file );
+               return $iPage;
+       }
+
+       /**
+        * @dataProvider providerGetDisplayWidthHeight
+        * @param $dimensions Array [maxWidth, maxHeight, width, height]
+        * @param $expected Array [width, height] The width and height we expect to display at
+        */
+       function testGetDisplayWidthHeight( $dim, $expected ) {
+               $iPage = $this->getImagePage( 'animated.gif' );
+               $reflection = new ReflectionClass( $iPage );
+               $reflMethod = $reflection->getMethod( 'getDisplayWidthHeight' );
+               $reflMethod->setAccessible( true );
+
+               $actual = $reflMethod->invoke( $iPage, $dim[0], $dim[1], $dim[2], $dim[3] );
+               $this->assertEquals( $actual, $expected );
+       }
+
+       function providerGetDisplayWidthHeight() {
+               return array(
+                       array(
+                               array( 1024.0, 768.0, 600.0, 600.0 ),
+                               array( 600.0, 600.0 )
+                       ),
+                       array(
+                               array( 1024.0, 768.0, 1600.0, 600.0 ),
+                               array( 1024.0, 384.0 )
+                       ),
+                       array(
+                               array( 1024.0, 768.0, 1024.0, 768.0 ),
+                               array( 1024.0, 768.0 )
+                       ),
+                       array(
+                               array( 1024.0, 768.0, 800.0, 1000.0 ),
+                               array( 614.0, 768.0 )
+                       ),
+                       array(
+                               array( 1024.0, 768.0, 0, 1000 ),
+                               array( 0, 0 )
+                       ),
+                       array(
+                               array( 1024.0, 768.0, 2000, 0 ),
+                               array( 0, 0 )
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider providerGetThumbSizes
+        * @param $filename String
+        * @param $expectedNumberThumbs integer How many thumbnails to show
+        */
+       function testGetThumbSizes( $filename, $expectedNumberThumbs ) {
+               $iPage = $this->getImagePage( $filename );
+               $reflection = new ReflectionClass( $iPage );
+               $reflMethod = $reflection->getMethod( 'getThumbSizes' );
+               $reflMethod->setAccessible( true );
+
+               $actual = $reflMethod->invoke( $iPage, 545, 700 );
+               $this->assertEquals( count( $actual ), $expectedNumberThumbs );
+       }
+
+       function providerGetThumbSizes() {
+               return array(
+                       array( 'animated.gif', 2 ),
+                       array( 'Toll_Texas_1.svg', 1 ),
+                       array( '80x60-Greyscale.xcf', 1 ),
+                       array( 'jpeg-comment-binary.jpg', 2 ),
+               );
+       }
+}
index 9889b08..72114e9 100644 (file)
@@ -91,8 +91,10 @@ 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,
+                       'wgCapitalLinks' => true,
                ) );
 
                if ( $title === false ) {
index 9ff547c..a5dac8d 100644 (file)
@@ -186,6 +186,10 @@ class LinksUpdateTest extends MediaWikiTestCase {
         * @covers ParserOutput::addLanguageLink
         */
        public function testUpdate_langlinks() {
+               $this->setMwGlobals( array(
+                       'wgCapitalLinks' => true,
+               ) );
+
                /** @var ParserOutput $po */
                list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
 
diff --git a/tests/phpunit/includes/MimeMagicTest.php b/tests/phpunit/includes/MimeMagicTest.php
new file mode 100644 (file)
index 0000000..a164ff9
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+class MimeMagicTest extends MediaWikiTestCase {
+
+       /** @var MimeMagic */
+       private $mimeMagic;
+
+       function setUp() {
+               $this->mimeMagic = MimeMagic::singleton();
+               parent::setUp();
+       }
+
+       /**
+        * @dataProvider providerImproveTypeFromExtension
+        * @param $ext String File extension (no leading dot)
+        * @param $oldMime String Initially detected mime
+        * @param $expectedMime String Mime type after taking extension into account
+        */
+       function testImproveTypeFromExtension( $ext, $oldMime, $expectedMime ) {
+               $actualMime = $this->mimeMagic->improveTypeFromExtension( $oldMime, $ext );
+               $this->assertEquals( $expectedMime, $actualMime );
+       }
+
+       function providerImproveTypeFromExtension() {
+               return array(
+                       array( 'gif', 'image/gif', 'image/gif' ),
+                       array( 'gif', 'unknown/unknown', 'unknown/unknown' ),
+                       array( 'wrl', 'unknown/unknown', 'model/vrml' ),
+                       array( 'txt', 'text/plain', 'text/plain' ),
+                       array( 'csv', 'text/plain', 'text/csv' ),
+                       array( 'tsv', 'text/plain', 'text/tab-separated-values' ),
+                       array( 'json', 'text/plain', 'application/json' ),
+                       array( 'foo', 'application/x-opc+zip', 'application/zip' ),
+                       array( 'docx', 'application/x-opc+zip', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ),
+                       array( 'djvu', 'image/x-djvu', 'image/vnd.djvu' ),
+                       array( 'wav', 'audio/wav', 'audio/wav' ),
+               );
+       }
+
+       /**
+        * Test to make sure that encoder=ffmpeg2theora doesn't trigger
+        * MEDIATYPE_VIDEO (bug 63584)
+        */
+       function testOggRecognize() {
+               $oggFile = __DIR__ . '/../data/media/say-test.ogg';
+               $actualType = $this->mimeMagic->getMediaType( $oggFile, 'application/ogg' );
+               $this->assertEquals( $actualType, MEDIATYPE_AUDIO );
+       }
+}
index 385cee5..542b3d6 100644 (file)
@@ -135,4 +135,88 @@ class OutputPageTest extends MediaWikiTestCase {
                        'message' => 'On request with handheld querystring and media is screen, returns null'
                ) );
        }
+
+       public static function provideMakeResourceLoaderLink() {
+               return array(
+                       // Load module script only
+                       array(
+                               array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS ),
+                               '<script src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.foo&amp;only=scripts&amp;skin=vector&amp;*"></script>
+'
+                       ),
+                       // Load module styles only
+                       // This also tests the order the modules are put into the url
+                       array(
+                               array( array( 'test.baz', 'test.foo', 'test.bar' ), ResourceLoaderModule::TYPE_STYLES ),
+                               '<link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.bar%2Cbaz%2Cfoo&amp;only=styles&amp;skin=vector&amp;*">
+'
+                       ),
+                       // Load private module (combined)
+                       array(
+                               array( 'test.quux', ResourceLoaderModule::TYPE_COMBINED ),
+                               '<script>if(window.mw){
+mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n/* cache key: wiki:resourceloader:filter:minify-css:7:fd8ea20b3336b2bfb230c789d430067a */"]},{});
+/* cache key: wiki:resourceloader:filter:minify-js:7:274ccee17be73cd5f4dda5dc2a819188 */
+}</script>
+'
+                       ),
+                       // Load module script with with ESI
+                       array(
+                               array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS, true ),
+                               '<script><esi:include src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.foo&amp;only=scripts&amp;skin=vector&amp;*" /></script>
+'
+                       ),
+                       // Load module styles with with ESI
+                       array(
+                               array( 'test.foo', ResourceLoaderModule::TYPE_STYLES, true ),
+                               '<style><esi:include src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.foo&amp;only=styles&amp;skin=vector&amp;*" /></style>
+',
+                       ),
+               );
+       }
+
+
+       /**
+        * @dataProvider provideMakeResourceLoaderLink
+        * @covers OutputPage::makeResourceLoaderLink
+        */
+       public function testMakeResourceLoaderLink( $args, $expectedHtml) {
+               $this->setMwGlobals( array(
+                       'wgResourceLoaderUseESI' => true,
+                       'wgLoadScript' => 'http://127.0.0.1:8080/w/load.php',
+                       // Affects whether CDATA is inserted
+                       'wgWellFormedXml' => false,
+                       // Cache key is based on database name, and affects output;
+                       // this test should not touch the database anyways.
+                       'wgDBname' => 'wiki',
+                       'wgDBprefix' => '',
+               ) );
+               $class = new ReflectionClass( 'OutputPage' );
+               $method = $class->getMethod( 'makeResourceLoaderLink' );
+               $method->setAccessible( true );
+               $ctx = new RequestContext();
+               $out = new OutputPage( $ctx );
+               $rl = $out->getResourceLoader();
+               $rl->register( array(
+                       'test.foo' => new ResourceLoaderTestModule(array(
+                               'script' => 'mw.test.foo( { a: true } );',
+                               'styles' => '.mw-test-foo { content: "style"; }',
+                       )),
+                       'test.bar' => new ResourceLoaderTestModule(array(
+                               'script' => 'mw.test.bar( { a: true } );',
+                               'styles' => '.mw-test-bar { content: "style"; }',
+                       )),
+                       'test.baz' => new ResourceLoaderTestModule(array(
+                               'script' => 'mw.test.baz( { a: true } );',
+                               'styles' => '.mw-test-baz { content: "style"; }',
+                       )),
+                       'test.quux' => new ResourceLoaderTestModule(array(
+                               'script' => 'mw.test.baz( { token: 123 } );',
+                               'styles' => '/* pref-animate=off */ .mw-icon { transition: none; }',
+                               'group' => 'private',
+                       )),
+               ) );
+               $links = $method->invokeArgs( $out, $args );
+               $this->assertEquals( $expectedHtml, $links['html'] );
+       }
 }
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 758c2e2..6fdc239 100644 (file)
@@ -16,6 +16,7 @@ class TestSample extends MediaWikiLangTestCase {
                $this->setMwGlobals( array(
                        'wgContLang' => Language::factory( 'en' ),
                        'wgLanguageCode' => 'en',
+                       'wgCapitalLinks' => true,
                ) );
        }
 
index 0b368c2..f0d4c4d 100644 (file)
@@ -3,8 +3,6 @@
 class TimeAdjustTest extends MediaWikiLangTestCase {
        protected function setUp() {
                parent::setUp();
-
-               $this->iniSet( 'precision', 15 );
        }
 
        /**
@@ -18,7 +16,7 @@ class TimeAdjustTest extends MediaWikiLangTestCase {
                $this->setMwGlobals( 'wgLocalTZoffset', $localTZoffset );
 
                $this->assertEquals(
-                       strval( $expected ),
+                       $expected,
                        strval( $wgContLang->userAdjust( $date, '' ) ),
                        "User adjust {$date} by {$localTZoffset} minutes should give {$expected}"
                );
@@ -26,16 +24,16 @@ class TimeAdjustTest extends MediaWikiLangTestCase {
 
        public static function dataUserAdjust() {
                return array(
-                       array( 20061231235959, 0, 20061231235959 ),
-                       array( 20061231235959, 5, 20070101000459 ),
-                       array( 20061231235959, 15, 20070101001459 ),
-                       array( 20061231235959, 60, 20070101005959 ),
-                       array( 20061231235959, 90, 20070101012959 ),
-                       array( 20061231235959, 120, 20070101015959 ),
-                       array( 20061231235959, 540, 20070101085959 ),
-                       array( 20061231235959, -5, 20061231235459 ),
-                       array( 20061231235959, -30, 20061231232959 ),
-                       array( 20061231235959, -60, 20061231225959 ),
+                       array( '20061231235959', 0, '20061231235959' ),
+                       array( '20061231235959', 5, '20070101000459' ),
+                       array( '20061231235959', 15,'20070101001459' ),
+                       array( '20061231235959', 60, '20070101005959' ),
+                       array( '20061231235959', 90, '20070101012959' ),
+                       array( '20061231235959', 120, '20070101015959' ),
+                       array( '20061231235959', 540, '20070101085959' ),
+                       array( '20061231235959', -5, '20061231235459' ),
+                       array( '20061231235959', -30, '20061231232959' ),
+                       array( '20061231235959', -60, '20061231225959' ),
                );
        }
 }
index 1c7b662..6871582 100644 (file)
@@ -87,6 +87,7 @@ class TitleTest extends MediaWikiTestCase {
                        str_repeat( 'x', 252 ),
                        // interwiki prefix
                        'localtestiw: #anchor',
+                       'localtestiw:',
                        'localtestiw:foo',
                        'localtestiw: foo # anchor',
                        'localtestiw: Talk: Sandbox # anchor',
@@ -147,7 +148,6 @@ class TitleTest extends MediaWikiTestCase {
                        'Category: ',
                        'Category: #bar',
                        // interwiki prefix
-                       'localtestiw:',
                        'localtestiw: Talk: # anchor',
                        'localtestiw: Talk:'
                ) as $text ) {
index a19d035..36de114 100644 (file)
@@ -125,6 +125,31 @@ class UserTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * @dataProvider provideIPs
+        * @covers User::isIP
+        */
+       public function testIsIP( $value, $result, $message ) {
+               $this->assertEquals( $this->user->isIP( $value ), $result, $message );
+       }
+
+       public static function provideIPs() {
+               return array(
+                       array( '', false, 'Empty string' ),
+                       array( ' ', false, 'Blank space' ),
+                       array( '10.0.0.0', true, 'IPv4 private 10/8' ),
+                       array( '10.255.255.255', true, 'IPv4 private 10/8' ),
+                       array( '192.168.1.1', true, 'IPv4 private 192.168/16' ),
+                       array( '203.0.113.0', true, 'IPv4 example' ),
+                       array( '2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff', true, 'IPv6 example' ),
+                       // Not valid IPs but classified as such by MediaWiki for negated asserting
+                       // of whether this might be the identifier of a logged-out user or whether
+                       // to allow usernames like it.
+                       array( '300.300.300.300', true, 'Looks too much like an IPv4 address' ),
+                       array( '203.0.113.xxx', true, 'Assigned by UseMod to cloaked logged-out users' ),
+               );
+       }
+
        /**
         * @dataProvider provideUserNames
         * @covers User::isValidUserName
@@ -148,6 +173,9 @@ class UserTest extends MediaWikiTestCase {
                        array( 'Abcdകഖഗഘ', true, ' Mixed scripts' ),
                        array( 'ജോസ്‌തോമസ്', false, 'ZWNJ- Format control character' ),
                        array( 'Ab cd', false, ' Ideographic space' ),
+                       array( '300.300.300.300', false, 'Looks too much like an IPv4 address' ),
+                       array( '302.113.311.900', false, 'Looks too much like an IPv4 address' ),
+                       array( '203.0.113.xxx', false, 'Reserved for usage by UseMod for cloaked logged-out users' ),
                );
        }
 
@@ -157,7 +185,7 @@ class UserTest extends MediaWikiTestCase {
         * Extensions and core
         */
        public function testAllRightsWithMessage() {
-               //Getting all user rights, for core: User::$mCoreRights, for extensions: $wgAvailableRights
+               // Getting all user rights, for core: User::$mCoreRights, for extensions: $wgAvailableRights
                $allRights = User::getAllRights();
                $allMessageKeys = Language::getMessageKeysFor( 'en' );
 
index 78457d2..7f7945b 100644 (file)
@@ -499,6 +499,10 @@ class WikiPageTest extends MediaWikiLangTestCase {
         * @covers WikiPage::getRedirectTarget
         */
        public function testGetRedirectTarget( $title, $model, $text, $target ) {
+               $this->setMwGlobals( array(
+                       'wgCapitalLinks' => true,
+               ) );
+
                $page = $this->createPage( $title, $text, $model );
 
                # sanity check, because this test seems to fail for no reason for some people.
index e031ce3..5f955bb 100644 (file)
@@ -17,7 +17,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
        /** @var DerivativeContext */
        private $mContext;
 
-       private $mOldGetPreferencesHooks = false;
+       private $mOldGetPreferencesHooks;
 
        private static $Success = array( 'options' => 'success' );
 
@@ -61,10 +61,8 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
        protected function tearDown() {
                global $wgHooks;
 
-               if ( $this->mOldGetPreferencesHooks !== false ) {
-                       $wgHooks['GetPreferences'] = $this->mOldGetPreferencesHooks;
-                       $this->mOldGetPreferencesHooks = false;
-               }
+               $wgHooks['GetPreferences'] = $this->mOldGetPreferencesHooks;
+               $this->mOldGetPreferencesHooks = false;
 
                parent::tearDown();
        }
index ea0b323..7b686a3 100644 (file)
@@ -36,9 +36,12 @@ class ApiQueryTest extends ApiTestCase {
        }
 
        public function testTitlesGetNormalized() {
-
                global $wgMetaNamespace;
 
+               $this->setMwGlobals( array(
+                       'wgCapitalLinks' => true,
+               ) );
+
                $data = $this->doApiRequest( array(
                        'action' => 'query',
                        'titles' => 'Project:articleA|article_B' ) );
@@ -97,6 +100,10 @@ class ApiQueryTest extends ApiTestCase {
         * @dataProvider provideTestTitlePartToKey
         */
        function testTitlePartToKey( $titlePart, $namespace, $expected, $expectException ) {
+               $this->setMwGlobals( array(
+                       'wgCapitalLinks' => true,
+               ) );
+
                $api = new MockApiQueryBase();
                $exceptionCaught = false;
                try {
index 03cbbc0..2f81109 100644 (file)
@@ -31,6 +31,7 @@ class TextContentTest extends MediaWikiLangTestCase {
                        ),
                        'wgUseTidy' => false,
                        'wgAlwaysUseTidy' => false,
+                       'wgCapitalLinks' => true,
                ) );
 
                // bypass hooks that force custom rendering
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;
+       }
+
 }
diff --git a/tests/phpunit/includes/filerepo/RepoGroupTest.php b/tests/phpunit/includes/filerepo/RepoGroupTest.php
new file mode 100644 (file)
index 0000000..2c52338
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+class RepoGroupTest extends MediaWikiTestCase {
+
+       function testHasForeignRepoNegative() {
+               $this->setMWGlobals( 'wgForeignFileRepos', array() );
+               RepoGroup::destroySingleton();
+               FileBackendGroup::destroySingleton();
+               $this->assertFalse( RepoGroup::singleton()->hasForeignRepos() );
+       }
+
+       function testHasForeignRepoPositive() {
+               $this->setUpForeignRepo();
+               $this->assertTrue( RepoGroup::singleton()->hasForeignRepos() );
+       }
+
+       function testForEachForeignRepo() {
+               $this->setUpForeignRepo();
+               $fakeCallback = $this->getMock( 'RepoGroupTestHelper' );
+               $fakeCallback->expects( $this->once() )->method( 'callback' );
+               RepoGroup::singleton()->forEachForeignRepo( array( $fakeCallback, 'callback' ), array( array() ) );
+       }
+
+       function testForEachForeignRepoNone() {
+               $this->setMWGlobals( 'wgForeignFileRepos', array() );
+               RepoGroup::destroySingleton();
+               FileBackendGroup::destroySingleton();
+               $fakeCallback = $this->getMock( 'RepoGroupTestHelper' );
+               $fakeCallback->expects( $this->never() )->method( 'callback' );
+               RepoGroup::singleton()->forEachForeignRepo( array( $fakeCallback, 'callback' ), array( array() ) );
+       }
+
+       private function setUpForeignRepo() {
+               global $wgUploadDirectory;
+               $this->setMWGlobals( 'wgForeignFileRepos', array( array(
+                       'class' => 'ForeignAPIRepo',
+                       'name' => 'wikimediacommons',
+                       'backend' => 'wikimediacommons-backend',
+                       'apibase' => 'https://commons.wikimedia.org/w/api.php',
+                       'hashLevels' => 2,
+                       'fetchDescription' => true,
+                       'descriptionCacheExpiry' => 43200,
+                       'apiThumbCacheExpiry' => 86400,
+                       'directory' => $wgUploadDirectory
+               ) ) );
+               RepoGroup::destroySingleton();
+               FileBackendGroup::destroySingleton();
+       }
+}
+
+/**
+ * Quick helper class to use as a mock callback for RepoGroup::singleton()->forEachForeignRepo.
+ */
+class RepoGroupTestHelper {
+       function callback( FileRepo $repo, array $foo ) {
+               return true;
+       }
+}
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 96347d9..7b64dfd 100644 (file)
@@ -29,11 +29,18 @@ abstract class MediaWikiMediaTestCase extends MediaWikiTestCase {
                        'wikiId' => wfWikiId(),
                        'containerPaths' => $containers
                ) );
-               $this->repo = new FSRepo( array(
+               $this->repo = new FSRepo( $this->getRepoOptions() );
+       }
+
+       /**
+        * @return Array Argument for FSRepo constructor
+        */
+       protected function getRepoOptions() {
+               return array(
                        'name' => 'temp',
                        'url' => 'http://localhost/thumbtest',
                        'backend' => $this->backend
-               ) );
+               );
        }
 
        /**
diff --git a/tests/phpunit/includes/media/XCFTest.php b/tests/phpunit/includes/media/XCFTest.php
new file mode 100644 (file)
index 0000000..ae4fa8b
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+class XCFHandlerTest extends MediaWikiMediaTestCase {
+
+       /** @var XCFHandler */
+       protected $handler;
+
+       protected function setUp() {
+               parent::setUp();
+               $this->handler = new XCFHandler();
+       }
+
+
+       /**
+        * @param string $filename
+        * @param int $expectedWidth width
+        * @param int $expectedHeigh height
+        * @dataProvider provideGetImageSize
+        * @covers XCFHandler::getImageSize
+        */
+       public function testGetImageSize( $filename, $expectedWidth, $expectedHeight ) {
+               $file = $this->dataFile( $filename, 'image/x-xcf' );
+               $actual = $this->handler->getImageSize( $file, $file->getLocalRefPath() );
+               $this->assertEquals( $expectedWidth, $actual[0] );
+               $this->assertEquals( $expectedHeight, $actual[1] );
+       }
+
+       public static function provideGetImageSize() {
+               return array(
+                       array( '80x60-2layers.xcf', 80, 60 ),
+                       array( '80x60-RGB.xcf', 80, 60 ),
+                       array( '80x60-Greyscale.xcf', 80, 60 ),
+               );
+       }
+
+       /**
+        * @param string $metadata Serialized metadata
+        * @param int $expected One of the class constants of XCFHandler
+        * @dataProvider provideIsMetadataValid
+        * @covers XCFHandler::isMetadataValid
+        */
+       public function testIsMetadataValid( $metadata, $expected ) {
+               $actual = $this->handler->isMetadataValid( null, $metadata );
+               $this->assertEquals( $expected, $actual );
+       }
+
+       public static function provideIsMetadataValid() {
+               return array(
+                       array( '', XCFHandler::METADATA_BAD ),
+                       array( serialize( array( 'error' => true ) ), XCFHandler::METADATA_GOOD ),
+                       array( false, XCFHandler::METADATA_BAD ),
+                       array( serialize( array( 'colorType' => 'greyscale-alpha' ) ), XCFHandler::METADATA_GOOD ),
+               );
+       }
+
+       /**
+        * @param string $filename
+        * @param string $expected Serialized array
+        * @dataProvider provideGetMetadata
+        * @covers XCFHandler::getMetadata
+        */
+       public function testGetMetadata( $filename, $expected ) {
+               $file = $this->dataFile( $filename, 'image/png' );
+               $actual = $this->handler->getMetadata( $file, "$this->filePath/$filename" );
+               $this->assertEquals( $expected, $actual );
+       }
+
+       public static function provideGetMetadata() {
+               return array(
+                       array( '80x60-2layers.xcf', 'a:1:{s:9:"colorType";s:16:"truecolour-alpha";}' ),
+                       array( '80x60-RGB.xcf', 'a:1:{s:9:"colorType";s:16:"truecolour-alpha";}' ),
+                       array( '80x60-Greyscale.xcf', 'a:1:{s:9:"colorType";s:15:"greyscale-alpha";}' ),
+               );
+       }
+}
index dff31c1..97b76fe 100644 (file)
@@ -110,15 +110,20 @@ class CleanUpTest extends MediaWikiTestCase {
        }
 
        /** @todo document */
-       public function testAllBytes() {
-               $this->doTestBytes( '', '' );
-               $this->doTestBytes( 'x', '' );
-               $this->doTestBytes( '', 'x' );
-               $this->doTestBytes( 'x', 'x' );
+       public function provideAllBytes() {
+               return array(
+                       array( '', '' ),
+                       array( 'x', '' ),
+                       array( '', 'x' ),
+                       array( 'x', 'x' ),
+               );
        }
 
-       /** @todo document */
-       function doTestBytes( $head, $tail ) {
+       /**
+        * @dataProvider provideAllBytes
+        * @todo document
+        */
+       function testBytes( $head, $tail ) {
                for ( $i = 0x0; $i < 256; $i++ ) {
                        $char = $head . chr( $i ) . $tail;
                        $clean = UtfNormal::cleanUp( $char );
@@ -149,18 +154,11 @@ class CleanUpTest extends MediaWikiTestCase {
                }
        }
 
-       /** @todo document */
-       public function testDoubleBytes() {
-               $this->doTestDoubleBytes( '', '' );
-               $this->doTestDoubleBytes( 'x', '' );
-               $this->doTestDoubleBytes( '', 'x' );
-               $this->doTestDoubleBytes( 'x', 'x' );
-       }
-
        /**
+        * @dataProvider provideAllBytes
         * @todo document
         */
-       function doTestDoubleBytes( $head, $tail ) {
+       function testDoubleBytes( $head, $tail ) {
                for ( $first = 0xc0; $first < 0x100; $first += 2 ) {
                        for ( $second = 0x80; $second < 0x100; $second += 2 ) {
                                $char = $head . chr( $first ) . chr( $second ) . $tail;
@@ -202,16 +200,11 @@ class CleanUpTest extends MediaWikiTestCase {
                }
        }
 
-       /** @todo document */
-       public function testTripleBytes() {
-               $this->doTestTripleBytes( '', '' );
-               $this->doTestTripleBytes( 'x', '' );
-               $this->doTestTripleBytes( '', 'x' );
-               $this->doTestTripleBytes( 'x', 'x' );
-       }
-
-       /** @todo document */
-       function doTestTripleBytes( $head, $tail ) {
+       /**
+        * @dataProvider provideAllBytes
+        * @todo document
+        */
+       function testTripleBytes( $head, $tail ) {
                for ( $first = 0xc0; $first < 0x100; $first += 2 ) {
                        for ( $second = 0x80; $second < 0x100; $second += 2 ) {
                                #for( $third = 0x80; $third < 0x100; $third++ ) {
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
 
        /**
index 15b8865..c3fd155 100644 (file)
 class MediaWikiSiteTest extends SiteTest {
 
        public function testNormalizePageTitle() {
+               $this->setMwGlobals( array(
+                       'wgCapitalLinks' => true,
+               ) );
+
                $site = new MediaWikiSite();
                $site->setGlobalId( 'enwiki' );
 
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 1e5aca9..2cf8663 100644 (file)
@@ -40,6 +40,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                        'wgAllowUserJs' => false,
                        'wgDefaultLanguageVariant' => false,
                        'wgLocalInterwikis' => array( 'localtestiw' ),
+                       'wgCapitalLinks' => true,
 
                        // NOTE: this is why global state is evil.
                        // TODO: refactor access to the interwiki codes so it can be injected.
index 792cf72..f64fc72 100644 (file)
@@ -95,6 +95,16 @@ class LanguageRuTest extends LanguageClassesTestCase {
                                'Викитека',
                                'prepositional',
                        ),
+                       array(
+                               'Викисклада',
+                               'Викисклад',
+                               'genitive',
+                       ),
+                       array(
+                               'Викискладе',
+                               'Викисклад',
+                               'prepositional',
+                       ),
                        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 ab9aab1..50e89da 100644 (file)
                                return true;
                        }
 
+                       // Don't iterate over the module registry (the 'script' references would
+                       // be listed as untested methods otherwise)
+                       if ( val === mw.loader.moduleRegistry ) {
+                               return true;
+                       }
+
                        return false;
                };
 
index df800bc..c6dd91c 100644 (file)
@@ -4,7 +4,6 @@
 
        var uacount = 0,
                // Object keyed by userAgent. Value is an array (human-readable name, client-profile object, navigator.platform value)
-               // Info based on results from http://toolserver.org/~krinkle/testswarm/job/174/
                uas = {
                        // Internet Explorer 6
                        // Internet Explorer 7
index 9ca434f..3bfabe4 100644 (file)
                                expected: 'доводах',
                                description: 'Grammar test for prepositional case, доводы -> доводах'
                        },
+                       {
+                               word: 'Викисклад',
+                               grammarForm: 'prepositional',
+                               expected: 'Викискладе',
+                               description: 'Grammar test for prepositional case, Викисклад -> Викискладе'
+                       },
+                       {
+                               word: 'Викисклад',
+                               grammarForm: 'genitive',
+                               expected: 'Викисклада',
+                               description: 'Grammar test for genitive case, Викисклад -> Викисклада'
+                       },
                        {
                                word: 'песчаник',
                                grammarForm: 'prepositional',
index 818b24e..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;
+       }
+
 }
 
 /**
@@ -674,11 +709,12 @@ class DjVuSupport {
         * Initialises DjVu tools global with default values
         */
        public function __construct() {
-               global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML, $wgFileExtensions;
+               global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML, $wgFileExtensions, $wgDjvuTxt;
 
                $wgDjvuRenderer = $wgDjvuRenderer ? $wgDjvuRenderer : '/usr/bin/ddjvu';
                $wgDjvuDump = $wgDjvuDump ? $wgDjvuDump : '/usr/bin/djvudump';
                $wgDjvuToXML = $wgDjvuToXML ? $wgDjvuToXML : '/usr/bin/djvutoxml';
+               $wgDjvuTxt = $wgDjvuTxt ? $wgDjvuTxt : '/usr/bin/djvutxt';
 
                if ( !in_array( 'djvu', $wgFileExtensions ) ) {
                        $wgFileExtensions[] = 'djvu';
@@ -691,10 +727,11 @@ class DjVuSupport {
         * @return bool
         */
        public function isEnabled() {
-               global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML;
+               global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML, $wgDjvuTxt;
 
                return is_executable( $wgDjvuRenderer )
                        && is_executable( $wgDjvuDump )
-                       && is_executable( $wgDjvuToXML );
+                       && is_executable( $wgDjvuToXML )
+                       && is_executable( $wgDjvuTxt );
        }
 }
index d7bf453..c0042c2 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -367,7 +367,7 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath
        global $wgMemc, $wgAttemptFailureEpoch;
 
        $key = wfMemcKey( 'attempt-failures', $wgAttemptFailureEpoch,
-               $file->getRepo()->getName(), md5( $file->getName() ), md5( $thumbName ) );
+               $file->getRepo()->getName(), $file->getSha1(), md5( $thumbName ) );
 
        // Check if this file keeps failing to render
        if ( $wgMemc->get( $key ) >= 4 ) {
@@ -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 );