Merge "registration: Allow extensions to specify which MW core versions they require"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 22 Sep 2015 04:57:47 +0000 (04:57 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 22 Sep 2015 04:57:47 +0000 (04:57 +0000)
986 files changed:
.jscsrc
.jshintrc
.travis.yml
Gruntfile.js
RELEASE-NOTES-1.26
autoload.php
composer.json
docs/extension.schema.json
docs/hooks.txt
docs/uidesign/design.html
includes/DefaultSettings.php
includes/GlobalFunctions.php
includes/Hooks.php
includes/HtmlFormatter.php
includes/HttpFunctions.php
includes/Linker.php
includes/MagicWord.php
includes/OutputPage.php
includes/Preferences.php
includes/PrefixSearch.php
includes/Sanitizer.php
includes/Setup.php
includes/StubObject.php
includes/Title.php
includes/User.php
includes/WebRequest.php
includes/WikiMap.php
includes/XmlSelect.php
includes/ZhConversion.php
includes/api/ApiBase.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatFeedWrapper.php
includes/api/ApiFormatJson.php
includes/api/ApiFormatRaw.php
includes/api/ApiFormatXml.php
includes/api/ApiLogin.php
includes/api/ApiMain.php
includes/api/ApiQueryAllDeletedRevisions.php
includes/api/ApiQueryDeletedRevisions.php
includes/api/ApiQueryRandom.php
includes/api/ApiQuerySearch.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiResult.php
includes/api/ApiRevisionDelete.php
includes/api/ApiStashEdit.php
includes/api/i18n/ar.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/es.json
includes/api/i18n/fi.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/he.json
includes/api/i18n/it.json
includes/api/i18n/ja.json
includes/api/i18n/ksh.json
includes/api/i18n/lb.json
includes/api/i18n/mr.json [new file with mode: 0644]
includes/api/i18n/nap.json
includes/api/i18n/nl.json
includes/api/i18n/olo.json [new file with mode: 0644]
includes/api/i18n/pl.json
includes/api/i18n/ps.json
includes/api/i18n/pt-br.json
includes/api/i18n/pt.json
includes/api/i18n/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/sq.json [new file with mode: 0644]
includes/api/i18n/zh-hans.json
includes/cache/MessageCache.php
includes/changes/EnhancedChangesList.php
includes/changes/RecentChange.php
includes/clientpool/RedisConnectionPool.php
includes/db/Database.php
includes/db/DatabaseOracle.php
includes/debug/logger/LegacyLogger.php
includes/debug/logger/MonologSpi.php
includes/debug/logger/monolog/AvroFormatter.php [new file with mode: 0644]
includes/debug/logger/monolog/BufferHandler.php [new file with mode: 0644]
includes/debug/logger/monolog/KafkaHandler.php [new file with mode: 0644]
includes/debug/logger/monolog/LineFormatter.php
includes/deferred/DeferredUpdates.php
includes/exception/HttpError.php
includes/exception/MWExceptionHandler.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/FileBackendStore.php
includes/filebackend/lockmanager/LockManager.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLTextAreaField.php
includes/htmlform/HTMLTextField.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MssqlInstaller.php
includes/installer/i18n/ar.json
includes/installer/i18n/azb.json
includes/installer/i18n/el.json
includes/installer/i18n/es.json
includes/installer/i18n/it.json
includes/installer/i18n/jut.json
includes/installer/i18n/ksh.json
includes/installer/i18n/nap.json
includes/installer/i18n/olo.json [new file with mode: 0644]
includes/installer/i18n/pt-br.json
includes/installer/i18n/pt.json
includes/installer/i18n/qqq.json
includes/installer/i18n/sq.json
includes/installer/i18n/tokipona.json [new file with mode: 0644]
includes/installer/i18n/yi.json
includes/jobqueue/jobs/RefreshLinksJob.php
includes/libs/CSSMin.php
includes/libs/ReplacementArray.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/virtualrest/ParsoidVirtualRESTService.php
includes/libs/virtualrest/RestbaseVirtualRESTService.php
includes/libs/virtualrest/SwiftVirtualRESTService.php
includes/libs/virtualrest/VirtualRESTService.php
includes/media/Bitmap.php
includes/media/DjVuImage.php
includes/media/SVGMetadataExtractor.php
includes/media/XMPInfo.php
includes/objectcache/MemcachedPeclBagOStuff.php
includes/objectcache/MemcachedPhpBagOStuff.php
includes/objectcache/MultiWriteBagOStuff.php
includes/page/Article.php
includes/page/ImagePage.php
includes/page/WikiPage.php
includes/parser/MWTidy.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/ParserOptions.php
includes/parser/Preprocessor_Hash.php
includes/password/EncryptedPassword.php
includes/poolcounter/PoolCounterRedis.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderEditToolbarModule.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/revisiondelete/RevDelList.php
includes/search/SearchResultSet.php
includes/skins/Skin.php
includes/skins/SkinTemplate.php
includes/specials/SpecialBlock.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialEditTags.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialExport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListusers.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialPagesWithProp.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialResetTokens.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialWantedtemplates.php
includes/templates/Usercreate.php
includes/tidy.conf [deleted file]
includes/tidy/Html5Depurate.php [new file with mode: 0644]
includes/tidy/RaggettBase.php [new file with mode: 0644]
includes/tidy/RaggettExternal.php [new file with mode: 0644]
includes/tidy/RaggettInternalHHVM.php [new file with mode: 0644]
includes/tidy/RaggettInternalPHP.php [new file with mode: 0644]
includes/tidy/RaggettWrapper.php [new file with mode: 0644]
includes/tidy/TidyDriverBase.php [new file with mode: 0644]
includes/tidy/tidy.conf [new file with mode: 0644]
includes/upload/UploadBase.php
includes/utils/AvroValidator.php [new file with mode: 0644]
includes/utils/iterators/IteratorDecorator.php
includes/widget/ComplexTitleInputWidget.php [new file with mode: 0644]
includes/widget/NamespaceInputWidget.php
languages/Language.php
languages/i18n/ace.json
languages/i18n/ady-cyrl.json
languages/i18n/aeb-arab.json
languages/i18n/af.json
languages/i18n/aln.json
languages/i18n/am.json
languages/i18n/an.json
languages/i18n/ar.json
languages/i18n/arq.json
languages/i18n/ary.json
languages/i18n/arz.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/avk.json
languages/i18n/awa.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bgn.json
languages/i18n/bho.json
languages/i18n/bjn.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de-formal.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.json
languages/i18n/dtp.json
languages/i18n/dty.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fo.json
languages/i18n/fr.json
languages/i18n/frp.json
languages/i18n/frr.json
languages/i18n/fy.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/gom-deva.json
languages/i18n/gom-latn.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/gv.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hil.json
languages/i18n/hr.json
languages/i18n/hrx.json
languages/i18n/hsb.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ig.json
languages/i18n/ilo.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kab.json
languages/i18n/kk-cyrl.json
languages/i18n/km.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/krc.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/ky.json
languages/i18n/la.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/lez.json
languages/i18n/lg.json
languages/i18n/li.json
languages/i18n/lij.json
languages/i18n/lmo.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/lus.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mai.json
languages/i18n/map-bms.json
languages/i18n/mg.json
languages/i18n/min.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/myv.json
languages/i18n/mzn.json
languages/i18n/nah.json
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/oc.json
languages/i18n/olo.json [new file with mode: 0644]
languages/i18n/or.json
languages/i18n/os.json
languages/i18n/pa.json
languages/i18n/pdc.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/qu.json
languages/i18n/rm.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sa.json
languages/i18n/sah.json
languages/i18n/sat.json
languages/i18n/sc.json
languages/i18n/scn.json
languages/i18n/sco.json
languages/i18n/ses.json
languages/i18n/sh.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/so.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/stq.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/szl.json
languages/i18n/ta.json
languages/i18n/te.json
languages/i18n/tg-cyrl.json
languages/i18n/th.json
languages/i18n/tk.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/tyv.json
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/uz.json
languages/i18n/vec.json
languages/i18n/vep.json
languages/i18n/vi.json
languages/i18n/war.json
languages/i18n/wo.json
languages/i18n/xmf.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/i18n/zh-tw.json
languages/messages/MessagesAce.php
languages/messages/MessagesAf.php
languages/messages/MessagesAln.php
languages/messages/MessagesAn.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAv.php
languages/messages/MessagesAvk.php
languages/messages/MessagesBa.php
languages/messages/MessagesBcc.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBgn.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesBxr.php
languages/messages/MessagesCa.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCe.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFur.php
languages/messages/MessagesFy.php
languages/messages/MessagesGag.php
languages/messages/MessagesGl.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesHe.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHt.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIe.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKa.php
languages/messages/MessagesKaa.php
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKm.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKw.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLi.php
languages/messages/MessagesLij.php
languages/messages/MessagesLrc.php
languages/messages/MessagesLt.php
languages/messages/MessagesMdf.php
languages/messages/MessagesMg.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMr.php
languages/messages/MessagesMs.php
languages/messages/MessagesMt.php
languages/messages/MessagesMyv.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPl.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQu.php
languages/messages/MessagesRo.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSa.php
languages/messages/MessagesScn.php
languages/messages/MessagesSd.php
languages/messages/MessagesSdc.php
languages/messages/MessagesSe.php
languages/messages/MessagesSh.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSu.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesTe.php
languages/messages/MessagesTh.php
languages/messages/MessagesTl.php
languages/messages/MessagesTr.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesUk.php
languages/messages/MessagesUr.php
languages/messages/MessagesVec.php
languages/messages/MessagesVi.php
languages/messages/MessagesYi.php
languages/messages/MessagesYue.php
languages/messages/MessagesZh.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/dictionary/mediawiki.dic
maintenance/interwiki.list
maintenance/interwiki.sql
maintenance/language/zhtable/toCN.manual
maintenance/language/zhtable/toHK.manual
maintenance/language/zhtable/toTW.manual
maintenance/language/zhtable/toTrad.manual
maintenance/language/zhtable/tradphrases.manual
maintenance/language/zhtable/tradphrases_exclude.manual
maintenance/namespaceDupes.php
maintenance/refreshLinks.php
maintenance/syncFileBackend.php
maintenance/tables.sql
mw-config/config.js
mw-config/images/help-question-hover.gif [new file with mode: 0644]
mw-config/images/help-question.gif [new file with mode: 0644]
package.json
resources/Resources.php
resources/lib/oojs-ui/i18n/ar.json
resources/lib/oojs-ui/i18n/ast.json
resources/lib/oojs-ui/i18n/bn.json
resources/lib/oojs-ui/i18n/de.json
resources/lib/oojs-ui/i18n/en-ca.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/en.json
resources/lib/oojs-ui/i18n/es.json
resources/lib/oojs-ui/i18n/et.json
resources/lib/oojs-ui/i18n/eu.json
resources/lib/oojs-ui/i18n/fa.json
resources/lib/oojs-ui/i18n/fi.json
resources/lib/oojs-ui/i18n/fr.json
resources/lib/oojs-ui/i18n/gl.json
resources/lib/oojs-ui/i18n/glk.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/he.json
resources/lib/oojs-ui/i18n/ja.json
resources/lib/oojs-ui/i18n/km.json
resources/lib/oojs-ui/i18n/ksh.json
resources/lib/oojs-ui/i18n/lb.json
resources/lib/oojs-ui/i18n/lt.json
resources/lib/oojs-ui/i18n/mk.json
resources/lib/oojs-ui/i18n/nap.json
resources/lib/oojs-ui/i18n/pl.json
resources/lib/oojs-ui/i18n/ps.json
resources/lib/oojs-ui/i18n/pt.json
resources/lib/oojs-ui/i18n/qqq.json
resources/lib/oojs-ui/i18n/ro.json
resources/lib/oojs-ui/i18n/roa-tara.json
resources/lib/oojs-ui/i18n/ru.json
resources/lib/oojs-ui/i18n/sv.json
resources/lib/oojs-ui/i18n/uk.json
resources/lib/oojs-ui/i18n/vec.json
resources/lib/oojs-ui/i18n/vi.json
resources/lib/oojs-ui/i18n/zh-hans.json
resources/lib/oojs-ui/i18n/zh-hant.json
resources/lib/oojs-ui/oojs-ui-apex-noimages.css
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/themes/apex/images/icons/advanced.png
resources/lib/oojs-ui/themes/apex/images/icons/advanced.svg
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-g.svg
resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png
resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.svg
resources/lib/oojs-ui/themes/apex/images/icons/close.png
resources/lib/oojs-ui/themes/apex/images/icons/close.svg
resources/lib/oojs-ui/themes/apex/images/icons/code.png
resources/lib/oojs-ui/themes/apex/images/icons/code.svg
resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/history.svg
resources/lib/oojs-ui/themes/apex/images/icons/info.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-c.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-d.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-s.svg
resources/lib/oojs-ui/themes/apex/images/icons/language.png
resources/lib/oojs-ui/themes/apex/images/icons/language.svg
resources/lib/oojs-ui/themes/apex/images/icons/link.svg
resources/lib/oojs-ui/themes/apex/images/icons/lock.svg
resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/notice.svg
resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png
resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.svg
resources/lib/oojs-ui/themes/apex/images/icons/search.svg
resources/lib/oojs-ui/themes/apex/images/icons/secure-link.svg
resources/lib/oojs-ui/themes/apex/images/icons/settings.svg
resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png
resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.svg
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.svg
resources/lib/oojs-ui/themes/apex/images/icons/tag.svg
resources/lib/oojs-ui/themes/apex/images/icons/text-style.svg
resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/underline-u.svg
resources/lib/oojs-ui/themes/apex/images/indicators/alert.svg
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.svg
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.svg
resources/lib/oojs-ui/themes/apex/images/indicators/clear.svg
resources/lib/oojs-ui/themes/apex/images/indicators/required.svg
resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png
resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.svg
resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png
resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.svg
resources/lib/oojs-ui/themes/apex/images/textures/transparency.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/code.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/history.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/language.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.svg
resources/src/jquery/jquery.accessKeyLabel.js
resources/src/jquery/jquery.autoEllipsis.js
resources/src/jquery/jquery.byteLimit.js
resources/src/jquery/jquery.color.js
resources/src/jquery/jquery.colorUtil.js
resources/src/jquery/jquery.expandableField.js
resources/src/jquery/jquery.farbtastic.js
resources/src/jquery/jquery.getAttrs.js
resources/src/jquery/jquery.hidpi.js
resources/src/jquery/jquery.highlightText.js
resources/src/jquery/jquery.localize.js
resources/src/jquery/jquery.mwExtension.js
resources/src/jquery/jquery.placeholder.js
resources/src/jquery/jquery.qunit.completenessTest.js
resources/src/jquery/jquery.spinner.js
resources/src/jquery/jquery.suggestions.js
resources/src/jquery/jquery.tablesorter.js
resources/src/jquery/jquery.textSelection.js
resources/src/mediawiki.action/images/checker.png [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js
resources/src/mediawiki.action/mediawiki.action.edit.preview.js
resources/src/mediawiki.action/mediawiki.action.history.js
resources/src/mediawiki.action/mediawiki.action.view.filepage.css [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.view.metadata.css
resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
resources/src/mediawiki.api/mediawiki.api.edit.js
resources/src/mediawiki.api/mediawiki.api.js
resources/src/mediawiki.api/mediawiki.api.login.js
resources/src/mediawiki.api/mediawiki.api.options.js
resources/src/mediawiki.api/mediawiki.api.parse.js
resources/src/mediawiki.api/mediawiki.api.upload.js
resources/src/mediawiki.api/mediawiki.api.watch.js
resources/src/mediawiki.language/languages/bs.js
resources/src/mediawiki.language/languages/dsb.js
resources/src/mediawiki.language/languages/fi.js
resources/src/mediawiki.language/languages/ga.js
resources/src/mediawiki.language/languages/he.js
resources/src/mediawiki.language/languages/hsb.js
resources/src/mediawiki.language/languages/hu.js
resources/src/mediawiki.language/languages/hy.js
resources/src/mediawiki.language/languages/la.js
resources/src/mediawiki.language/languages/os.js
resources/src/mediawiki.language/languages/ru.js
resources/src/mediawiki.language/languages/sl.js
resources/src/mediawiki.language/languages/uk.js
resources/src/mediawiki.language/mediawiki.cldr.js
resources/src/mediawiki.language/mediawiki.language.init.js
resources/src/mediawiki.language/mediawiki.language.js
resources/src/mediawiki.language/mediawiki.language.numbers.js
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.legacy/images/checker.png [deleted file]
resources/src/mediawiki.legacy/images/question.png [deleted file]
resources/src/mediawiki.legacy/images/question.svg [deleted file]
resources/src/mediawiki.legacy/oldshared.css
resources/src/mediawiki.legacy/protect.js
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.legacy/wikibits.js
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js
resources/src/mediawiki.page/mediawiki.page.gallery.css
resources/src/mediawiki.page/mediawiki.page.gallery.js
resources/src/mediawiki.page/mediawiki.page.image.pagination.js
resources/src/mediawiki.page/mediawiki.page.watch.ajax.js
resources/src/mediawiki.special/mediawiki.special.changeemail.js
resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css
resources/src/mediawiki.special/mediawiki.special.movePage.css [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.movePage.js
resources/src/mediawiki.special/mediawiki.special.preferences.css
resources/src/mediawiki.special/mediawiki.special.preferences.js
resources/src/mediawiki.special/mediawiki.special.search.css
resources/src/mediawiki.special/mediawiki.special.search.js
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki.special/mediawiki.special.userlogin.common.js [deleted file]
resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js
resources/src/mediawiki.special/templates/thumbnail.html
resources/src/mediawiki.toolbar/toolbar.js
resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js
resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.less
resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js
resources/src/mediawiki/images/question.png [new file with mode: 0644]
resources/src/mediawiki/images/question.svg [new file with mode: 0644]
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js
resources/src/mediawiki/mediawiki.Title.js
resources/src/mediawiki/mediawiki.Upload.Dialog.js
resources/src/mediawiki/mediawiki.Upload.js
resources/src/mediawiki/mediawiki.Uri.js
resources/src/mediawiki/mediawiki.Uri.loose.regexp [new file with mode: 0644]
resources/src/mediawiki/mediawiki.Uri.strict.regexp [new file with mode: 0644]
resources/src/mediawiki/mediawiki.confirmCloseWindow.js
resources/src/mediawiki/mediawiki.debug.js
resources/src/mediawiki/mediawiki.errorLogger.js
resources/src/mediawiki/mediawiki.experiments.js
resources/src/mediawiki/mediawiki.feedback.js
resources/src/mediawiki/mediawiki.feedlink.css
resources/src/mediawiki/mediawiki.filewarning.less
resources/src/mediawiki/mediawiki.htmlform.css [new file with mode: 0644]
resources/src/mediawiki/mediawiki.htmlform.js
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/mediawiki.jqueryMsg.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.notification.js
resources/src/mediawiki/mediawiki.searchSuggest.js
resources/src/mediawiki/mediawiki.template.js
resources/src/mediawiki/mediawiki.template.regexp.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.user.js
resources/src/mediawiki/mediawiki.userSuggest.js
resources/src/mediawiki/mediawiki.util.js
resources/src/startup.js
tests/browser/features/support/pages/main_page.rb
tests/browser/features/support/pages/preferences_appearance_page.rb
tests/browser/features/support/pages/view_history_page.rb
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/LessFileCompilationTest.php
tests/phpunit/Makefile
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/README
tests/phpunit/data/css/comments.css [new file with mode: 0644]
tests/phpunit/data/helpers/WellProtectedClass.php
tests/phpunit/data/less/common/test.common.mixins.less
tests/phpunit/data/less/module/styles.css
tests/phpunit/includes/ConsecutiveParametersMatcher.php [new file with mode: 0644]
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/FauxRequestTest.php
tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php [new file with mode: 0644]
tests/phpunit/includes/LinkerTest.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/TestingAccessWrapper.php
tests/phpunit/includes/TestingAccessWrapperTest.php
tests/phpunit/includes/WikiMapTest.php [new file with mode: 0644]
tests/phpunit/includes/WikiReferenceTest.php [new file with mode: 0644]
tests/phpunit/includes/api/ApiMainTest.php
tests/phpunit/includes/api/ApiResultTest.php
tests/phpunit/includes/changes/RecentChangeTest.php
tests/phpunit/includes/content/TextContentHandlerTest.php
tests/phpunit/includes/content/TextContentTest.php
tests/phpunit/includes/debug/logger/monolog/AvroFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/debug/logger/monolog/KafkaHandlerTest.php [new file with mode: 0644]
tests/phpunit/includes/debug/logger/monolog/LineFormatterTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/libs/IEUrlExtensionTest.php
tests/phpunit/includes/logging/LogFormatterTest.php
tests/phpunit/includes/objectcache/BagOStuffTest.php
tests/phpunit/includes/objectcache/MultiWriteBagOStuffTest.php [new file with mode: 0644]
tests/phpunit/includes/parser/MediaWikiParserTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/parser/TagHooksTest.php
tests/phpunit/includes/parser/TidyTest.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/registration/ExtensionRegistryTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/specials/SpecialSearchTest.php
tests/phpunit/includes/upload/UploadStashTest.php
tests/phpunit/includes/utils/AvroValidatorTest.php [new file with mode: 0644]
tests/phpunit/structure/ResourcesTest.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js
tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js
tests/qunit/suites/resources/jquery/jquery.color.test.js
tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js
tests/qunit/suites/resources/jquery/jquery.hidpi.test.js
tests/qunit/suites/resources/jquery/jquery.localize.test.js
tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js
tests/qunit/suites/resources/jquery/jquery.placeholder.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/qunit/suites/resources/jquery/jquery.textSelection.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.upload.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js

diff --git a/.jscsrc b/.jscsrc
index 6a3c564..aaa876c 100644 (file)
--- a/.jscsrc
+++ b/.jscsrc
@@ -1,9 +1,16 @@
 {
        "preset": "wikimedia",
+       "es3": true,
 
-       "disallowQuotedKeysInObjects": null,
-       "requireSpacesInsideParentheses": null,
-       "requireSpacesInsideArrayBrackets": null,
+       "requireVarDeclFirst": null,
+
+       "disallowQuotedKeysInObjects": "allButReserved",
+       "requireDotNotation": { "allExcept": [ "keywords" ] },
+       "jsDoc": {
+               "requireNewlineAfterDescription": true,
+               "requireParamTypes": true,
+               "requireReturnTypes": true
+       },
 
        "excludeFiles": [
                "docs/**",
index b84d276..b776e8f 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -22,7 +22,7 @@
                "mediaWiki": true,
                "JSON": true,
                "OO": true,
-               "performance": true,
+               "mwPerformance": true,
                "jQuery": false,
                "QUnit": false,
                "sinon": false
index 512d735..8ba46b5 100644 (file)
@@ -8,19 +8,17 @@
 #
 language: php
 
-php:
-  - hhvm-nightly
-  - 5.3
-
-env:
-  - dbtype=mysql
-  - dbtype=postgres
-
-# TODO: Travis CI's hhvm does not support PostgreSQL at the moment.
 matrix:
-  exclude:
-    - php: hhvm-nightly
-      env: dbtype=postgres
+  fast_finish: true
+  include:
+    - env: dbtype=mysql
+      php: 5.3
+    - env: dbtype=postgres
+      php: 5.3
+    - env: dbtype=mysql
+      php: hhvm
+    - env: dbtype=mysql
+      php: 7
 
 services:
   - mysql
index e1e5e4a..8dbeb6b 100644 (file)
@@ -12,7 +12,7 @@ module.exports = function ( grunt ) {
                wgScriptPath = process.env.MW_SCRIPT_PATH,
                karmaProxy = {};
 
-       karmaProxy[wgScriptPath] = wgServer + wgScriptPath;
+       karmaProxy[ wgScriptPath ] = wgServer + wgScriptPath;
 
        grunt.initConfig( {
                jshint: {
@@ -32,6 +32,11 @@ module.exports = function ( grunt ) {
                        ]
                },
                banana: {
+                       options: {
+                               disallowBlankTranslations: false,
+                               disallowDuplicateTranslations: false,
+                               disallowUnusedTranslations: false
+                       },
                        core: 'languages/i18n/',
                        api: 'includes/api/i18n/',
                        installer: 'includes/installer/i18n/'
@@ -87,14 +92,14 @@ module.exports = function ( grunt ) {
                }
                if ( !process.env.MW_SCRIPT_PATH ) {
                        grunt.log.error( 'Environment variable MW_SCRIPT_PATH must be set.\n' +
-                               'Set this like $wgScriptPath, e.g. "/w"');
+                               'Set this like $wgScriptPath, e.g. "/w"' );
                }
                return !!( process.env.MW_SERVER && process.env.MW_SCRIPT_PATH );
        } );
 
-       grunt.registerTask( 'lint', ['jshint', 'jscs', 'jsonlint', 'banana'] );
+       grunt.registerTask( 'lint', [ 'jshint', 'jscs', 'jsonlint', 'banana' ] );
        grunt.registerTask( 'qunit', [ 'assert-mw-env', 'karma:main' ] );
 
-       grunt.registerTask( 'test', ['lint'] );
+       grunt.registerTask( 'test', [ 'lint' ] );
        grunt.registerTask( 'default', 'test' );
 };
index 5b85bbc..19309a8 100644 (file)
@@ -27,6 +27,9 @@ production.
   MediaWiki 1.26, in where ResourceLoader became fully asynchronous.
 * $wgMasterWaitTimeout was removed (deprecated in 1.24).
 * Fields in ParserOptions are now private. Use the accessors instead.
+* Custom LESS functions (defined via $wgResourceLoaderLESSFunctions)
+  have been removed, after being deprecated in 1.24.
+* $wgAlwaysUseTidy has been removed.
 
 === New features in 1.26 ===
 * (T51506) Now action=info gives estimates of actual watchers for a page.
@@ -66,6 +69,10 @@ production.
   for potentially slow POST requests that need to be as atomic as possible.
 * ResourceLoader now loads all scripts asynchronously. The top-queue and
   startup modules are no longer synchronously loaded.
+* 'mediawiki.ui.button' styles are no longer unconditionally loaded on every
+  page. During the deprecation period, the styles will only be loaded on pages
+  which contain 'mw-ui-button' in their HTML. Starting in 1.28, the styles will
+  only be loaded if explicitly required.
 
 ==== External libraries ====
 * Update es5-shim from v4.0.0 to v4.1.5.
@@ -79,6 +86,8 @@ production.
 * (T53283) load.php sometimes sends 304 response without full headers
 * (T65198) Talk page tabs now have a "rel=discussion" attribute
 * (T98841) {{msgnw:}} now preserves comments even when subst: is not used.
+* (T104142) $wgEmergencyContact and $wgPasswordSender now use their default
+  value if set to an empty string.
 
 === Action API changes in 1.26 ===
 * New-style continuation is now the default for action=continue. Clients may
@@ -97,10 +106,22 @@ production.
   sometimes being numerically-indexed objects with formatversion=2.
 * When errors about users being blocked are returned, they now include
   information about the relevant block.
+* (T99926) list=random has higher limits, in line with other API modules.
+* list=random's rnredirect parameter is deprecated in favor of a new
+  rnfilterredir parameter that also allows for listing both redirects and
+  non-redirects.
+* list=random now supports continuation.
+* API responses to GET requests may now include ETag and Last-Modified headers,
+  and will honor corresponding If-None-Match and If-Modified-Since on such
+  requests.
 
 === Action API internal changes in 1.26 ===
 * New metadata item ApiResult::META_KVP_MERGE to allow for merging the KVP key
   into the value when the value is an assoc.
+* API action modules may now provide values for the RFC 7232 ETag and
+  Last-Modified headers. The API will check these against If-None-Match and
+  If-Modified-Since request headers on GET requests and avoid executing the
+  module when appropriate.
 
 === Languages updated in 1.26 ===
 
@@ -118,6 +139,7 @@ changes to languages because of Phabricator reports.
 * ChangeTags::tagDescription() will return false if the interface message
   for the tag is disabled.
 * Added PageHistoryPager::doBatchLookups hook.
+* Added $wikiId parameter to FormatAutocomments hook.
 * Added ParserCacheSaveComplete to ParserCache
 * supportsDirectEditing and supportsDirectApiEditing methods added to
   ContentHandler, to provide a way for ApiEditPage and EditPage to check
@@ -162,6 +184,12 @@ changes to languages because of Phabricator reports.
   a lengthy deprecation period.
 * The ScopedPHPTimeout class was removed.
 * Removed maintenance script fixSlaveDesync.php.
+* Watchlist tokens, SpecialResetTokens, and User::getTokenFromOption()
+  are deprecated. Applications using those can work via the OAuth
+  extension instead. New tokens types should not be added.
+* DatabaseBase::errorCount() was removed (unused).
+* $wgDeferredUpdateList was removed.
+* DeferredUpdates::addHTMLCacheUpdate() was removed.
 
 == Compatibility ==
 
index b97e190..bdcbe5a 100644 (file)
@@ -149,6 +149,7 @@ $wgAutoloadLocalClasses = array(
        'AutoLoader' => __DIR__ . '/includes/AutoLoader.php',
        'AutoloadGenerator' => __DIR__ . '/includes/utils/AutoloadGenerator.php',
        'Autopromote' => __DIR__ . '/includes/Autopromote.php',
+       'AvroValidator' => __DIR__ . '/includes/utils/AvroValidator.php',
        'BacklinkCache' => __DIR__ . '/includes/cache/BacklinkCache.php',
        'BacklinkJobUtils' => __DIR__ . '/includes/jobqueue/utils/BacklinkJobUtils.php',
        'BackupDumper' => __DIR__ . '/maintenance/backup.inc',
@@ -725,7 +726,6 @@ $wgAutoloadLocalClasses = array(
        'MWOldPassword' => __DIR__ . '/includes/password/MWOldPassword.php',
        'MWSaltedPassword' => __DIR__ . '/includes/password/MWSaltedPassword.php',
        'MWTidy' => __DIR__ . '/includes/parser/MWTidy.php',
-       'MWTidyWrapper' => __DIR__ . '/includes/parser/MWTidy.php',
        'MWTimestamp' => __DIR__ . '/includes/MWTimestamp.php',
        'MachineReadableRCFeedFormatter' => __DIR__ . '/includes/rcfeed/MachineReadableRCFeedFormatter.php',
        'MagicWord' => __DIR__ . '/includes/MagicWord.php',
@@ -755,6 +755,9 @@ $wgAutoloadLocalClasses = array(
        'MediaWiki\\Logger\\LegacySpi' => __DIR__ . '/includes/debug/logger/LegacySpi.php',
        'MediaWiki\\Logger\\LoggerFactory' => __DIR__ . '/includes/debug/logger/LoggerFactory.php',
        'MediaWiki\\Logger\\MonologSpi' => __DIR__ . '/includes/debug/logger/MonologSpi.php',
+       'MediaWiki\\Logger\\Monolog\\AvroFormatter' => __DIR__ . '/includes/debug/logger/monolog/AvroFormatter.php',
+       'MediaWiki\\Logger\\Monolog\\BufferHandler' => __DIR__ . '/includes/debug/logger/monolog/BufferHandler.php',
+       'MediaWiki\\Logger\\Monolog\\KafkaHandler' => __DIR__ . '/includes/debug/logger/monolog/KafkaHandler.php',
        'MediaWiki\\Logger\\Monolog\\LegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php',
        'MediaWiki\\Logger\\Monolog\\LegacyHandler' => __DIR__ . '/includes/debug/logger/monolog/LegacyHandler.php',
        'MediaWiki\\Logger\\Monolog\\LineFormatter' => __DIR__ . '/includes/debug/logger/monolog/LineFormatter.php',
@@ -762,7 +765,15 @@ $wgAutoloadLocalClasses = array(
        'MediaWiki\\Logger\\Monolog\\WikiProcessor' => __DIR__ . '/includes/debug/logger/monolog/WikiProcessor.php',
        'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
        'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php',
+       'MediaWiki\\Tidy\\Html5Depurate' => __DIR__ . '/includes/tidy/Html5Depurate.php',
+       'MediaWiki\\Tidy\\RaggettBase' => __DIR__ . '/includes/tidy/RaggettBase.php',
+       'MediaWiki\\Tidy\\RaggettExternal' => __DIR__ . '/includes/tidy/RaggettExternal.php',
+       'MediaWiki\\Tidy\\RaggettInternalHHVM' => __DIR__ . '/includes/tidy/RaggettInternalHHVM.php',
+       'MediaWiki\\Tidy\\RaggettInternalPHP' => __DIR__ . '/includes/tidy/RaggettInternalPHP.php',
+       'MediaWiki\\Tidy\\RaggettWrapper' => __DIR__ . '/includes/tidy/RaggettWrapper.php',
+       'MediaWiki\\Tidy\\TidyDriverBase' => __DIR__ . '/includes/tidy/TidyDriverBase.php',
        'MediaWiki\\Widget\\ComplexNamespaceInputWidget' => __DIR__ . '/includes/widget/ComplexNamespaceInputWidget.php',
+       'MediaWiki\\Widget\\ComplexTitleInputWidget' => __DIR__ . '/includes/widget/ComplexTitleInputWidget.php',
        'MediaWiki\\Widget\\NamespaceInputWidget' => __DIR__ . '/includes/widget/NamespaceInputWidget.php',
        'MediaWiki\\Widget\\TitleInputWidget' => __DIR__ . '/includes/widget/TitleInputWidget.php',
        'MediaWiki\\Widget\\UserInputWidget' => __DIR__ . '/includes/widget/UserInputWidget.php',
index adfe01b..cce664a 100644 (file)
                "composer/semver": "0.1.0",
                "cssjanus/cssjanus": "1.1.1",
                "ext-iconv": "*",
-               "leafo/lessphp": "0.5.0",
                "liuggio/statsd-php-client": "1.0.16",
-               "mediawiki/at-ease": "1.0.0",
-               "oojs/oojs-ui": "0.12.6",
+               "oyejorge/less.php": "1.7.0.5",
+               "mediawiki/at-ease": "1.1.0",
+               "oojs/oojs-ui": "0.12.8.1",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
                "wikimedia/assert": "0.2.2",
-               "wikimedia/cdb": "1.0.1",
+               "wikimedia/cdb": "1.3.0",
                "wikimedia/composer-merge-plugin": "1.2.1",
                "wikimedia/ip-set": "1.0.1",
-               "wikimedia/utfnormal": "1.0.2",
+               "wikimedia/utfnormal": "1.0.3",
                "wikimedia/wrappedstring": "2.0.0",
                "zordius/lightncandy": "0.21"
        },
                "ext-wikidiff2": "Diff accelerator",
                "ext-apc": "Local data and opcode cache",
                "monolog/monolog": "Flexible debug logging system",
+               "nmred/kafka-php": "Send debug log events to kafka",
                "pear/mail": "Mail sending support",
                "pear/mail_mime": "Mail sending support",
-               "pear/mail_mime-decode": "Mail sending support"
+               "pear/mail_mime-decode": "Mail sending support",
+               "wikimedia/avro": "Binary serialization format used with kafka"
        },
        "autoload": {
                "psr-0": {
index ece38fe..218a19c 100644 (file)
                        "type": "object",
                        "description": "ResourceLoader LESS variables"
                },
-               "ResourceLoaderLESSFunctions": {
-                       "type": "object",
-                       "description": "ResourceLoader LESS functions"
-               },
                "ResourceLoaderLESSImportPaths": {
                        "type": "object",
                        "description": "ResourceLoader import paths"
                "config": {
                        "type": "object",
                        "description": "Configuration options for this extension",
+                       "properties": {
+                               "_prefix": {
+                                       "type": "string",
+                                       "default": "wg",
+                                       "description": "Prefix to put in front of configuration settings when exporting them to $GLOBALS"
+                               }
+                       },
                        "patternProperties": {
                                "^[a-zA-Z_\u007f-\u00ff][a-zA-Z0-9_\u007f-\u00ff]*$": {
                                        "type": ["object", "array", "string", "integer", "null", "boolean"],
index 5e2269a..f5999a5 100644 (file)
@@ -662,7 +662,8 @@ $oldPageID: the page ID of the revision when archived (may be null)
 
 'ArticleRevisionVisibilitySet': Called when changing visibility of one or more
 revisions of an article.
-&$title: Title object of the article
+$title: Title object of the article
+$ids: Ids to set the visibility for
 
 'ArticleRollbackComplete': After an article rollback is completed.
 $wikiPage: the WikiPage that was edited
@@ -1271,20 +1272,21 @@ $user: User being checked
 $confirmed: Whether or not the email address is confirmed
 
 'EmailUser': Before sending email from one user to another.
-$to: address of receiving user
-$from: address of sending user
+$to: MailAddress object of receiving user
+$from: MailAddress object of sending user
 $subject: subject of the mail
 $text: text of the mail
+&$error: Out-param for an error
 
 'EmailUserCC': Before sending the copy of the email to the author.
-$to: address of receiving user
-$from: address of sending user
+$to: MailAddress object of receiving user
+$from: MailAddress object of sending user
 $subject: subject of the mail
 $text: text of the mail
 
 'EmailUserComplete': After sending email from one user to another.
-$to: address of receiving user
-$from: address of sending user
+$to: MailAddress object of receiving user
+$from: MailAddress object of sending user
 $subject: subject of the mail
 $text: text of the mail
 
@@ -1376,6 +1378,9 @@ $auto: The extracted part of the parsed comment before the call to the hook.
 $post: Boolean, true if there is text after this autocomment
 $title: An optional title object used to links to sections. Can be null.
 $local: Boolean indicating whether section links should refer to local page.
+$wikiId: String containing the ID (as used by WikiMap) of the wiki from which the
+  autocomment originated; null for the local wiki. Added in 1.26, should default
+  to null in handler functions, for backwards compatibility.
 
 'GalleryGetModes': Get list of classes that can render different modes of a
 gallery.
index 51c1b55..6ab57d7 100644 (file)
@@ -2,6 +2,7 @@
 <html lang="en" dir="ltr">
 <head>
        <link rel="stylesheet" href="../../resources/src/mediawiki.legacy/shared.css">
+       <link rel="stylesheet" href="../../resources/src/mediawiki/mediawiki.feedlink.css">
 </head>
 <body style="font-size: small;">
 
index c0aad5d..37429b9 100644 (file)
@@ -211,7 +211,7 @@ $wgLoadScript = false;
 
 /**
  * The URL path of the skins directory.
- * Defaults to "{$wgScriptPath}/skins".
+ * Defaults to "{$wgResourceBasePath}/skins".
  * @since 1.3
  */
 $wgStylePath = false;
@@ -226,7 +226,7 @@ $wgLocalStylePath = false;
 
 /**
  * The URL path of the extensions directory.
- * Defaults to "{$wgScriptPath}/extensions".
+ * Defaults to "{$wgResourceBasePath}/extensions".
  * @since 1.16
  */
 $wgExtensionAssetsPath = false;
@@ -3473,8 +3473,8 @@ $wgResourceModuleSkinStyles = array();
 $wgResourceLoaderSources = array();
 
 /**
- * Default 'remoteBasePath' value for instances of ResourceLoaderFileModule.
- * If not set, then $wgScriptPath will be used as a fallback.
+ * The default 'remoteBasePath' value for instances of ResourceLoaderFileModule.
+ * Defaults to $wgScriptPath.
  */
 $wgResourceBasePath = null;
 
@@ -3636,18 +3636,6 @@ $wgResourceLoaderValidateStaticJS = false;
  */
 $wgResourceLoaderLESSVars = array();
 
-/**
- * Custom LESS functions. An associative array mapping function name to PHP
- * callable.
- *
- * Changes to LESS functions do not trigger cache invalidation.
- *
- * @since 1.22
- * @deprecated since 1.24 Questionable usefulness and problematic to support,
- *     will be removed in the future.
- */
-$wgResourceLoaderLESSFunctions = array();
-
 /**
  * Default import paths for LESS modules. LESS files referenced in @import
  * statements will be looked up here first, and relative to the importing file
@@ -4116,44 +4104,55 @@ $wgEnableImageWhitelist = true;
 $wgAllowImageTag = false;
 
 /**
- * $wgUseTidy: use tidy to make sure HTML output is sane.
- * Tidy is a free tool that fixes broken HTML.
- * See http://www.w3.org/People/Raggett/tidy/
+ * Configuration for HTML postprocessing tool. Set this to a configuration
+ * array to enable an external tool. Dave Raggett's "HTML Tidy" is typically
+ * used. See http://www.w3.org/People/Raggett/tidy/
  *
- * - $wgTidyBin should be set to the path of the binary and
- * - $wgTidyConf to the path of the configuration file.
- * - $wgTidyOpts can include any number of parameters.
- * - $wgTidyInternal controls the use of the PECL extension or the
- *   libtidy (PHP >= 5) extension to use an in-process tidy library instead
- *   of spawning a separate program.
- *   Normally you shouldn't need to override the setting except for
- *   debugging. To install, use 'pear install tidy' and add a line
- *   'extension=tidy.so' to php.ini.
+ * If this is null and $wgUseTidy is true, the deprecated configuration
+ * parameters will be used instead.
+ *
+ * If this is null and $wgUseTidy is false, a pure PHP fallback will be used.
+ *
+ * Keys are:
+ *  - driver: May be:
+ *    - RaggettInternalHHVM: Use the limited-functionality HHVM extension
+ *    - RaggettInternalPHP: Use the PECL extension
+ *    - RaggettExternal: Shell out to an external binary (tidyBin)
+ *
+ *  - tidyConfigFile: Path to configuration file for any of the Raggett drivers
+ *  - debugComment: True to add a comment to the output with warning messages
+ *  - tidyBin: For RaggettExternal, the path to the tidy binary.
+ *  - tidyCommandLine: For RaggettExternal, additional command line options.
  */
-$wgUseTidy = false;
+$wgTidyConfig = null;
 
 /**
- * @see $wgUseTidy
+ * Set this to true to use the deprecated tidy configuration parameters.
+ * @deprecated use $wgTidyConfig
  */
-$wgAlwaysUseTidy = false;
+$wgUseTidy = false;
 
 /**
- * @see $wgUseTidy
+ * The path to the tidy binary.
+ * @deprecated Use $wgTidyConfig['tidyBin']
  */
 $wgTidyBin = 'tidy';
 
 /**
- * @see $wgUseTidy
+ * The path to the tidy config file
+ * @deprecated Use $wgTidyConfig['tidyConfigFile']
  */
-$wgTidyConf = $IP . '/includes/tidy.conf';
+$wgTidyConf = $IP . '/includes/tidy/tidy.conf';
 
 /**
- * @see $wgUseTidy
+ * The command line options to the tidy binary
+ * @deprecated Use $wgTidyConfig['tidyCommandLine']
  */
 $wgTidyOpts = '';
 
 /**
- * @see $wgUseTidy
+ * Set this to true to use the tidy extension
+ * @deprecated Use $wgTidyConfig['driver']
  */
 $wgTidyInternal = extension_loaded( 'tidy' );
 
@@ -7237,12 +7236,6 @@ $wgAPIPropModules = array();
  */
 $wgAPIListModules = array();
 
-/**
- * This variable is ignored. To add your module to the API, please add it to $wgAPI*Modules
- * @deprecated since 1.21
- */
-$wgAPIGeneratorModules = array();
-
 /**
  * Maximum amount of rows to scan in a DB query in the API
  * The default value is generally fine
index 5e8b2c3..58927dc 100644 (file)
@@ -171,6 +171,7 @@ if ( !function_exists( 'hash_equals' ) ) {
  *
  * @param string $ext Name of the extension to load
  * @param string|null $path Absolute path of where to find the extension.json file
+ * @since 1.25
  */
 function wfLoadExtension( $ext, $path = null ) {
        if ( !$path ) {
@@ -191,6 +192,7 @@ function wfLoadExtension( $ext, $path = null ) {
  *
  * @see wfLoadExtension
  * @param string[] $exts Array of extension names to load
+ * @since 1.25
  */
 function wfLoadExtensions( array $exts ) {
        global $wgExtensionDirectory;
@@ -206,6 +208,7 @@ function wfLoadExtensions( array $exts ) {
  * @see wfLoadExtension
  * @param string $skin Name of the extension to load
  * @param string|null $path Absolute path of where to find the skin.json file
+ * @since 1.25
  */
 function wfLoadSkin( $skin, $path = null ) {
        if ( !$path ) {
@@ -220,6 +223,7 @@ function wfLoadSkin( $skin, $path = null ) {
  *
  * @see wfLoadExtensions
  * @param string[] $skins Array of extension names to load
+ * @since 1.25
  */
 function wfLoadSkins( array $skins ) {
        global $wgStyleDirectory;
@@ -2179,14 +2183,24 @@ function wfResetOutputBuffers( $resetGzipEncoding = true ) {
                $wgDisableOutputCompression = true;
        }
        while ( $status = ob_get_status() ) {
-               if ( $status['type'] == 0 /* PHP_OUTPUT_HANDLER_INTERNAL */ ) {
-                       // Probably from zlib.output_compression or other
-                       // PHP-internal setting which can't be removed.
-                       //
+               if ( isset( $status['flags'] ) ) {
+                       $flags = PHP_OUTPUT_HANDLER_CLEANABLE | PHP_OUTPUT_HANDLER_REMOVABLE;
+                       $deleteable = ( $status['flags'] & $flags ) === $flags;
+               } elseif ( isset( $status['del'] ) ) {
+                       $deleteable = $status['del'];
+               } else {
+                       // Guess that any PHP-internal setting can't be removed.
+                       $deleteable = $status['type'] !== 0; /* PHP_OUTPUT_HANDLER_INTERNAL */
+               }
+               if ( !$deleteable ) {
                        // Give up, and hope the result doesn't break
                        // output behavior.
                        break;
                }
+               if ( $status['name'] === 'MediaWikiTestCase::wfResetOutputBuffersBarrier' ) {
+                       // Unit testing barrier to prevent this function from breaking PHPUnit.
+                       break;
+               }
                if ( !ob_end_clean() ) {
                        // Could not remove output buffer handler; abort now
                        // to avoid getting in some kind of infinite loop.
@@ -4274,3 +4288,28 @@ function wfThumbIsStandard( File $file, array $params ) {
 
        return true;
 }
+
+/**
+ * Merges two (possibly) 2 dimensional arrays into the target array ($baseArray).
+ *
+ * Values that exist in both values will be combined with += (all values of the array
+ * of $newValues will be added to the values of the array of $baseArray, while values,
+ * that exists in both, the value of $baseArray will be used).
+ *
+ * @param array $baseArray The array where you want to add the values of $newValues to
+ * @param array $newValues An array with new values
+ * @return array The combined array
+ * @since 1.26
+ */
+function wfArrayPlus2d( array $baseArray, array $newValues ) {
+       // First merge items that are in both arrays
+       foreach ( $baseArray as $name => &$groupVal ) {
+               if ( isset( $newValues[$name] ) ) {
+                       $groupVal += $newValues[$name];
+               }
+       }
+       // Now add items that didn't exist yet
+       $baseArray += $newValues;
+
+       return $baseArray;
+}
index 036d65c..a414562 100644 (file)
@@ -231,22 +231,25 @@ class Hooks {
        }
 
        /**
-        * Handle PHP errors issued inside a hook. Catch errors that have to do with
-        * a function expecting a reference, and let all others pass through.
-        *
-        * This REALLY should be protected... but it's public for compatibility
+        * Handle PHP errors issued inside a hook. Catch errors that have to do
+        * with a function expecting a reference, and pass all others through to
+        * MWExceptionHandler::handleError() for default processing.
         *
         * @since 1.18
         *
         * @param int $errno Error number (unused)
         * @param string $errstr Error message
         * @throws MWHookException If the error has to do with the function signature
-        * @return bool Always returns false
+        * @return bool
         */
        public static function hookErrorHandler( $errno, $errstr ) {
                if ( strpos( $errstr, 'expected to be a reference, value given' ) !== false ) {
                        throw new MWHookException( $errstr, $errno );
                }
-               return false;
+
+               // Delegate unhandled errors to the default MW handler
+               return call_user_func_array(
+                       'MWExceptionHandler::handleError', func_get_args()
+               );
        }
 }
index b2926d1..221cefb 100644 (file)
@@ -63,7 +63,15 @@ class HtmlFormatter {
         */
        public function getDoc() {
                if ( !$this->doc ) {
-                       $html = mb_convert_encoding( $this->html, 'HTML-ENTITIES', 'UTF-8' );
+                       // DOMDocument::loadHTML apparently isn't very good with encodings, so
+                       // convert input to ASCII by encoding everything above 128 as entities.
+                       if ( function_exists( 'mb_convert_encoding' ) ) {
+                               $html = mb_convert_encoding( $this->html, 'HTML-ENTITIES', 'UTF-8' );
+                       } else {
+                               $html = preg_replace_callback( '/[\x{80}-\x{10ffff}]/u', function ( $m ) {
+                                       return '&#' . UtfNormal\Utils::utf8ToCodepoint( $m[0] ) . ';';
+                               }, $this->html );
+                       }
 
                        // Workaround for bug that caused spaces before references
                        // to disappear during processing:
@@ -244,7 +252,14 @@ class HtmlFormatter {
                        ) );
                }
                $html = $replacements->replace( $html );
-               $html = mb_convert_encoding( $html, 'UTF-8', 'HTML-ENTITIES' );
+
+               if ( function_exists( 'mb_convert_encoding' ) ) {
+                       // Just in case the conversion in getDoc() above used named
+                       // entities that aren't known to html_entity_decode().
+                       $html = mb_convert_encoding( $html, 'UTF-8', 'HTML-ENTITIES' );
+               } else {
+                       $html = html_entity_decode( $html, ENT_COMPAT, 'utf-8' );
+               }
                return $html;
        }
 
index 1c79485..bc5a957 100644 (file)
@@ -855,6 +855,8 @@ class CurlHttpRequest extends MWHttpRequest {
 
 class PhpHttpRequest extends MWHttpRequest {
 
+       private $fopenErrors = array();
+
        /**
         * @param string $url
         * @return string
@@ -865,6 +867,60 @@ class PhpHttpRequest extends MWHttpRequest {
                return 'tcp://' . $parsedUrl['host'] . ':' . $parsedUrl['port'];
        }
 
+       /**
+        * Returns an array with a 'capath' or 'cafile' key that is suitable to be merged into the 'ssl' sub-array of a
+        * stream context options array. Uses the 'caInfo' option of the class if it is provided, otherwise uses the system
+        * default CA bundle if PHP supports that, or searches a few standard locations.
+        * @return array
+        * @throws DomainException
+        */
+       protected function getCertOptions() {
+               $certOptions = array();
+               $certLocations = array();
+               if ( $this->caInfo ) {
+                       $certLocations = array( 'manual' => $this->caInfo );
+               } elseif ( version_compare( PHP_VERSION, '5.6.0', '<' ) ) {
+                       // Default locations, based on
+                       // https://www.happyassassin.net/2015/01/12/a-note-about-ssltls-trusted-certificate-stores-and-platforms/
+                       // PHP 5.5 and older doesn't have any defaults, so we try to guess ourselves. PHP 5.6+ gets the CA location
+                       // from OpenSSL as long as it is not set manually, so we should leave capath/cafile empty there.
+                       $certLocations = array_filter( array(
+                               getenv( 'SSL_CERT_DIR' ),
+                               getenv( 'SSL_CERT_PATH' ),
+                               '/etc/pki/tls/certs/ca-bundle.crt', # Fedora et al
+                               '/etc/ssl/certs',  # Debian et al
+                               '/etc/pki/tls/certs/ca-bundle.trust.crt',
+                               '/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem',
+                               '/System/Library/OpenSSL', # OSX
+                       ) );
+               }
+
+               foreach( $certLocations as $key => $cert ) {
+                       if ( is_dir( $cert ) ) {
+                               $certOptions['capath'] = $cert;
+                               break;
+                       } elseif ( is_file( $cert ) ) {
+                               $certOptions['cafile'] = $cert;
+                               break;
+                       } elseif ( $key === 'manual' ) {
+                               // fail more loudly if a cert path was manually configured and it is not valid
+                               throw new DomainException( "Invalid CA info passed: $cert" );
+                       }
+               }
+
+               return $certOptions;
+       }
+
+       /**
+        * Custom error handler for dealing with fopen() errors. fopen() tends to fire multiple errors in succession, and the last one
+        * is completely useless (something like "fopen: failed to open stream") so normal methods of handling errors programmatically
+        * like get_last_error() don't work.
+        */
+       public function errorHandler( $errno, $errstr ) {
+               $n = count( $this->fopenErrors ) + 1;
+               $this->fopenErrors += array( "errno$n" => $errno, "errstr$n" => $errstr );
+       }
+
        public function execute() {
 
                parent::execute();
@@ -926,13 +982,7 @@ class PhpHttpRequest extends MWHttpRequest {
                        }
                }
 
-               if ( is_dir( $this->caInfo ) ) {
-                       $options['ssl']['capath'] = $this->caInfo;
-               } elseif ( is_file( $this->caInfo ) ) {
-                       $options['ssl']['cafile'] = $this->caInfo;
-               } elseif ( $this->caInfo ) {
-                       throw new MWException( "Invalid CA info passed: {$this->caInfo}" );
-               }
+               $options['ssl'] += $this->getCertOptions();
 
                $context = stream_context_create( $options );
 
@@ -949,9 +999,10 @@ class PhpHttpRequest extends MWHttpRequest {
                }
                do {
                        $reqCount++;
-                       MediaWiki\suppressWarnings();
+                       $this->fopenErrors = array();
+                       set_error_handler( array( $this, 'errorHandler' ) );
                        $fh = fopen( $url, "r", false, $context );
-                       MediaWiki\restoreWarnings();
+                       restore_error_handler();
 
                        if ( !$fh ) {
                                // HACK for instant commons.
@@ -997,6 +1048,10 @@ class PhpHttpRequest extends MWHttpRequest {
                $this->setStatus();
 
                if ( $fh === false ) {
+                       if ( $this->fopenErrors ) {
+                               LoggerFactory::getInstance( 'http' )->warning( __CLASS__
+                                       . ': error opening connection: {errstr1}', $this->fopenErrors );
+                       }
                        $this->status->fatal( 'http-request-error' );
                        return $this->status;
                }
index d6a4056..9b5ff27 100644 (file)
@@ -1276,9 +1276,11 @@ class Linker {
         * @param string $comment
         * @param Title|null $title Title object (to generate link to the section in autocomment) or null
         * @param bool $local Whether section links should refer to local page
+        * @param string|null $wikiId Id (as used by WikiMap) of the wiki to generate links to. For use with external changes.
+        *
         * @return mixed|string
         */
-       public static function formatComment( $comment, $title = null, $local = false ) {
+       public static function formatComment( $comment, $title = null, $local = false, $wikiId = null ) {
 
                # Sanitize text a bit:
                $comment = str_replace( "\n", " ", $comment );
@@ -1286,8 +1288,8 @@ class Linker {
                $comment = Sanitizer::escapeHtmlAllowEntities( $comment );
 
                # Render autocomments and make links:
-               $comment = self::formatAutocomments( $comment, $title, $local );
-               $comment = self::formatLinksInComment( $comment, $title, $local );
+               $comment = self::formatAutocomments( $comment, $title, $local, $wikiId );
+               $comment = self::formatLinksInComment( $comment, $title, $local, $wikiId );
 
                return $comment;
        }
@@ -1304,9 +1306,11 @@ class Linker {
         * @param string $comment Comment text
         * @param Title|null $title An optional title object used to links to sections
         * @param bool $local Whether section links should refer to local page
-        * @return string Formatted comment
+        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap.
+        *
+        * @return string Formatted comment (wikitext)
         */
-       private static function formatAutocomments( $comment, $title = null, $local = false ) {
+       private static function formatAutocomments( $comment, $title = null, $local = false, $wikiId = null ) {
                // @todo $append here is something of a hack to preserve the status
                // quo. Someone who knows more about bidi and such should decide
                // (1) what sane rendering even *is* for an LTR edit summary on an RTL
@@ -1320,7 +1324,7 @@ class Linker {
                        // zero-width assertions optional, so wrap them in a non-capturing
                        // group.
                        '!(?:(?<=(.)))?/\*\s*(.*?)\s*\*/(?:(?=(.)))?!',
-                       function ( $match ) use ( $title, $local, &$append ) {
+                       function ( $match ) use ( $title, $local, $wikiId, &$append ) {
                                global $wgLang;
 
                                // Ensure all match positions are defined
@@ -1330,7 +1334,7 @@ class Linker {
                                $auto = $match[2];
                                $post = $match[3] !== '';
                                $comment = null;
-                               Hooks::run( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local ) );
+                               Hooks::run( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local, $wikiId ) );
                                if ( $comment === null ) {
                                        $link = '';
                                        if ( $title ) {
@@ -1349,9 +1353,7 @@ class Linker {
                                                                $title->getDBkey(), $section );
                                                }
                                                if ( $sectionTitle ) {
-                                                       $link = Linker::link( $sectionTitle,
-                                                               $wgLang->getArrow(), array(), array(),
-                                                               'noclasses' );
+                                                       $link = Linker::makeCommentLink( $sectionTitle, $wgLang->getArrow(), $wikiId, 'noclasses' );
                                                } else {
                                                        $link = '';
                                                }
@@ -1384,7 +1386,7 @@ class Linker {
         * @param string $comment Text to format links in
         * @param Title|null $title An optional title object used to links to sections
         * @param bool $local Whether section links should refer to local page
-        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap
+        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap.
         *
         * @return string
         */
@@ -1459,22 +1461,9 @@ class Linker {
                                                        $newTarget = clone ( $title );
                                                        $newTarget->setFragment( '#' . $target->getFragment() );
                                                        $target = $newTarget;
-
-                                               }
-
-                                               if ( $wikiId !== null ) {
-                                                       $thelink = Linker::makeExternalLink(
-                                                               WikiMap::getForeignURL( $wikiId, $target->getFullText() ),
-                                                               $linkText . $inside,
-                                                               /* escape = */ false // Already escaped
-                                                       ) . $trail;
-                                               } else {
-                                                       $thelink = Linker::link(
-                                                               $target,
-                                                               $linkText . $inside
-                                                       ) . $trail;
                                                }
 
+                                               $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
                                        }
                                }
                                if ( $thelink ) {
@@ -1493,6 +1482,32 @@ class Linker {
                );
        }
 
+       /**
+        * Generates a link to the given Title
+        *
+        * @note This is only public for technical reasons. It's not intended for use outside Linker.
+        *
+        * @param Title $title
+        * @param string $text
+        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap.
+        * @param string|string[] $options See the $options parameter in Linker::link.
+        *
+        * @return string HTML link
+        */
+       public static function makeCommentLink( Title $title, $text, $wikiId = null, $options = array() ) {
+               if ( $wikiId !== null && !$title->isExternal() ) {
+                       $link = Linker::makeExternalLink(
+                                       WikiMap::getForeignURL( $wikiId, $title->getPrefixedText(), $title->getFragment() ),
+                                       $text,
+                                       /* escape = */ false // Already escaped
+                               );
+               } else {
+                       $link = Linker::link( $title, $text, array(), array(), $options );
+               }
+
+               return $link;
+       }
+
        /**
         * @param Title $contextTitle
         * @param string $target
@@ -1579,17 +1594,18 @@ class Linker {
         * @param string $comment
         * @param Title|null $title Title object (to generate link to section in autocomment) or null
         * @param bool $local Whether section links should refer to local page
+        * @param string|null $wikiId Id (as used by WikiMap) of the wiki to generate links to. For use with external changes.
         *
         * @return string
         */
-       public static function commentBlock( $comment, $title = null, $local = false ) {
+       public static function commentBlock( $comment, $title = null, $local = false, $wikiId = null ) {
                // '*' used to be the comment inserted by the software way back
                // in antiquity in case none was provided, here for backwards
                // compatibility, acc. to brion -ævar
                if ( $comment == '' || $comment == '*' ) {
                        return '';
                } else {
-                       $formatted = self::formatComment( $comment, $title, $local );
+                       $formatted = self::formatComment( $comment, $title, $local, $wikiId );
                        $formatted = wfMessage( 'parentheses' )->rawParams( $formatted )->escaped();
                        return " <span class=\"comment\">$formatted</span>";
                }
@@ -2382,6 +2398,7 @@ class Linker {
                        'title' => $tooltip
                ) );
        }
+
 }
 
 /**
index 186821d..2c7ba91 100644 (file)
@@ -718,9 +718,6 @@ class MagicWordArray {
 
        private $regex;
 
-       /** @todo Unused? */
-       private $matches;
-
        /**
         * @param array $names
         */
@@ -953,10 +950,12 @@ class MagicWordArray {
                        if ( $regex === '' ) {
                                continue;
                        }
-                       preg_match_all( $regex, $text, $matches, PREG_SET_ORDER );
-                       foreach ( $matches as $m ) {
-                               list( $name, $param ) = $this->parseMatch( $m );
-                               $found[$name] = $param;
+                       $matches = array();
+                       if ( preg_match_all( $regex, $text, $matches, PREG_SET_ORDER ) ) {
+                               foreach ( $matches as $m ) {
+                                       list( $name, $param ) = $this->parseMatch( $m );
+                                       $found[$name] = $param;
+                               }
                        }
                        $text = preg_replace( $regex, '', $text );
                }
index 073762a..552e181 100644 (file)
@@ -142,9 +142,6 @@ class OutputPage extends ContextSource {
        /** @var string Inline CSS styles. Use addInlineStyle() sparingly */
        protected $mInlineStyles = '';
 
-       /** @todo Unused? */
-       private $mLinkColours;
-
        /**
         * @var string Used by skin template.
         * Example: $tpl->set( 'displaytitle', $out->mPageLinkTitle );
@@ -2012,21 +2009,20 @@ class OutputPage extends ContextSource {
         * Add an HTTP header that will influence on the cache
         *
         * @param string $header Header name
-        * @param array|null $option
-        * @todo FIXME: Document the $option parameter; it appears to be for
-        *        X-Vary-Options but what format is acceptable?
+        * @param string[]|null $option Options for X-Vary-Options. Possible options are:
+        *  - "string-contains=$XXX" varies on whether the header value as a string
+        *    contains $XXX as a substring.
+        *  - "list-contains=$XXX" varies on whether the header value as a
+        *    comma-separated list contains $XXX as one of the list items.
         */
-       public function addVaryHeader( $header, $option = null ) {
+       public function addVaryHeader( $header, array $option = null ) {
                if ( !array_key_exists( $header, $this->mVaryHeader ) ) {
-                       $this->mVaryHeader[$header] = (array)$option;
-               } elseif ( is_array( $option ) ) {
-                       if ( is_array( $this->mVaryHeader[$header] ) ) {
-                               $this->mVaryHeader[$header] = array_merge( $this->mVaryHeader[$header], $option );
-                       } else {
-                               $this->mVaryHeader[$header] = $option;
-                       }
+                       $this->mVaryHeader[$header] = array();
+               }
+               if ( !is_array( $option ) ) {
+                       $option = array();
                }
-               $this->mVaryHeader[$header] = array_unique( (array)$this->mVaryHeader[$header] );
+               $this->mVaryHeader[$header] = array_unique( array_merge( $this->mVaryHeader[$header], $option ) );
        }
 
        /**
@@ -2909,8 +2905,7 @@ class OutputPage extends ContextSource {
 
                                // Automatically select style/script elements
                                if ( $only === ResourceLoaderModule::TYPE_STYLES ) {
-                                       $media = $group === 'print' ? 'print' : 'all';
-                                       $link = Html::linkedStyle( $url, $media );
+                                       $link = Html::linkedStyle( $url );
                                } else {
                                        if ( $context->getRaw() || $isRaw ) {
                                                // Startup module can't load itself, needs to use <script> instead of mw.loader.load
index cd675c6..248b308 100644 (file)
@@ -751,7 +751,11 @@ class Preferences {
                        'type' => 'select',
                        'section' => 'rendering/advancedrendering',
                        'options' => $stubThresholdOptions,
-                       'label-raw' => $context->msg( 'stub-threshold' )->text(), // Raw HTML message. Yay?
+                       // This is not a raw HTML message; label-raw is needed for the manual <a></a>
+                       'label-raw' => $context->msg( 'stub-threshold' )->rawParams(
+                               '<a href="#" class="stub">' .
+                               $context->msg( 'stub-threshold-sample-link' )->parse() .
+                               '</a>' )->parse(),
                );
 
                $defaultPreferences['showhiddencats'] = array(
index 55a4f49..430b4b8 100644 (file)
@@ -362,7 +362,11 @@ abstract class PrefixSearch {
                        $ns = NS_MAIN; // if searching on many always default to main
                }
 
-               $t = Title::newFromText( $search, $ns );
+               $t = null;
+               if ( is_string( $search ) ) {
+                       $t = Title::newFromText( $search, $ns );
+               }
+
                $prefix = $t ? $t->getDBkey() : '';
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'page',
index c02bdc9..de63af7 100644 (file)
@@ -346,8 +346,8 @@ class Sanitizer {
                                  ($space*=$space*
                                        (?:
                                         # The attribute value: quoted or alone
-                                         \"([^<\"]*)\"
-                                        | '([^<']*)'
+                                         \"([^<\"]*)(?:\"|\$)
+                                        | '([^<']*)(?:'|\$)
                                         |  ([a-zA-Z0-9!#$%&()*,\\-.\\/:;<>?@[\\]^_`{|}~]+)
                                        )
                                )?(?=$space|\$)/sx";
@@ -454,15 +454,13 @@ class Sanitizer {
        public static function removeHTMLtags( $text, $processCallback = null,
                $args = array(), $extratags = array(), $removetags = array()
        ) {
-               global $wgUseTidy;
-
                extract( self::getRecognizedTagData( $extratags, $removetags ) );
 
                # Remove HTML comments
                $text = Sanitizer::removeHTMLcomments( $text );
                $bits = explode( '<', $text );
                $text = str_replace( '>', '&gt;', array_shift( $bits ) );
-               if ( !$wgUseTidy ) {
+               if ( !MWTidy::isEnabled() ) {
                        $tagstack = $tablestack = array();
                        foreach ( $bits as $x ) {
                                $regs = array();
index 86df4b8..e79d13c 100644 (file)
@@ -68,17 +68,18 @@ if ( !empty( $wgActionPaths ) && !isset( $wgActionPaths['view'] ) ) {
        $wgActionPaths['view'] = $wgArticlePath;
 }
 
+if ( $wgResourceBasePath === null ) {
+       $wgResourceBasePath = $wgScriptPath;
+}
 if ( $wgStylePath === false ) {
-       $wgStylePath = "$wgScriptPath/skins";
+       $wgStylePath = "$wgResourceBasePath/skins";
 }
 if ( $wgLocalStylePath === false ) {
+       // Avoid wgResourceBasePath here since that may point to a different domain (e.g. CDN)
        $wgLocalStylePath = "$wgScriptPath/skins";
 }
 if ( $wgExtensionAssetsPath === false ) {
-       $wgExtensionAssetsPath = "$wgScriptPath/extensions";
-}
-if ( $wgResourceBasePath === null ) {
-       $wgResourceBasePath = $wgScriptPath;
+       $wgExtensionAssetsPath = "$wgResourceBasePath/extensions";
 }
 
 if ( $wgLogo === false ) {
@@ -521,11 +522,11 @@ unset( $serverParts );
 
 // Set defaults for configuration variables
 // that are derived from the server name by default
-if ( $wgEmergencyContact === false ) {
+// Note: $wgEmergencyContact and $wgPasswordSender may be false or empty string (T104142)
+if ( !$wgEmergencyContact ) {
        $wgEmergencyContact = 'wikiadmin@' . $wgServerName;
 }
-
-if ( $wgPasswordSender === false ) {
+if ( !$wgPasswordSender ) {
        $wgPasswordSender = 'apache@' . $wgServerName;
 }
 
@@ -680,12 +681,6 @@ if ( !is_object( $wgAuth ) ) {
  */
 $wgTitle = null;
 
-/**
- * @deprecated since 1.24 Use DeferredUpdates::addUpdate instead
- * @var array
- */
-$wgDeferredUpdateList = array();
-
 Profiler::instance()->scopedProfileOut( $ps_globals );
 $ps_extensions = Profiler::instance()->scopedProfileIn( $fname . '-extensions' );
 
index 2dfcdc2..49155d6 100644 (file)
@@ -194,7 +194,7 @@ class StubUserLang extends StubObject {
        public function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
                global $wgLang;
                $this->_unstub( 'findVariantLink', 3 );
-               return $wgLang->findVariantLink( $link, $nt, $ignoreOtherCond );
+               $wgLang->findVariantLink( $link, $nt, $ignoreOtherCond );
        }
 
        /**
index 8a15b54..b347edb 100644 (file)
@@ -1939,7 +1939,6 @@ class Title {
         *   - quick  : does cheap permission checks from slaves (usable for GUI creation)
         *   - full   : does cheap and expensive checks possibly from a slave
         *   - secure : does cheap and expensive checks, using the master as needed
-        * @param bool $short Set this to true to stop after the first permission error.
         * @param array $ignoreErrors Array of Strings Set this to a list of message keys
         *   whose corresponding errors may be ignored.
         * @return array Array of arguments to wfMessage to explain permissions problems.
index 9b958f4..6df41ee 100644 (file)
@@ -1591,7 +1591,7 @@ class User implements IDBAccessObject {
                # We only need to worry about passing the IP address to the Block generator if the
                # user is not immune to autoblocks/hardblocks, and they are the current user so we
                # know which IP address they're actually coming from
-               if ( !$this->isAllowed( 'ipblock-exempt' ) && $this->getID() == $wgUser->getID() ) {
+               if ( !$this->isAllowed( 'ipblock-exempt' ) && $this->equals( $wgUser ) ) {
                        $ip = $this->getRequest()->getIP();
                } else {
                        $ip = null;
@@ -2438,6 +2438,7 @@ class User implements IDBAccessObject {
         */
        public function setInternalPassword( $str ) {
                $this->setToken();
+               $this->setOption( 'watchlisttoken', false );
 
                $passwordFactory = self::getPasswordFactory();
                $this->mPassword = $passwordFactory->newFromPlaintext( $str );
@@ -2715,20 +2716,24 @@ class User implements IDBAccessObject {
         * @return string|bool User's current value for the option, or false if this option is disabled.
         * @see resetTokenFromOption()
         * @see getOption()
+        * @deprecated 1.26 Applications should use the OAuth extension
         */
        public function getTokenFromOption( $oname ) {
                global $wgHiddenPrefs;
-               if ( in_array( $oname, $wgHiddenPrefs ) ) {
+
+               $id = $this->getId();
+               if ( !$id || in_array( $oname, $wgHiddenPrefs ) ) {
                        return false;
                }
 
                $token = $this->getOption( $oname );
                if ( !$token ) {
-                       $token = $this->resetTokenFromOption( $oname );
-                       if ( !wfReadOnly() ) {
-                               $this->saveSettings();
-                       }
+                       // Default to a value based on the user token to avoid space
+                       // wasted on storing tokens for all users. When this option
+                       // is set manually by the user, only then is it stored.
+                       $token = hash_hmac( 'sha1', "$oname:$id", $this->getToken() );
                }
+
                return $token;
        }
 
@@ -3208,10 +3213,10 @@ class User implements IDBAccessObject {
        /**
         * Check if user is allowed to access a feature / make an action
         *
-        * @param string $permissions,... Permissions to test
+        * @param string ... Permissions to test
         * @return bool True if user is allowed to perform *any* of the given actions
         */
-       public function isAllowedAny( /*...*/ ) {
+       public function isAllowedAny() {
                $permissions = func_get_args();
                foreach ( $permissions as $permission ) {
                        if ( $this->isAllowed( $permission ) ) {
@@ -3223,10 +3228,10 @@ class User implements IDBAccessObject {
 
        /**
         *
-        * @param string $permissions,... Permissions to test
+        * @param string ... Permissions to test
         * @return bool True if the user is allowed to perform *all* of the given actions
         */
-       public function isAllowedAll( /*...*/ ) {
+       public function isAllowedAll() {
                $permissions = func_get_args();
                foreach ( $permissions as $permission ) {
                        if ( !$this->isAllowed( $permission ) ) {
@@ -3704,14 +3709,6 @@ class User implements IDBAccessObject {
                Hooks::run( 'UserSaveSettings', array( $this ) );
                $this->clearSharedCache();
                $this->getUserPage()->invalidateCache();
-
-               // T95839: clear the cache again post-commit to reduce race conditions
-               // where stale values are written back to the cache by other threads.
-               // Note: this *still* doesn't deal with REPEATABLE-READ snapshot lag...
-               $that = $this;
-               $dbw->onTransactionIdle( function() use ( $that ) {
-                       $that->clearSharedCache();
-               } );
        }
 
        /**
index 03410cc..b4b8be9 100644 (file)
@@ -871,7 +871,7 @@ class WebRequest {
        /**
         * Initialise the header list
         */
-       private function initHeaders() {
+       protected function initHeaders() {
                if ( count( $this->headers ) ) {
                        return;
                }
@@ -1325,11 +1325,10 @@ class FauxRequest extends WebRequest {
        }
 
        /**
-        * @param string $method
-        * @throws MWException
+        * Initialise the header list
         */
-       private function notImplemented( $method ) {
-               throw new MWException( "{$method}() not implemented" );
+       protected function initHeaders() {
+               // Nothing to init
        }
 
        /**
@@ -1425,10 +1424,6 @@ class FauxRequest extends WebRequest {
                return $this->protocol;
        }
 
-       private function initHeaders() {
-               return;
-       }
-
        /**
         * @param string $name
         * @param string $val
index f16f5aa..027ff72 100644 (file)
@@ -108,13 +108,15 @@ class WikiMap {
         *
         * @param string $wikiID Wiki'd id (generally database name)
         * @param string $page Page name (must be normalised before calling this function!)
+        * @param string|null $fragmentId
+        *
         * @return string|bool URL or false if the wiki was not found
         */
-       public static function getForeignURL( $wikiID, $page ) {
+       public static function getForeignURL( $wikiID, $page, $fragmentId = null ) {
                $wiki = WikiMap::getWiki( $wikiID );
 
                if ( $wiki ) {
-                       return $wiki->getFullUrl( $page );
+                       return $wiki->getFullUrl( $page, $fragmentId );
                }
 
                return false;
@@ -146,20 +148,6 @@ class WikiReference {
                $this->mServer = $server === null ? $canonicalServer : $server;
        }
 
-       /**
-        * @return string
-        * @throws MWException
-        */
-       public function getHostname() {
-               $prefixes = array( 'http://', 'https://' );
-               foreach ( $prefixes as $prefix ) {
-                       if ( substr( $this->mCanonicalServer, 0, strlen( $prefix ) ) ) {
-                               return substr( $this->mCanonicalServer, strlen( $prefix ) );
-                       }
-               }
-               throw new MWException( "Invalid hostname for wiki {$this->mMinor}.{$this->mMajor}" );
-       }
-
        /**
         * Get the URL in a way to be displayed to the user
         * More or less Wikimedia specific
@@ -167,13 +155,12 @@ class WikiReference {
         * @return string
         */
        public function getDisplayName() {
-               $url = $this->getUrl( '' );
-               $parsed = wfParseUrl( $url );
+               $parsed = wfParseUrl( $this->mCanonicalServer );
                if ( $parsed ) {
                        return $parsed['host'];
                } else {
-                       // Invalid URL. There's no sane thing to do here, so just return it
-                       return $url;
+                       // Invalid server spec. There's no sane thing to do here, so just return the canonical server name in full
+                       return $this->mCanonicalServer;
                }
        }
 
@@ -181,21 +168,32 @@ class WikiReference {
         * Helper function for getUrl()
         *
         * @todo FIXME: This may be generalized...
-        * @param string $page Page name (must be normalised before calling this function!)
-        * @return string Url fragment
+        *
+        * @param string $page Page name (must be normalised before calling this function! May contain a section part.)
+        * @param string|null $fragmentId
+        *
+        * @return string relative URL, without the server part.
         */
-       private function getLocalUrl( $page ) {
-               return str_replace( '$1', wfUrlEncode( str_replace( ' ', '_', $page ) ), $this->mPath );
+       private function getLocalUrl( $page, $fragmentId = null ) {
+               $page = wfUrlEncode( str_replace( ' ', '_', $page ) );
+
+               if ( is_string( $fragmentId ) && $fragmentId !== '' ) {
+                       $page .= '#' . wfUrlEncode( $fragmentId );
+               }
+
+               return str_replace( '$1', $page, $this->mPath );
        }
 
        /**
         * Get a canonical (i.e. based on $wgCanonicalServer) URL to a page on this foreign wiki
         *
         * @param string $page Page name (must be normalised before calling this function!)
+        * @param string|null $fragmentId
+        *
         * @return string Url
         */
-       public function getCanonicalUrl( $page ) {
-               return $this->mCanonicalServer . $this->getLocalUrl( $page );
+       public function getCanonicalUrl( $page, $fragmentId = null ) {
+               return $this->mCanonicalServer . $this->getLocalUrl( $page, $fragmentId );
        }
 
        /**
@@ -209,10 +207,12 @@ class WikiReference {
        /**
         * Alias for getCanonicalUrl(), for backwards compatibility.
         * @param string $page
+        * @param string|null $fragmentId
+        *
         * @return string
         */
-       public function getUrl( $page ) {
-               return $this->getCanonicalUrl( $page );
+       public function getUrl( $page, $fragmentId = null ) {
+               return $this->getCanonicalUrl( $page, $fragmentId );
        }
 
        /**
@@ -220,10 +220,12 @@ class WikiReference {
         * when called locally on the wiki.
         *
         * @param string $page Page name (must be normalized before calling this function!)
+        * @param string|null $fragmentId
+        *
         * @return string URL
         */
-       public function getFullUrl( $page ) {
+       public function getFullUrl( $page, $fragmentId = null ) {
                return $this->mServer .
-                       $this->getLocalUrl( $page );
+                       $this->getLocalUrl( $page, $fragmentId );
        }
 }
index e765eed..78f4764 100644 (file)
@@ -43,7 +43,7 @@ class XmlSelect {
        }
 
        /**
-        * @param string $default
+        * @param string|array $default
         */
        public function setDefault( $default ) {
                $this->default = $default;
@@ -95,7 +95,7 @@ class XmlSelect {
         * label => ( label => value, label => value )
         *
         * @param array $options
-        * @param string $default
+        * @param string|array $default
         * @return string
         */
        static function formatOptions( $options, $default = false ) {
@@ -106,7 +106,11 @@ class XmlSelect {
                                $contents = self::formatOptions( $value, $default );
                                $data .= Html::rawElement( 'optgroup', array( 'label' => $label ), $contents ) . "\n";
                        } else {
-                               $data .= Xml::option( $label, $value, $value === $default ) . "\n";
+                               // If $default is an array, then the <select> probably has the multiple attribute,
+                               // so we should check if each $value is in $default, rather than checking if
+                               // $value is equal to $default.
+                               $selected = is_array( $default ) ? in_array( $value, $default ) : $value === $default;
+                               $data .= Xml::option( $label, $value, $selected ) . "\n";
                        }
                }
 
index 31806b7..893ae04 100644 (file)
@@ -3074,7 +3074,7 @@ $zh2Hant = array(
 '9只' => '9隻',
 '9余' => '9餘',
 '·范' => '·范',
-'’s ' => '’s',
+'’s' => '’s',
 '、面点' => '、麵點',
 '。个中' => '。箇中',
 '〇周后' => '〇周後',
@@ -3201,21 +3201,6 @@ $zh2Hant = array(
 '不好干预' => '不好干預',
 '不嫌母丑' => '不嫌母醜',
 '不寒而栗' => '不寒而慄',
-'不干事' => '不干事',
-'不干他' => '不干他',
-'不干休' => '不干休',
-'不干你' => '不干你',
-'不干她' => '不干她',
-'不干它' => '不干它',
-'不干我' => '不干我',
-'不干扰' => '不干擾',
-'不干擾' => '不干擾',
-'不干涉' => '不干涉',
-'不干牠' => '不干牠',
-'不干犯' => '不干犯',
-'不干預' => '不干預',
-'不干预' => '不干預',
-'不干' => '不幹',
 '不吊' => '不弔',
 '不卷' => '不捲',
 '不采' => '不採',
@@ -3795,7 +3780,6 @@ $zh2Hant = array(
 '佛罗棱萨' => '佛羅稜薩',
 '佛钟' => '佛鐘',
 '作品里' => '作品裡',
-'作奸犯科' => '作姦犯科',
 '作准' => '作準',
 '你夸' => '你誇',
 '佣金' => '佣金',
@@ -4219,6 +4203,7 @@ $zh2Hant = array(
 '千钧一发' => '千鈞一髮',
 '千只' => '千隻',
 '千余' => '千餘',
+'升高后' => '升高後',
 '半制品' => '半制品',
 '半只可' => '半只可',
 '半只够' => '半只夠',
@@ -4422,6 +4407,7 @@ $zh2Hant = array(
 '呼吁' => '呼籲',
 '命中注定' => '命中注定',
 '和奸' => '和姦',
+'和制汉' => '和製漢',
 '咎征' => '咎徵',
 '咕咕钟' => '咕咕鐘',
 '咪表' => '咪錶',
@@ -4591,9 +4577,12 @@ $zh2Hant = array(
 '墓志' => '墓誌',
 '增辟' => '增闢',
 '墨子里' => '墨子里',
+'墨斗' => '墨斗',
 '墨沈沈' => '墨沈沈',
 '墨沈' => '墨瀋',
 '垦辟' => '墾闢',
+'压制出' => '壓製出',
+'压制机' => '壓製機',
 '壮游' => '壯遊',
 '壮面' => '壯麵',
 '壹郁' => '壹鬱',
@@ -5720,6 +5709,7 @@ $zh2Hant = array(
 '采薇' => '採薇',
 '采薪' => '採薪',
 '采药' => '採藥',
+'采血' => '採血',
 '采行' => '採行',
 '采补' => '採補',
 '采访' => '採訪',
@@ -5746,6 +5736,7 @@ $zh2Hant = array(
 '提子干' => '提子乾',
 '提心吊胆' => '提心弔膽',
 '提摩太后书' => '提摩太後書',
+'提高后' => '提高後',
 '插于' => '插於',
 '换签' => '換籤',
 '换只' => '換隻',
@@ -5944,7 +5935,7 @@ $zh2Hant = array(
 '历始' => '曆始',
 '历室' => '曆室',
 '历尾' => '曆尾',
-'历数' => 'æ\9b\86æ\95¸',
+'历数书' => 'æ\9b\86æ\95¸æ\9b¸',
 '历日' => '曆日',
 '历书' => '曆書',
 '历本' => '曆本',
@@ -6005,6 +5996,7 @@ $zh2Hant = array(
 '望后石' => '望后石',
 '朝乾夕惕' => '朝乾夕惕',
 '朝钟' => '朝鐘',
+'朝鲜于' => '朝鮮於',
 '朦胧' => '朦朧',
 '蒙胧' => '朦朧',
 '木偶戏扎' => '木偶戲紮',
@@ -6305,6 +6297,8 @@ $zh2Hant = array(
 '洗发' => '洗髮',
 '洛钟东应' => '洛鐘東應',
 '洞里' => '洞裡',
+'洞里萨' => '洞里薩',
+'洞里薩' => '洞里薩',
 '泄欲' => '洩慾',
 '洪范' => '洪範',
 '洪谷子' => '洪谷子',
@@ -6376,7 +6370,6 @@ $zh2Hant = array(
 '渠冲' => '渠衝',
 '测不准' => '測不準',
 '港制' => '港製',
-'游牧民族' => '游牧民族',
 '游离' => '游離',
 '浑朴' => '渾樸',
 '浑个' => '渾箇',
@@ -6716,7 +6709,6 @@ $zh2Hant = array(
 '癸丑' => '癸丑',
 '发干' => '發乾',
 '发呆' => '發獃',
-'发蒙' => '發矇',
 '发签' => '發籤',
 '发松' => '發鬆',
 '发面' => '發麵',
@@ -6956,7 +6948,6 @@ $zh2Hant = array(
 '谷草' => '穀草',
 '谷贵饿农' => '穀貴餓農',
 '谷贱伤农' => '穀賤傷農',
-'谷道' => '穀道',
 '谷雨' => '穀雨',
 '谷类' => '穀類',
 '谷食' => '穀食',
@@ -7310,6 +7301,7 @@ $zh2Hant = array(
 '胜肽' => '胜肽',
 '胜键' => '胜鍵',
 '胡云' => '胡云',
+'胡子婴' => '胡子嬰',
 '胡子昂' => '胡子昂',
 '胡杰' => '胡杰',
 '胡朴安' => '胡樸安',
@@ -8959,6 +8951,7 @@ $zh2Hant = array(
 '体范' => '體範',
 '体系' => '體系',
 '高几' => '高几',
+'高后' => '高后',
 '高干扰' => '高干擾',
 '高干预' => '高干預',
 '高干' => '高幹',
@@ -9201,8 +9194,8 @@ $zh2Hant = array(
 '魔表' => '魔錶',
 '鱼干' => '魚乾',
 '鱼松' => '魚鬆',
-'鮮于樞' => '鮮于樞',
-'鲜于枢' => '鮮于樞',
+'鮮于' => '鮮于',
+'鲜于' => '鮮于',
 '鲸须' => '鯨鬚',
 '鳥栖' => '鳥栖',
 '鸟栖市' => '鳥栖市',
@@ -9299,6 +9292,7 @@ $zh2Hant = array(
 '黃杰' => '黃杰',
 '黄杰' => '黃杰',
 '黄历史' => '黃歷史',
+'黄白术' => '黃白術',
 '黃詩杰' => '黃詩杰',
 '黄诗杰' => '黃詩杰',
 '黄金表' => '黃金表',
@@ -13846,8 +13840,6 @@ $zh2TW = array(
 '掌上壓' => '伏地挺身',
 '伯明翰' => '伯明罕',
 '服务器' => '伺服器',
-'字節' => '位元組',
-'字节' => '位元組',
 '佛罗伦萨' => '佛羅倫斯',
 '操作系统' => '作業系統',
 '系数' => '係數',
@@ -14062,6 +14054,7 @@ $zh2TW = array(
 '戒烟' => '戒菸',
 '戒煙' => '戒菸',
 '戴克里先' => '戴克里先',
+'打印度' => '打印度',
 '抽烟' => '抽菸',
 '抽煙' => '抽菸',
 '拉普兰' => '拉布蘭',
@@ -14078,7 +14071,7 @@ $zh2TW = array(
 '搜索引擎' => '搜尋引擎',
 '摩根士丹利' => '摩根史坦利',
 '台球' => '撞球',
-'攻打印' => '攻打印',
+'攻打' => '攻打',
 '数字技术' => '數位技術',
 '數碼技術' => '數位技術',
 '数字照相机' => '數位照相機',
@@ -14129,6 +14122,7 @@ $zh2TW = array(
 '撒切尔' => '柴契爾',
 '格林納達' => '格瑞那達',
 '格林纳达' => '格瑞那達',
+'台式电脑' => '桌上型電腦',
 '乒乓' => '桌球',
 '乒乓球' => '桌球',
 '杆弟' => '桿弟',
@@ -14264,6 +14258,8 @@ $zh2TW = array(
 '弗吉尼亚' => '維吉尼亞',
 '佛得角' => '維德角',
 '维特根斯坦' => '維根斯坦',
+'網絡遊戲' => '網路遊戲',
+'网络游戏' => '網路遊戲',
 '互联网' => '網際網路',
 '互联网络' => '網際網路',
 '互聯網' => '網際網路',
@@ -14455,7 +14451,6 @@ $zh2TW = array(
 '链接' => '連結',
 '連結他' => '連結他',
 '进制' => '進位',
-'算子' => '運算元',
 '达·芬奇' => '達·文西',
 '达芬奇' => '達文西',
 '溫納圖萬' => '那杜',
@@ -15651,6 +15646,7 @@ $zh2HK = array(
 '扛著錄' => '扛著錄',
 '找不著' => '找不着',
 '找得著' => '找得着',
+'承宣布政' => '承宣布政',
 '抓著' => '抓着',
 '抓著作' => '抓著作',
 '抓著名' => '抓著名',
@@ -16001,6 +15997,7 @@ $zh2HK = array(
 '葛萊美獎' => '格林美獎',
 '格鲁吉亚' => '格魯吉亞',
 '框里' => '框裏',
+'台式电脑' => '桌上型電腦',
 '台球' => '桌球',
 '撞球' => '桌球',
 '梅鐸' => '梅鐸',
@@ -17174,6 +17171,8 @@ $zh2HK = array(
 '遇著述' => '遇著述',
 '遇著錄' => '遇著錄',
 '遍布' => '遍佈',
+'遍佈著' => '遍佈着',
+'遍布著' => '遍佈着',
 '過著' => '過着',
 '达·芬奇' => '達·文西',
 '达芬奇' => '達文西',
@@ -18023,6 +18022,7 @@ $zh2CN = array(
 '叫著稱' => '叫著称',
 '叫著者' => '叫著者',
 '叫著述' => '叫著述',
+'桌上型電腦' => '台式电脑',
 '撞球' => '台球',
 '台帳' => '台账',
 '叱吒' => '叱咤',
@@ -19937,6 +19937,8 @@ $zh2CN = array(
 '遇著稱' => '遇著称',
 '遇著者' => '遇著者',
 '遇著述' => '遇著述',
+'遍佈著' => '遍布着',
+'遍布著' => '遍布着',
 '部份' => '部分',
 '配合著' => '配合着',
 '配合著名' => '配合著名',
@@ -19982,6 +19984,7 @@ $zh2CN = array(
 '鋪著稱' => '铺著称',
 '鋪著者' => '铺著者',
 '鋪著述' => '铺著述',
+'鏈結' => '链接',
 '銷帳' => '销账',
 '鉲' => '锎',
 '鎝' => '锝',
index 7b71e6c..d53797b 100644 (file)
@@ -345,6 +345,22 @@ abstract class ApiBase extends ContextSource {
                return null;
        }
 
+       /**
+        * Returns data for HTTP conditional request mechanisms.
+        *
+        * @since 1.26
+        * @param string $condition Condition being queried:
+        *  - last-modified: Return a timestamp representing the maximum of the
+        *    last-modified dates for all resources involved in the request. See
+        *    RFC 7232 § 2.2 for semantics.
+        *  - etag: Return an entity-tag representing the state of all resources involved
+        *    in the request. Quotes must be included. See RFC 7232 § 2.3 for semantics.
+        * @return string|boolean|null As described above, or null if no value is available.
+        */
+       public function getConditionalRequestData( $condition ) {
+               return null;
+       }
+
        /**@}*/
 
        /************************************************************************//**
index f54f20f..e522d70 100644 (file)
@@ -387,10 +387,11 @@ abstract class ApiFormatBase extends ApiBase {
         * are required to ignore it or filter it out.
         *
         * @deprecated since 1.25
-        * @return bool
+        * @return bool Always true
         */
        public function getNeedsRawData() {
-               return false;
+               wfDeprecated( __METHOD__, '1.25' );
+               return true;
        }
 
        /**@}*/
index 00747ee..d2bfd48 100644 (file)
@@ -59,15 +59,6 @@ class ApiFormatFeedWrapper extends ApiFormatBase {
                return null;
        }
 
-       /**
-        * Optimization - no need to sanitize data that will not be needed
-        *
-        * @return bool
-        */
-       public function getNeedsRawData() {
-               return true;
-       }
-
        /**
         * ChannelFeed doesn't give us a method to print errors in a friendly
         * manner, so just punt errors to the default printer.
index 9538842..be1b12c 100644 (file)
@@ -56,13 +56,6 @@ class ApiFormatJson extends ApiFormatBase {
                return 'application/json';
        }
 
-       /**
-        * @deprecated since 1.25
-        */
-       public function getNeedsRawData() {
-               return $this->isRaw;
-       }
-
        /**
         * @deprecated since 1.25
         */
index 7bb2453..9dbd4a5 100644 (file)
 class ApiFormatRaw extends ApiFormatBase {
 
        private $errorFallback;
+       private $mFailWithHTTPError = false;
+
 
        /**
         * @param ApiMain $main
-        * @param ApiFormatBase $errorFallback Object to fall back on for errors
+        * @param ApiFormatBase |null $errorFallback Object to fall back on for errors
         */
-       public function __construct( ApiMain $main, ApiFormatBase $errorFallback ) {
+       public function __construct( ApiMain $main, ApiFormatBase $errorFallback = null ) {
                parent::__construct( $main, 'raw' );
-               $this->errorFallback = $errorFallback;
+               if ( $errorFallback === null ) {
+                       $this->errorFallback = $main->createPrinterByName( $main->getParameter( 'format' ) );
+               } else {
+                       $this->errorFallback = $errorFallback;
+               }
        }
 
        public function getMimeType() {
@@ -59,6 +65,9 @@ class ApiFormatRaw extends ApiFormatBase {
                $data = $this->getResult()->getResultData();
                if ( isset( $data['error'] ) ) {
                        $this->errorFallback->initPrinter( $unused );
+                       if ( $this->mFailWithHTTPError ) {
+                               $this->getMain()->getRequest()->response()->statusHeader( 400 );
+                       }
                } else {
                        parent::initPrinter( $unused );
                }
@@ -85,4 +94,17 @@ class ApiFormatRaw extends ApiFormatBase {
                }
                $this->printText( $data['text'] );
        }
+
+       /**
+        * Output HTTP error code 400 when if an error is encountered
+        *
+        * The purpose is for output formats where the user-agent will
+        * not be able to interpret the validity of the content in any
+        * other way. For example subtitle files read by browser video players.
+        *
+        * @param bool $fail
+        */
+       public function setFailWithHTTPError( $fail ) {
+               $this->mFailWithHTTPError = $fail;
+       }
 }
index 4be7d93..e8ad387 100644 (file)
@@ -39,13 +39,6 @@ class ApiFormatXml extends ApiFormatBase {
                return 'text/xml';
        }
 
-       /**
-        * @deprecated since 1.25
-        */
-       public function getNeedsRawData() {
-               return true;
-       }
-
        public function setRootElement( $rootElemName ) {
                $this->mRootElemName = $rootElemName;
        }
index 8c65310..c66e215 100644 (file)
@@ -145,10 +145,10 @@ class ApiLogin extends ApiBase {
                        case LoginForm::CREATE_BLOCKED:
                                $result['result'] = 'CreateBlocked';
                                $result['details'] = 'Your IP address is blocked from account creation';
-                               $result = array_merge(
-                                       $result,
-                                       ApiQueryUserInfo::getBlockInfo( $context->getUser()->getBlock() )
-                               );
+                               $block = $context->getUser()->getBlock();
+                               if ( $block ) {
+                                       $result = array_merge( $result, ApiQueryUserInfo::getBlockInfo( $block ) );
+                               }
                                break;
 
                        case LoginForm::THROTTLED:
@@ -159,10 +159,10 @@ class ApiLogin extends ApiBase {
 
                        case LoginForm::USER_BLOCKED:
                                $result['result'] = 'Blocked';
-                               $result = array_merge(
-                                       $result,
-                                       ApiQueryUserInfo::getBlockInfo( User::newFromName( $params['name'] )->getBlock() )
-                               );
+                               $block = User::newFromName( $params['name'] )->getBlock();
+                               if ( $block ) {
+                                       $result = array_merge( $result, ApiQueryUserInfo::getBlockInfo( $block ) );
+                               }
                                break;
 
                        case LoginForm::ABORTED:
index f2059d7..d943c86 100644 (file)
@@ -425,13 +425,16 @@ class ApiMain extends ApiBase {
 
                // In case an error occurs during data output,
                // clear the output buffer and print just the error information
+               $obLevel = ob_get_level();
                ob_start();
 
                $t = microtime( true );
                try {
                        $this->executeAction();
+                       $isError = false;
                } catch ( Exception $e ) {
                        $this->handleException( $e );
+                       $isError = true;
                }
 
                // Log the request whether or not there was an error
@@ -439,9 +442,13 @@ class ApiMain extends ApiBase {
 
                // Send cache headers after any code which might generate an error, to
                // avoid sending public cache headers for errors.
-               $this->sendCacheHeaders();
+               $this->sendCacheHeaders( $isError );
 
-               ob_end_flush();
+               // Executing the action might have already messed with the output
+               // buffers.
+               while ( ob_get_level() > $obLevel ) {
+                       ob_end_flush();
+               }
        }
 
        /**
@@ -532,7 +539,7 @@ class ApiMain extends ApiBase {
 
                // Log the request and reset cache headers
                $main->logRequest( 0 );
-               $main->sendCacheHeaders();
+               $main->sendCacheHeaders( true );
 
                ob_end_flush();
        }
@@ -701,7 +708,12 @@ class ApiMain extends ApiBase {
                return "/^https?:\/\/$wildcard$/";
        }
 
-       protected function sendCacheHeaders() {
+       /**
+        * Send caching headers
+        * @param boolean $isError Whether an error response is being output
+        * @since 1.26 added $isError parameter
+        */
+       protected function sendCacheHeaders( $isError ) {
                $response = $this->getRequest()->response();
                $out = $this->getOutput();
 
@@ -711,6 +723,19 @@ class ApiMain extends ApiBase {
                        $out->addVaryHeader( 'X-Forwarded-Proto' );
                }
 
+               if ( !$isError && $this->mModule &&
+                       ( $this->getRequest()->getMethod() === 'GET' || $this->getRequest()->getMethod() === 'HEAD' )
+               ) {
+                       $etag = $this->mModule->getConditionalRequestData( 'etag' );
+                       if ( $etag !== null ) {
+                               $response->header( "ETag: $etag" );
+                       }
+                       $lastMod = $this->mModule->getConditionalRequestData( 'last-modified' );
+                       if ( $lastMod !== null ) {
+                               $response->header( 'Last-Modified: ' . wfTimestamp( TS_RFC2822, $lastMod ) );
+                       }
+               }
+
                // The logic should be:
                // $this->mCacheControl['max-age'] is set?
                //    Use it, the module knows better than our guess.
@@ -993,6 +1018,121 @@ class ApiMain extends ApiBase {
                return true;
        }
 
+       /**
+        * Check selected RFC 7232 precondition headers
+        *
+        * RFC 7232 envisions a particular model where you send your request to "a
+        * resource", and for write requests that you can read "the resource" by
+        * changing the method to GET. When the API receives a GET request, it
+        * works out even though "the resource" from RFC 7232's perspective might
+        * be many resources from MediaWiki's perspective. But it totally fails for
+        * a POST, since what HTTP sees as "the resource" is probably just
+        * "/api.php" with all the interesting bits in the body.
+        *
+        * Therefore, we only support RFC 7232 precondition headers for GET (and
+        * HEAD). That means we don't need to bother with If-Match and
+        * If-Unmodified-Since since they only apply to modification requests.
+        *
+        * And since we don't support Range, If-Range is ignored too.
+        *
+        * @since 1.26
+        * @param ApiBase $module Api module being used
+        * @return bool True on success, false should exit immediately
+        */
+       protected function checkConditionalRequestHeaders( $module ) {
+               if ( $this->mInternalMode ) {
+                       // No headers to check in internal mode
+                       return true;
+               }
+
+               if ( $this->getRequest()->getMethod() !== 'GET' && $this->getRequest()->getMethod() !== 'HEAD' ) {
+                       // Don't check POSTs
+                       return true;
+               }
+
+               $return304 = false;
+
+               $ifNoneMatch = array_diff(
+                       $this->getRequest()->getHeader( 'If-None-Match', WebRequest::GETHEADER_LIST ) ?: array(),
+                       array( '' )
+               );
+               if ( $ifNoneMatch ) {
+                       if ( $ifNoneMatch === array( '*' ) ) {
+                               // API responses always "exist"
+                               $etag = '*';
+                       } else {
+                               $etag = $module->getConditionalRequestData( 'etag' );
+                       }
+               }
+               if ( $ifNoneMatch && $etag !== null ) {
+                       $test = substr( $etag, 0, 2 ) === 'W/' ? substr( $etag, 2 ) : $etag;
+                       $match = array_map( function ( $s ) {
+                               return substr( $s, 0, 2 ) === 'W/' ? substr( $s, 2 ) : $s;
+                       }, $ifNoneMatch );
+                       $return304 = in_array( $test, $match, true );
+               } else {
+                       $value = trim( $this->getRequest()->getHeader( 'If-Modified-Since' ) );
+
+                       // Some old browsers sends sizes after the date, like this:
+                       //  Wed, 20 Aug 2003 06:51:19 GMT; length=5202
+                       // Ignore that.
+                       $i = strpos( $value, ';' );
+                       if ( $i !== false ) {
+                               $value = trim( substr( $value, 0, $i ) );
+                       }
+
+                       if ( $value !== '' ) {
+                               try {
+                                       $ts = new MWTimestamp( $value );
+                                       if (
+                                               // RFC 7231 IMF-fixdate
+                                               $ts->getTimestamp( TS_RFC2822 ) === $value ||
+                                               // RFC 850
+                                               $ts->format( 'l, d-M-y H:i:s' ) . ' GMT' === $value ||
+                                               // asctime (with and without space-padded day)
+                                               $ts->format( 'D M j H:i:s Y' ) === $value ||
+                                               $ts->format( 'D M  j H:i:s Y' ) === $value
+                                       ) {
+                                               $lastMod = $module->getConditionalRequestData( 'last-modified' );
+                                               if ( $lastMod !== null ) {
+                                                       // Mix in some MediaWiki modification times
+                                                       $modifiedTimes = array(
+                                                               'page' => $lastMod,
+                                                               'user' => $this->getUser()->getTouched(),
+                                                               'epoch' => $this->getConfig()->get( 'CacheEpoch' ),
+                                                       );
+                                                       if ( $this->getConfig()->get( 'UseSquid' ) ) {
+                                                               // T46570: the core page itself may not change, but resources might
+                                                               $modifiedTimes['sepoch'] = wfTimestamp(
+                                                                       TS_MW, time() - $this->getConfig()->get( 'SquidMaxage' )
+                                                               );
+                                                       }
+                                                       Hooks::run( 'OutputPageCheckLastModified', array( &$modifiedTimes ) );
+                                                       $lastMod = max( $modifiedTimes );
+                                                       $return304 = wfTimestamp( TS_MW, $lastMod ) <= $ts->getTimestamp( TS_MW );
+                                               }
+                                       }
+                               } catch ( TimestampException $e ) {
+                                       // Invalid timestamp, ignore it
+                               }
+                       }
+               }
+
+               if ( $return304 ) {
+                       $this->getRequest()->response()->statusHeader( 304 );
+
+                       // Avoid outputting the compressed representation of a zero-length body
+                       MediaWiki\suppressWarnings();
+                       ini_set( 'zlib.output_compression', 0 );
+                       MediaWiki\restoreWarnings();
+                       wfClearOutputBuffers();
+
+                       return false;
+               }
+
+               return true;
+       }
+
        /**
         * Check for sufficient permissions to execute
         * @param ApiBase $module An Api module
@@ -1063,10 +1203,6 @@ class ApiMain extends ApiBase {
                        // Create an appropriate printer
                        $this->mPrinter = $this->createPrinterByName( $params['format'] );
                }
-
-               if ( $this->mPrinter->getNeedsRawData() ) {
-                       $this->getResult()->setRawMode();
-               }
        }
 
        /**
@@ -1083,6 +1219,10 @@ class ApiMain extends ApiBase {
                        return;
                }
 
+               if ( !$this->checkConditionalRequestHeaders( $module ) ) {
+                       return;
+               }
+
                if ( !$this->mInternalMode ) {
                        $this->setupExternalResponse( $module, $params );
                }
index 4e4d2af..172ee99 100644 (file)
@@ -55,7 +55,6 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
 
                $result = $this->getResult();
                $pageSet = $this->getPageSet();
-               $titles = $pageSet->getTitles();
 
                // This module operates in two modes:
                // 'user': List deleted revs by a certain user
@@ -83,6 +82,21 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                        }
                }
 
+               // If we're generating titles only, we can use DISTINCT for a better
+               // query. But we can't do that in 'user' mode (wrong index), and we can
+               // only do it when sorting ASC (because MySQL apparently can't use an
+               // index backwards for grouping even though it can for ORDER BY, WTF?)
+               $dir = $params['dir'];
+               $optimizeGenerateTitles = false;
+               if ( $mode === 'all' && $params['generatetitles'] && $resultPageSet !== null ) {
+                       if ( $dir === 'newer' ) {
+                               $optimizeGenerateTitles = true;
+                       } else {
+                               $p = $this->getModulePrefix();
+                               $this->setWarning( "For better performance when generating titles, set {$p}dir=newer" );
+                       }
+               }
+
                $this->addTables( 'archive' );
                if ( $resultPageSet === null ) {
                        $this->parseParameters( $params );
@@ -90,7 +104,12 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                        $this->addFields( array( 'ar_title', 'ar_namespace' ) );
                } else {
                        $this->limit = $this->getParameter( 'limit' ) ?: 10;
-                       $this->addFields( array( 'ar_title', 'ar_namespace', 'ar_timestamp', 'ar_rev_id', 'ar_id' ) );
+                       $this->addFields( array( 'ar_title', 'ar_namespace' ) );
+                       if ( $optimizeGenerateTitles ) {
+                               $this->addOption( 'DISTINCT' );
+                       } else {
+                               $this->addFields( array( 'ar_timestamp', 'ar_rev_id', 'ar_id' ) );
+                       }
                }
 
                if ( $this->fld_tags ) {
@@ -130,7 +149,6 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                        }
                }
 
-               $dir = $params['dir'];
                $miser_ns = null;
 
                if ( $mode == 'all' ) {
@@ -229,7 +247,14 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
                        $op = ( $dir == 'newer' ? '>' : '<' );
-                       if ( $mode == 'all' ) {
+                       if ( $optimizeGenerateTitles ) {
+                               $this->dieContinueUsageIf( count( $cont ) != 2 );
+                               $ns = intval( $cont[0] );
+                               $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
+                               $title = $db->addQuotes( $cont[1] );
+                               $this->addWhere( "ar_namespace $op $ns OR " .
+                                       "(ar_namespace = $ns AND ar_title $op= $title)" );
+                       } elseif ( $mode == 'all' ) {
                                $this->dieContinueUsageIf( count( $cont ) != 4 );
                                $ns = intval( $cont[0] );
                                $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
@@ -259,7 +284,13 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
 
                $sort = ( $dir == 'newer' ? '' : ' DESC' );
                $orderby = array();
-               if ( $mode == 'all' ) {
+               if ( $optimizeGenerateTitles ) {
+                       // Targeting index name_title_timestamp
+                       if ( $params['namespace'] === null || count( array_unique( $params['namespace'] ) ) > 1 ) {
+                               $orderby[] = "ar_namespace $sort";
+                       }
+                       $orderby[] = "ar_title $sort";
+               } elseif ( $mode == 'all' ) {
                        // Targeting index name_title_timestamp
                        if ( $params['namespace'] === null || count( array_unique( $params['namespace'] ) ) > 1 ) {
                                $orderby[] = "ar_namespace $sort";
@@ -283,7 +314,9 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                foreach ( $res as $row ) {
                        if ( ++$count > $this->limit ) {
                                // We've had enough
-                               if ( $mode == 'all' ) {
+                               if ( $optimizeGenerateTitles ) {
+                                       $this->setContinueEnumParameter( 'continue', "$row->ar_namespace|$row->ar_title" );
+                               } elseif ( $mode == 'all' ) {
                                        $this->setContinueEnumParameter( 'continue',
                                                "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
                                        );
index 3a98478..bf48b19 100644 (file)
@@ -234,8 +234,10 @@ class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
                                        }
                                }
                                if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
-                                       ApiBase::dieDebug( "Found row in archive (ar_id={$row->ar_id}) that didn't " .
-                                               "get processed by ApiPageSet" );
+                                       ApiBase::dieDebug(
+                                               __METHOD__,
+                                               "Found row in archive (ar_id={$row->ar_id}) that didn't get processed by ApiPageSet"
+                                       );
                                }
 
                                $fit = $this->addPageSubItem(
index a2c2844..8e7031c 100644 (file)
@@ -31,8 +31,6 @@
  * @ingroup API
  */
 class ApiQueryRandom extends ApiQueryGeneratorBase {
-       private $pageIDs;
-
        public function __construct( ApiQuery $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'rn' );
        }
@@ -46,102 +44,131 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
        }
 
        /**
-        * @param string $randstr
-        * @param int $limit
-        * @param int $namespace
-        * @param ApiPageSet $resultPageSet
-        * @param bool $redirect
-        * @return void
+        * Actually perform the query and add pages to the result.
+        * @param ApiPageSet|null $resultPageSet
+        * @param int $limit Number of pages to fetch
+        * @param string|null $start Starting page_random
+        * @param int|null $startId Starting page_id
+        * @param string|null $end Ending page_random
+        * @return array (int, string|null) Number of pages left to query and continuation string
         */
-       protected function prepareQuery( $randstr, $limit, $namespace, &$resultPageSet, $redirect ) {
+       protected function runQuery( $resultPageSet, $limit, $start, $startId, $end ) {
+               $params = $this->extractRequestParams();
+
                $this->resetQueryParams();
                $this->addTables( 'page' );
-               $this->addOption( 'LIMIT', $limit );
-               $this->addWhereFld( 'page_namespace', $namespace );
-               $this->addWhereRange( 'page_random', 'newer', $randstr, null );
-               $this->addWhereFld( 'page_is_redirect', $redirect );
+               $this->addFields( array( 'page_id', 'page_random' ) );
                if ( is_null( $resultPageSet ) ) {
-                       $this->addFields( array( 'page_id', 'page_title', 'page_namespace' ) );
+                       $this->addFields( array( 'page_title', 'page_namespace' ) );
                } else {
                        $this->addFields( $resultPageSet->getPageTableFields() );
                }
-       }
+               $this->addWhereFld( 'page_namespace', $params['namespace'] );
+               if ( $params['redirect'] || $params['filterredir'] === 'redirects' ) {
+                       $this->addWhereFld( 'page_is_redirect', 1 );
+               } elseif ( $params['filterredir'] === 'nonredirects' ) {
+                       $this->addWhereFld( 'page_is_redirect', 0 );
+               } elseif ( is_null( $resultPageSet ) ) {
+                       $this->addFields( array( 'page_is_redirect' ) );
+               }
+               $this->addOption( 'LIMIT', $limit + 1 );
+
+               if ( $start !== null ) {
+                       $start = $this->getDB()->addQuotes( $start );
+                       if ( $startId !== null ) {
+                               $startId = (int)$startId;
+                               $this->addWhere( "page_random = $start AND page_id >= $startId OR page_random > $start" );
+                       } else {
+                               $this->addWhere( "page_random >= $start" );
+                       }
+               }
+               if ( $end !== null ) {
+                       $this->addWhere( 'page_random < ' . $this->getDB()->addQuotes( $end ) );
+               }
+               $this->addOption( 'ORDER BY', array( 'page_random', 'page_id' ) );
+
+               $result = $this->getResult();
+               $path = array( 'query', $this->getModuleName() );
 
-       /**
-        * @param ApiPageSet $resultPageSet
-        * @return int
-        */
-       protected function runQuery( $resultPageSet = null ) {
                $res = $this->select( __METHOD__ );
                $count = 0;
                foreach ( $res as $row ) {
-                       $count++;
+                       if ( $count++ >= $limit ) {
+                               return array( 0, "{$row->page_random}|{$row->page_id}" );
+                       }
                        if ( is_null( $resultPageSet ) ) {
-                               // Prevent duplicates
-                               if ( !in_array( $row->page_id, $this->pageIDs ) ) {
-                                       $fit = $this->getResult()->addValue(
-                                               array( 'query', $this->getModuleName() ),
-                                               null, $this->extractRowInfo( $row ) );
-                                       if ( !$fit ) {
-                                               // We can't really query-continue a random list.
-                                               // Return an insanely high value so
-                                               // $count < $limit is false
-                                               return 1E9;
-                                       }
-                                       $this->pageIDs[] = $row->page_id;
+                               $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+                               $page = array(
+                                       'id' => (int)$row->page_id,
+                               );
+                               ApiQueryBase::addTitleInfo( $page, $title );
+                               if ( isset( $row->page_is_redirect ) ) {
+                                       $page['redirect'] = (bool)$row->page_is_redirect;
+                               }
+                               $fit = $result->addValue( $path, null, $page );
+                               if ( !$fit ) {
+                                       return array( 0, "{$row->page_random}|{$row->page_id}" );
                                }
                        } else {
                                $resultPageSet->processDbRow( $row );
                        }
                }
 
-               return $count;
+               return array( $limit - $count, null );
        }
 
        /**
-        * @param ApiPageSet $resultPageSet
-        * @return void
+        * @param ApiPageSet|null $resultPageSet
         */
        public function run( $resultPageSet = null ) {
                $params = $this->extractRequestParams();
-               $result = $this->getResult();
-               $this->pageIDs = array();
-
-               $this->prepareQuery(
-                       wfRandom(),
-                       $params['limit'],
-                       $params['namespace'],
-                       $resultPageSet,
-                       $params['redirect']
-               );
-               $count = $this->runQuery( $resultPageSet );
-               if ( $count < $params['limit'] ) {
-                       /* We got too few pages, we probably picked a high value
-                        * for page_random. We'll just take the lowest ones, see
-                        * also the comment in Title::getRandomTitle()
-                        */
-                       $this->prepareQuery(
-                               0,
-                               $params['limit'] - $count,
-                               $params['namespace'],
-                               $resultPageSet,
-                               $params['redirect']
-                       );
-                       $this->runQuery( $resultPageSet );
+
+               // Since 'filterredir" will always be set in $params, we have to dig
+               // into the WebRequest to see if it was actually passed.
+               $request = $this->getMain()->getRequest();
+               if ( $request->getCheck( $this->encodeParamName( 'filterredir' ) ) ) {
+                       $this->requireMaxOneParameter( $params, 'filterredir', 'redirect' );
                }
 
-               if ( is_null( $resultPageSet ) ) {
-                       $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'page' );
+               if ( $params['redirect'] ) {
+                       $this->logFeatureUsage( "list=random&rnredirect=" );
+               }
+
+               if ( isset( $params['continue'] ) ) {
+                       $cont = explode( '|', $params['continue'] );
+                       $this->dieContinueUsageIf( count( $cont ) != 4 );
+                       $rand = $cont[0];
+                       $start = $cont[1];
+                       $startId = (int)$cont[2];
+                       $end = $cont[3] ? $rand : null;
+                       $this->dieContinueUsageIf( !preg_match( '/^0\.\d+$/', $rand ) );
+                       $this->dieContinueUsageIf( !preg_match( '/^0\.\d+$/', $start ) );
+                       $this->dieContinueUsageIf( $cont[2] !== (string)$startId );
+                       $this->dieContinueUsageIf( $cont[3] !== '0' && $cont[3] !== '1' );
+               } else {
+                       $rand = wfRandom();
+                       $start = $rand;
+                       $startId = null;
+                       $end = null;
                }
-       }
 
-       private function extractRowInfo( $row ) {
-               $title = Title::makeTitle( $row->page_namespace, $row->page_title );
-               $vals = array();
-               $vals['id'] = intval( $row->page_id );
-               ApiQueryBase::addTitleInfo( $vals, $title );
+               list( $left, $continue ) = $this->runQuery( $resultPageSet, $params['limit'], $start, $startId, $end );
+               if ( $end === null && $continue === null ) {
+                       // Wrap around. We do this even if $left === 0 for continuation
+                       // (saving a DB query in this rare case probably isn't worth the
+                       // added code complexity it would require).
+                       $end = $rand;
+                       list( $left, $continue ) = $this->runQuery( $resultPageSet, $left, null, null, $end );
+               }
+
+               if ( $continue !== null ) {
+                       $endFlag = $end === null ? 0 : 1;
+                       $this->setContinueEnumParameter( 'continue', "$rand|$continue|$endFlag" );
+               }
 
-               return $vals;
+               if ( is_null( $resultPageSet ) ) {
+                       $this->getResult()->addIndexedTagName( array( 'query', $this->getModuleName() ), 'page' );
+               }
        }
 
        public function getCacheMode( $params ) {
@@ -154,14 +181,24 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => 'namespace',
                                ApiBase::PARAM_ISMULTI => true
                        ),
+                       'filterredir' => array(
+                               ApiBase::PARAM_TYPE => array( 'all', 'redirects', 'nonredirects' ),
+                               ApiBase::PARAM_DFLT => 'nonredirects', // for BC
+                       ),
+                       'redirect' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
+                               ApiBase::PARAM_DFLT => false,
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 1,
                                ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => 10,
-                               ApiBase::PARAM_MAX2 => 20
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue'
                        ),
-                       'redirect' => false,
                );
        }
 
index 65fd727..b866f43 100644 (file)
@@ -82,6 +82,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                        SearchEngine::create( $params['backend'] ) : SearchEngine::create();
                $search->setLimitOffset( $limit + 1, $params['offset'] );
                $search->setNamespaces( $params['namespace'] );
+               $search->setFeatureData( 'rewrite', (bool)$params['enablerewrites'] );
 
                $query = $search->transformSearchTerm( $query );
                $query = $search->replacePrefixes( $query );
@@ -134,6 +135,12 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                $apiResult->addValue( array( 'query', 'searchinfo' ),
                                        'suggestionsnippet', $matches->getSuggestionSnippet() );
                        }
+                       if ( isset( $searchInfo['rewrittenquery'] ) && $matches->hasRewrittenQuery() ) {
+                               $apiResult->addValue( array( 'query', 'searchinfo' ),
+                                       'rewrittenquery', $matches->getQueryAfterRewrite() );
+                               $apiResult->addValue( array( 'query', 'searchinfo' ),
+                                       'rewrittenquerysnippet', $matches->getQueryAfterRewriteSnippet() );
+                       }
                }
 
                // Add the search results to the result
@@ -303,10 +310,11 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                )
                        ),
                        'info' => array(
-                               ApiBase::PARAM_DFLT => 'totalhits|suggestion',
+                               ApiBase::PARAM_DFLT => 'totalhits|suggestion|rewrittenquery',
                                ApiBase::PARAM_TYPE => array(
                                        'totalhits',
                                        'suggestion',
+                                       'rewrittenquery',
                                ),
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -342,6 +350,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_SML2
                        ),
                        'interwiki' => false,
+                       'enablerewrites' => false,
                );
 
                $alternatives = SearchEngine::getSearchTypes();
index 75a0adb..251c42b 100644 (file)
@@ -78,7 +78,6 @@ class ApiQueryUserInfo extends ApiQueryBase {
 
        protected function getCurrentUserInfo() {
                $user = $this->getUser();
-               $result = $this->getResult();
                $vals = array();
                $vals['id'] = intval( $user->getId() );
                $vals['name'] = $user->getName();
index 014ca85..cd4165b 100644 (file)
@@ -144,7 +144,7 @@ class ApiResult implements ApiSerializable {
        private $errorFormatter;
 
        // Deprecated fields
-       private $isRawMode, $checkingSize, $mainForContinuation;
+       private $checkingSize, $mainForContinuation;
 
        /**
         * @param int|bool $maxSize Maximum result "size", or false for no limit
@@ -159,7 +159,6 @@ class ApiResult implements ApiSerializable {
                }
 
                $this->maxSize = $maxSize;
-               $this->isRawMode = false;
                $this->checkingSize = true;
                $this->reset();
        }
@@ -288,7 +287,7 @@ class ApiResult implements ApiSerializable {
         * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
         */
        public static function setValue( array &$arr, $name, $value, $flags = 0 ) {
-               if ( !( $flags & ApiResult::NO_VALIDATE ) ) {
+               if ( ( $flags & ApiResult::NO_VALIDATE ) !== ApiResult::NO_VALIDATE ) {
                        $value = self::validateValue( $value );
                }
 
@@ -402,6 +401,11 @@ class ApiResult implements ApiSerializable {
                $arr = &$this->path( $path, ( $flags & ApiResult::ADD_ON_TOP ) ? 'prepend' : 'append' );
 
                if ( $this->checkingSize && !( $flags & ApiResult::NO_SIZE_CHECK ) ) {
+                       // self::valueSize needs the validated value. Then flag
+                       // to not re-validate later.
+                       $value = self::validateValue( $value );
+                       $flags |= ApiResult::NO_VALIDATE;
+
                        $newsize = $this->size + self::valueSize( $value );
                        if ( $this->maxSize !== false && $newsize > $this->maxSize ) {
                                /// @todo Add i18n message when replacing calls to ->setWarning()
@@ -1079,14 +1083,12 @@ class ApiResult implements ApiSerializable {
         * or the sum of the strlen()s of the elements if the item is an array.
         * @note Once the deprecated public self::size is removed, we can rename
         *       this back to a less awkward name.
-        * @param mixed $value
+        * @param mixed $value Validated value (see self::validateValue())
         * @return int
         */
        private static function valueSize( $value ) {
                $s = 0;
-               if ( is_array( $value ) ||
-                       is_object( $value ) && !is_callable( array( $value, '__toString' ) )
-               ) {
+               if ( is_array( $value ) ) {
                        foreach ( $value as $k => $v ) {
                                if ( !self::isMetadataKey( $s ) ) {
                                        $s += self::valueSize( $v );
@@ -1202,27 +1204,23 @@ class ApiResult implements ApiSerializable {
         */
 
        /**
-        * Call this function when special elements such as '_element'
-        * are needed by the formatter, for example in XML printing.
+        * Formerly used to enable/disable "raw mode".
         * @deprecated since 1.25, you shouldn't have been using it in the first place
         * @since 1.23 $flag parameter added
         * @param bool $flag Set the raw mode flag to this state
         */
        public function setRawMode( $flag = true ) {
-               // Can't wfDeprecated() here, since we need to set this flag from
-               // ApiMain for BC with stuff using self::getIsRawMode as
-               // "self::getIsXMLMode".
-               $this->isRawMode = $flag;
+               wfDeprecated( __METHOD__, '1.25' );
        }
 
        /**
-        * Returns true whether the formatter requested raw data.
+        * Returns true, the equivalent of "raw mode" is always enabled now
         * @deprecated since 1.25, you shouldn't have been using it in the first place
         * @return bool
         */
        public function getIsRawMode() {
-               /// @todo: After Wikibase stops calling this, warn
-               return $this->isRawMode;
+               wfDeprecated( __METHOD__, '1.25' );
+               return true;
        }
 
        /**
@@ -1235,7 +1233,7 @@ class ApiResult implements ApiSerializable {
                return $this->getResultData( null, array(
                        'BC' => array(),
                        'Types' => array(),
-                       'Strip' => $this->isRawMode ? 'bc' : 'all',
+                       'Strip' => 'all',
                ) );
        }
 
@@ -1274,7 +1272,7 @@ class ApiResult implements ApiSerializable {
         */
        public static function setElement( &$arr, $name, $value, $flags = 0 ) {
                wfDeprecated( __METHOD__, '1.25' );
-               return self::setValue( $arr, $name, $value, $flags );
+               self::setValue( $arr, $name, $value, $flags );
        }
 
        /**
@@ -1488,7 +1486,7 @@ class ApiResult implements ApiSerializable {
         */
        public static function size( $value ) {
                wfDeprecated( __METHOD__, '1.25' );
-               return self::valueSize( $value );
+               return self::valueSize( self::validateValue( $value ) );
        }
 
        /**
index bb5c145..7d89b69 100644 (file)
@@ -139,10 +139,8 @@ class ApiRevisionDelete extends ApiBase {
                if ( !$messages ) {
                        return array();
                }
-               $result = $this->getResult();
                $ret = array();
                foreach ( $messages as $m ) {
-                       $message = array();
                        if ( $m['message'] instanceof Message ) {
                                $msg = $m['message'];
                                $message = array( 'message' => $msg->getKey() );
index a66b356..e87fc97 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 /**
- * Prepare and edit in shared cache so that it can be reused on edit
+ * Prepare an edit in shared cache so that it can be reused on edit
  *
  * This endpoint can be called via AJAX as the user focuses on the edit
  * summary box. By the time of submission, the parse may have already
index aa456f0..7bdf29a 100644 (file)
@@ -4,7 +4,8 @@
                        "Meno25",
                        "أحمد المحمودي",
                        "Khaled",
-                       "Fatz"
+                       "Fatz",
+                       "Hiba Alshawi"
                ]
        },
        "apihelp-main-param-format": "صيغة الخرج.",
@@ -24,5 +25,6 @@
        "apihelp-edit-param-watch": "أضف الصفحة إلى لائحة مراقبة المستعمل الحالي",
        "apihelp-emailuser-description": "مراسلة المستخدم",
        "apihelp-patrol-example-rcid": "ابحث عن تغيير جديد",
+       "apihelp-query+imageinfo-paramvalue-prop-userid": "إضافة هوية المستخدم الذي قام بتحميل كل إصدار ملف.",
        "apihelp-query+prefixsearch-param-offset": "عدد النتائج المراد تخطيها."
 }
index 01f07ff..98e1c10 100644 (file)
@@ -12,7 +12,8 @@
                        "Purodha",
                        "Andreasburmeister",
                        "Anomie",
-                       "Duder"
+                       "Duder",
+                       "Ljonka"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokumentation]]\n* [[mw:API:FAQ/de|Häufig gestellte Fragen]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, allerdings ist die API in aktiver Entwicklung und kann sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste], um über Aktualisierungen informiert zu werden.\n\n<strong>Fehlerhafte Anfragen:</strong> Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ gesendet. Der Wert des Headers und der Fehlercode werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe [[mw:API:Errors_and_warnings|API: Fehler und Warnungen]].",
        "apihelp-query+alldeletedrevisions-param-namespace": "Nur Seiten in diesem Namensraum auflisten.",
        "apihelp-query+allfileusages-param-from": "Titel der Datei, bei der die Aufzählung beginnen soll.",
        "apihelp-query+allfileusages-param-to": "Titel der Datei, bei der die Aufzählung enden soll.",
+       "apihelp-query+allfileusages-param-prop": "Informationsteile zum Einbinden:",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "Ergänzt den Titel der Datei.",
        "apihelp-query+allfileusages-param-limit": "Wie viele Gesamtobjekte zurückgegeben werden sollen.",
        "apihelp-query+allfileusages-param-dir": "Aufzählungsrichtung.",
        "apihelp-query+allfileusages-example-unique": "Einheitliche Dateititel auflisten",
        "apihelp-query+filearchive-param-from": "Der Bildertitel, bei dem die Auflistung beginnen soll.",
        "apihelp-query+filearchive-param-to": "Der Bildertitel, bei dem die Auflistung enden soll.",
        "apihelp-query+filearchive-param-limit": "Wie viele Bilder insgesamt zurückgegeben werden sollen.",
+       "apihelp-query+filearchive-paramvalue-prop-sha1": "Ergänzt die SHA-1-Prüfsumme für das Bild.",
        "apihelp-query+filearchive-example-simple": "Eine Liste aller gelöschten Dateien auflisten",
        "apihelp-query+imageinfo-param-limit": "Wie viele Dateiversionen pro Datei zurückgegeben werden sollen.",
        "apihelp-query+imageinfo-param-start": "Zeitstempel, von dem die Liste beginnen soll.",
        "apihelp-query+links-example-simple": "Links von der <kbd>Hauptseite</kbd> abrufen",
        "apihelp-query+linkshere-description": "Alle Seiten finden, die auf die angegebenen Seiten verlinken.",
        "apihelp-query+logevents-description": "Ereignisse von den Logbüchern abrufen.",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "Fügt die Seitenkennung hinzu.",
        "apihelp-query+prefixsearch-param-search": "Such-Zeichenfolge.",
+       "apihelp-query+search-param-prop": "Eigenschaften zur Rückgabe:",
        "apihelp-query+search-example-simple": "Nach <kbd>meaning</kbd> suchen.",
        "apihelp-query+search-example-text": "Texte nach <kbd>meaning</kbd> durchsuchen.",
        "apihelp-query+siteinfo-example-simple": "Websiteinformationen abrufen",
        "apihelp-query+tags-description": "Änderungs-Tags auflisten.",
        "apihelp-query+tags-example-simple": "Verfügbare Tags auflisten",
        "apihelp-query+usercontribs-description": "Alle Bearbeitungen von einem Benutzer abrufen.",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "Ergänzt die Seiten- und Versionskennung.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "Fügt den bürgerlichen Namen des Benutzers hinzu.",
        "apihelp-query+userinfo-example-simple": "Informationen über den aktuellen Benutzer abrufen",
        "apihelp-query+users-description": "Informationen über eine Liste von Benutzern abrufen.",
        "apihelp-rsd-description": "Ein RSD-Schema (Really Simple Discovery) exportieren.",
        "api-help-param-deprecated": "Veraltet.",
        "api-help-param-required": "Dieser Parameter ist erforderlich.",
        "api-help-datatypes-header": "Datentypen",
-       "api-help-param-list": "{{PLURAL:$1|1=Ein Wert|2=Werte (mit <kbd>{{!}}</kbd> trennen)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Einer der folgenden Werte|2=Werte (mit <kbd>{{!}}</kbd> trennen)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Muss leer sein|Kann leer sein oder $2}}",
        "api-help-param-limit": "Nicht mehr als $1 erlaubt.",
        "api-help-param-limit2": "Nicht mehr als $1 ($2 für Bots) erlaubt.",
index 396f5da..78f0568 100644 (file)
        "apihelp-query+imageinfo-param-prop": "Which file information to get:",
        "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Adds timestamp for the uploaded version.",
        "apihelp-query+imageinfo-paramvalue-prop-user": "Adds the user who uploaded each file version.",
-       "apihelp-query+imageinfo-paramvalue-prop-userid": "Add the user ID that uploaded each file version.",
+       "apihelp-query+imageinfo-paramvalue-prop-userid": "Add the ID of the user that uploaded each file version.",
        "apihelp-query+imageinfo-paramvalue-prop-comment": "Comment on the version.",
        "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Parse the comment on the version.",
        "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Adds the canonical title of the file.",
        "apihelp-query+logevents-paramvalue-prop-details": "Lists additional details about the log event.",
        "apihelp-query+logevents-paramvalue-prop-tags": "Lists tags for the log event.",
        "apihelp-query+logevents-param-type": "Filter log entries to only this type.",
-       "apihelp-query+logevents-param-action": "Filter log actions to only this action. Overrides <var>$1type</var>. Wildcard actions like <kbd>action/*</kbd> allows to specify any string for the asterisk.",
+       "apihelp-query+logevents-param-action": "Filter log actions to only this action. Overrides <var>$1type</var>. In the list of possible values, values with the asterisk wildcard such as <kbd>action/*</kbd> can have different strings after the slash (/).",
        "apihelp-query+logevents-param-start": "The timestamp to start enumerating from.",
        "apihelp-query+logevents-param-end": "The timestamp to end enumerating.",
        "apihelp-query+logevents-param-user": "Filter entries to those made by the given user.",
        "apihelp-query+querypage-param-limit": "Number of results to return.",
        "apihelp-query+querypage-example-ancientpages": "Return results from [[Special:Ancientpages]].",
 
-       "apihelp-query+random-description": "Get a set of random pages.\n\nPages are listed in a fixed sequence, only the starting point is random. This means that if, for example, <samp>Main Page</samp> is the first random page in the list, <samp>List of fictional monkeys</samp> will <em>always</em> be second, <samp>List of people on stamps of Vanuatu</samp> third, etc.\n\nIf the number of pages in the namespace is lower than <var>$1limit</var>, fewer pages will be returned. The same page will not be returned twice.",
+       "apihelp-query+random-description": "Get a set of random pages.\n\nPages are listed in a fixed sequence, only the starting point is random. This means that if, for example, <samp>Main Page</samp> is the first random page in the list, <samp>List of fictional monkeys</samp> will <em>always</em> be second, <samp>List of people on stamps of Vanuatu</samp> third, etc.",
        "apihelp-query+random-param-namespace": "Return pages in these namespaces only.",
        "apihelp-query+random-param-limit": "Limit how many random pages will be returned.",
-       "apihelp-query+random-param-redirect": "Load a random redirect instead of a random page.",
+       "apihelp-query+random-param-redirect": "Use <kbd>$1filterredir=redirects</kbd> instead.",
+       "apihelp-query+random-param-filterredir": "How to filter for redirects.",
        "apihelp-query+random-example-simple": "Return two random pages from the main namespace.",
        "apihelp-query+random-example-generator": "Return page info about two random pages from the main namespace.",
 
        "apihelp-query+search-param-limit": "How many total pages to return.",
        "apihelp-query+search-param-interwiki": "Include interwiki results in the search, if available.",
        "apihelp-query+search-param-backend": "Which search backend to use, if not the default.",
+       "apihelp-query+search-param-enablerewrites": "Enable internal query rewriting. Some search backends can rewrite the query into one its thinks gives better results, such as correcting spelling errors.",
        "apihelp-query+search-example-simple": "Search for <kbd>meaning</kbd>.",
        "apihelp-query+search-example-text": "Search texts for <kbd>meaning</kbd>.",
        "apihelp-query+search-example-generator": "Get page info about the pages returned for a search for <kbd>meaning</kbd>.",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "Set the notification timestamp for <kbd>Main page</kbd> so all edits since 1 January 2012 are unviewed.",
        "apihelp-setnotificationtimestamp-example-allpages": "Reset the notification status for pages in the <kbd>{{ns:user}}</kbd> namespace.",
 
+       "apihelp-stashedit-description": "Prepare an edit in shared cache.\n\nThis is intended to be used via AJAX from the edit form to improve the performance of the page save.",
+       "apihelp-stashedit-param-title": "Title of the page being edited.",
+       "apihelp-stashedit-param-section": "Section number. <kbd>0</kbd> for the top section, <kbd>new</kbd> for a new section.",
+       "apihelp-stashedit-param-sectiontitle": "The title for a new section.",
+       "apihelp-stashedit-param-text": "Page content.",
+       "apihelp-stashedit-param-contentmodel": "Content model of the new content.",
+       "apihelp-stashedit-param-contentformat": "Content serialization format used for the input text.",
+       "apihelp-stashedit-param-baserevid": "Revision ID of the base revision.",
+
        "apihelp-tag-description": "Add or remove change tags from individual revisions or log entries.",
        "apihelp-tag-param-rcid": "One or more recent changes IDs from which to add or remove the tag.",
        "apihelp-tag-param-revid": "One or more revision IDs from which to add or remove the tag.",
        "api-help-param-type-password": "",
        "api-help-param-type-timestamp": "Type: {{PLURAL:$1|1=timestamp|2=list of timestamps}} ([[Special:ApiHelp/main#main/datatypes|allowed formats]])",
        "api-help-param-type-user": "Type: {{PLURAL:$1|1=user name|2=list of user names}}",
-       "api-help-param-list": "{{PLURAL:$1|1=One value|2=Values (separate with <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=One of the following values|2=Values (separate with <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Must be empty|Can be empty, or $2}}",
        "api-help-param-limit": "No more than $1 allowed.",
        "api-help-param-limit2": "No more than $1 ($2 for bots) allowed.",
index 1d04304..06478f6 100644 (file)
        "apihelp-feedrecentchanges-param-hidebots": "Ocultar los cambios realizados por bots.",
        "apihelp-feedrecentchanges-param-hideanons": "Ocultar los cambios realizados por usuarios anónimos.",
        "apihelp-feedrecentchanges-param-hideliu": "Ocultar los cambios realizados por usuarios registrados.",
-       "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar los cambios patrullados.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar los cambios verificados.",
        "apihelp-feedrecentchanges-param-hidemyself": "Ocultar los cambios realizados por el usuario actual.",
        "apihelp-feedrecentchanges-param-tagfilter": "Filtrar por etiquetas.",
        "apihelp-feedrecentchanges-param-target": "Mostrar solo los cambios en las páginas enlazadas en esta.",
        "apihelp-parse-example-text": "Analizar wikitexto.",
        "apihelp-parse-example-texttitle": "Analizar wikitexto, especificando el título de la página.",
        "apihelp-parse-example-summary": "Analizar un resumen.",
-       "apihelp-patrol-description": "Patrullar una página o revisión.",
-       "apihelp-patrol-example-rcid": "Patrullar un cambio reciente",
-       "apihelp-patrol-example-revid": "Patrullar una revisión",
+       "apihelp-patrol-description": "Verificar una página o revisión.",
+       "apihelp-patrol-param-rcid": "Identificador de cambios recientes que verificar.",
+       "apihelp-patrol-example-rcid": "Verificar un cambio reciente.",
+       "apihelp-patrol-example-revid": "Verificar una revisión.",
        "apihelp-protect-description": "Cambiar el nivel de protección de una página.",
        "apihelp-protect-param-title": "Título de la página a (des)proteger. No se puede utilizar con $1pageid.",
        "apihelp-protect-param-pageid": "ID de la página a (des)proteger. No se puede utilizar con $1title.",
        "apihelp-query+categoryinfo-description": "Devuelve información acerca de las categorías dadas.",
        "apihelp-query+categoryinfo-example-simple": "Obtener información acerca de <kbd>Category:Foo</kbd> y <kbd>Category:Bar</kbd>",
        "apihelp-query+categorymembers-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "Añade el identificador de página.",
        "apihelp-query+categorymembers-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
        "apihelp-query+categorymembers-param-startsortkey": "Utilizar $1starthexsortkey en su lugar.",
        "apihelp-query+categorymembers-param-endsortkey": "Utilizar $1endhexsortkey en su lugar.",
        "apihelp-query+recentchanges-param-prop": "Incluir piezas adicionales de información:",
        "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Añade el comentario analizado para la edición.",
        "apihelp-query+recentchanges-paramvalue-prop-flags": "Añade marcas para la edición.",
-       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Etiqueta ediciones patrullables como patrulladas o no patrulladas.",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Etiqueta ediciones verificables como verificadas o no verificadas.",
        "apihelp-query+recentchanges-param-token": "Usa <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> en su lugar.",
        "apihelp-query+recentchanges-param-limit": "Cuántos cambios en total se devolverán.",
        "apihelp-query+recentchanges-param-type": "Cuántos tipos de cambios se mostrarán.",
        "apihelp-query+usercontribs-param-prop": "Incluir piezas adicionales de información:",
        "apihelp-query+usercontribs-paramvalue-prop-ids": "Añade el identificador de página y el de revisión.",
        "apihelp-query+usercontribs-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Añade fecha y hora de la edición.",
        "apihelp-query+usercontribs-paramvalue-prop-comment": "Añade el comentario de la edición.",
+       "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Etiqueta ediciones verificadas.",
        "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista las etiquetas para la edición.",
+       "apihelp-query+usercontribs-param-show": "Mostrar solo los elementos que coinciden con estos criterios. Por ejemplo, solo ediciones no menores: <kbd>$2show=!minor</kbd>.\n\nSi se establece <kbd>$2show=patrolled</kbd> o <kbd>$2show=!patrolled</kbd>, las revisiones más antiguas que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) no se mostrarán.",
        "apihelp-query+usercontribs-example-user": "Mostrar contribuciones del usuario <kbd>Ejemplo</kbd>.",
        "apihelp-query+usercontribs-example-ipprefix": "Mostrar las contribuciones de todas las direcciones IP con el prefijo <kbd>192.0.2.</kbd>.",
        "apihelp-query+userinfo-description": "Obtener información sobre el usuario actual.",
        "apihelp-query+watchlist-paramvalue-prop-userid": "Añade el identificador de usuario de quien hizo la edición.",
        "apihelp-query+watchlist-paramvalue-prop-comment": "Añade el comentario de la edición.",
        "apihelp-query+watchlist-paramvalue-prop-timestamp": "Añade fecha y hora de la edición.",
-       "apihelp-query+watchlist-paramvalue-prop-patrol": "Etiqueta las ediciones que están patrulladas.",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "Etiqueta las ediciones que están verificadas.",
        "apihelp-query+watchlist-paramvalue-prop-sizes": "Añade la longitud vieja y la nueva de la página.",
        "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Añade fecha y hora de cuando el usuario fue notificado por última vez acerca de la edición.",
        "apihelp-query+watchlist-paramvalue-prop-loginfo": "Añade información del registro cuando corresponda.",
        "api-help-param-type-boolean": "Tipo: booleano/lógico ([[Special:ApiHelp/main#main/datatypes|detalles]])",
        "api-help-param-type-timestamp": "Tipo: {{PLURAL:$1|1=timestamp|2=lista de timestamps}} ([[Special:ApiHelp/main#main/datatypes|formatos permitidos]])",
        "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nombre de usuario|2=lista de nombres de usuarios}}",
-       "api-help-param-list": "{{PLURAL:$1|1=Un valor|2=Valores (separados por <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Uno de los siguientes valores|2=Valores (separados por <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Debe estar vacío|Puede estar vacío, o $2}}",
        "api-help-param-limit": "No se permite más de $1.",
        "api-help-param-limit2": "No se permite más de $1 ($2 para los bots).",
index 829be6d..ac46637 100644 (file)
@@ -3,9 +3,12 @@
                "authors": [
                        "Nike",
                        "MrTapsa",
-                       "Pitke"
+                       "Pitke",
+                       "Stryn"
                ]
        },
+       "apihelp-block-description": "Estä käyttäjä.",
+       "apihelp-block-param-reason": "Eston syy.",
        "apihelp-emailuser-example-email": "Lähetä käyttäjälle <kbd>WikiSysop</kbd> sähköposti, jossa lukee <kbd>Content</kbd>.",
        "apihelp-query+linkshere-param-show": "Näytä vain kohteet, jotka täyttävät nämä kriteerit:\n;redirect:Näytä vain uudelleenohjaukset.\n;!redirect:Näytä vain ei-uudelleenohjaukset",
        "apihelp-tag-example-rev": "Lisää tunniste <kbd>vandalism</kbd> versioon 123 antamatta perustelua.",
index 5aec2c6..7e3c65c 100644 (file)
@@ -20,7 +20,8 @@
                        "Wladek92",
                        "Ash Crow",
                        "L",
-                       "Umherirrender"
+                       "Umherirrender",
+                       "Elfix"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en cours de développement et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un en-tête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet en-tête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
        "apihelp-query+logevents-paramvalue-prop-details": "Liste les détails supplémentaires sur l’événement.",
        "apihelp-query+logevents-paramvalue-prop-tags": "Liste les balises de l’événement.",
        "apihelp-query+logevents-param-type": "Filtrer les entrées du journal à ce seul type.",
-       "apihelp-query+logevents-param-action": "Filtrer les actions du journal à cette seule action. Écrase <var>$1type</var>. Des actions avec une astérisque de la forme <var>$1type</var> sont autorisées pour spécifier n’importe quelle chaîne à la place de l’astérisque.",
+       "apihelp-query+logevents-param-action": "Filtrer les actions du journal à cette seule action. Écrase <var>$1type</var>. La présence d'une valeur avec un astérisque dans la liste, comme <var>$1type</var>, indique qu'une chaîne arbitraire peut être passée dans dans la requête à la place de l'astérisque.",
        "apihelp-query+logevents-param-start": "L’horodatage auquel démarrer l’énumération.",
        "apihelp-query+logevents-param-end": "L’horodatage auquel arrêter l’énumération.",
        "apihelp-query+logevents-param-user": "Restreindre aux entrées générées par l’utilisateur spécifié.",
        "apihelp-query+querypage-param-page": "Le nom de la page spéciale. Remarque, ce nom est sensible à la casse.",
        "apihelp-query+querypage-param-limit": "Nombre de résultats à renvoyer.",
        "apihelp-query+querypage-example-ancientpages": "Renvoyer les résultats de [[Special:Ancientpages]].",
-       "apihelp-query+random-description": "Obtenir un ensemble de pages au hasard.\n\nLes pages sont listées dans un ordre prédéterminé, seul le point de départ est aléatoire. Par exemple, cela signifie que si la première page dans la liste est <samp>Accueil</samp>, la seconde sera <em>toujours</em> <samp>Liste des singes de fiction</samp>, la troisième <samp>Liste de personnes figurant sur les timbres de Vanuatu</samp>, etc.\n\nSi le nombre de page dans l’espace de nom est inférieur à <var>$1limit</var>, moins de pages seront renvoyées. La même page ne sera jamais renvoyée deux fois.",
+       "apihelp-query+random-description": "Obtenir un ensemble de pages au hasard.\n\nLes pages sont listées dans un ordre prédéterminé, seul le point de départ est aléatoire. Par exemple, cela signifie que si la première page dans la liste est <samp>Accueil</samp>, la seconde sera <em>toujours</em> <samp>Liste des singes de fiction</samp>, la troisième <samp>Liste de personnes figurant sur les timbres de Vanuatu</samp>, etc.",
        "apihelp-query+random-param-namespace": "Renvoyer seulement des pages de ces espaces de noms.",
        "apihelp-query+random-param-limit": "Limite sur le nombre de pages aléatoires renvoyées.",
-       "apihelp-query+random-param-redirect": "Charger une redirection aléatoire plutôt qu’une page aléatoire.",
+       "apihelp-query+random-param-redirect": "Utilisez <kbd>$1filterredir=redirects</kbd> au lieu de ce paramètre.",
+       "apihelp-query+random-param-filterredir": "Comment filtrer les redirections.",
        "apihelp-query+random-example-simple": "Obtenir deux pages aléatoires de l’espace principal",
        "apihelp-query+random-example-generator": "Renvoyer les informations de la page sur deux pages au hasard de l’espace de noms principal",
        "apihelp-query+recentchanges-description": "Énumérer les modifications récentes.",
        "apihelp-query+redirects-param-show": "Afficher uniquement les éléments correspondant à ces critères :\n;fragment:Afficher uniquement les redirections avec un fragment.\n;!fragment:Afficher uniquement les redirections sans fragment.",
        "apihelp-query+redirects-example-simple": "Obtenir une liste des redirections vers [[Main Page]]",
        "apihelp-query+redirects-example-generator": "Obtenir des informations sur toutes les redirections vers [[Main Page]]",
-       "apihelp-query+revisions-description": "Obtenir des informations sur la révision.\n\nPeut être utilisé de différentes manières :\n# Obtenir des données sur un ensemble de pages (dernière révision), en mettant les titres ou les ids de page.\n# Obtenir les révisions d’une page donnée, en utilisant les titres ou les ids de page avec début, fin ou limite.\n# Obtenir des données sur un ensemble de révisions en donnant leurs IDs et leurs ids de révision.",
+       "apihelp-query+revisions-description": "Obtenir des informations sur la révision.\n\nPeut être utilisé de différentes manières :\n# Obtenir des données sur un ensemble de pages (dernière révision), en mettant les titres ou les ids de page.\n# Obtenir les révisions d’une page donnée, en utilisant les titres ou les ids de page avec rvstart, rvend ou rvlimit.\n# Obtenir des données sur un ensemble de révisions en donnant leurs IDs avec revids.",
        "apihelp-query+revisions-paraminfo-singlepageonly": "Utilisable uniquement avec une seule page (mode #2).",
        "apihelp-query+revisions-param-startid": "À quel ID de révision démarrer l’énumération.",
        "apihelp-query+revisions-param-endid": "Arrêter l’énumération des révisions à cet ID.",
        "apihelp-query+search-param-limit": "Combien de pages renvoyer au total.",
        "apihelp-query+search-param-interwiki": "Inclure les résultats interwiki dans la recherche, s’ils sont disponibles.",
        "apihelp-query+search-param-backend": "Quel serveur de recherche utiliser, si ce n’est pas celui par défaut.",
+       "apihelp-query+search-param-enablerewrites": "Activer la réécriture interne de la requête. Les serveurs de recherche peuvent changer la requête en une autre dont ils estiment qu'elle donne de meilleurs résultats, par exemple en corrigeant l'orthographe.",
        "apihelp-query+search-example-simple": "Rechercher  <kbd>signification </kbd>.",
        "apihelp-query+search-example-text": "Rechercher des textes pour <kbd>signification</kbd>.",
        "apihelp-query+search-example-generator": "Obtenir les informations sur les pages renvoyées par une recherche de <kbd>signification</kbd>.",
        "api-help-param-type-boolean": "Type : booléen ([[Special:ApiHelp/main#main/datatypes|détails]])",
        "api-help-param-type-timestamp": "Type : {{PLURAL:$1|1=horodatage|2=liste d’horodatages}} ([[Special:ApiHelp/main#main/datatypes|formats autorisés]])",
        "api-help-param-type-user": "Type : {{PLURAL:$1|1=nom d’utilisateur|2=liste de noms d’utilisateur}}",
-       "api-help-param-list": "{{PLURAL:$1|1=Une valeur|2=Valeurs (séparées par <kbd>{{!}}</kbd>)}} : $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Une des valeurs suivantes|2=Valeurs (séparées par <kbd>{{!}}</kbd>)}} : $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Doit être vide|Peut être vide, ou $2}}",
        "api-help-param-limit": "Pas plus de $1 autorisé.",
        "api-help-param-limit2": "Pas plus de $1 autorisé ($2 pour les robots).",
index fc0b267..6b6345d 100644 (file)
        "apihelp-parse-param-effectivelanglinks": "Inclúe ligazóns de idioma proporcionadas polas extensións (para usar con <kbd>$1prop=langlinks</kbd>).",
        "apihelp-parse-param-section": "Recuperar unicamente o contido deste número de sección ou cando <kbd>new</kbd> xera unha nova sección.\n\nA sección <kbd>new</kbd> só é atendida cando se especifica <var>text</var>.",
        "apihelp-parse-param-sectiontitle": "Novo título de sección cando <var>section</var> é <kbd>new</kbd>.\n\nA diferenza da edición de páxinas, non se oculta no <var>summary</var> cando se omite ou está baleiro.",
-       "apihelp-parse-param-disablelimitreport": "Omitir o informe de preprocesador (\"Informe de límite NewPP\") da saída do analizador.",
+       "apihelp-parse-param-disablelimitreport": "Omitir o informe de límite (\"Informe de límite NewPP\") da saída do analizador.",
+       "apihelp-parse-param-disablepp": "Use <var>$1disablelimitreport</var> no seu lugar.",
        "apihelp-parse-param-disableeditsection": "Omitir as ligazóns de edición de sección da saída do analizador.",
+       "apihelp-parse-param-disabletidy": "Non executar limpeza de HTML no retorno da análise.",
        "apihelp-parse-param-generatexml": "Xenerar unha árbore de análise XML (necesita o modelo de contido <code>$1</code>; substituído por <kbd>$2prop=parsetree</kbd>).",
        "apihelp-parse-param-preview": "Analizar en modo vista previa.",
        "apihelp-parse-param-sectionpreview": "Analizar en modo vista previa de sección (activa tamén o modo de vista previa).",
        "apihelp-query+logevents-paramvalue-prop-details": "Lista detalles adicionais do evento.",
        "apihelp-query+logevents-paramvalue-prop-tags": "Lista as etiquetas do evento.",
        "apihelp-query+logevents-param-type": "Filtrar as entradas do rexistro para mostrar só as deste tipo.",
-       "apihelp-query+logevents-param-action": "Filtrar accións no rexistro para mostrar só esta acción. Ignora <var>$1type</var>. Accións comodín como  <kbd>action/*</kbd> permiten especificar calquera cadea para o asterisco.",
+       "apihelp-query+logevents-param-action": "Filtrar accións no rexistro para mostrar só esta acción. Ignora <var>$1type</var>. Na lista de posibles valores, valores coa máscara asterisco como <kbd>action/*</kbd> poden ter diferentes cadeas despois da barra (/).",
        "apihelp-query+logevents-param-start": "Selo de tempo no que comezar a enumeración.",
        "apihelp-query+logevents-param-end": "Selo de tempo para rematar a enumeración.",
        "apihelp-query+logevents-param-user": "Filtrar entradas ás feitas polo usuario indicado.",
        "apihelp-query+querypage-param-page": "Nome da páxina especial. Teña en conta que diferencia entre maiúsculas e minúsculas.",
        "apihelp-query+querypage-param-limit": "Número de resultados a visualizar.",
        "apihelp-query+querypage-example-ancientpages": "Resultados devoltos de [[Special:Ancientpages]].",
-       "apihelp-query+random-description": "Obter un conxunto de páxinas aleatorias.\n\nAs páxinas están listadas nunha secuencia fixa, só o punto de comezo é aleatorio. Isto significa que se, por exemplo, a <samp>Main Page</samp> é a primeira páxina aleatoria da lista, a <samp>Lista de monos ficticios</samp> será <em>sempre</em> a segunda, <samp>Lista de xente en selos de Vanuatu</samp> será a terceira, etc.\n\nSe o númeor de páxinas do espazo de nomes é menor que <var>$1limit</var>, devolveranse menos páxinas. Non se devolverá dúas veces a mesma páxina.",
+       "apihelp-query+random-description": "Obter un conxunto de páxinas aleatorias.\n\nAs páxinas están listadas nunha secuencia fixa, só o punto de comezo é aleatorio. Isto significa que se, por exemplo, a <samp>Main Page</samp> é a primeira páxina aleatoria da lista, a <samp>Lista de monos ficticios</samp> será <em>sempre</em> a segunda, <samp>Lista de xente en selos de Vanuatu</samp> será a terceira, etc.",
        "apihelp-query+random-param-namespace": "Devolver páxinas só neste espazo de nomes.",
        "apihelp-query+random-param-limit": "Limitar cantas páxinas aleatorias se van devolver.",
-       "apihelp-query+random-param-redirect": "Cargar unha redirección aleatoria no canto dunha páxina aleatoria.",
+       "apihelp-query+random-param-redirect": "No canto use <kbd>$1filterredir=redirects</kbd>.",
+       "apihelp-query+random-param-filterredir": "Como filtrar para redireccións.",
        "apihelp-query+random-example-simple": "Obter dúas páxinas aleatorias do espazo de nomes principal.",
        "apihelp-query+random-example-generator": "Obter a información da páxina de dúas páxinas aleatorias do espazo de nomes principal.",
        "apihelp-query+recentchanges-description": "Enumerar cambios recentes.",
        "api-help-param-type-boolean": "Tipo: booleano ([[Special:ApiHelp/main#main/datatypes|detalles]])",
        "api-help-param-type-timestamp": "Tipo: {{PLURAL:$1|1=selo de tempo|2=lista de selos de tempo}} ([[Special:ApiHelp/main#main/datatypes|formatos permitidos]])",
        "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nome de usuario|2=lista de nomes de usuarios}}",
-       "api-help-param-list": "{{PLURAL:$1|1=Un valor|2=Valores (separados con <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Un valor dos seguintes valores|2=Valores (separados con <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Debe ser baleiro|Pode ser baleiro, ou $2}}",
        "api-help-param-limit": "Non se permiten máis de $1.",
        "api-help-param-limit2": "Non se permiten máis de $1 ($2 para bots).",
index de8e83d..5cd1d94 100644 (file)
        "apihelp-query+logevents-paramvalue-prop-details": "הוספת פרטים נוספים על האירוע.",
        "apihelp-query+logevents-paramvalue-prop-tags": "רשימת התגים של האירוע.",
        "apihelp-query+logevents-param-type": "סינון עיולי יומן רק לסוג הזה.",
-       "apihelp-query+logevents-param-action": "ס×\99× ×\95×\9f ×¤×¢×\95×\9c×\95ת ×\99×\95×\9e×\9f ×¨×§ ×\9cפע×\95×\9c×\94 ×\94×\96×\90ת. ×\93×\95רס ×\90ת <var>$1type</var>. ×¤×¢×\95×\9c×\95ת ×¢×\9d ×ª×\95Ö¾×\9b×\95×\9c×\99×\9d ×\9b×\92×\95×\9f <kbd>action/*</kbd> ×\9e×\90פשר×\95ת ×\9cתת ×\9b×\9c ×\9e×\97ר×\95×\96ת ×\91×\9eק×\95×\9d ×\94×\9b×\95×\9b×\91×\99ת.",
+       "apihelp-query+logevents-param-action": "ס×\99× ×\95×\9f ×¤×¢×\95×\9c×\95ת ×\99×\95×\9e×\9f ×¨×§ ×\9cפע×\95×\9c×\94 ×\94×\96×\90ת. ×\93×\95רס ×\90ת <var>$1type</var>. ×\91רש×\99×\9eת ×\94ער×\9b×\99×\9d ×\94×\90פשר×\99×\99×\9d, ×¢×¨×\9b×\99×\9d ×¢×\9d ×ª×\95Ö¾×\9b×\9c ×\9b×\95×\9b×\91×\99ת ×\9b×\92×\95×\9f <kbd>action/*</kbd> ×\99×\9b×\95×\9c×\99×\9d ×\9c×\94×\99×\95ת ×\9e×\97ר×\95×\96×\95ת ×©×\95× ×\95ת ×\90×\97ר×\99 ×\94ק×\95 ×\94× ×\98×\95×\99 (/).",
        "apihelp-query+logevents-param-start": "מאיזה חותם־זמן להתחיל למנות.",
        "apihelp-query+logevents-param-end": "באיזה חותם זמן להפסיק לרשום.",
        "apihelp-query+logevents-param-user": "לסנן את העיולים שעשה המשתמש הנתון.",
        "apihelp-query+querypage-param-page": "שם הדף המיוחד. לתשומת לבך, זה תלוי־רישיות.",
        "apihelp-query+querypage-param-limit": "מספר תוצאות להחזרה.",
        "apihelp-query+querypage-example-ancientpages": "מחזיר תוצאות מ־[[Special:Ancientpages]].",
-       "apihelp-query+random-description": "קבלת ערכת דפים אקראיים.\n\nהדפים רשומים בסדר קבוע, ורק נקודת ההתחלה אקראית. זה אומר שאם, למשל, <samp>Main Page</samp> הוא הדף האקראי הראשון הרשימה, <samp>List of fictional monkeys</samp> יהיה <em>תמיד</em> השני, <samp>List of people on stamps of Vanuatu</samp> שלישי, וכו'.\n\nאם מספר הדפים במרחב השם נמוך מ־<var>$1limit</var>, יוחזרו פחות דפים. אותו הדף לא יוחזר פעמיים.",
+       "apihelp-query+random-description": "קבלת ערכת דפים אקראיים.\n\nהדפים רשומים בסדר קבוע, ורק נקודת ההתחלה אקראית. זה אומר שאם, למשל, <samp>Main Page</samp> הוא הדף האקראי הראשון הרשימה, <samp>List of fictional monkeys</samp> יהיה <em>תמיד</em> השני, <samp>List of people on stamps of Vanuatu</samp> שלישי, וכו'.",
        "apihelp-query+random-param-namespace": "מחזיר דפים רק במרחבי השם האלה.",
        "apihelp-query+random-param-limit": "להגביל את מספר הדפים האקראיים שיוחזרו.",
-       "apihelp-query+random-param-redirect": "לטעון הניה אקראית במקום דף אקראי.",
+       "apihelp-query+random-param-redirect": "נא להשתמש ב־<kbd>$1filterredir=redirects</kbd> במקום.",
+       "apihelp-query+random-param-filterredir": "איך לסנן הפניות.",
        "apihelp-query+random-example-simple": "להחזיר שני דפים אקראיים מהמרחב הראשי.",
        "apihelp-query+random-example-generator": "החזרת מידע על הדף על שני דפים אקראיים מהמרחב הראשי.",
        "apihelp-query+recentchanges-description": "למנות שינויים אחרונים.",
        "apihelp-query+search-paramvalue-prop-sectiontitle": "הוספת שם הפסקה התואמת.",
        "apihelp-query+search-paramvalue-prop-categorysnippet": "הוספת קטע קצר מפוענח של הקטגוריה התואמת.",
        "apihelp-query+search-paramvalue-prop-isfilematch": "הוספת בוליאני שמציין אם החיפוש תאם לתוכן של קובץ.",
-       "apihelp-query+search-paramvalue-prop-score": "<span class=\"apihelp-deprecated\">×\9e×\99×\95ש×\9f ×\95×\97סר־ת×\95ק×\9f.</span>",
-       "apihelp-query+search-paramvalue-prop-hasrelated": "<span class=\"apihelp-deprecated\">×\9e×\99×\95ש×\9f ×\95×\97סר־ת×\95ק×\9f.</span>",
+       "apihelp-query+search-paramvalue-prop-score": "<span class=\"apihelp-deprecated\">×\9e×\99×\95ש×\9f ×\95×\97סר־×\94שפע×\94.</span>",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "<span class=\"apihelp-deprecated\">×\9e×\99×\95ש×\9f ×\95×\97סר־×\94שפע×\94.</span>",
        "apihelp-query+search-param-limit": "כמה דפים להחזיר בסך הכול.",
-       "apihelp-query+search-param-interwiki": "לכלול תוצאות בינוויקי בחיפוש ם זמין.",
+       "apihelp-query+search-param-interwiki": "לכלול תוצאות בינוויקי בחיפוש, אם זמין.",
        "apihelp-query+search-param-backend": "באיזה שרת חיפוש להשתמש אם לא בבררת המחדל.",
+       "apihelp-query+search-param-enablerewrites": "הפעלת שכתוב שאילתות פנימי. שרתי חיפוש אחדים יכולים לשכתב את השאילתה לצורה שלדעתם נותנת תוצאות טובות יותר, למשל תיקון שגיאות כתיב.",
        "apihelp-query+search-example-simple": "חיפוש <kbd>meaning</kbd>.",
        "apihelp-query+search-example-text": "חיפוש טקסטים עבור <kbd>meaning</kbd>.",
        "apihelp-query+search-example-generator": "קבלת מידע על הדף עבור שמוחזרים מחיפוש אחרי <kbd>meaning</kbd>.",
        "api-help-param-type-boolean": "סוג: בוליאני ([[Special:ApiHelp/main#main/datatypes|פרטים]])",
        "api-help-param-type-timestamp": "סוג: {{PLURAL:$1|חותם־זמן|רשימת חותמי־זמן}} ([[Special:ApiHelp/main#main/datatypes|תסדירים מורשים]])",
        "api-help-param-type-user": "סוג: {{PLURAL:$1|1=שם משתמש|2=רשימת שמות משתמשים}}",
-       "api-help-param-list": "{{PLURAL:$1|1=ער×\9a ×\90×\97×\93|2=ערכים (מופרדים באמצעות \"<kbd>{{!}}</kbd>\")}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=×\90×\97×\93 ×\9e×\94ער×\9b×\99×\9d ×\94×\91×\90×\99×\9d|2=ערכים (מופרדים באמצעות \"<kbd>{{!}}</kbd>\")}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=חייב להיות ריק|יכול להיות ריק או $2}}",
        "api-help-param-limit": "מספר הפרמטרים לא יכול להיות גדול מ־$1.",
        "api-help-param-limit2": "המספר המרבי המותר הוא $1 (עבור בוטים – $2).",
        "api-help-permissions-granted-to": "{{PLURAL:$1|הוענק ל|הוענקו ל}}: $2",
        "api-help-right-apihighlimits": "להשתמש במגבלות גבוהות יותר בשאילתות API (שאילתות אטיות: $1; שאילתות מהירות: $2). המגבלות לשאילתות אטיות חלות גם על פרמטרים מרובי־ערכים.",
        "api-credits-header": "קרדיטים",
-       "api-credits": "מפתחי ה־API:\n* רואן קטאו (מפתח מוביל 2007–2009)\n* ויקטור וסילייב\n* בריאן טונג מין\n* סאם ריד\n* יורי אסטרחן (יוצר, מפתח מוביל מספטמבר 2006 עד ספטמבר 2007)\n* בראד יורש (מפתח מוביל מאז 2013)\n\nאנא שלחו הערות, הצעות ושאלות לכתובת mediawiki-api@lists.wikimedia.org או כתבו דיווח באג באתר https://bugzilla.wikimedia.org."
+       "api-credits": "מפתחי ה־API:\n* רואן קטאו (מפתח מוביל 2007–2009)\n* ויקטור וסילייב\n* בריאן טונג מין\n* סאם ריד\n* יורי אסטרחן (יוצר, מפתח מוביל מספטמבר 2006 עד ספטמבר 2007)\n* בראד יורש (מפתח מוביל מאז 2013)\n\nאנא שלחו הערות, הצעות ושאלות לכתובת mediawiki-api@lists.wikimedia.org או כתבו דיווח באג באתר https://phabricator.wikimedia.org."
 }
index 190de54..5c4c55e 100644 (file)
@@ -6,7 +6,8 @@
                        "Toadino2",
                        "Gianfranco",
                        "Alexmar983",
-                       "Ricordisamoa"
+                       "Ricordisamoa",
+                       "Valepert"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentazione (in inglese)]]\n* [[mw:API:FAQ|FAQ (in inglese)]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunci sull'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug & richieste]\n</div>\n<strong>Stato:</strong> Tutte le funzioni e caratteristiche mostrate su questa pagina dovrebbero funzionare, ma l'API è ancora in fase d'attivo sviluppo, e potrebbe cambiare in qualsiasi momenento. Iscriviti alla [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] per essere informato sugli aggiornamenti.\n\n<strong>Istruzioni sbagliate:</strong> quando vengono impartite all'API delle istruzioni sbagliate, un'intestazione HTTP verrà inviata col messaggio \"MediaWiki-API-Error\" e sia al valore dell'intestazione sia al codice d'errore verrà impostato lo stesso valore. Per maggiori informazioni leggi [[mw:API:Errors_and_warnings|API:Errori ed avvertimenti (in inglese)]].",
@@ -14,6 +15,7 @@
        "apihelp-main-param-format": "Formato dell'output.",
        "apihelp-main-param-assert": "Verifica che l'utente sia loggato se si è impostato <kbd>utente</kbd>, o che abbia i permessi di bot se si è impostato <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Tutti i valori forniti saranno implementati nella risposta. Potrebbero venir utilizzati per distinguere le richieste.",
+       "apihelp-main-param-servedby": "Includi nei risultati il nome dell'host che ha servito la richiesta.",
        "apihelp-main-param-curtimestamp": "Includere il timestamp corrente nel risultato.",
        "apihelp-block-description": "Blocca  un utente.",
        "apihelp-block-param-user": "Nome utente, indirizzo IP o range di IP da bloccare.",
        "apihelp-expandtemplates-param-prop": "Quale informazione ottenere.\n\nNota che se non è selezionato alcun valore, il risultato conterrà il codice wiki, ma l'output sarà in un formato obsoleto.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Il wikitext espanso.",
        "apihelp-expandtemplates-paramvalue-prop-volatile": "Se l'output sia volatile e non debba essere riutilizzato altrove all'interno della pagina.",
+       "apihelp-feedcontributions-param-year": "Dall'anno (e precedenti).",
+       "apihelp-feedcontributions-param-month": "Dal mese (e precedenti).",
+       "apihelp-feedcontributions-param-deletedonly": "Mostra solo i contribuiti cancellati.",
+       "apihelp-feedcontributions-param-toponly": "Mostra solo i contributi che sono le ultime versioni per la pagina.",
+       "apihelp-feedcontributions-param-newonly": "Visualizza solo le modifiche che sono creazioni di pagina.",
+       "apihelp-feedrecentchanges-param-hideminor": "Nascondi le modifiche minori.",
+       "apihelp-feedrecentchanges-param-hidebots": "Nascondi le modifiche apportate da bot.",
+       "apihelp-feedrecentchanges-param-hideanons": "Nascondi le modifiche fatte da utenti anonimi.",
+       "apihelp-feedrecentchanges-param-hideliu": "Nascondi le modifiche apportate dagli utenti registrati.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Mostra solo le modifiche alle pagine collegate a quella specificata.",
+       "apihelp-login-param-name": "Nome utente.",
+       "apihelp-login-param-password": "Password.",
        "apihelp-move-description": "Sposta una pagina.",
+       "apihelp-move-param-ignorewarnings": "Ignora i messaggi di avvertimento del sistema.",
        "apihelp-options-example-reset": "Reimposta tutte le preferenze.",
        "apihelp-query+blocks-example-simple": "Elenca i blocchi.",
        "apihelp-query+recentchanges-example-simple": "Elenco modifiche recenti.",
index 267f1d6..bb403c6 100644 (file)
@@ -85,6 +85,7 @@
        "apihelp-edit-param-appendtext": "このテキストをページの末尾に追加する。$1textを上書きします。\n\n新しい節を追加するにはこのパラメータではなく $1section=newを使用してください。",
        "apihelp-edit-param-undo": "この版を取り消します。$1text, $1prependtext および $1appendtext をオーバーライドします。",
        "apihelp-edit-param-undoafter": "$1undo からこの版までのすべての版を取り消します。設定しない場合、ひとつの版のみ取り消されます。",
+       "apihelp-edit-param-redirect": "自動的にリダイレクトを解決します。",
        "apihelp-edit-param-token": "このトークンは常に最後のパラメーターとして、または少なくとも $1text パラメーターより後に送信されるべきです。",
        "apihelp-edit-example-edit": "ページを編集",
        "apihelp-edit-example-prepend": "<kbd>_&#95;NOTOC_&#95;</kbd> をページの先頭に挿入する。",
        "apihelp-paraminfo-description": "API モジュールに関する情報を取得します。",
        "apihelp-paraminfo-param-modules": "モジュールの名前のリスト (<var>action</var> および <var>format</var> パラメーターの値, または <kbd>main</kbd>). <kbd>+</kbd> を使用して下位モジュールを指定できます。",
        "apihelp-paraminfo-example-1": "<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, and <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> に関する情報を表示する。",
+       "apihelp-parse-param-disablepp": "<var>$1disablelimitreport</var> を代わりに使用してください。",
        "apihelp-parse-param-preview": "プレビューモードでのパース",
        "apihelp-parse-example-page": "ページをパース",
        "apihelp-parse-example-text": "ウィキテキストをパース",
        "apihelp-query+alldeletedrevisions-param-user": "この利用者による版のみを一覧表示する。",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "この利用者による版を一覧表示しない。",
        "apihelp-query+alldeletedrevisions-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
-       "apihelp-query+alldeletedrevisions-param-generatetitles": "ã\82¸ã\82§ã\83\8dã\83¬ã\83¼ã\82¿ã\83¼ã\81¨ã\81\97ã\81¦ä½¿ç\94¨ã\81\99ã\82\8bå ´å\90\88ã\80\81ç\89\88IDã\81§ã\81¯ã\81ªã\81\8fã\82¿ã\82¤ã\83\88ã\83«を生成します。",
+       "apihelp-query+alldeletedrevisions-param-generatetitles": "ã\82¸ã\82§ã\83\8dã\83¬ã\83¼ã\82¿ã\83¼ã\81¨ã\81\97ã\81¦ä½¿ç\94¨ã\81\99ã\82\8bå ´å\90\88ã\80\81ç\89\88IDã\81§ã\81¯ã\81ªã\81\8fã\83\9aã\83¼ã\82¸å\90\8dを生成します。",
        "apihelp-query+alldeletedrevisions-example-user": "利用者 <kbd>Example</kbd> による削除された直近の50版を一覧表示する。",
        "apihelp-query+alldeletedrevisions-example-ns-main": "標準名前空間にある削除された最初の50版を一覧表示する。",
        "apihelp-query+allfileusages-param-from": "列挙を開始するファイルのタイトル。",
        "apihelp-query+allimages-example-generator": "<kbd>T</kbd> で始まる4つのファイルに関する情報を表示する。",
        "apihelp-query+alllinks-description": "与えられた名前空間へのすべてのリンクを一覧表示します。",
        "apihelp-query+alllinks-param-from": "列挙を開始するリンクのタイトル。",
-       "apihelp-query+alllinks-param-to": "å\88\97æ\8c\99ã\82\92çµ\82äº\86ã\81\99ã\82\8bã\83ªã\83³ã\82¯ã\81®ã\82¿ã\82¤ã\83\88ã\83«。",
+       "apihelp-query+alllinks-param-to": "å\88\97æ\8c\99ã\82\92çµ\82äº\86ã\81\99ã\82\8bã\83ªã\83³ã\82¯ã\81®ã\83\9aã\83¼ã\82¸å\90\8d。",
        "apihelp-query+alllinks-param-prefix": "この値で始まるすべてのリンクされたページを検索する。",
        "apihelp-query+alllinks-example-B": "<kbd>B</kbd> で始まるリンクされたページ (存在しないページも含む)を、リンク元のページIDとともに表示する。",
        "apihelp-query+allmessages-param-args": "メッセージ中に展開される引数。",
        "apihelp-query+allpages-example-B": "<kbd>B</kbd> で始まるページの一覧を表示する。",
        "apihelp-query+allpages-example-generator": "<kbd>T</kbd> で始まる4つのページに関する情報を表示する。",
        "apihelp-query+allpages-example-generator-revisions": "<kbd>Re</kbd> で始まる最初の非リダイレクトの2ページの内容を表示する。",
-       "apihelp-query+allredirects-param-from": "å\88\97æ\8c\99ã\82\92é\96\8bå§\8bã\81\99ã\82\8bã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\82¿ã\82¤ã\83\88ã\83«。",
-       "apihelp-query+allredirects-param-to": "å\88\97æ\8c\99ã\82\92çµ\82äº\86ã\81\99ã\82\8bã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\82¿ã\82¤ã\83\88ã\83«。",
+       "apihelp-query+allredirects-param-from": "å\88\97æ\8c\99ã\82\92é\96\8bå§\8bã\81\99ã\82\8bã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\83\9aã\83¼ã\82¸å\90\8d。",
+       "apihelp-query+allredirects-param-to": "å\88\97æ\8c\99ã\82\92çµ\82äº\86ã\81\99ã\82\8bã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\83\9aã\83¼ã\82¸å\90\8d。",
        "apihelp-query+alltransclusions-param-prefix": "この値で始まるすべてのトランスクルードされているページを検索する。",
        "apihelp-query+allusers-description": "すべての登録利用者を一覧表示します。",
        "apihelp-query+allusers-param-from": "列挙を開始する利用者名。",
        "api-help-parameters": "{{PLURAL:$1|パラメーター}}:",
        "api-help-param-deprecated": "廃止予定です。",
        "api-help-param-required": "このパラメーターは必須です。",
-       "api-help-param-list": "{{PLURAL:$1|1=値 (いずれか1つ)|2=値 (<kbd>{{!}}</kbd>で区切る)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=値 (次の値のいずれか1つ)|2=値 (<kbd>{{!}}</kbd>で区切る)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=空欄にしてください|空欄にするか、または $2}}",
        "api-help-param-integer-min": "{{PLURAL:$1|値}}は $2 以上にしてください。",
        "api-help-param-integer-max": "{{PLURAL:$1|値}}は $3 以下にしてください。",
index cf54d29..46ef968 100644 (file)
        "apihelp-query+allredirects-param-to": "De Övverschreff vun dä Sigg, woh et Zälle ophühre sull.",
        "apihelp-query+allredirects-param-prefix": "Söhk not Sigge, di esu aanfange.",
        "apihelp-query+allredirects-param-unique": "Zeijsch blohß de ongerscheidlijje Zihl_Sigg. Kam_mer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids|fragment|interwiki</code>“ bruche. Wam_mer et als ene  Jenerahtor bruche deiht, kritt mer Zihlsiggge anschtatt vun Quällesigge.",
+       "apihelp-query+allredirects-paramvalue-prop-title": "Deiht dä Ömleijdong ehr Övverschreff derbei.",
        "apihelp-query+allredirects-param-namespace": "Dat Appachtemang zom opzälle.",
        "apihelp-query+allredirects-param-limit": "Wi vill sulle överhoup aanjezeisch wääde?",
        "apihelp-query+allredirects-param-dir": "En wälsche Reijefollsch?",
        "apihelp-query+allusers-param-dir": "De Reijefollsch zum Zotehre.",
        "apihelp-query+allusers-param-group": "Donn blohß Metmaacher uß dä aanjejovve Jroppe enschlehße.",
        "apihelp-query+allusers-param-excludegroup": "Donn keine Metmaacher uß dä aanjejovve Jroppe enschlehße.",
+       "apihelp-query+allusers-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+       "apihelp-query+allusers-paramvalue-prop-rights": "De Rääschde vn däm Memaacher.",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "Donn de Aanzahl Änderonge derbei, di dä Metmaacher em Wikki jemaat hät.",
        "apihelp-query+allusers-param-limit": "Wi vill Nahme Metmaacher sulle mer krijje?",
        "apihelp-query+allusers-param-witheditsonly": "Blohß Metmahcher, di och ens jät verändert han.",
        "apihelp-query+allusers-param-activeusers": "Donn blohß Metmaacher opleßte, di  {{PLURAL:$1|der läzde Daach|en de läzde $1 Dääsch|keine läzde Daach}} aktihf wohre.",
        "apihelp-query+backlinks-param-namespace": "Dat Appachtemang zom opzälle.",
        "apihelp-query+backlinks-param-dir": "En wälsche Reijefollsch?",
        "apihelp-query+backlinks-param-limit": "Wi vill Sigge ensjesamp ußjävve. Wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1redirect</var>“ ennjeschalld es, weed di Beschrängkong op jehden Nivoh äxtra aanjwandt, wat bedügg, dat bes op 2 * „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</var> ußjejovve wähde künne.",
+       "apihelp-query+backlinks-param-redirect": "Wann de Sigg met dämm Lengk dren en Ömleijdong änthält, fengk derzoh och alle Sigge, di doh drop lengke. De Bovverjränz för de Aanzahl Sigge för opzeleßte weed hallbehrt.",
        "apihelp-query+backlinks-example-simple": "Zeijsch Lengks op de Sigg <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main page<kbd>.",
        "apihelp-query+backlinks-example-generator": "Holl Ennfommazjuhne övver Sigge, di op de Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</code>“ lengke donn.",
        "apihelp-query+blocks-description": "Donn alle jeschpächte Metmaacher un <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße opleßte.",
        "apihelp-query+categorymembers-description": "Donn alle Sigge en ener aanjejove saachjrobb opleste.",
        "apihelp-query+categorymembers-param-title": "Wat för en Sachjropp opzälle. Moß aanjejovve sin. Moß der Vörsaz „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">{{ns:category}}:</kbd>“ änthallde. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
        "apihelp-query+categorymembers-param-pageid": "De Kännong vun dä Sigg zom opzälle. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+       "apihelp-query+categorymembers-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "Deiht de Kännong vun de Sigge derbei.",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "Donn de Övverschrevv un de Kännong för et Appachtemang derbei.",
+       "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Deihd et Dattum un de Uhrzigg derbei, wann di Sigg opjenumme wohd.",
        "apihelp-query+categorymembers-param-limit": "De jrüüßte Zahl Sigge för ußzejävve.",
        "apihelp-query+categorymembers-param-sort": "De Eijeschavv öm dernoh ze zottehre.",
        "apihelp-query+categorymembers-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+categorymembers-param-starthexsortkey": "Der Zoteerschlößel för de Leß opzehühre, wi mer en met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=sortkey</kbd>“ kritt. Kann blohß met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=sortkey</kbd>“ jebruch wähde.",
        "apihelp-query+categorymembers-param-endhexsortkey": "Der Zoteerschlößel för de Leß opzehühre, wi mer en met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=sortkey</kbd>“ kritt. Kann blohß met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=sortkey</kbd>“ jebruch wähde.",
        "apihelp-query+categorymembers-param-endsortkeyprefix": "Der Aanfang vun däm Zoteerschlößel för de Leß opzehühre. Opühre deiht se <strong>för</strong>, un nit <strong>met</strong> däm. Wann dä Wäät opdouch, weed hä nit med ußjejovve. Kann blohß met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=sortkey</code>“ jebruch wähde un överjeihd „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1endhexsortkey</code>“.",
        "apihelp-query+categorymembers-param-startsortkey": "Söhk „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1starthexsortkey</code>“ schtatt dämm.",
        "apihelp-query+contributors-description": "Holl de Leß met de ennjelogg Schrihver un de Aanzahl nahmelohse Metschrihver aan ene Sigg.",
        "apihelp-query+contributors-param-limit": "Wi vill Metschrihver ze livvere?",
        "apihelp-query+contributors-example-simple": "Donn de Metschrihver aan dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">KMain PageBD</kbd>“ aanzeije.",
+       "apihelp-query+deletedrevisions-param-start": "Et Dattom un de Uhrzigg, von woh aan opzälle. Weed nit jebruch, wam_mer en Leß met Kännonge vun Väsjohne aam beärbeijde sin.",
+       "apihelp-query+deletedrevisions-param-end": "Et Dattom un de Uhrzigg, bes woh hen opzälle. Weed nit jebruch, wam_mer en Leß met Kännonge vun Väsjohne aam beärbeijde sin.",
        "apihelp-query+deletedrevisions-param-tag": "Donn blohß Väsjohne met heh dä Makkehrong opleßte.",
        "apihelp-query+deletedrevisions-param-user": "Donn blohß Väsjohne vun heh däm Metmaacher opleßte.",
        "apihelp-query+deletedrevisions-param-excludeuser": "Donn kein Väsjohne vun heh däm Metmaacher opleßte.",
        "apihelp-query+extlinks-example-simple": "Holl en Leß met Lengks noh ußerhallef vum Wikki uß dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“.",
        "apihelp-query+exturlusage-description": "Donn alle Sigge upzälle med däm aanjejovve<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> dren.",
        "apihelp-query+exturlusage-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+       "apihelp-query+exturlusage-paramvalue-prop-ids": "Donn dä Sigg ier Kännong derbei.",
+       "apihelp-query+exturlusage-paramvalue-prop-title": "Donn de Övverschrevv un de Kännong för et Appachtemang derbei.",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "Donn dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> derbei, dä en dä Sigg jebruch weed.",
        "apihelp-query+exturlusage-param-protocol": "Dat Schehma uß däm <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>. Wann et läddesch jelohße es un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1query</var>“ aanjejogge es, es dat Schehma „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">http</kbd>“. Lohß beeds dat un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">1query</var>“ läddesch, öm alle Lengks noh ußerhallef opzeleßte.",
        "apihelp-query+exturlusage-param-namespace": "Dat appachtemang met dä Sigge zom opzälle.",
        "apihelp-query+exturlusage-param-limit": "Wi vill Sigge zem ußjävve?",
        "apihelp-query+filearchive-example-simple": "Zeijsch en leß met alle fottjeschmeße Datteije.",
        "apihelp-query+filerepoinfo-example-simple": "Holl ennfommazjuhne övver de Reppossetohreje met Datteije.",
        "apihelp-query+fileusage-description": "Fengk alle Sigge, di de aanjejovve Datteije bruche.",
+       "apihelp-query+fileusage-param-prop": "Wat för en Eijeschaffte holle:",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "De Kännong för jehde Sigg.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "De Övverschreff för jehde Sigg.",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "Zeijsch aan, wann di Sigge en Ömleijdong es.",
        "apihelp-query+fileusage-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs metnämme.",
        "apihelp-query+fileusage-param-limit": "Wi vill holle?",
        "apihelp-query+fileusage-example-simple": "Holl Aanjahbe övver Sigge, di de Dattei „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[:File:Example.jpg]].</code>“ bruche.",
        "apihelp-query+imageinfo-param-prop": "Wat för en Schtöker aan Ennfommazjuhne holle:",
        "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Deihd en dattom un en Zigg aan de huhjelahde Väsjohn.",
        "apihelp-query+imageinfo-paramvalue-prop-user": "Deiht dä Metmaacher derbei, dä jehde Väsjohn vun dä Dattei huhjelahde hät.",
-       "apihelp-query+imageinfo-paramvalue-prop-userid": "Deiht de Kännong vun däm Metmaacher derbei, dä jehde Väsohn vun dä Dattei.",
+       "apihelp-query+imageinfo-paramvalue-prop-userid": "Deiht de Kännong vun jehdem Metmaacher derbei, dä en Väsohn vun dä Dattei huh jelaahde hät.",
        "apihelp-query+imageinfo-paramvalue-prop-comment": "Aanmärkonge bei dä Väsjohn.",
        "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Donn di Aanmärkonge bei dä Väsjohn paase.",
-       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Deiht de kannohnesche Överschreff vun dä Dattei derbei.",
+       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Deiht de kannohnesche, schtandattmähßejje, Överschreff vun dä Dattei derbei.",
        "apihelp-query+imageinfo-paramvalue-prop-url": "Jitt dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> för di Dattei un de Sigg met däh iere Äkliehrong uß.",
        "apihelp-query+imageinfo-paramvalue-prop-size": "Deiht de Jrühße vun dä Dattei en \n<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i>, de Hühde, de Breide, un, woh et se jitt, de Aanzahl Sigge derbei.",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Et sällve, wi de Jrühße.",
        "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Deiht de Mehdijje_Zoot vun dä Dattei derbei.",
        "apihelp-query+imageinfo-paramvalue-prop-metadata": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Exchangeable image file format\">EXIF</i>-Mettadahte för di Väsjohn vun dä Dattei oplesßte.",
        "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Deiht de Mettadahte för heh di Väsjohn vun dä Dattei oplesßte, di alld schtandattmähßesch en däm Datteifommaht änthallde sin.",
+       "apihelp-query+imageinfo-paramvalue-prop-archivename": "Deiht dä Nahme vun dä Dattei vun dä Aschihf_Väsjohn för alle Väsjohne, bes op de läzde, derbei.",
+       "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "deiht de bit depth för di Väsjohn derbei.",
        "apihelp-query+imageinfo-param-limit": "Wi vill Väsjohne för jehde Dattei ußjävve.",
        "apihelp-query+imageinfo-param-start": "Et Dattom un de Zigg, vun woh aan opleßte.",
        "apihelp-query+imageinfo-param-end": "Et Dattom un de Zigg, vun woh aan opleßte.",
        "apihelp-query+imageusage-param-pageid": "De Känong vun dä Sigg zom noh Söhke. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
        "apihelp-query+imageusage-param-namespace": "Dat Appachtemang zom opzälle.",
        "apihelp-query+imageusage-param-dir": "En wälsche Reijefollsch opleßte.",
+       "apihelp-query+imageusage-param-limit": "Wi vill Sigge ensjesamp ußjävve. Wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1redirect</var>“ ennjeschalld es, weed di Beschrängkong op jehden Nivoh äxtra aanjwandt, wat bedügg, dat bes op 2 * „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</var> ußjejovve wähde künne.",
+       "apihelp-query+imageusage-param-redirect": "Wann de Sigg met dämm Lengk dren en Ömleijdong änthält, fengk derzoh och alle Sigge, di doh drop lengke. De Bovverjränz för de Aanzahl Sigge för opzeleßte weed hallbehrt.",
        "apihelp-query+imageusage-example-simple": "Zeijsch Sigge, di di Dattei „<code lang=\"mul\" xml:lang=\"mul\" dir=\"ltr\">[[:File:Albert Einstein Head.jpg]]</code>“ bruche.",
        "apihelp-query+imageusage-example-generator": "Holl Enformazjuhne övver de Sigge, di di Dattei „<code lang=\"mul\" xml:lang=\"mul\" dir=\"ltr\">[[:File:Albert Einstein Head.jpg]]</code>“ bruche.",
        "apihelp-query+info-description": "Holl jrondlähje Ennfommazjuhne övver di Sigg.",
        "apihelp-query+querypage-example-ancientpages": "Donn de Äjehbneße vun „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:Ancientpages]]</code>“ ußjävve.",
        "apihelp-query+random-param-namespace": "Jiff blohß sigge en heh dä Appachtemangs uß.",
        "apihelp-query+random-param-limit": "Wi vill zohfälleje Sigge sulle ußjejovve wähde?",
-       "apihelp-query+random-param-redirect": "Donn en zohfälleje Ömleijdong anschtatt vun ene zohfälleje Sigg lahde.",
+       "apihelp-query+random-param-redirect": "Nemm <kbd>$1filterredir=redirects</kbd> schtatt dämm.",
        "apihelp-query+random-example-simple": "Donn zwai zohfälleje Sigge vum Houb_Appachtemang ußjävve.",
        "apihelp-query+random-example-generator": "Donn Ennfommazjuhne övver zwai zohfälleje Sigge vum Houb_Appachtemang ußjävve.",
        "apihelp-query+recentchanges-description": "Donn de  neußte Änderonge opleßte.",
        "apihelp-query+watchlist-paramvalue-prop-user": "Deiht dä Metmaacher derbei, dä di Änderong jemaat hät.",
        "apihelp-query+watchlist-paramvalue-prop-userid": "Deiht de kännong vn äm Metmaacher derbei, dä di Änderong jemaat hät.",
        "apihelp-query+watchlist-paramvalue-prop-timestamp": "Deihd et Dattom un de Uhrzigg vun dä Änderong derbei.",
+       "apihelp-query+watchlist-param-type": "Wat för en Änderonge aanzeije:\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">edit</code>:Jewöhnlejje Änderonge aan Sigge.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">external</code>:Änderonge vun Ußerhallef.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</code>:Neu aanjelahte Sigge.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">log</code>:Enndrähsch em Logbohch.",
        "apihelp-query+watchlistraw-description": "Donn alle Sigge uß dem aktälle Metmaacher sing Oppaßleß holle.",
        "apihelp-query+watchlistraw-param-namespace": "Donn blohß Sigge en heh däm Appachtemang opleßte.",
        "apihelp-query+watchlistraw-example-simple": "Donn alle Sigge uß dem aktälle Metmaacher sing Oppaßleß opleßte.",
        "api-help-param-type-boolean": "Zoot: Boolsch ([[Special:ApiHelp/main#main/datatypes|Einjzelheijte]])",
        "api-help-param-type-timestamp": "Zoot: {{PLURAL:$1|1=en Dattomm un en Zigg|2=en Leß met Aanjahbe us Dattom un Zigg}} (de [[Special:ApiHelp/main#main/datatypes|zohjelohße Fommahte]])",
        "api-help-param-type-user": "Zoot: {{PLURAL:$1|1=ene Metmaacher_Nahme|2=en Leß met Metmaacher_Nahme}}",
-       "api-help-param-list": "{{PLURAL:$1|1=Eijne Wäät|2=Wääte met <kbd>{{!}}</kbd> derzwesche}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Eijne Wäät|2=Wääte met <kbd>{{!}}</kbd> derzwesche}} vun dänne heh: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Moß läddesch sin|Kann läddesch sin, udder $2}}",
        "api-help-param-limit": "Nit mih wi $1 sin zohjelohße.",
        "api-help-param-limit2": "Nit mih wi $1 sin zohjelohße, ävver $2 för de Bots.",
index 5b7b2a1..c0fe740 100644 (file)
@@ -95,7 +95,7 @@
        "apihelp-query+linkshere-paramvalue-prop-redirect": "Markéiere wann d'Säit eng Viruleedung ass.",
        "apihelp-query+pageswithprop-example-generator": "Zousätzlech Informatiounen iwwer déi 10 éischt Säite kréie mat <code>_&#95;NOTOC_&#95;</code>.",
        "apihelp-query+protectedtitles-param-namespace": "Nëmmen Titelen aus dësen Nummraim opzielen.",
-       "apihelp-query+random-param-redirect": "Eng zoufälleg Viruleedung lueden aplaz vun enger zoufälleger Säit.",
+       "apihelp-query+random-param-redirect": "Benotzt dofir <kbd>$1filterredir=Viruleedungen</kbd>.",
        "apihelp-query+recentchanges-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
        "apihelp-query+recentchanges-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung derbäi.",
        "apihelp-query+recentchanges-example-simple": "Rezent Ännerunge weisen",
        "apihelp-query+usercontribs-description": "All Ännerunge vun engem Benotzer kréien.",
        "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun derÄnnerung derbäi.",
        "apihelp-query+usercontribs-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung derbäi.",
+       "apihelp-query+userinfo-param-prop": "Informatioune fir dranzesetzen:",
        "apihelp-query+userinfo-paramvalue-prop-options": "Lëscht vun allen Astellungen déi den aktuelle Benotzer gemaach huet.",
        "apihelp-query+userinfo-paramvalue-prop-editcount": "Setzt d'Gesamtzuel vun den Ännerunge vum aktuelle Benotzer derbäi.",
        "apihelp-query+userinfo-paramvalue-prop-realname": "Setzt dem Benotzer säi richtegen Numm derbäi.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Setzt de Registréierungsdatum vum Benotzer derbäi.",
        "apihelp-query+users-paramvalue-prop-rights": "Weist all Rechter déi all Benotzer huet.",
        "apihelp-query+watchlist-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
        "apihelp-query+watchlist-param-excludeuser": "Ännerunge vun dësem Benotzer net opzielen.",
diff --git a/includes/api/i18n/mr.json b/includes/api/i18n/mr.json
new file mode 100644 (file)
index 0000000..74db742
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Rahuldeshmukh101",
+                       "V.narsikar"
+               ]
+       },
+       "apihelp-main-param-action": "कोणती कार्यवाही करावयाची.",
+       "apihelp-main-param-curtimestamp": "निकालात सद्य वेळठश्याचा अंतर्भाव करा.",
+       "apihelp-block-description": "सदस्यास प्रतिबंधित करा.",
+       "apihelp-block-param-user": "सदस्याचे नाव, अंक-पत्त्ता, किंवा प्रतिबंध करण्यासाठीचा आयपीचा आवाका."
+}
index a285b04..0d30440 100644 (file)
@@ -1,10 +1,18 @@
 {
        "@metadata": {
                "authors": [
-                       "Chelin"
+                       "Chelin",
+                       "C.R."
                ]
        },
        "apihelp-block-description": "Blocca n'utente.",
        "apihelp-createaccount-param-name": "Nomme utente.",
-       "apihelp-delete-description": "Scancella 'na paggena."
+       "apihelp-delete-description": "Scancella 'na paggena.",
+       "apihelp-edit-example-edit": "Cagna paggena.",
+       "apihelp-emailuser-description": "E-mail a n'utente.",
+       "apihelp-feedwatchlist-param-feedformat": "'O furmato d' 'o feed.",
+       "apihelp-login-example-login": "Tràse.",
+       "apihelp-move-description": "Mòve paggena.",
+       "apihelp-opensearch-param-search": "Ascìa stringa.",
+       "apihelp-opensearch-param-format": "'O furmato 'e ll'output."
 }
index 41443c6..c961872 100644 (file)
@@ -38,8 +38,8 @@
        "apihelp-edit-param-bot": "Markeer deze bewerking als bot.",
        "apihelp-edit-param-createonly": "Bewerk de pagina niet als die al bestaat.",
        "apihelp-edit-param-nocreate": "Geef een foutmelding als de pagina niet bestaat.",
-       "apihelp-edit-param-watch": "Voeg de pagina toe aan je huidige volglijst.",
-       "apihelp-edit-param-unwatch": "Verwijder de pagina van je huidige volglijst.",
+       "apihelp-edit-param-watch": "Voeg de pagina toe aan de volglijst van de huidige gebruiker.",
+       "apihelp-edit-param-unwatch": "Verwijder de pagina van de volglijst van de huidige gebruiker.",
        "apihelp-edit-example-edit": "Pagina bewerken",
        "apihelp-emailuser-description": "Gebruiker e-mailen.",
        "apihelp-emailuser-param-target": "Gebruiker naar wie de e-mail moet worden gestuurd.",
diff --git a/includes/api/i18n/olo.json b/includes/api/i18n/olo.json
new file mode 100644 (file)
index 0000000..99aef3f
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mashoi7"
+               ]
+       },
+       "apihelp-createaccount-param-name": "Käyttäitunnus.",
+       "apihelp-delete-description": "Ota sivu iäre.",
+       "apihelp-login-param-name": "Käyttäitunnus.",
+       "apihelp-login-param-password": "Peittosana.",
+       "apihelp-login-example-login": "Kirjuttai."
+}
index e6aab1e..791074e 100644 (file)
@@ -10,7 +10,8 @@
                        "Pio387",
                        "Peter Bowman",
                        "Darellur",
-                       "The Polish"
+                       "The Polish",
+                       "Matma Rex"
                ]
        },
        "apihelp-main-param-action": "Wybierz akcję do wykonania.",
        "apihelp-query+allcategories-param-dir": "Kierunek sortowania.",
        "apihelp-query+allcategories-param-limit": "Liczba kategorii do zwórcenia.",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Może być użyte tylko z <var>$3user</var>.",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Nie może być używane z <var>$3user</var>.",
        "apihelp-query+alldeletedrevisions-param-from": "Zacznij nasłuchiwanie na tym tytule.",
        "apihelp-query+alldeletedrevisions-param-to": "Skończ nasłuchiwanie na tym tytule.",
        "apihelp-query+alldeletedrevisions-param-tag": "Pokazuj tylko zmiany oznaczone tym znacznikiem.",
        "api-help-param-type-boolean": "Typ: wartość logiczna ([[Special:ApiHelp/main#main/datatypes|szczegóły]])",
        "api-help-param-type-timestamp": "Typ: {{PLURAL:$1|1=znacznik czasu|2=lista znaczników czasu}} ([[Special:ApiHelp/main#main/datatypes|dozwolone formaty]])",
        "api-help-param-type-user": "Typ: {{PLURAL:$1|1=nazwa użytkownika|2=lista nazw uzytkowników}}",
-       "api-help-param-list": "{{PLURAL:$1|1=Jedna wartość|2=Wartości (oddziel za pomocą <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Jedna z następujących wartość|2=Wartości (oddziel za pomocą <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-limit": "Nie więcej niż $1 dozwolone.",
        "api-help-param-limit2": "Nie więcej niż $1 ($2 dla botów) dozwolone.",
-       "api-help-param-integer-min": "{{PLURAL:$1|1=Wartość|2=Wartości}} musza być mniejsze niż $2.",
-       "api-help-param-integer-max": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być nie większa niż $3.",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Wartość musi być nie mniejsza|2=Wartości muszą być nie mniejsze}} niż $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Wartość musi być nie większa|2=Wartości muszą być nie większe}} niż $3.",
        "api-help-param-integer-minmax": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być pomiędzy $2 a $3.",
        "api-help-param-multi-separate": "Oddziel wartości za pomocą <kbd>|</kbd>.",
        "api-help-param-multi-max": "Maksymalna liczba wartości to {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} dla botów).",
index 49df26b..9d24281 100644 (file)
@@ -9,10 +9,19 @@
        "apihelp-block-param-reason": "د بنديز سبب.",
        "apihelp-createaccount-param-name": "کارن-نوم.",
        "apihelp-delete-description": "يو مخ ړنگول.",
+       "apihelp-edit-description": "مخونه جوړول او سمول.",
        "apihelp-edit-param-text": "مخ مېنځپانگه.",
+       "apihelp-edit-param-minor": "وړوکی سمون.",
        "apihelp-edit-example-edit": "يو مخ سمول.",
        "apihelp-emailuser-description": "کارن ته برېښليک لېږل.",
        "apihelp-expandtemplates-param-title": "د مخ سرليک.",
+       "apihelp-feedrecentchanges-param-hideminor": "وړوکي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-hidebots": "د روباټونو لخوا ترسره شوي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-hideanons": "د ورکنومو کارنانو لخوا ترسره شوي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-hideliu": "د ثبت شويو کارنانو لخوا ترسره شوي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "څارل شوي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-hidemyself": "د اوسني کارن لخوا ترسره شوي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-tagfilter": "د نښلن له مخې چاڼول.",
        "apihelp-login-param-name": "کارن نوم.",
        "apihelp-login-param-password": "پټنوم.",
        "apihelp-login-param-domain": "شپول (اختياري).",
        "apihelp-move-description": "يو مخ لېږدول.",
        "apihelp-query+search-example-simple": "د <kbd>مانا</kbd> پلټل.",
        "apihelp-query+search-example-text": "د <kbd>مانا</kbd> لپاره متنونه پلټل.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "د يو مخ سرليک ورگډوي.",
        "apihelp-tag-param-reason": "د بدلون سبب.",
+       "apihelp-unblock-param-reason": "د بنديز ليرې کولو سبب.",
        "apihelp-upload-param-watch": "مخ کتل.",
        "apihelp-upload-param-file": "د دوتنې مېنځپانگه.",
        "apihelp-userrights-param-user": "کارن نوم.",
        "apihelp-userrights-param-userid": "کارن پېژند.",
+       "apihelp-userrights-param-reason": "د بدلون سبب.",
        "api-help-source": "سرچينه: $1",
        "api-help-source-unknown": "سرچينه: <span class=\"apihelp-unknown\">ناجوت</span>",
        "api-help-license": "منښتليک: [[$1|$2]]",
index a476b7a..9c1c623 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Fasouzafreitas",
-                       "Dianakc"
+                       "Dianakc",
+                       "Cainamarques"
                ]
        },
        "apihelp-main-param-action": "Qual ação executar.",
        "apihelp-parse-paramvalue-prop-sections": "Fornece as seções no wikitexto analisado.",
        "apihelp-parse-paramvalue-prop-headitems": "Fornece itens para colocar no <code>&lt;head&gt;</code> da página.",
        "apihelp-parse-paramvalue-prop-headhtml": "Fornece <code>&lt;head&gt;</code> analisado da página.",
-       "apihelp-parse-paramvalue-prop-modules": "Fornece os módulos ResourceLoader usados na página.",
+       "apihelp-parse-paramvalue-prop-modules": "Fornece os módulos do ResourceLoader usados na página. Ou <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd> deve ser solicitado conjuntamente com <kbd>modules</kbd>.",
        "apihelp-parse-paramvalue-prop-jsconfigvars": "Fornece as variáveis de configuração JavaScript específicas da página.",
        "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Fornece as variáveis de configuração JavaScript específicas da página como uma string JSON.",
        "apihelp-parse-paramvalue-prop-indicators": "Fornece o HTML de indicadores de ''status'' de página utilizados na página.",
        "apihelp-query+imageusage-param-namespace": "O espaço nominal a se enumerar.",
        "apihelp-query+info-paramvalue-prop-readable": "Se o usuário pode ler esta página.",
        "apihelp-query+info-paramvalue-prop-preload": "Fornece o texto retornado por EditFormPreloadText.",
-       "apihelp-query+info-paramvalue-prop-displaytitle": "Fornece a forma como o título da página é exibido atualmente.",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "Fornece o modo como o título da página é exibido.",
        "apihelp-query+info-param-testactions": "Testa se o usuário atual pode executar determinadas ações na página.",
        "apihelp-query+info-example-simple": "Obtém informações sobre a página <kbd>Página principal</kbd>.",
        "apihelp-query+iwbacklinks-description": "Encontra todas as páginas que apontam para o determinado link interwiki.\n\nPode ser usado para encontrar todos os links com um prefixo, ou todos os links para um título (com um determinado prefixo). Usar nenhum parâmetro é efetivamente \"todos os links interwiki\".",
index 150ad8e..b919c44 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Vitorvicentevalente",
                        "Fúlvio",
-                       "Macofe"
+                       "Macofe",
+                       "Jkb8"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentação]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discussão]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anúncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e solicitações]\n</div>\n<strong>Estado:</strong> Todas as funcionalidades mostradas nesta página deveriam estar a funcionar, mas a API ainda está em activo desenvolvimento, e pode ser alterada a qualquer momento. Inscreva-se na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discussão mediawiki-api-announce] para ser informado acerca das actualizações.\n\n<strong>Solicitações erradas:</strong> Quando solicitações erradas são enviadas à API, um cabeçalho em HTTP será enviado com a chave \"MediaWiki-API-Error\" e, em seguida, tanto o valor do cabeçalho quanto o código de erro retornado serão definidos com o mesmo valor. Para mais informação, consulte [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
@@ -18,8 +19,8 @@
        "apihelp-createaccount-param-email": "Endereço de correio eletrónico do utilizador (opcional).",
        "apihelp-createaccount-param-realname": "Nome verdadeiro do utilizador (opcional).",
        "apihelp-delete-description": "Eliminar uma página.",
-       "apihelp-delete-param-watch": "Adicionar a página à lista de vigiadas do utilizador actual.",
-       "apihelp-delete-param-unwatch": "Remover a página da lista de vigiadas do utilizador actual.",
+       "apihelp-delete-param-watch": "Adicionar a página à lista de vigiadas do utilizador atual.",
+       "apihelp-delete-param-unwatch": "Remover a página da lista de vigiadas do utilizador atual.",
        "apihelp-delete-example-simple": "Eliminar <kbd>Página Principal</kbd>.",
        "apihelp-disabled-description": "O módulo foi desativado.",
        "apihelp-edit-description": "Criar e editar páginas.",
@@ -41,7 +42,7 @@
        "apihelp-feedrecentchanges-param-hideminor": "Ocultar edições menores.",
        "apihelp-feedrecentchanges-param-hidebots": "Ocultar alterações feitas por robôs.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar alterações patrulhadas.",
-       "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas pelo utilizador actual.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas pelo utilizador atual.",
        "apihelp-feedrecentchanges-param-target": "Mostrar apenas mudanças em páginas afluentes a esta.",
        "apihelp-feedrecentchanges-example-simple": "Mostrar mudanças recentes",
        "apihelp-help-example-main": "Ajuda para o módulo principal",
@@ -75,6 +76,7 @@
        "apihelp-query+filearchive-example-simple": "Mostrar lista de todos os ficheiros eliminados",
        "apihelp-query+info-description": "Obter informação básica da página.",
        "apihelp-query+recentchanges-example-simple": "Lista de mudanças recentes",
+       "apihelp-query+search-param-enablerewrites": "Habilitar rescrever a pesquisa interna. Alguns motores de busca podem rescrever a consulta para outra que acha dará melhores resultados, como a corrigir erros de ortografia.",
        "apihelp-unblock-description": "Desbloquear um utilizador.",
        "apihelp-unblock-param-reason": "Motivo para o desbloqueio.",
        "apihelp-undelete-param-title": "Título da página a restaurar.",
@@ -96,6 +98,7 @@
        "api-help-param-deprecated": "Obsoleto.",
        "api-help-param-required": "Este parâmetro é obrigatório.",
        "api-help-datatypes-header": "Tipo de dados",
+       "api-help-param-list": "{{PLURAL:$1|1=Um dos seguintes valores|2=Valores (separar com <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-multi-separate": "Separe os valores com <kbd>|</kbd>.",
        "api-help-param-default": "Padrão: $1",
        "api-help-param-default-empty": "Padrão: <span class=\"apihelp-empty\">(vazio)</span>",
index 921cc58..da0319f 100644 (file)
@@ -10,7 +10,8 @@
                        "Anomie",
                        "Nemo bis",
                        "Amire80",
-                       "Siebrand"
+                       "Siebrand",
+                       "Purodha"
                ]
        },
        "apihelp-main-description": "{{doc-apihelp-description|main}}",
        "apihelp-query+imageinfo-param-prop": "{{doc-apihelp-param|query+imageinfo|prop|paramvalues=1}}",
        "apihelp-query+imageinfo-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+imageinfo|prop|timestamp}}",
        "apihelp-query+imageinfo-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+imageinfo|prop|user}}",
-       "apihelp-query+imageinfo-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+imageinfo|prop|userid}}",
+       "apihelp-query+imageinfo-paramvalue-prop-userid": "Imageinfo returns information about file revisions (normally the last revision since <code>iilimit</code> defaults to 1). <code>userid</code> includes the ID of the user who made the (re)upload which created that revision. So there will be one user ID per imageinfo item; if you set the limit high enough, you will get all revisions of all files as separate imageinfo items.\n\n{{doc-apihelp-paramvalue|query+imageinfo|prop|userid}}",
        "apihelp-query+imageinfo-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+imageinfo|prop|comment}}",
        "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+imageinfo|prop|parsedcomment}}",
-       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "{{doc-apihelp-paramvalue|query+imageinfo|prop|canonicaltitle}}",
+       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "A canonocal title is aa title formatted in the same way you would see it on the top of the page (localized namespace name, first letters capitalized, spaces instead of underscores). \n{{doc-apihelp-paramvalue|query+imageinfo|prop|canonicaltitle}}",
        "apihelp-query+imageinfo-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+imageinfo|prop|url}}",
        "apihelp-query+imageinfo-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+imageinfo|prop|size}}",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "{{doc-apihelp-paramvalue|query+imageinfo|prop|dimensions}}",
        "apihelp-query+random-param-namespace": "{{doc-apihelp-param|query+random|namespace}}",
        "apihelp-query+random-param-limit": "{{doc-apihelp-param|query+random|limit}}",
        "apihelp-query+random-param-redirect": "{{doc-apihelp-param|query+random|redirect}}",
+       "apihelp-query+random-param-filterredir": "{{apihelp-param|query+random|filterredir}}",
        "apihelp-query+random-example-simple": "{{doc-apihelp-example|query+random}}",
        "apihelp-query+random-example-generator": "{{doc-apihelp-example|query+random}}",
        "apihelp-query+recentchanges-description": "{{doc-apihelp-description|query+recentchanges}}",
        "apihelp-query+search-param-limit": "{{doc-apihelp-param|query+search|limit}}",
        "apihelp-query+search-param-interwiki": "{{doc-apihelp-param|query+search|interwiki}}",
        "apihelp-query+search-param-backend": "{{doc-apihelp-param|query+search|backend}}",
+       "apihelp-query+search-param-enablerewrites": "{{doc-apihelp-param|query+search|enablerewrites}}",
        "apihelp-query+search-example-simple": "{{doc-apihelp-example|query+search}}",
        "apihelp-query+search-example-text": "{{doc-apihelp-example|query+search}}",
        "apihelp-query+search-example-generator": "{{doc-apihelp-example|query+search}}",
        "apihelp-setnotificationtimestamp-example-page": "{{doc-apihelp-example|setnotificationtimestamp}}",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "{{doc-apihelp-example|setnotificationtimestamp}}",
        "apihelp-setnotificationtimestamp-example-allpages": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-stashedit-description": "{{apihelp-description|stashedit}}",
+       "apihelp-stashedit-param-title": "{{apihelp-param|stashedit|title}}",
+       "apihelp-stashedit-param-section": "{{apihelp-param|stashedit|section}}",
+       "apihelp-stashedit-param-sectiontitle": "{{apihelp-param|stashedit|sectiontitle}}",
+       "apihelp-stashedit-param-text": "{{apihelp-param|stashedit|text}}",
+       "apihelp-stashedit-param-contentmodel": "{{apihelp-param|stashedit|contentmodel}}",
+       "apihelp-stashedit-param-contentformat": "{{apihelp-param|stashedit|contentformat}}",
+       "apihelp-stashedit-param-baserevid": "{{apihelp-param|stashedit|baserevid}}",
        "apihelp-tag-description": "{{doc-apihelp-description|tag}}",
        "apihelp-tag-param-rcid": "{{doc-apihelp-param|tag|rcid}}",
        "apihelp-tag-param-revid": "{{doc-apihelp-param|tag|revid}}",
index 0b8804b..56b3f5b 100644 (file)
@@ -15,8 +15,8 @@
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки, и может измениться в любой момент. Подпишитесь на  [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом \"MediaWiki-API-Error\", после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].",
        "apihelp-main-param-action": "Действие, которое следует выполнить.",
        "apihelp-main-param-format": "Формат вывода.",
-       "apihelp-main-param-smaxage": "УÑ\81Ñ\82анавливаеÑ\82 Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
-       "apihelp-main-param-maxage": "УÑ\81Ñ\82анавливаеÑ\82 Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº <code>max-age</code> в заданное число секунд. Ошибки никогда не кэшируются.",
+       "apihelp-main-param-smaxage": "УÑ\81Ñ\82анавливаеÑ\82 Ð·Ð½Ð°Ñ\87ение HTTP-заголовка Cache-Control <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
+       "apihelp-main-param-maxage": "УÑ\81Ñ\82анавливаеÑ\82 Ð·Ð½Ð°Ñ\87ение HTTP-заголовка Cache-Control <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
        "apihelp-main-param-assert": "Удостовериться, что пользователь авторизован, если задано <kbd>user</kbd>, или что имеет права бота, если задано <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Любое заданное здесь значение будет включено в ответ. Может быть использовано для различения запросов.",
        "apihelp-main-param-servedby": "Включить в результаты имя хоста, обработавшего запрос.",
diff --git a/includes/api/i18n/sq.json b/includes/api/i18n/sq.json
new file mode 100644 (file)
index 0000000..34d55af
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ammartivari"
+               ]
+       },
+       "apihelp-block-param-reason": "Arsyeja për bllokim.",
+       "apihelp-move-param-reason": "Arsyeja për riemërtim.",
+       "apihelp-tag-param-reason": "Arsyeja për ndërrimin.",
+       "apihelp-unblock-description": "Zhblloko një përdorues.",
+       "apihelp-userrights-description": "Ndërro anëtarësinë e grupit e një përdoruesit."
+}
index 9458fb2..dd3fb8f 100644 (file)
        "apihelp-options-example-reset": "重置所有用户设置。",
        "apihelp-options-example-change": "更改<kbd>skin</kbd>和<kbd>hideminor</kbd>设置。",
        "apihelp-options-example-complex": "重置所有设置,然后设置<kbd>skin</kbd>和<kbd>nickname</kbd>。",
-       "apihelp-paraminfo-description": "è\8e·å\8f\96å\85³äº\8e API 模块的信息。",
+       "apihelp-paraminfo-description": "è\8e·å¾\97å\85³äº\8eAPI模块的信息。",
        "apihelp-paraminfo-param-modules": "模块名称(<var>action</var>和<var>format</var>参数值,或<kbd>main</kbd>)的列表。可通过<kbd>+</kbd>指定子模块。",
        "apihelp-paraminfo-param-helpformat": "帮助字符串的格式。",
        "apihelp-paraminfo-param-querymodules": "查询模块名称(<var>prop</var>、<var>meta</var>或<var>list</var>参数值)的列表。使用<kbd>$1modules=query+foo</kbd>而不是<kbd>$1querymodules=foo</kbd>。",
        "apihelp-parse-paramvalue-prop-indicators": "提供页面上使用的页面状态指示器的HTML。",
        "apihelp-parse-paramvalue-prop-iwlinks": "在被解析的wiki文本中提供跨wiki链接。",
        "apihelp-parse-paramvalue-prop-wikitext": "提供被解析的原始wiki文本。",
+       "apihelp-parse-paramvalue-prop-properties": "提供多种定义在被解析的wiki文本中的属性。",
        "apihelp-parse-paramvalue-prop-limitreportdata": "以结构化的方式提供限制报告。如果<var>$1disablelimitreport</var>被设定则不提供数据。",
        "apihelp-parse-paramvalue-prop-limitreporthtml": "提供限制报告的HTML版本。当<var>$1disablelimitreport</var>被设置时不会提供数据。",
        "apihelp-parse-paramvalue-prop-parsetree": "修订内容的XML解析树(需要内容模型<code>$1</code>)",
        "apihelp-query+alllinks-param-namespace": "要列举的名字空间。",
        "apihelp-query+alllinks-param-limit": "总共要返回多少个项目。",
        "apihelp-query+alllinks-param-dir": "列出方向。",
+       "apihelp-query+alllinks-example-B": "列出链接的标题,包括丢失的,带它们来自的页面ID,以<kbd>B</kbd>开头。",
        "apihelp-query+alllinks-example-unique": "列出唯一的链接标题。",
        "apihelp-query+alllinks-example-unique-generator": "获取所有已链接的标题,标记缺少的。",
        "apihelp-query+alllinks-example-generator": "获取包含这些链接的页面。",
        "apihelp-query+allredirects-param-from": "要列举的起始重定向标题。",
        "apihelp-query+allredirects-param-to": "要列举的最终重定向标题。",
        "apihelp-query+allredirects-param-prefix": "搜索所有以此值开头的目标页面。",
+       "apihelp-query+allredirects-param-unique": "只显示明显的目标页面。不能与$1prop=ids|fragment|interwiki一起使用。\n当作为生成器使用时,产生目标页面而不是来源页面。",
        "apihelp-query+allredirects-param-prop": "要包含的信息束:",
        "apihelp-query+allredirects-paramvalue-prop-ids": "添加重定向页面的页面ID(不能与<var>$1unique</var>一起使用)。",
        "apihelp-query+allredirects-paramvalue-prop-title": "添加重定向的标题。",
        "apihelp-query+alltransclusions-param-from": "要列举的起始嵌入标题。",
        "apihelp-query+alltransclusions-param-to": "要列举的最终嵌入标题。",
        "apihelp-query+alltransclusions-param-prefix": "搜索所有以此值开头的嵌入的标题。",
+       "apihelp-query+alltransclusions-param-unique": "只显示明显的被嵌入标题。不能与$1prop=ids一起使用。\n当作为生成器使用时,产生目标页面而不是来源页面。",
        "apihelp-query+alltransclusions-param-prop": "要包含的信息束:",
        "apihelp-query+alltransclusions-paramvalue-prop-ids": "添加嵌入中的页面的页面ID(不能与$1unique一起使用)。",
        "apihelp-query+alltransclusions-paramvalue-prop-title": "添加嵌入的标题。",
        "apihelp-query+info-paramvalue-prop-watchers": "监视人员数,如果允许。",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "每个页面的监视列表通知时间戳。",
        "apihelp-query+info-paramvalue-prop-subjectid": "每个讨论页的母页面的页面ID。",
+       "apihelp-query+info-paramvalue-prop-url": "为每个页面提供一个完整URL、一个编辑URL和规范URL。",
        "apihelp-query+info-paramvalue-prop-readable": "用户是否可以阅读此页面。",
        "apihelp-query+info-paramvalue-prop-preload": "提供由EditFormPreloadText返回的文本。",
        "apihelp-query+info-paramvalue-prop-displaytitle": "在页面标题实际显示的地方提供方式。",
        "apihelp-query+logevents-paramvalue-prop-details": "列举有关日志事件的额外详细信息。",
        "apihelp-query+logevents-paramvalue-prop-tags": "列举用于日志活动的标签。",
        "apihelp-query+logevents-param-type": "过滤日志记录至仅限此类型。",
-       "apihelp-query+logevents-param-action": "过滤日志操作为仅限此操作。覆盖<var>$1type</var>。类似<kbd>action/*</kbd>的通配符操作允许指定用于星号的任意字符串。",
+       "apihelp-query+logevents-param-action": "过滤日志操作为仅限此操作。覆盖<var>$1type</var>。在可用值列表中,带星号通配符的值例如<kbd>action/*</kbd>可在斜线(/)后拥有不同字符串。",
        "apihelp-query+logevents-param-start": "枚举的起始时间戳。",
        "apihelp-query+logevents-param-end": "枚举的结束时间戳。",
        "apihelp-query+logevents-param-user": "过滤记录为这些由指定用户做出的。",
        "apihelp-query+protectedtitles-example-generator": "找到主命名空间中已保护的标题的链接。",
        "apihelp-query+querypage-param-limit": "返回的结果数。",
        "apihelp-query+querypage-example-ancientpages": "返回[[Special:Ancientpages]]的结果。",
-       "apihelp-query+random-description": "获取一组随机页面。\n\n页面列举在一个固定序列中,只有起始点是随机的。这意味着如果<samp>Main Page</samp>是列表中第一个随机页面的话,<samp>List of fictional monkeys</samp>将<em>总是</em>第二个,<samp>List of people on stamps of Vanuatu</samp>是第三个等。\n\n如果名字空间中的页面数低于<var>$1limit</var>,将只会返回少量的页面。同一页面不会返回两次。",
+       "apihelp-query+random-description": "获取一组随机页面。\n\n页面列举在一个固定序列中,只有起始点是随机的。这意味着如果<samp>Main Page</samp>是列表中第一个随机页面的话,<samp>List of fictional monkeys</samp>将<em>总是</em>第二个,<samp>List of people on stamps of Vanuatu</samp>是第三个等。",
        "apihelp-query+random-param-namespace": "只返回这些名字空间的页面。",
        "apihelp-query+random-param-limit": "限制返回多少随机页面。",
-       "apihelp-query+random-param-redirect": "加载一个随机重定向而不是一个随机页面。",
+       "apihelp-query+random-param-redirect": "请改用<kbd>$1filterredir=redirects</kbd>。",
+       "apihelp-query+random-param-filterredir": "如何过滤重定向。",
        "apihelp-query+random-example-simple": "从主名字空间返回两个随机页面。",
        "apihelp-query+random-example-generator": "返回有关来自主名字空间的两个随机页面的页面信息。",
        "apihelp-query+recentchanges-description": "枚举最近更改。",
        "apihelp-undelete-description": "恢复一个被删除页面的修订。\n\n被删除修订的列表(包括时间戳)可通过[[Special:ApiHelp/query+deletedrevs|list=deletedrevs]]检索到,并且被删除的文件ID列表可通过[[Special:ApiHelp/query+filearchive|list=filearchive]]检索到。",
        "apihelp-undelete-param-title": "要恢复的页面标题。",
        "apihelp-undelete-param-reason": "恢复的原因。",
+       "apihelp-undelete-param-timestamps": "要回复的修订的时间戳。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
        "apihelp-undelete-param-fileids": "要恢复的文件修订ID。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
        "apihelp-undelete-example-page": "恢复页面<kbd>Main Page</kbd>。",
        "apihelp-undelete-example-revisions": "恢复<kbd>Main Page</kbd>的两个修订。",
        "apihelp-userrights-example-userid": "将ID为<kbd>123</kbd>的用户加入至<kbd>机器人</kbd>组,并将其从<kbd>管理员</kbd>和<kbd>行政员</kbd>组移除。",
        "apihelp-watch-description": "从当前用户的监视列表中添加或移除页面。",
        "apihelp-watch-param-title": "要(取消)监视的页面。也可使用<var>$1titles</var>。",
+       "apihelp-watch-param-unwatch": "如果设置页面将被取消监视而不是被监视。",
        "apihelp-watch-example-watch": "监视页面<kbd>Main Page</kbd>。",
        "apihelp-watch-example-unwatch": "取消监视页面<kbd>Main Page</kbd>。",
        "apihelp-watch-example-generator": "监视主名字空间中的最少几个页面。",
        "api-help-param-type-boolean": "类型:布尔值([[Special:ApiHelp/main#main/datatypes|详细信息]])",
        "api-help-param-type-timestamp": "类型:{{PLURAL:$1|1=时间戳|2=时间戳列表}}([[Special:ApiHelp/main#main/datatypes|允许格式]])",
        "api-help-param-type-user": "类型:{{PLURAL:$1|1=用户名|2=用户名列表}}",
-       "api-help-param-list": "{{PLURAL:$1|1=ä¸\80个å\80¼|2=值(以<kbd>{{!}}</kbd>分隔)}}:$2",
+       "api-help-param-list": "{{PLURAL:$1|1=以ä¸\8bå\80¼ä¸­ç\9a\84ä¸\80个|2=值(以<kbd>{{!}}</kbd>分隔)}}:$2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=必须为空|可以为空,或$2}}",
        "api-help-param-limit": "不允许超过$1。",
        "api-help-param-limit2": "不允许超过$1个(对于机器人则是$2个)。",
index e693922..f22c860 100644 (file)
  */
 define( 'MSG_CACHE_VERSION', 2 );
 
-/**
- * Memcached timeout when loading a key.
- * See MessageCache::load()
- */
-define( 'MSG_LOAD_TIMEOUT', 60 );
-
 /**
  * Message cache
  * Performs various MediaWiki namespace-related functions
@@ -41,9 +35,9 @@ define( 'MSG_LOAD_TIMEOUT', 60 );
 class MessageCache {
        const FOR_UPDATE = 1; // force message reload
 
-       /** How long memcached locks last */
-       const WAIT_SEC = 30;
        /** How long to wait for memcached locks */
+       const WAIT_SEC = 15;
+       /** How long memcached locks last */
        const LOCK_TTL = 30;
 
        /**
@@ -283,7 +277,7 @@ class MessageCache {
                        # Try the global cache. If it is empty, try to acquire a lock. If
                        # the lock can't be acquired, wait for the other thread to finish
                        # and then try the global cache a second time.
-                       for ( $failedAttempts = 0; $failedAttempts < 2; $failedAttempts++ ) {
+                       for ( $failedAttempts = 0; $failedAttempts <= 1; $failedAttempts++ ) {
                                if ( $hashVolatile && $staleCache ) {
                                        # Do not bother fetching the whole cache blob to avoid I/O.
                                        # Instead, just try to get the non-blocking $statusKey lock
@@ -317,8 +311,9 @@ class MessageCache {
 
                                # We need to call loadFromDB. Limit the concurrency to one process.
                                # This prevents the site from going down when the cache expires.
-                               # Note that the slam-protection lock here is non-blocking.
-                               if ( $this->loadFromDBWithLock( $code, $where ) ) {
+                               # Note that the DB slam protection lock here is non-blocking.
+                               $loadStatus = $this->loadFromDBWithLock( $code, $where, $mode );
+                               if ( $loadStatus === true ) {
                                        $success = true;
                                        break;
                                } elseif ( $staleCache ) {
@@ -328,23 +323,19 @@ class MessageCache {
                                        $success = true;
                                        break;
                                } elseif ( $failedAttempts > 0 ) {
-                                       # Already retried once, still failed, so don't do another lock/unlock cycle
+                                       # Already blocked once, so avoid another lock/unlock cycle.
                                        # This case will typically be hit if memcached is down, or if
-                                       # loadFromDB() takes longer than MSG_WAIT_TIMEOUT
+                                       # loadFromDB() takes longer than LOCK_WAIT.
                                        $where[] = "could not acquire status key.";
                                        break;
+                               } elseif ( $loadStatus === 'cantacquire' ) {
+                                       # Wait for the other thread to finish, then retry. Normally,
+                                       # the memcached get() will then yeild the other thread's result.
+                                       $where[] = 'waited for other thread to complete';
+                                       $this->getReentrantScopedLock( $cacheKey );
                                } else {
-                                       $statusKey = wfMemcKey( 'messages', $code, 'status' );
-                                       $status = $this->mMemc->get( $statusKey );
-                                       if ( $status === 'error' ) {
-                                               # Disable cache
-                                               break;
-                                       } else {
-                                               # Wait for the other thread to finish, then retry. Normally,
-                                               # the memcached get() will then yeild the other thread's result.
-                                               $where[] = 'waited for other thread to complete';
-                                               $this->getReentrantScopedLock( $cacheKey );
-                                       }
+                                       # Disable cache; $loadStatus is 'disabled'
+                                       break;
                                }
                        }
                }
@@ -369,47 +360,39 @@ class MessageCache {
        /**
         * @param string $code
         * @param array $where List of wfDebug() comments
-        * @return bool Lock acquired and loadFromDB() called
+        * @param integer $mode Use MessageCache::FOR_UPDATE to use DB_MASTER
+        * @return bool|string True on success or one of ("cantacquire", "disabled")
         */
-       protected function loadFromDBWithLock( $code, array &$where ) {
+       protected function loadFromDBWithLock( $code, array &$where, $mode = null ) {
                global $wgUseLocalMessageCache;
 
-               $memCache = $this->mMemc;
-
-               # Get the non-blocking status key lock. This lets the caller quickly know
-               # to use any stale cache lying around. Otherwise, it may do a blocking
-               # lock to try to obtain the messages.
+               # If cache updates on all levels fail, give up on message overrides.
+               # This is to avoid easy site outages; see $saveSuccess comments below.
                $statusKey = wfMemcKey( 'messages', $code, 'status' );
-               if ( !$memCache->add( $statusKey, 'loading', MSG_LOAD_TIMEOUT ) ) {
-                       return false; // could not acquire lock
+               $status = $this->mMemc->get( $statusKey );
+               if ( $status === 'error' ) {
+                       $where[] = "could not load; method is still globally disabled";
+                       return 'disabled';
                }
 
-               # Unlock the status key if there is an exception
-               $statusUnlocker = new ScopedCallback( function () use ( $memCache, $statusKey ) {
-                       $memCache->delete( $statusKey );
-               } );
-
                # Now let's regenerate
                $where[] = 'loading from database';
 
+               # Lock the cache to prevent conflicting writes.
+               # This lock is non-blocking so stale cache can quickly be used.
+               # Note that load() will call a blocking getReentrantScopedLock()
+               # after this if it really need to wait for any current thread.
                $cacheKey = wfMemcKey( 'messages', $code );
-               # Lock the cache to prevent conflicting writes
-               # If this lock fails, it doesn't really matter, it just means the
-               # write is potentially non-atomic, e.g. the results of a replace()
-               # may be discarded.
-               $mainUnlocker = $this->getReentrantScopedLock( $cacheKey );
-               if ( !$mainUnlocker ) {
+               $scopedLock = $this->getReentrantScopedLock( $cacheKey, 0 );
+               if ( !$scopedLock ) {
                        $where[] = 'could not acquire main lock';
+                       return 'cantacquire';
                }
 
-               $cache = $this->loadFromDB( $code );
+               $cache = $this->loadFromDB( $code, $mode );
                $this->mCache[$code] = $cache;
                $saveSuccess = $this->saveToCaches( $cache, 'all', $code );
 
-               # Unlock
-               ScopedCallback::consume( $mainUnlocker );
-               ScopedCallback::consume( $statusUnlocker );
-
                if ( !$saveSuccess ) {
                        # Cache save has failed.
                        # There are two main scenarios where this could be a problem:
@@ -427,7 +410,7 @@ class MessageCache {
                        # overhead on every request, and thus saves the wiki from
                        # complete downtime under moderate traffic conditions.
                        if ( !$wgUseLocalMessageCache ) {
-                               $memCache->set( $statusKey, 'error', 60 * 5 );
+                               $this->mMemc->set( $statusKey, 'error', 60 * 5 );
                                $where[] = 'could not save cache, disabled globally for 5 minutes';
                        } else {
                                $where[] = "could not save global cache";
@@ -442,13 +425,15 @@ class MessageCache {
         * $wgMaxMsgCacheEntrySize are assigned a special value, and are loaded
         * on-demand from the database later.
         *
-        * @param string $code Language code.
-        * @return array Loaded messages for storing in caches.
+        * @param string $code Language code
+        * @param integer $mode Use MessageCache::FOR_UPDATE to skip process cache
+        * @return array Loaded messages for storing in caches
         */
-       function loadFromDB( $code ) {
+       function loadFromDB( $code, $mode = null ) {
                global $wgMaxMsgCacheEntrySize, $wgLanguageCode, $wgAdaptiveMessageCache;
 
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = wfGetDB( ( $mode == self::FOR_UPDATE ) ? DB_MASTER : DB_SLAVE );
+
                $cache = array();
 
                # Common conditions
@@ -529,7 +514,7 @@ class MessageCache {
        /**
         * Updates cache as necessary when message page is changed
         *
-        * @param string $title Name of the page changed.
+        * @param string|bool $title Name of the page changed (false if deleted)
         * @param mixed $text New contents of the page.
         */
        public function replace( $title, $text ) {
@@ -541,27 +526,26 @@ class MessageCache {
 
                list( $msg, $code ) = $this->figureMessage( $title );
                if ( strpos( $title, '/' ) !== false && $code === $wgLanguageCode ) {
-                       # Content language overrides do not use the /<code> suffix
+                       // Content language overrides do not use the /<code> suffix
                        return;
                }
 
-               # Note that if the cache is volatile, load() may trigger a DB fetch.
-               # In that case we reenter/reuse the existing cache key lock to avoid
-               # a self-deadlock. This is safe as no reads happen *directly* in this
-               # method between getReentrantScopedLock() and load() below. There is
-               # no risk of data "changing under our feet" for replace().
+               // Note that if the cache is volatile, load() may trigger a DB fetch.
+               // In that case we reenter/reuse the existing cache key lock to avoid
+               // a self-deadlock. This is safe as no reads happen *directly* in this
+               // method between getReentrantScopedLock() and load() below. There is
+               // no risk of data "changing under our feet" for replace().
                $cacheKey = wfMemcKey( 'messages', $code );
                $scopedLock = $this->getReentrantScopedLock( $cacheKey );
                $this->load( $code, self::FOR_UPDATE );
 
                $titleKey = wfMemcKey( 'messages', 'individual', $title );
-
                if ( $text === false ) {
-                       # Article was deleted
+                       // Article was deleted
                        $this->mCache[$code][$title] = '!NONEXISTENT';
                        $this->wanCache->delete( $titleKey );
                } elseif ( strlen( $text ) > $wgMaxMsgCacheEntrySize ) {
-                       # Check for size
+                       // Check for size
                        $this->mCache[$code][$title] = '!TOO BIG';
                        $this->wanCache->set( $titleKey, ' ' . $text, $this->mExpiry );
                } else {
@@ -569,9 +553,17 @@ class MessageCache {
                        $this->wanCache->delete( $titleKey );
                }
 
-               # Update caches
-               $this->saveToCaches( $this->mCache[$code], 'all', $code );
+               // Mark this cache as definitely "latest" (non-volatile) so
+               // load() calls do try to refresh the cache with slave data
+               $this->mCache[$code]['LATEST'] = time();
+
+               // Update caches if the lock was acquired
+               if ( $scopedLock ) {
+                       $this->saveToCaches( $this->mCache[$code], 'all', $code );
+               }
+
                ScopedCallback::consume( $scopedLock );
+               // Relay the purge to APC and other DCs
                $this->wanCache->touchCheckKey( wfMemcKey( 'messages', $code ) );
 
                // Also delete cached sidebar... just in case it is affected
@@ -623,7 +615,7 @@ class MessageCache {
         * @param string|bool $code Language code (default: false)
         * @return bool
         */
-       protected function saveToCaches( $cache, $dest, $code = false ) {
+       protected function saveToCaches( array $cache, $dest, $code = false ) {
                if ( $dest === 'all' ) {
                        $cacheKey = wfMemcKey( 'messages', $code );
                        $success = $this->mMemc->set( $cacheKey, $cache );
@@ -631,16 +623,14 @@ class MessageCache {
                        $success = true;
                }
 
-               $this->setValidationHash( $code, $cache['HASH'] );
-
-               # Save to local cache
+               $this->setValidationHash( $code, $cache );
                $this->saveToLocalCache( $code, $cache );
 
                return $success;
        }
 
        /**
-        * Get the md5 used to validate the local disk cache
+        * Get the md5 used to validate the local APC cache
         *
         * @param string $code
         * @return array (hash or false, bool expiry/volatility status)
@@ -648,35 +638,56 @@ class MessageCache {
        protected function getValidationHash( $code ) {
                $curTTL = null;
                $value = $this->wanCache->get(
-                       wfMemcKey( 'messages', $code, 'hash' ),
+                       wfMemcKey( 'messages', $code, 'hash', 'v1' ),
                        $curTTL,
                        array( wfMemcKey( 'messages', $code ) )
                );
-               $expired = ( $curTTL === null || $curTTL < 0 );
 
-               return array( $value, $expired );
+               if ( !$value ) {
+                       // No hash found at all; cache must regenerate to be safe
+                       $hash = false;
+                       $expired = true;
+               } else {
+                       $hash = $value['hash'];
+                       if ( ( time() - $value['latest'] ) < WANObjectCache::HOLDOFF_TTL ) {
+                               // Cache was recently updated via replace() and should be up-to-date
+                               $expired = false;
+                       } else {
+                               // See if the "check" key was bumped after the hash was generated
+                               $expired = ( $curTTL < 0 );
+                       }
+               }
+
+               return array( $hash, $expired );
        }
 
        /**
         * Set the md5 used to validate the local disk cache
         *
+        * If $cache has a 'LATEST' UNIX timestamp key, then the hash will not
+        * be treated as "volatile" by getValidationHash() for the next few seconds
+        *
         * @param string $code
-        * @param string $hash
+        * @param array $cache Cached messages with a version
         */
-       protected function setValidationHash( $code, $hash ) {
+       protected function setValidationHash( $code, array $cache ) {
                $this->wanCache->set(
-                       wfMemcKey( 'messages', $code, 'hash' ),
-                       $hash,
+                       wfMemcKey( 'messages', $code, 'hash', 'v1' ),
+                       array(
+                               'hash' => $cache['HASH'],
+                               'latest' => isset( $cache['LATEST'] ) ? $cache['LATEST'] : 0
+                       ),
                        WANObjectCache::TTL_NONE
                );
        }
 
        /**
         * @param string $key A language message cache key that stores blobs
+        * @param integer $timeout Wait timeout in seconds
         * @return null|ScopedCallback
         */
-       protected function getReentrantScopedLock( $key ) {
-               return $this->mMemc->getScopedLock( $key, self::WAIT_SEC, self::LOCK_TTL, __METHOD__ );
+       protected function getReentrantScopedLock( $key, $timeout = self::WAIT_SEC ) {
+               return $this->mMemc->getScopedLock( $key, $timeout, self::LOCK_TTL, __METHOD__ );
        }
 
        /**
@@ -960,7 +971,7 @@ class MessageCache {
                                        wfDebugLog(
                                                'MessageCache',
                                                __METHOD__ . ": message content doesn't provide wikitext "
-                                                       . "(content model: " . $content->getContentHandler() . ")"
+                                                       . "(content model: " . $content->getModel() . ")"
                                        );
 
                                        $message = false; // negative caching
index e5916bd..d912e3a 100644 (file)
@@ -270,6 +270,20 @@ class EnhancedChangesList extends ChangesList {
 
                $queryParams['curid'] = $curId;
 
+               # Sub-entries
+               $lines = '';
+               foreach ( $block as $i => $rcObj ) {
+                       $line = $this->getLineData( $block, $rcObj, $queryParams );
+                       $lines .= $line;
+                       if ( !$line ) {
+                               // completely ignore this RC entry if we don't want to render it
+                               unset( $block[$i] );
+                       }
+               }
+               // Further down are some assumptions that $block is a 0-indexed array
+               // with (count-1) as last key. Let's make sure it is.
+               $block = array_values( $block );
+
                $r .= $this->getLogText( $block, $queryParams, $allLogs, $isnew, $namehidden );
 
                $r .= ' <span class="mw-changeslist-separator">. .</span> ';
@@ -299,116 +313,133 @@ class EnhancedChangesList extends ChangesList {
                $r .= $this->numberofWatchingusers( $block[0]->numberofWatchingusers );
                $r .= '</td></tr>';
 
-               # Sub-entries
-               foreach ( $block as $rcObj ) {
-                       # Classes to apply -- TODO implement
-                       $classes = array();
-                       $type = $rcObj->mAttribs['rc_type'];
-                       $data = array();
-
-                       $trClass = $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched
-                               ? ' class="mw-enhanced-watched"' : '';
-                       $separator = ' <span class="mw-changeslist-separator">. .</span> ';
-
-                       $data['recentChangesFlags'] = array(
-                               'newpage' => $type == RC_NEW,
-                               'minor' => $rcObj->mAttribs['rc_minor'],
-                               'unpatrolled' => $rcObj->unpatrolled,
-                               'bot' => $rcObj->mAttribs['rc_bot'],
-                       );
+               if ( !$lines ) {
+                       // if there are no lines to be rendered (all aborted by hook), don't render the block
+                       return '';
+               }
 
-                       $params = $queryParams;
+               $r .= $lines;
+               $r .= "</table>\n";
 
-                       if ( $rcObj->mAttribs['rc_this_oldid'] != 0 ) {
-                               $params['oldid'] = $rcObj->mAttribs['rc_this_oldid'];
-                       }
+               $this->rcCacheIndex++;
+
+               return $r;
+       }
 
-                       # Log timestamp
-                       if ( $type == RC_LOG ) {
-                               $link = $rcObj->timestamp;
+       /**
+        * @param RCCacheEntry[] $block
+        * @param RCCacheEntry $rcObj
+        * @param array $queryParams
+        * @return string
+        * @throws Exception
+        * @throws FatalError
+        * @throws MWException
+        */
+       protected function getLineData( array $block, RCCacheEntry $rcObj, array $queryParams = array() ) {
+               $RCShowChangedSize = $this->getConfig()->get( 'RCShowChangedSize' );
+
+               # Classes to apply -- TODO implement
+               $classes = array();
+               $type = $rcObj->mAttribs['rc_type'];
+               $data = array();
+
+               $trClass = $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched
+                       ? ' class="mw-enhanced-watched"' : '';
+               $separator = ' <span class="mw-changeslist-separator">. .</span> ';
+
+               $data['recentChangesFlags'] = array(
+                       'newpage' => $type == RC_NEW,
+                       'minor' => $rcObj->mAttribs['rc_minor'],
+                       'unpatrolled' => $rcObj->unpatrolled,
+                       'bot' => $rcObj->mAttribs['rc_bot'],
+               );
+
+               $params = $queryParams;
+
+               if ( $rcObj->mAttribs['rc_this_oldid'] != 0 ) {
+                       $params['oldid'] = $rcObj->mAttribs['rc_this_oldid'];
+               }
+
+               # Log timestamp
+               if ( $type == RC_LOG ) {
+                       $link = $rcObj->timestamp;
                        # Revision link
-                       } elseif ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) {
-                               $link = '<span class="history-deleted">' . $rcObj->timestamp . '</span> ';
-                       } else {
-                               $link = Linker::linkKnown(
-                                       $rcObj->getTitle(),
-                                       $rcObj->timestamp,
-                                       array(),
-                                       $params
-                               );
-                               if ( $this->isDeleted( $rcObj, Revision::DELETED_TEXT ) ) {
-                                       $link = '<span class="history-deleted">' . $link . '</span> ';
-                               }
+               } elseif ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) {
+                       $link = '<span class="history-deleted">' . $rcObj->timestamp . '</span> ';
+               } else {
+                       $link = Linker::linkKnown(
+                               $rcObj->getTitle(),
+                               $rcObj->timestamp,
+                               array(),
+                               $params
+                       );
+                       if ( $this->isDeleted( $rcObj, Revision::DELETED_TEXT ) ) {
+                               $link = '<span class="history-deleted">' . $link . '</span> ';
                        }
-                       $data['timestampLink'] = $link;
+               }
+               $data['timestampLink'] = $link;
 
-                       $currentAndLastLinks = '';
-                       if ( !$type == RC_LOG || $type == RC_NEW ) {
-                               $currentAndLastLinks .= ' ' . $this->msg( 'parentheses' )->rawParams(
+               $currentAndLastLinks = '';
+               if ( !$type == RC_LOG || $type == RC_NEW ) {
+                       $currentAndLastLinks .= ' ' . $this->msg( 'parentheses' )->rawParams(
                                        $rcObj->curlink .
-                                               $this->message['pipe-separator'] .
-                                               $rcObj->lastlink
+                                       $this->message['pipe-separator'] .
+                                       $rcObj->lastlink
                                )->escaped();
-                       }
-                       $data['currentAndLastLinks'] = $currentAndLastLinks;
-                       $data['separatorAfterCurrentAndLastLinks'] = $separator;
-
-                       # Character diff
-                       if ( $RCShowChangedSize ) {
-                               $cd = $this->formatCharacterDifference( $rcObj );
-                               if ( $cd !== '' ) {
-                                       $data['characterDiff'] = $cd;
-                                       $data['separatorAfterCharacterDiff'] = $separator;
-                               }
-                       }
+               }
+               $data['currentAndLastLinks'] = $currentAndLastLinks;
+               $data['separatorAfterCurrentAndLastLinks'] = $separator;
 
-                       if ( $rcObj->mAttribs['rc_type'] == RC_LOG ) {
-                               $data['logEntry'] = $this->insertLogEntry( $rcObj );
-                       } else {
-                               # User links
-                               $data['userLink'] = $rcObj->userlink;
-                               $data['userTalkLink'] = $rcObj->usertalklink;
-                               $data['comment'] = $this->insertComment( $rcObj );
+               # Character diff
+               if ( $RCShowChangedSize ) {
+                       $cd = $this->formatCharacterDifference( $rcObj );
+                       if ( $cd !== '' ) {
+                               $data['characterDiff'] = $cd;
+                               $data['separatorAfterCharacterDiff'] = $separator;
                        }
+               }
 
-                       # Rollback
-                       $data['rollback'] = $this->getRollback( $rcObj );
-
-                       # Tags
-                       $data['tags'] = $this->getTags( $rcObj, $classes );
+               if ( $rcObj->mAttribs['rc_type'] == RC_LOG ) {
+                       $data['logEntry'] = $this->insertLogEntry( $rcObj );
+               } else {
+                       # User links
+                       $data['userLink'] = $rcObj->userlink;
+                       $data['userTalkLink'] = $rcObj->usertalklink;
+                       $data['comment'] = $this->insertComment( $rcObj );
+               }
 
-                       // give the hook a chance to modify the data
-                       $success = Hooks::run( 'EnhancedChangesListModifyLineData',
-                               array( $this, &$data, $block, $rcObj ) );
-                       if ( !$success ) {
-                               // skip entry if hook aborted it
-                               continue;
-                       }
+               # Rollback
+               $data['rollback'] = $this->getRollback( $rcObj );
 
-                       $line = '<tr' . $trClass . '><td></td><td class="mw-enhanced-rc">';
-                       if ( isset( $data['recentChangesFlags'] ) ) {
-                               $line .= $this->recentChangesFlags( $data['recentChangesFlags'] );
-                               unset( $data['recentChangesFlags'] );
-                       }
-                       $line .= '&#160;</td><td class="mw-enhanced-rc-nested">';
-
-                       if ( isset( $data['timestampLink'] ) ) {
-                               $line .= '<span class="mw-enhanced-rc-time">' . $data['timestampLink'] . '</span>';
-                               unset( $data['timestampLink'] );
-                       }
+               # Tags
+               $data['tags'] = $this->getTags( $rcObj, $classes );
 
-                       // everything else: makes it easier for extensions to add or remove data
-                       $line .= implode( '', $data );
+               // give the hook a chance to modify the data
+               $success = Hooks::run( 'EnhancedChangesListModifyLineData',
+                       array( $this, &$data, $block, $rcObj ) );
+               if ( !$success ) {
+                       // skip entry if hook aborted it
+                       return '';
+               }
 
-                       $line .= "</td></tr>\n";
+               $line = '<tr' . $trClass . '><td></td><td class="mw-enhanced-rc">';
+               if ( isset( $data['recentChangesFlags'] ) ) {
+                       $line .= $this->recentChangesFlags( $data['recentChangesFlags'] );
+                       unset( $data['recentChangesFlags'] );
+               }
+               $line .= '&#160;</td><td class="mw-enhanced-rc-nested">';
 
-                       $r .= $line;
+               if ( isset( $data['timestampLink'] ) ) {
+                       $line .= '<span class="mw-enhanced-rc-time">' . $data['timestampLink'] . '</span>';
+                       unset( $data['timestampLink'] );
                }
-               $r .= "</table>\n";
 
-               $this->rcCacheIndex++;
+               // everything else: makes it easier for extensions to add or remove data
+               $line .= implode( '', $data );
 
-               return $r;
+               $line .= "</td></tr>\n";
+
+               return $line;
        }
 
        /**
index 54ca2ab..87871f4 100644 (file)
@@ -89,6 +89,16 @@ class RecentChange {
         */
        public $counter = -1;
 
+       /**
+        * @var array Array of change types
+        */
+       private static $changeTypes = array(
+               'edit' => RC_EDIT,
+               'new' => RC_NEW,
+               'log' => RC_LOG,
+               'external' => RC_EXTERNAL,
+       );
+
        # Factory methods
 
        /**
@@ -119,18 +129,10 @@ class RecentChange {
                        return $retval;
                }
 
-               switch ( $type ) {
-                       case 'edit':
-                               return RC_EDIT;
-                       case 'new':
-                               return RC_NEW;
-                       case 'log':
-                               return RC_LOG;
-                       case 'external':
-                               return RC_EXTERNAL;
-                       default:
-                               throw new MWException( "Unknown type '$type'" );
+               if ( !array_key_exists( $type, self::$changeTypes ) ) {
+                       throw new MWException( "Unknown type '$type'" );
                }
+               return self::$changeTypes[$type];
        }
 
        /**
@@ -140,24 +142,18 @@ class RecentChange {
         * @return string $type
         */
        public static function parseFromRCType( $rcType ) {
-               switch ( $rcType ) {
-                       case RC_EDIT:
-                               $type = 'edit';
-                               break;
-                       case RC_NEW:
-                               $type = 'new';
-                               break;
-                       case RC_LOG:
-                               $type = 'log';
-                               break;
-                       case RC_EXTERNAL:
-                               $type = 'external';
-                               break;
-                       default:
-                               $type = "$rcType";
-               }
+               return array_search( $rcType, self::$changeTypes, true ) ?: "$rcType";
+       }
 
-               return $type;
+       /**
+        * Get an array of all change types
+        *
+        * @since 1.26
+        *
+        * @return array
+        */
+       public static function getChangeTypes() {
+               return array_keys( self::$changeTypes );
        }
 
        /**
index 117bd2d..ec0573e 100644 (file)
@@ -331,7 +331,7 @@ class RedisConnectionPool implements LoggerAwareInterface {
         * @deprecated since 1.23
         */
        public function handleException( $server, RedisConnRef $cref, RedisException $e ) {
-               return $this->handleError( $cref, $e );
+               $this->handleError( $cref, $e );
        }
 
        /**
index 4d1b1c0..1e54f55 100644 (file)
@@ -58,7 +58,6 @@ abstract class DatabaseBase implements IDatabase {
        protected $mSchema;
        protected $mFlags;
        protected $mForeign;
-       protected $mErrorCount = 0;
        protected $mLBInfo = array();
        protected $mDefaultBigSelects = null;
        protected $mSchemaVars = false;
@@ -259,15 +258,6 @@ abstract class DatabaseBase implements IDatabase {
                return $this->mTrxLevel ? $this->mTrxTimestamp : null;
        }
 
-       /**
-        * Get/set the number of errors logged. Only useful when errors are ignored
-        * @param int $count The count to set, or omitted to leave it unchanged.
-        * @return int The error count
-        */
-       public function errorCount( $count = null ) {
-               return wfSetVar( $this->mErrorCount, $count );
-       }
-
        /**
         * Get/set the table prefix.
         * @param string $prefix The table prefix to set, or omitted to leave it unchanged.
@@ -1111,8 +1101,6 @@ abstract class DatabaseBase implements IDatabase {
         * @throws DBQueryError
         */
        public function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
-               ++$this->mErrorCount;
-
                if ( $this->ignoreErrors() || $tempIgnore ) {
                        wfDebug( "SQL ERROR (ignored): $error\n" );
                } else {
@@ -3238,9 +3226,6 @@ abstract class DatabaseBase implements IDatabase {
                                $retVal = call_user_func_array( $function, $args );
                                break;
                        } catch ( DBQueryError $e ) {
-                               $error = $this->lastError();
-                               $errno = $this->lastErrno();
-                               $sql = $this->lastQuery();
                                if ( $this->wasDeadlock() ) {
                                        // Retry after a randomized delay
                                        usleep( mt_rand( self::DEADLOCK_DELAY_MIN, self::DEADLOCK_DELAY_MAX ) );
index 081174a..87c3164 100644 (file)
@@ -971,20 +971,6 @@ class DatabaseOracle extends DatabaseBase {
                return $valuedata;
        }
 
-       function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
-               # Ignore errors during error handling to avoid infinite
-               # recursion
-               $ignore = $this->ignoreErrors( true );
-               ++$this->mErrorCount;
-
-               if ( $ignore || $tempIgnore ) {
-                       wfDebug( "SQL ERROR (ignored): $error\n" );
-                       $this->ignoreErrors( $ignore );
-               } else {
-                       throw new DBQueryError( $this, $error, $errno, $sql, $fname );
-               }
-       }
-
        /**
         * @return string Wikitext of a link to the server software's web site
         */
index b6439b8..0f4c648 100644 (file)
@@ -21,6 +21,7 @@
 namespace MediaWiki\Logger;
 
 use DateTimeZone;
+use Exception;
 use MWDebug;
 use MWExceptionHandler;
 use Psr\Log\AbstractLogger;
@@ -217,13 +218,22 @@ class LegacyLogger extends AbstractLogger {
                }
 
                // Append stacktrace of exception if available
-               if ( $wgLogExceptionBacktrace &&
-                       isset( $context['exception'] ) &&
-                       $context['exception'] instanceof Exception
-               ) {
-                       $text .= MWExceptionHandler::getRedactedTraceAsString(
-                               $context['exception']
-                       ) . "\n";
+               if ( $wgLogExceptionBacktrace && isset( $context['exception'] ) ) {
+                       $e = $context['exception'];
+                       $backtrace = false;
+
+                       if ( $e instanceof Exception ) {
+                               $backtrace = MWExceptionHandler::getRedactedTrace( $e );
+
+                       } elseif ( is_array( $e ) && isset( $e['trace'] ) ) {
+                               // Exception has already been unpacked as structured data
+                               $backtrace = $e['trace'];
+                       }
+
+                       if ( $backtrace ) {
+                               $text .= MWExceptionHandler::prettyPrintTrace( $backtrace ) .
+                                       "\n";
+                       }
                }
 
                return self::interpolate( $text, $context );
@@ -358,7 +368,7 @@ class LegacyLogger extends AbstractLogger {
                        return $item->format( 'c' );
                }
 
-               if ( $item instanceof \Exception ) {
+               if ( $item instanceof Exception ) {
                        return '[Exception ' . get_class( $item ) . '( ' .
                                $item->getFile() . ':' . $item->getLine() . ') ' .
                                $item->getMessage() . ']';
index 7b54861..274e18e 100644 (file)
@@ -20,6 +20,7 @@
 
 namespace MediaWiki\Logger;
 
+use MediaWiki\Logger\Monolog\BufferHandler;
 use Monolog\Logger;
 use ObjectFactory;
 
@@ -84,6 +85,7 @@ use ObjectFactory;
  *                   'logstash'
  *               ),
  *               'formatter' => 'logstash',
+ *               'buffer' => true,
  *           ),
  *           'udp2log' => array(
  *               'class' => '\\MediaWiki\\Logger\\Monolog\\LegacyHandler',
@@ -247,6 +249,9 @@ class MonologSpi implements Spi {
                                        $this->getFormatter( $spec['formatter'] )
                                );
                        }
+                       if ( isset( $spec['buffer'] ) && $spec['buffer'] ) {
+                               $handler = new BufferHandler( $handler );
+                       }
                        $this->singletons['handlers'][$name] = $handler;
                }
                return $this->singletons['handlers'][$name];
diff --git a/includes/debug/logger/monolog/AvroFormatter.php b/includes/debug/logger/monolog/AvroFormatter.php
new file mode 100644 (file)
index 0000000..b6adab4
--- /dev/null
@@ -0,0 +1,139 @@
+<?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
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+use AvroIODatumWriter;
+use AvroIOBinaryEncoder;
+use AvroIOTypeException;
+use AvroNamedSchemata;
+use AvroSchema;
+use AvroStringIO;
+use AvroValidator;
+use Monolog\Formatter\FormatterInterface;
+
+/**
+ * Log message formatter that uses the apache Avro format.
+ *
+ * @since 1.26
+ * @author Erik Bernhardson <ebernhardson@wikimedia.org>
+ * @copyright © 2015 Erik Bernhardson and Wikimedia Foundation.
+ */
+class AvroFormatter implements FormatterInterface {
+       /**
+        * @var array Map from schema name to schema definition
+        */
+       protected $schemas;
+
+       /**
+        * @var AvroStringIO
+        */
+       protected $io;
+
+       /**
+        * @var AvroIOBinaryEncoder
+        */
+       protected $encoder;
+
+       /**
+        * @var AvroIODatumWriter
+        */
+       protected $writer;
+
+       /**
+        * @var array $schemas Map from Monolog channel to Avro schema.
+        *  Each schema can be either the JSON string or decoded into PHP
+        *  arrays.
+        */
+       public function __construct( array $schemas ) {
+               $this->schemas = $schemas;
+               $this->io = new AvroStringIO( '' );
+               $this->encoder = new AvroIOBinaryEncoder( $this->io );
+               $this->writer = new AvroIODatumWriter();
+       }
+
+       /**
+        * Formats the record context into a binary string per the
+        * schema configured for the records channel.
+        *
+        * @param array $record
+        * @return string|null The serialized record, or null if
+        *  the record is not valid for the selected schema.
+        */
+       public function format( array $record ) {
+               $this->io->truncate();
+               $schema = $this->getSchema( $record['channel'] );
+               if ( $schema === null ) {
+                       trigger_error( "The schema for channel '{$record['channel']}' is not available" );
+                       return null;
+               }
+               try {
+                       $this->writer->write_data( $schema, $record['context'], $this->encoder );
+               } catch ( AvroIOTypeException $e ) {
+                       $errors = AvroValidator::getErrors( $schema, $record['context'] );
+                       $json = json_encode( $errors );
+                       trigger_error( "Avro failed to serialize record for {$record['channel']} : {$json}" );
+                       return null;
+               }
+               return $this->io->string();
+       }
+
+       /**
+        * Format a set of records into a list of binary strings
+        * conforming to the configured schema.
+        *
+        * @param array $records
+        * @return string[]
+        */
+       public function formatBatch( array $records ) {
+               $result = array();
+               foreach ( $records as $record ) {
+                       $message = $this->format( $record );
+                       if ( $message !== null ) {
+                               $result[] = $message;
+                       }
+               }
+               return $result;
+       }
+
+       /**
+        * Get the writer for the named channel
+        *
+        * @var string $channel Name of the schema to fetch
+        * @return AvroSchema|null
+        */
+       protected function getSchema( $channel ) {
+               if ( !isset( $this->schemas[$channel] ) ) {
+                       return null;
+               }
+               if ( !$this->schemas[$channel] instanceof AvroSchema ) {
+                       if ( is_string( $this->schemas[$channel] ) ) {
+                               $this->schemas[$channel] = AvroSchema::parse( $this->schemas[$channel] );
+                       } else {
+                               $this->schemas[$channel] = AvroSchema::real_parse(
+                                       $this->schemas[$channel],
+                                       null,
+                                       new AvroNamedSchemata()
+                               );
+                       }
+               }
+               return $this->schemas[$channel];
+       }
+}
diff --git a/includes/debug/logger/monolog/BufferHandler.php b/includes/debug/logger/monolog/BufferHandler.php
new file mode 100644 (file)
index 0000000..3ebd0b1
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Helper class for the index.php entry point.
+ *
+ * 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
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+use DeferredUpdates;
+use Monolog\Handler\BufferHandler as BaseBufferHandler;
+
+/**
+ * Updates the Monolog BufferHandler to use DeferredUpdates rather
+ * than register_shutdown_function. On supported platforms this will
+ * use register_postsend_function or fastcgi_finish_request() to delay
+ * until after the request has shutdown and we are no longer delaying
+ * the web request.
+ */
+class BufferHandler extends BaseBufferHandler {
+       /**
+        * {@inheritDoc}
+        */
+       public function handle( array $record ) {
+               if (!$this->initialized) {
+                       DeferredUpdates::addCallableUpdate( array( $this, 'close' ) );
+                       $this->initialized = true;
+               }
+               return parent::handle( $record );
+       }
+}
+
diff --git a/includes/debug/logger/monolog/KafkaHandler.php b/includes/debug/logger/monolog/KafkaHandler.php
new file mode 100644 (file)
index 0000000..59d7764
--- /dev/null
@@ -0,0 +1,224 @@
+<?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
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+use Kafka\MetaDataFromKafka;
+use Kafka\Produce;
+use MediaWiki\Logger\LoggerFactory;
+use Monolog\Handler\AbstractProcessingHandler;
+use Monolog\Logger;
+use Psr\Log\LoggerInterface;
+
+/**
+ * Log handler sends log events to a kafka server.
+ *
+ * Constructor options array arguments:
+ * * alias: map from monolog channel to kafka topic name. When no
+ *       alias exists the topic "monolog_$channel" will be used.
+ * * swallowExceptions: Swallow exceptions that occur while talking to
+ *    kafka. Defaults to false.
+ * * logExceptions: Log exceptions talking to kafka here. Either null,
+ *    the name of a channel to log to, or an object implementing
+ *    FormatterInterface. Defaults to null.
+ *
+ * Requires the nmred/kafka-php library, version >= 1.3.0
+ *
+ * @since 1.26
+ * @author Erik Bernhardson <ebernhardson@wikimedia.org>
+ * @copyright © 2015 Erik Bernhardson and Wikimedia Foundation.
+ */
+class KafkaHandler extends AbstractProcessingHandler {
+       /**
+        * @var Produce Sends requests to kafka
+        */
+       protected $produce;
+
+       /**
+        * @var array Optional handler configuration
+        */
+       protected $options;
+
+       /**
+        * @var array Map from topic name to partition this request produces to
+        */
+       protected $partitions = array();
+
+       /**
+        * @var array defaults for constructor options
+        */
+       private static $defaultOptions = array(
+               'alias' => array(), // map from monolog channel to kafka topic
+               'swallowExceptions' => false, // swallow exceptions sending records
+               'logExceptions' => null, // A PSR3 logger to inform about errors
+       );
+
+       /**
+        * @param Produce $produce Kafka instance to produce through
+        * @param array $options optional handler configuration
+        * @param int $level The minimum logging level at which this handler will be triggered
+        * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
+        */
+       public function __construct( Produce $produce, array $options, $level = Logger::DEBUG, $bubble = true ) {
+               parent::__construct( $level, $bubble );
+               $this->produce = $produce;
+               $this->options = array_merge( self::$defaultOptions, $options );
+       }
+
+       /**
+        * Constructs the necessary support objects and returns a KafkaHandler
+        * instance.
+        *
+        * @param string[] $kafkaServers
+        * @param array $options
+        * @param int $level The minimum logging level at which this handle will be triggered
+        * @param bool $bubble Whether the messages that are handled can bubble the stack or not
+        * @return KafkaHandler
+        */
+       public static function factory( $kafkaServers, array $options = array(), $level = Logger::DEBUG, $bubble = true ) {
+               $metadata = new MetaDataFromKafka( $kafkaServers );
+               $produce = new Produce( $metadata );
+               if ( isset( $options['logExceptions'] ) && is_string( $options['logExceptions'] ) ) {
+                       $options['logExceptions'] = LoggerFactory::getInstance( $options['logExceptions'] );
+               }
+               return new self( $produce, $options, $level, $bubble );
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       protected function write( array $record ) {
+               if ( $record['formatted'] !== null ) {
+                       $this->addMessages( $record['channel'], array( $record['formatted'] ) );
+                       $this->send();
+               }
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public function handleBatch( array $batch ) {
+               $channels = array();
+               foreach ( $batch as $record ) {
+                       if ( $record['level'] < $this->level ) {
+                               continue;
+                       }
+                       $channels[$record['channel']][] = $this->processRecord( $record );
+               }
+
+               $formatter = $this->getFormatter();
+               foreach ( $channels as $channel => $records ) {
+                       $messages = array();
+                       foreach ( $records as $idx => $record ) {
+                               $message = $formatter->format( $record );
+                               if ( $message !== null ) {
+                                       $messages[] = $message;
+                               }
+                       }
+                       if ( $messages ) {
+                               $this->addMessages($channel, $messages);
+                       }
+               }
+
+               $this->send();
+       }
+
+       /**
+        * Send any records in the kafka client internal queue.
+        */
+       protected function send() {
+               try {
+                       $this->produce->send();
+               } catch ( \Kafka\Exception $e ) {
+                       $ignore = $this->warning(
+                               'Error sending records to kafka: {exception}',
+                               array( 'exception' => $e ) );
+                       if ( !$ignore ) {
+                               throw $e;
+                       }
+               }
+       }
+
+       /**
+        * @param string $topic Name of topic to get partition for
+        * @return int|null The random partition to produce to for this request,
+        *  or null if a partition could not be determined.
+        */
+       protected function getRandomPartition( $topic ) {
+               if ( !array_key_exists( $topic, $this->partitions ) ) {
+                       try {
+                               $partitions = $this->produce->getAvailablePartitions( $topic );
+                       } catch ( \Kafka\Exception $e ) {
+                               $ignore = $this->warning(
+                                       'Error getting metadata for kafka topic {topic}: {exception}',
+                                       array( 'topic' => $topic, 'exception' => $e ) );
+                               if ( $ignore ) {
+                                       return null;
+                               }
+                               throw $e;
+                       }
+                       if ( $partitions ) {
+                               $key = array_rand( $partitions );
+                               $this->partitions[$topic] = $partitions[$key];
+                       } else {
+                               $details = $this->produce->getClient()->getTopicDetail( $topic );
+                               $ignore = $this->warning(
+                                       'No partitions available for kafka topic {topic}',
+                                       array( 'topic' => $topic, 'kafka' => $details )
+                               );
+                               if ( !$ignore ) {
+                                       throw new \RuntimeException( "No partitions available for kafka topic $topic" );
+                               }
+                               $this->partitions[$topic] = null;
+                       }
+               }
+               return $this->partitions[$topic];
+       }
+
+       /**
+        * Adds records for a channel to the Kafka client internal queue.
+        *
+        * @param string $channel Name of Monolog channel records belong to
+        * @param array $records List of records to append
+        */
+       protected function addMessages( $channel, array $records ) {
+               if ( isset( $this->options['alias'][$channel] ) ) {
+                       $topic = $this->options['alias'][$channel];
+               } else {
+                       $topic = "monolog_$channel";
+               }
+               $partition = $this->getRandomPartition( $topic );
+               if ( $partition !== null ) {
+                       $this->produce->setMessages( $topic, $partition, $records );
+               }
+       }
+
+       /**
+        * @param string $message PSR3 compatible message string
+        * @param array $context PSR3 compatible log context
+        * @return bool true if caller should ignore warning
+        */
+       protected function warning( $message, array $context = array() ) {
+               if ( $this->options['logExceptions'] instanceof LoggerInterface ) {
+                       $this->options['logExceptions']->warning( $message, $context );
+               }
+               return $this->options['swallowExceptions'];
+       }
+}
index e593d63..2ba7a53 100644 (file)
@@ -27,10 +27,14 @@ use MWExceptionHandler;
 /**
  * Formats incoming records into a one-line string.
  *
+ * An 'exeception' in the log record's context will be treated specially.
+ * It will be output for an '%exception%' placeholder in the format and
+ * excluded from '%context%' output if the '%exception%' placeholder is
+ * present.
+ *
  * Exceptions that are logged with this formatter will optional have their
- * stack traces appended. If that is done,
- * MWExceptionHandler::getRedactedTraceAsString() will be used to redact the
- * trace information.
+ * stack traces appended. If that is done, MWExceptionHandler::redactedTrace()
+ * will be used to redact the trace information.
  *
  * @since 1.26
  * @author Bryan Davis <bd808@wikimedia.org>
@@ -57,6 +61,40 @@ class LineFormatter extends MonologLineFormatter {
        }
 
 
+       /**
+        * {@inheritdoc}
+        */
+       public function format( array $record ) {
+               // Drop the 'private' flag from the context
+               unset( $record['context']['private'] );
+
+               // Handle exceptions specially: pretty format and remove from context
+               // Will be output for a '%exception%' placeholder in format
+               $prettyException = '';
+               if ( isset( $record['context']['exception'] ) &&
+                       strpos( $this->format, '%exception%' ) !== false
+               ) {
+                       $e = $record['context']['exception'];
+                       unset( $record['context']['exception'] );
+
+                       if ( $e instanceof Exception ) {
+                               $prettyException = $this->normalizeException( $e );
+                       } elseif ( is_array( $e ) ) {
+                               $prettyException = $this->normalizeExceptionArray( $e );
+                       } else {
+                               $prettyException = $this->stringify( $e );
+                       }
+               }
+
+               $output = parent::format( $record );
+
+               if ( strpos( $output, '%exception%' ) !== false ) {
+                       $output = str_replace( '%exception%', $prettyException, $output );
+               }
+               return $output;
+       }
+
+
        /**
         * Convert an Exception to a string.
         *
@@ -64,24 +102,76 @@ class LineFormatter extends MonologLineFormatter {
         * @return string
         */
        protected function normalizeException( Exception $e ) {
-               $str = '[Exception ' . get_class( $e ) . '] (' .
-                       $e->getFile() . ':' . $e->getLine() . ') ' .
-                       $e->getMessage();
+               return $this->normalizeExceptionArray( $this->exceptionAsArray( $e ) );
+       }
+
+
+       /**
+        * Convert an exception to an array of structured data.
+        *
+        * @param Exception $e
+        * @return array
+        */
+       protected function exceptionAsArray( Exception $e ) {
+               $out = array(
+                       'class' => get_class( $e ),
+                       'message' => $e->getMessage(),
+                       'code' => $e->getCode(),
+                       'file' => $e->getFile(),
+                       'line' => $e->getLine(),
+                       'trace' => MWExceptionHandler::redactTrace( $e->getTrace() ),
+               );
 
                $prev = $e->getPrevious();
-               while ( $prev ) {
-                       $str .= ', [Exception ' . get_class( $prev ) . '] (' .
-                               $prev->getFile() . ':' . $prev->getLine() . ') ' .
-                               $prev->getMessage();
-                       $prev = $prev->getPrevious();
+               if ( $prev ) {
+                       $out['previous'] = $this->exceptionAsArray( $prev );
                }
 
-               if ( $this->includeStacktraces ) {
-                       $str .= "\n[stacktrace]\n" .
-                               MWExceptionHandler::getRedactedTraceAsString( $e ) .
-                               "\n";
+               return $out;
+       }
+
+
+       /**
+        * Convert an array of Exception data to a string.
+        *
+        * @param array $e
+        * @return string
+        */
+       protected function normalizeExceptionArray( array $e ) {
+               $defaults = array(
+                       'class' => 'Unknown',
+                       'file' => 'unknown',
+                       'line' => null,
+                       'message' => 'unknown',
+                       'trace' => array(),
+               );
+               $e = array_merge( $defaults, $e );
+
+               $str = "\n[Exception {$e['class']}] (" .
+                       "{$e['file']}:{$e['line']}) {$e['message']}";
+
+               if ( $this->includeStacktraces && $e['trace'] ) {
+                       $str .= "\n" .
+                               MWExceptionHandler::prettyPrintTrace( $e['trace'], '  ' );
                }
 
+               if ( isset( $e['previous'] ) ) {
+                       $prev = $e['previous'];
+                       while ( $prev ) {
+                               $prev = array_merge( $defaults, $prev );
+                               $str .= "\nCaused by: [Exception {$prev['class']}] (" .
+                                       "{$prev['file']}:{$prev['line']}) {$prev['message']}";
+
+                               if ( $this->includeStacktraces && $prev['trace'] ) {
+                                       $str .= "\n" .
+                                               MWExceptionHandler::prettyPrintTrace(
+                                                       $prev['trace'], '  '
+                                               );
+                               }
+
+                               $prev = isset( $prev['previous'] ) ? $prev['previous'] : null;
+                       }
+               }
                return $str;
        }
 }
index b7e5b0a..cd0266f 100644 (file)
@@ -78,17 +78,6 @@ class DeferredUpdates {
                }
        }
 
-       /**
-        * HTMLCacheUpdates are the most common deferred update people use. This
-        * is a shortcut method for that.
-        * @see HTMLCacheUpdate::__construct()
-        * @param Title $title
-        * @param string $table
-        */
-       public static function addHTMLCacheUpdate( $title, $table ) {
-               self::addUpdate( new HTMLCacheUpdate( $title, $table ) );
-       }
-
        /**
         * Add a callable update.  In a lot of cases, we just need a callback/closure,
         * defining a new DeferrableUpdate object is not necessary
@@ -106,9 +95,7 @@ class DeferredUpdates {
         *   prevent lock contention
         */
        public static function doUpdates( $commit = '' ) {
-               global $wgDeferredUpdateList;
-
-               $updates = array_merge( $wgDeferredUpdateList, self::$updates );
+               $updates = self::$updates;
 
                while ( count( $updates ) ) {
                        self::clearPendingUpdates();
@@ -131,7 +118,7 @@ class DeferredUpdates {
                                }
                        }
 
-                       $updates = array_merge( $wgDeferredUpdateList, self::$updates );
+                       $updates = self::$updates;
                }
        }
 
@@ -140,7 +127,6 @@ class DeferredUpdates {
         * want or need to call this. Unit tests need it though.
         */
        public static function clearPendingUpdates() {
-               global $wgDeferredUpdateList;
-               $wgDeferredUpdateList = self::$updates = array();
+               self::$updates = array();
        }
 }
index b910ec6..9211bf8 100644 (file)
@@ -121,7 +121,7 @@ class HttpError extends MWException {
                if ( $this->content instanceof Message ) {
                        $contentHtml = $this->content->escaped();
                } else {
-                       $contentHtml = htmlspecialchars( $this->content );
+                       $contentHtml = nl2br( htmlspecialchars( $this->content ) );
                }
 
                return "<!DOCTYPE html>\n" .
index def653f..d25f1a8 100644 (file)
@@ -26,31 +26,39 @@ use MediaWiki\Logger\LoggerFactory;
  */
 class MWExceptionHandler {
 
+       /**
+        * @var string $reservedMemory
+        */
        protected static $reservedMemory;
+       /**
+        * @var array $fatalErrorTypes
+        */
        protected static $fatalErrorTypes = array(
                E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR,
                /* HHVM's FATAL_ERROR level */ 16777217,
        );
+       /**
+        * @var bool $handledFatalCallback
+        */
+       protected static $handledFatalCallback = false;
 
        /**
         * Install handlers with PHP.
         */
        public static function installHandler() {
-               set_exception_handler( array( 'MWExceptionHandler', 'handleException' ) );
-               set_error_handler( array( 'MWExceptionHandler', 'handleError' ) );
+               set_exception_handler( 'MWExceptionHandler::handleException' );
+               set_error_handler( 'MWExceptionHandler::handleError' );
 
                // Reserve 16k of memory so we can report OOM fatals
                self::$reservedMemory = str_repeat( ' ', 16384 );
-               register_shutdown_function(
-                       array( 'MWExceptionHandler', 'handleFatalError' )
-               );
+               register_shutdown_function( 'MWExceptionHandler::handleFatalError' );
        }
 
        /**
         * Report an exception to the user
-        * @param Exception $e
+        * @param Exception|Throwable $e
         */
-       protected static function report( Exception $e ) {
+       protected static function report( $e ) {
                global $wgShowExceptionDetails;
 
                $cmdLine = MWException::isCommandLine();
@@ -124,9 +132,9 @@ class MWExceptionHandler {
         * transaction could be aborted properly.
         *
         * @since 1.23
-        * @param Exception $e
+        * @param Exception|Throwable $e
         */
-       public static function rollbackMasterChangesAndLog( Exception $e ) {
+       public static function rollbackMasterChangesAndLog( $e ) {
                $factory = wfGetLBFactory();
                if ( $factory->hasMasterChanges() ) {
                        $logger = LoggerFactory::getInstance( 'Bug56269' );
@@ -151,9 +159,9 @@ class MWExceptionHandler {
         *   }
         *
         * @since 1.25
-        * @param Exception $e
+        * @param Exception|Throwable $e
         */
-       public static function handleException( Exception $e ) {
+       public static function handleException( $e ) {
                try {
                        // Rollback DBs to avoid transaction notices. This may fail
                        // to rollback some DB due to connection issues or exceptions.
@@ -176,24 +184,36 @@ class MWExceptionHandler {
        }
 
        /**
+        * Handler for set_error_handler() callback notifications.
+        *
+        * Receive a callback from the interpreter for a raised error, create an
+        * ErrorException, and log the exception to the 'error' logging
+        * channel(s). If the raised error is a fatal error type (only under HHVM)
+        * delegate to handleFatalError() instead.
+        *
         * @since 1.25
+        *
         * @param int $level Error level raised
         * @param string $message
         * @param string $file
         * @param int $line
+        *
+        * @see logError()
         */
-       public static function handleError( $level, $message, $file = null, $line = null ) {
-               // Map error constant to error name (reverse-engineer PHP error reporting)
-               $channel = 'error';
+       public static function handleError(
+               $level, $message, $file = null, $line = null
+       ) {
+               if ( in_array( $level, self::$fatalErrorTypes ) ) {
+                       return call_user_func_array(
+                               'MWExceptionHandler::handleFatalError', func_get_args()
+                       );
+               }
+
+               // Map error constant to error name (reverse-engineer PHP error
+               // reporting)
                switch ( $level ) {
-                       case E_ERROR:
-                       case E_CORE_ERROR:
-                       case E_COMPILE_ERROR:
-                       case E_USER_ERROR:
                        case E_RECOVERABLE_ERROR:
-                       case E_PARSE:
                                $levelName = 'Error';
-                               $channel = 'fatal';
                                break;
                        case E_WARNING:
                        case E_CORE_WARNING:
@@ -212,17 +232,13 @@ class MWExceptionHandler {
                        case E_USER_DEPRECATED:
                                $levelName = 'Deprecated';
                                break;
-                       case /* HHVM's FATAL_ERROR */ 16777217:
-                               $levelName = 'Fatal';
-                               $channel = 'fatal';
-                               break;
                        default:
                                $levelName = 'Unknown error';
                                break;
                }
 
                $e = new ErrorException( "PHP $levelName: $message", 0, $level, $file, $line );
-               self::logError( $e, $channel );
+               self::logError( $e, 'error' );
 
                // This handler is for logging only. Return false will instruct PHP
                // to continue regular handling.
@@ -231,42 +247,101 @@ class MWExceptionHandler {
 
 
        /**
-        * Look for a fatal error as the cause of the request termination and log
-        * as an exception.
+        * Dual purpose callback used as both a set_error_handler() callback and
+        * a registered shutdown function. Receive a callback from the interpreter
+        * for a raised error or system shutdown, check for a fatal error, and log
+        * to the 'fatal' logging channel.
         *
         * Special handling is included for missing class errors as they may
         * indicate that the user needs to install 3rd-party libraries via
         * Composer or other means.
         *
         * @since 1.25
+        *
+        * @param int $level Error level raised
+        * @param string $message Error message
+        * @param string $file File that error was raised in
+        * @param int $line Line number error was raised at
+        * @param array $context Active symbol table point of error
+        * @param array $trace Backtrace at point of error (undocumented HHVM
+        *     feature)
+        * @return bool Always returns false
         */
-       public static function handleFatalError() {
+       public static function handleFatalError(
+               $level = null, $message = null, $file = null, $line = null,
+               $context = null, $trace = null
+       ) {
+               // Free reserved memory so that we have space to process OOM
+               // errors
                self::$reservedMemory = null;
-               $lastError = error_get_last();
 
-               if ( $lastError &&
-                       isset( $lastError['type'] ) &&
-                       in_array( $lastError['type'], self::$fatalErrorTypes )
-               ) {
-                       $msg = "Fatal Error: {$lastError['message']}";
-                       // HHVM: Class undefined: foo
-                       // PHP5: Class 'foo' not found
-                       if ( preg_match( "/Class (undefined: \w+|'\w+' not found)/",
-                               $lastError['message']
-                       ) ) {
-                               // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
-                               $msg = <<<TXT
+               if ( $level === null ) {
+                       // Called as a shutdown handler, get data from error_get_last()
+                       if ( static::$handledFatalCallback ) {
+                               // Already called once (probably as an error handler callback
+                               // under HHVM) so don't log again.
+                               return false;
+                       }
+
+                       $lastError = error_get_last();
+                       if ( $lastError !== null ) {
+                               $level = $lastError['type'];
+                               $message = $lastError['message'];
+                               $file = $lastError['file'];
+                               $line = $lastError['line'];
+                       } else {
+                               $level = 0;
+                               $message = '';
+                       }
+               }
+
+               if ( !in_array( $level, self::$fatalErrorTypes ) ) {
+                       // Only interested in fatal errors, others should have been
+                       // handled by MWExceptionHandler::handleError
+                       return false;
+               }
+
+               $msg = "[{exception_id}] PHP Fatal Error: {$message}";
+
+               // Look at message to see if this is a class not found failure
+               // HHVM: Class undefined: foo
+               // PHP5: Class 'foo' not found
+               if ( preg_match( "/Class (undefined: \w+|'\w+' not found)/", $msg ) ) {
+                       // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
+                       $msg = <<<TXT
 {$msg}
 
 MediaWiki or an installed extension requires this class but it is not embedded directly in MediaWiki's git repository and must be installed separately by the end user.
 
 Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a> for help on installing the required components.
 TXT;
-                               // @codingStandardsIgnoreEnd
-                       }
-                       $e = new ErrorException( $msg, 0, $lastError['type'] );
-                       self::logError( $e, 'fatal' );
+                       // @codingStandardsIgnoreEnd
                }
+
+               // We can't just create an exception and log it as it is likely that
+               // the interpreter has unwound the stack already. If that is true the
+               // stacktrace we would get would be functionally empty. If however we
+               // have been called as an error handler callback *and* HHVM is in use
+               // we will have been provided with a useful stacktrace that we can
+               // log.
+               $trace = $trace ?: debug_backtrace();
+               $logger = LoggerFactory::getInstance( 'fatal' );
+               $logger->error( $msg, array(
+                       'exception' => array(
+                               'class' => 'ErrorException',
+                               'message' => "PHP Fatal Error: {$message}",
+                               'code' => $level,
+                               'file' => $file,
+                               'line' => $line,
+                               'trace' => static::redactTrace( $trace ),
+                       ),
+                       'exception_id' => wfRandomString( 8 ),
+               ) );
+
+               // Remember call so we don't double process via HHVM's fatal
+               // notifications and the shutdown hook behavior
+               static::$handledFatalCallback = true;
+               return false;
        }
 
        /**
@@ -275,34 +350,34 @@ TXT;
         * Like Exception::getTraceAsString, but replaces argument values with
         * argument type or class name.
         *
-        * @param Exception $e
+        * @param Exception|Throwable $e
         * @return string
+        * @see prettyPrintTrace()
         */
-       public static function getRedactedTraceAsString( Exception $e ) {
-               return self::prettyPrintRedactedTrace(
-                       self::getRedactedTrace( $e )
-               );
+       public static function getRedactedTraceAsString( $e ) {
+               return self::prettyPrintTrace( self::getRedactedTrace( $e ) );
        }
 
        /**
-        * Generate a string representation of a structured stack trace generated
-        * by getRedactedTrace().
+        * Generate a string representation of a stacktrace.
         *
         * @param array $trace
+        * @param string $pad Constant padding to add to each line of trace
         * @return string
         * @since 1.26
         */
-       public static function prettyPrintRedactedTrace( array $trace ) {
+       public static function prettyPrintTrace( array $trace, $pad = '' ) {
                $text = '';
 
                foreach ( $trace as $level => $frame ) {
                        if ( isset( $frame['file'] ) && isset( $frame['line'] ) ) {
-                               $text .= "#{$level} {$frame['file']}({$frame['line']}): ";
+                               $text .= "{$pad}#{$level} {$frame['file']}({$frame['line']}): ";
                        } else {
-                               // 'file' and 'line' are unset for calls via call_user_func (bug 55634)
-                               // This matches behaviour of Exception::getTraceAsString to instead
-                               // display "[internal function]".
-                               $text .= "#{$level} [internal function]: ";
+                               // 'file' and 'line' are unset for calls via call_user_func
+                               // (bug 55634) This matches behaviour of
+                               // Exception::getTraceAsString to instead display "[internal
+                               // function]".
+                               $text .= "{$pad}#{$level} [internal function]: ";
                        }
 
                        if ( isset( $frame['class'] ) ) {
@@ -319,7 +394,7 @@ TXT;
                }
 
                $level = $level + 1;
-               $text .= "#{$level} {main}";
+               $text .= "{$pad}#{$level} {main}";
 
                return $text;
        }
@@ -332,10 +407,24 @@ TXT;
         * or its type (if the element is a PHP primitive).
         *
         * @since 1.22
-        * @param Exception $e
+        * @param Exception|Throwable $e
         * @return array
         */
-       public static function getRedactedTrace( Exception $e ) {
+       public static function getRedactedTrace( $e ) {
+               return static::redactTrace( $e->getTrace() );
+       }
+
+       /**
+        * Redact a stacktrace generated by Exception::getTrace(),
+        * debug_backtrace() or similar means. Replaces each element in each
+        * frame's argument array with the name of its class (if the element is an
+        * object) or its type (if the element is a PHP primitive).
+        *
+        * @since 1.26
+        * @param array $trace Stacktrace
+        * @return array Stacktrace with arugment values converted to data types
+        */
+       public static function redactTrace( array $trace ) {
                return array_map( function ( $frame ) {
                        if ( isset( $frame['args'] ) ) {
                                $frame['args'] = array_map( function ( $arg ) {
@@ -343,7 +432,7 @@ TXT;
                                }, $frame['args'] );
                        }
                        return $frame;
-               }, $e->getTrace() );
+               }, $trace );
        }
 
        /**
@@ -353,10 +442,10 @@ TXT;
         * $wgShowExceptionDetails is set to false), to the entry in the debug log.
         *
         * @since 1.22
-        * @param Exception $e
+        * @param Exception|Throwable $e
         * @return string
         */
-       public static function getLogId( Exception $e ) {
+       public static function getLogId( $e ) {
                if ( !isset( $e->_mwLogId ) ) {
                        $e->_mwLogId = wfRandomString( 8 );
                }
@@ -382,10 +471,10 @@ TXT;
         * Get a message formatting the exception message and its origin.
         *
         * @since 1.22
-        * @param Exception $e
+        * @param Exception|Throwable $e
         * @return string
         */
-       public static function getLogMessage( Exception $e ) {
+       public static function getLogMessage( $e ) {
                $id = self::getLogId( $e );
                $type = get_class( $e );
                $file = $e->getFile();
@@ -403,12 +492,13 @@ TXT;
         * exception that can be used to augment a log message sent to a PSR-3
         * logger.
         *
-        * @param Exception $e
+        * @param Exception|Throwable $e
         * @return array
         */
-       public static function getLogContext( Exception $e ) {
+       public static function getLogContext( $e ) {
                return array(
                        'exception' => $e,
+                       'exception_id' => static::getLogId( $e ),
                );
        }
 
@@ -419,11 +509,11 @@ TXT;
         * backtrace) derived from the given exception. The backtrace information
         * will be redacted as per getRedactedTraceAsArray().
         *
-        * @param Exception $e
+        * @param Exception|Throwable $e
         * @return array
         * @since 1.26
         */
-       public static function getStructuredExceptionData( Exception $e ) {
+       public static function getStructuredExceptionData( $e ) {
                global $wgLogExceptionBacktrace;
                $data = array(
                        'id' => self::getLogId( $e ),
@@ -502,12 +592,12 @@ TXT;
         * @endcode
         *
         * @since 1.23
-        * @param Exception $e
+        * @param Exception|Throwable $e
         * @param bool $pretty Add non-significant whitespace to improve readability (default: false).
         * @param int $escaping Bitfield consisting of FormatJson::.*_OK class constants.
         * @return string|false JSON string if successful; false upon failure
         */
-       public static function jsonSerializeException( Exception $e, $pretty = false, $escaping = 0 ) {
+       public static function jsonSerializeException( $e, $pretty = false, $escaping = 0 ) {
                $data = self::getStructuredExceptionData( $e );
                return FormatJson::encode( $data, $pretty, $escaping );
        }
@@ -519,9 +609,9 @@ TXT;
         * it is also used to handle PHP exceptions or exceptions from other libraries.
         *
         * @since 1.22
-        * @param Exception $e
+        * @param Exception|Throwable $e
         */
-       public static function logException( Exception $e ) {
+       public static function logException( $e ) {
                if ( !( $e instanceof MWException ) || $e->isLoggable() ) {
                        $logger = LoggerFactory::getInstance( 'exception' );
                        $logger->error(
@@ -548,7 +638,8 @@ TXT;
        */
        protected static function logError( ErrorException $e, $channel ) {
                // The set_error_handler callback is independent from error_reporting.
-               // Filter out unwanted errors manually (e.g. when MediaWiki\suppressWarnings is active).
+               // Filter out unwanted errors manually (e.g. when
+               // MediaWiki\suppressWarnings is active).
                $suppressed = ( error_reporting() & $e->getSeverity() ) === 0;
                if ( !$suppressed ) {
                        $logger = LoggerFactory::getInstance( $channel );
index fa1c462..cd82ab1 100644 (file)
@@ -387,6 +387,8 @@ abstract class FileBackend {
 
        /**
         * @see FileBackend::doOperations()
+        * @param array $ops
+        * @param array $opts
         */
        abstract protected function doOperationsInternal( array $ops, array $opts );
 
@@ -620,6 +622,7 @@ abstract class FileBackend {
 
        /**
         * @see FileBackend::doQuickOperations()
+        * @param array $ops
         * @since 1.20
         */
        abstract protected function doQuickOperationsInternal( array $ops );
@@ -765,6 +768,7 @@ abstract class FileBackend {
 
        /**
         * @see FileBackend::prepare()
+        * @param array $params
         */
        abstract protected function doPrepare( array $params );
 
@@ -795,6 +799,7 @@ abstract class FileBackend {
 
        /**
         * @see FileBackend::secure()
+        * @param array $params
         */
        abstract protected function doSecure( array $params );
 
@@ -827,6 +832,7 @@ abstract class FileBackend {
 
        /**
         * @see FileBackend::publish()
+        * @param array $params
         */
        abstract protected function doPublish( array $params );
 
@@ -852,6 +858,7 @@ abstract class FileBackend {
 
        /**
         * @see FileBackend::clean()
+        * @param array $params
         */
        abstract protected function doClean( array $params );
 
@@ -1295,7 +1302,7 @@ abstract class FileBackend {
         *
         * @param array $ops List of file operations to FileBackend::doOperations()
         * @param Status $status Status to update on lock/unlock
-        * @return array List of ScopedFileLocks or null values
+        * @return ScopedLock|null
         * @since 1.20
         */
        abstract public function getScopedLocksForOps( array $ops, Status $status );
index d27d2c6..1603d44 100644 (file)
  * Only use this class when transitioning from one storage system to another.
  *
  * Read operations are only done on the 'master' backend for consistency.
- * Write operations are performed on all backends, in the order defined.
- * If an operation fails on one backend it will be rolled back from the others.
+ * Write operations are performed on all backends, starting with the master.
+ * This makes a best-effort to have transactional semantics, but since requests
+ * may sometimes fail, the use of "autoResync" or background scripts to fix
+ * inconsistencies is important.
  *
  * @ingroup FileBackend
  * @since 1.19
  */
 class FileBackendMultiWrite extends FileBackend {
-       /** @var array Prioritized list of FileBackendStore objects.
-        * array of (backend index => backends)
-        */
+       /** @var FileBackendStore[] Prioritized list of FileBackendStore objects */
        protected $backends = array();
 
        /** @var int Index of master backend */
        protected $masterIndex = -1;
+       /** @var int Index of read affinity backend */
+       protected $readIndex = -1;
 
        /** @var int Bitfield */
        protected $syncChecks = 0;
@@ -54,12 +56,6 @@ class FileBackendMultiWrite extends FileBackend {
        /** @var string|bool */
        protected $autoResync = false;
 
-       /** @var array */
-       protected $noPushDirConts = array();
-
-       /** @var bool */
-       protected $noPushQuickOps = false;
-
        /* Possible internal backend consistency checks */
        const CHECK_SIZE = 1;
        const CHECK_TIME = 2;
@@ -75,6 +71,7 @@ class FileBackendMultiWrite extends FileBackend {
         *                      FileBackendStore class, but with these additional settings:
         *                        - class         : The name of the backend class
         *                        - isMultiMaster : This must be set for one backend.
+        *                        - readAffinity  : Use this for reads without 'latest' set.
         *                        - template:     : If given a backend name, this will use
         *                                          the config of that backend as a template.
         *                                          Values specified here take precedence.
@@ -88,8 +85,6 @@ class FileBackendMultiWrite extends FileBackend {
         *                      Use "conservative" to limit resyncing to copying newer master
         *                      backend files over older (or non-existing) clone backend files.
         *                      Cases that cannot be handled will result in operation abortion.
-        *   - noPushQuickOps : (hack) Only apply doQuickOperations() to the master backend.
-        *   - noPushDirConts : (hack) Only apply directory functions to the master backend.
         *
         * @param array $config
         * @throws FileBackendError
@@ -102,12 +97,6 @@ class FileBackendMultiWrite extends FileBackend {
                $this->autoResync = isset( $config['autoResync'] )
                        ? $config['autoResync']
                        : false;
-               $this->noPushQuickOps = isset( $config['noPushQuickOps'] )
-                       ? $config['noPushQuickOps']
-                       : false;
-               $this->noPushDirConts = isset( $config['noPushDirConts'] )
-                       ? $config['noPushDirConts']
-                       : array();
                // Construct backends here rather than via registration
                // to keep these backends hidden from outside the proxy.
                $namesUsed = array();
@@ -134,6 +123,9 @@ class FileBackendMultiWrite extends FileBackend {
                                $this->masterIndex = $index; // this is the "master"
                                $config['fileJournal'] = $this->fileJournal; // log under proxy backend
                        }
+                       if ( !empty( $config['readAffinity'] ) ) {
+                               $this->readIndex = $index; // prefer this for reads
+                       }
                        // Create sub-backend object
                        if ( !isset( $config['class'] ) ) {
                                throw new FileBackendError( 'No class given for a backend config.' );
@@ -144,6 +136,9 @@ class FileBackendMultiWrite extends FileBackend {
                if ( $this->masterIndex < 0 ) { // need backends and must have a master
                        throw new FileBackendError( 'No master backend defined.' );
                }
+               if ( $this->readIndex < 0 ) {
+                       $this->readIndex = $this->masterIndex; // default
+               }
        }
 
        final protected function doOperationsInternal( array $ops, array $opts ) {
@@ -154,6 +149,7 @@ class FileBackendMultiWrite extends FileBackend {
                // Try to lock those files for the scope of this function...
                if ( empty( $opts['nonLocking'] ) ) {
                        // Try to lock those files for the scope of this function...
+                       /** @noinspection PhpUnusedLocalVariableInspection */
                        $scopeLock = $this->getScopedLocksForOps( $ops, $status );
                        if ( !$status->isOK() ) {
                                return $status; // abort
@@ -460,12 +456,10 @@ class FileBackendMultiWrite extends FileBackend {
                $masterStatus = $this->backends[$this->masterIndex]->doQuickOperations( $realOps );
                $status->merge( $masterStatus );
                // Propagate the operations to the clone backends...
-               if ( !$this->noPushQuickOps ) {
-                       foreach ( $this->backends as $index => $backend ) {
-                               if ( $index !== $this->masterIndex ) { // not done already
-                                       $realOps = $this->substOpBatchPaths( $ops, $backend );
-                                       $status->merge( $backend->doQuickOperations( $realOps ) );
-                               }
+               foreach ( $this->backends as $index => $backend ) {
+                       if ( $index !== $this->masterIndex ) { // not done already
+                               $realOps = $this->substOpBatchPaths( $ops, $backend );
+                               $status->merge( $backend->doQuickOperations( $realOps ) );
                        }
                }
                // Make 'success', 'successCount', and 'failCount' fields reflect
@@ -478,24 +472,11 @@ class FileBackendMultiWrite extends FileBackend {
                return $status;
        }
 
-       /**
-        * @param string $path Storage path
-        * @return bool Path container should have dir changes pushed to all backends
-        */
-       protected function replicateContainerDirChanges( $path ) {
-               list( , $shortCont, ) = self::splitStoragePath( $path );
-
-               return !in_array( $shortCont, $this->noPushDirConts );
-       }
-
        protected function doPrepare( array $params ) {
                $status = Status::newGood();
-               $replicate = $this->replicateContainerDirChanges( $params['dir'] );
                foreach ( $this->backends as $index => $backend ) {
-                       if ( $replicate || $index == $this->masterIndex ) {
-                               $realParams = $this->substOpPaths( $params, $backend );
-                               $status->merge( $backend->doPrepare( $realParams ) );
-                       }
+                       $realParams = $this->substOpPaths( $params, $backend );
+                       $status->merge( $backend->doPrepare( $realParams ) );
                }
 
                return $status;
@@ -503,12 +484,9 @@ class FileBackendMultiWrite extends FileBackend {
 
        protected function doSecure( array $params ) {
                $status = Status::newGood();
-               $replicate = $this->replicateContainerDirChanges( $params['dir'] );
                foreach ( $this->backends as $index => $backend ) {
-                       if ( $replicate || $index == $this->masterIndex ) {
-                               $realParams = $this->substOpPaths( $params, $backend );
-                               $status->merge( $backend->doSecure( $realParams ) );
-                       }
+                       $realParams = $this->substOpPaths( $params, $backend );
+                       $status->merge( $backend->doSecure( $realParams ) );
                }
 
                return $status;
@@ -516,12 +494,9 @@ class FileBackendMultiWrite extends FileBackend {
 
        protected function doPublish( array $params ) {
                $status = Status::newGood();
-               $replicate = $this->replicateContainerDirChanges( $params['dir'] );
                foreach ( $this->backends as $index => $backend ) {
-                       if ( $replicate || $index == $this->masterIndex ) {
-                               $realParams = $this->substOpPaths( $params, $backend );
-                               $status->merge( $backend->doPublish( $realParams ) );
-                       }
+                       $realParams = $this->substOpPaths( $params, $backend );
+                       $status->merge( $backend->doPublish( $realParams ) );
                }
 
                return $status;
@@ -529,12 +504,9 @@ class FileBackendMultiWrite extends FileBackend {
 
        protected function doClean( array $params ) {
                $status = Status::newGood();
-               $replicate = $this->replicateContainerDirChanges( $params['dir'] );
                foreach ( $this->backends as $index => $backend ) {
-                       if ( $replicate || $index == $this->masterIndex ) {
-                               $realParams = $this->substOpPaths( $params, $backend );
-                               $status->merge( $backend->doClean( $realParams ) );
-                       }
+                       $realParams = $this->substOpPaths( $params, $backend );
+                       $status->merge( $backend->doClean( $realParams ) );
                }
 
                return $status;
@@ -542,44 +514,52 @@ class FileBackendMultiWrite extends FileBackend {
 
        public function concatenate( array $params ) {
                // We are writing to an FS file, so we don't need to do this per-backend
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
 
-               return $this->backends[$this->masterIndex]->concatenate( $realParams );
+               return $this->backends[$index]->concatenate( $realParams );
        }
 
        public function fileExists( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
 
-               return $this->backends[$this->masterIndex]->fileExists( $realParams );
+               return $this->backends[$index]->fileExists( $realParams );
        }
 
        public function getFileTimestamp( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
 
-               return $this->backends[$this->masterIndex]->getFileTimestamp( $realParams );
+               return $this->backends[$index]->getFileTimestamp( $realParams );
        }
 
        public function getFileSize( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
 
-               return $this->backends[$this->masterIndex]->getFileSize( $realParams );
+               return $this->backends[$index]->getFileSize( $realParams );
        }
 
        public function getFileStat( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
 
-               return $this->backends[$this->masterIndex]->getFileStat( $realParams );
+               return $this->backends[$index]->getFileStat( $realParams );
        }
 
        public function getFileXAttributes( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
 
-               return $this->backends[$this->masterIndex]->getFileXAttributes( $realParams );
+               return $this->backends[$index]->getFileXAttributes( $realParams );
        }
 
        public function getFileContentsMulti( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
-               $contentsM = $this->backends[$this->masterIndex]->getFileContentsMulti( $realParams );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
+
+               $contentsM = $this->backends[$index]->getFileContentsMulti( $realParams );
 
                $contents = array(); // (path => FSFile) mapping using the proxy backend's name
                foreach ( $contentsM as $path => $data ) {
@@ -590,26 +570,31 @@ class FileBackendMultiWrite extends FileBackend {
        }
 
        public function getFileSha1Base36( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
 
-               return $this->backends[$this->masterIndex]->getFileSha1Base36( $realParams );
+               return $this->backends[$index]->getFileSha1Base36( $realParams );
        }
 
        public function getFileProps( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
 
-               return $this->backends[$this->masterIndex]->getFileProps( $realParams );
+               return $this->backends[$index]->getFileProps( $realParams );
        }
 
        public function streamFile( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
 
-               return $this->backends[$this->masterIndex]->streamFile( $realParams );
+               return $this->backends[$index]->streamFile( $realParams );
        }
 
        public function getLocalReferenceMulti( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
-               $fsFilesM = $this->backends[$this->masterIndex]->getLocalReferenceMulti( $realParams );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
+
+               $fsFilesM = $this->backends[$index]->getLocalReferenceMulti( $realParams );
 
                $fsFiles = array(); // (path => FSFile) mapping using the proxy backend's name
                foreach ( $fsFilesM as $path => $fsFile ) {
@@ -620,8 +605,10 @@ class FileBackendMultiWrite extends FileBackend {
        }
 
        public function getLocalCopyMulti( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
-               $tempFilesM = $this->backends[$this->masterIndex]->getLocalCopyMulti( $realParams );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
+
+               $tempFilesM = $this->backends[$index]->getLocalCopyMulti( $realParams );
 
                $tempFiles = array(); // (path => TempFSFile) mapping using the proxy backend's name
                foreach ( $tempFilesM as $path => $tempFile ) {
@@ -632,9 +619,10 @@ class FileBackendMultiWrite extends FileBackend {
        }
 
        public function getFileHttpUrl( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
 
-               return $this->backends[$this->masterIndex]->getFileHttpUrl( $realParams );
+               return $this->backends[$index]->getFileHttpUrl( $realParams );
        }
 
        public function directoryExists( array $params ) {
@@ -667,13 +655,15 @@ class FileBackendMultiWrite extends FileBackend {
        }
 
        public function preloadCache( array $paths ) {
-               $realPaths = $this->substPaths( $paths, $this->backends[$this->masterIndex] );
-               $this->backends[$this->masterIndex]->preloadCache( $realPaths );
+               $realPaths = $this->substPaths( $paths, $this->backends[$this->readIndex] );
+               $this->backends[$this->readIndex]->preloadCache( $realPaths );
        }
 
        public function preloadFileStat( array $params ) {
-               $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
-               return $this->backends[$this->masterIndex]->preloadFileStat( $realParams );
+               $index = $this->getReadIndexFromParams( $params );
+               $realParams = $this->substOpPaths( $params, $this->backends[$index] );
+
+               return $this->backends[$index]->preloadFileStat( $realParams );
        }
 
        public function getScopedLocksForOps( array $ops, Status $status ) {
@@ -688,6 +678,14 @@ class FileBackendMultiWrite extends FileBackend {
                );
 
                // Actually acquire the locks
-               return array( $this->getScopedFileLocks( $pbPaths, 'mixed', $status ) );
+               return $this->getScopedFileLocks( $pbPaths, 'mixed', $status );
+       }
+
+       /**
+        * @param array $params
+        * @return int The master or read affinity backend index, based on $params['latest']
+        */
+       protected function getReadIndexFromParams( array $params ) {
+               return !empty( $params['latest'] ) ? $this->masterIndex : $this->readIndex;
        }
 }
index e4b07b8..9433964 100644 (file)
@@ -1058,7 +1058,7 @@ abstract class FileBackendStore extends FileBackend {
        public function getScopedLocksForOps( array $ops, Status $status ) {
                $paths = $this->getPathsToLockForOpsInternal( $this->getOperationsInternal( $ops ) );
 
-               return array( $this->getScopedFileLocks( $paths, 'mixed', $status ) );
+               return $this->getScopedFileLocks( $paths, 'mixed', $status );
        }
 
        final protected function doOperationsInternal( array $ops, array $opts ) {
@@ -1076,6 +1076,7 @@ abstract class FileBackendStore extends FileBackend {
                        // Build up a list of files to lock...
                        $paths = $this->getPathsToLockForOpsInternal( $performOps );
                        // Try to lock those files for the scope of this function...
+
                        $scopeLock = $this->getScopedFileLocks( $paths, 'mixed', $status );
                        if ( !$status->isOK() ) {
                                return $status; // abort
index 615ba77..8115fd4 100644 (file)
@@ -102,7 +102,6 @@ abstract class LockManager {
         * @since 1.22
         */
        final public function lockByType( array $pathsByType, $timeout = 0 ) {
-               $status = Status::newGood();
                $pathsByType = $this->normalizePathsByType( $pathsByType );
                $msleep = array( 0, 50, 100, 300, 500 ); // retry backoff times
                $start = microtime( true );
index 3677a14..f40d216 100644 (file)
@@ -213,14 +213,15 @@ abstract class File implements IDBAccessObject {
        }
 
        /**
-        * Normalize a file extension to the common form, and ensure it's clean.
-        * Extensions with non-alphanumeric characters will be discarded.
+        * Normalize a file extension to the common form, making it lowercase and checking some synonyms,
+        * and ensure it's clean. Extensions with non-alphanumeric characters will be discarded.
+        * Keep in sync with mw.Title.normalizeExtension() in JS.
         *
-        * @param string $ext (without the .)
-        * @return string
+        * @param string $extension File extension (without the leading dot)
+        * @return string File extension in canonical form
         */
-       static function normalizeExtension( $ext ) {
-               $lower = strtolower( $ext );
+       static function normalizeExtension( $extension ) {
+               $lower = strtolower( $extension );
                $squish = array(
                        'htm' => 'html',
                        'jpeg' => 'jpg',
index 4070553..d2c37e6 100644 (file)
@@ -502,9 +502,17 @@ class LocalFile extends File {
                        $decoded['mime'] = $decoded['major_mime'] . '/' . $decoded['minor_mime'];
                }
 
-               # Trim zero padding from char/binary field
+               // Trim zero padding from char/binary field
                $decoded['sha1'] = rtrim( $decoded['sha1'], "\0" );
 
+               // Normalize some fields to integer type, per their database definition.
+               // Use unary + so that overflows will be upgraded to double instead of
+               // being trucated as with intval(). This is important to allow >2GB
+               // files on 32-bit systems.
+               foreach ( array( 'size', 'width', 'height', 'bits' ) as $field ) {
+                       $decoded[$field] = +$decoded[$field];
+               }
+
                return $decoded;
        }
 
index 38729a5..08fa0a9 100644 (file)
@@ -898,6 +898,7 @@ class HTMLForm extends ContextSource {
                # For good measure (it is the default)
                $this->getOutput()->preventClickjacking();
                $this->getOutput()->addModules( 'mediawiki.htmlform' );
+               $this->getOutput()->addModuleStyles( 'mediawiki.htmlform.styles' );
 
                $html = ''
                        . $this->getErrors( $submitResult )
index 0fab033..13756e3 100644 (file)
@@ -920,7 +920,7 @@ abstract class HTMLFormField {
         * @return array Attributes
         */
        public function getAttributes( array $list, array $mappings = null ) {
-               static $boolAttribs = array( 'disabled', 'required', 'multiple', 'readonly' );
+               static $boolAttribs = array( 'disabled', 'required', 'autofocus', 'multiple', 'readonly' );
 
                $ret = array();
                foreach ( $list as $key ) {
@@ -928,7 +928,7 @@ abstract class HTMLFormField {
 
                        if ( in_array( $key, $boolAttribs ) ) {
                                if ( !empty( $this->mParams[$key] ) ) {
-                                       $ret[$mappedKey] = '';
+                                       $ret[$mappedKey] = $mappedKey;
                                }
                        } elseif ( isset( $this->mParams[$key] ) ) {
                                $ret[$mappedKey] = $this->mParams[$key];
index 5cfea63..aeb4b7c 100644 (file)
@@ -71,11 +71,6 @@ class HTMLTextAreaField extends HTMLFormField {
                        'readonly' => 'readOnly',
                ) );
 
-               if ( isset( $attribs['readOnly'] ) ) {
-                       // this needs to be set to a boolean value - hack??
-                       $attribs['readOnly'] = true;
-               }
-
                return new OOUI\TextInputWidget( array(
                        'id' => $this->mID,
                        'name' => $this->mName,
index 40cff47..157116d 100644 (file)
@@ -113,11 +113,6 @@ class HTMLTextField extends HTMLFormField {
                        'tabindex' => 'tabIndex',
                ) );
 
-               if ( isset( $attribs['readOnly'] ) ) {
-                       // This needs to be set to a boolean value
-                       $attribs['readOnly'] = true;
-               }
-
                $type = $this->getType( $attribs );
 
                return $this->getInputWidget( array(
index 7b1cfdc..09b5929 100644 (file)
@@ -332,9 +332,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 ## https://www.mediawiki.org/wiki/Manual:Short_URL
 \$wgScriptPath = \"{$this->values['wgScriptPath']}\";
 ${serverSetting}
-## The relative URL path to the skins directory
-\$wgStylePath = \"\$wgScriptPath/skins\";
-\$wgResourceBasePath = \$wgScriptPath;
 
 ## The relative URL path to the logo.  Make sure you change this from the default,
 ## or else you'll overwrite your logo when you upgrade!
index 5a8403f..4d79d96 100644 (file)
@@ -537,7 +537,6 @@ class MssqlInstaller extends DatabaseInstaller {
                $this->setupSchemaVars();
                $dbName = $this->getVar( 'wgDBname' );
                $this->db->selectDB( $dbName );
-               $server = $this->getVar( 'wgDBserver' );
                $password = $this->getVar( 'wgDBpassword' );
                $schemaName = $this->getVar( 'wgDBmwschema' );
 
index 201ef71..13755e3 100644 (file)
        "config-license-cc-by": "المشاع الإبداعي النسبة للمؤلف",
        "config-license-cc-by-nc-sa": "المشاع الإبداعي النسبة للمؤلف غير تجاري المشاركة بالمثل",
        "config-license-pd": "ملكية عامة",
+       "config-license-cc-choose": "اختر ترخيص مشاع إبداعي مخصص",
        "config-email-settings": "إعدادات البريد الإلكتروني",
        "config-email-usertalk": "فعل إخطارات صفحات نقاش المستخدمين",
        "config-email-watchlist": "تمكين إشعارات قائمة المراقبة",
index 775e6e6..ba0ad68 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Mousa",
                        "Koroğlu",
-                       "Ebrahimi-amir"
+                       "Ebrahimi-amir",
+                       "Alp Er Tunqa"
                ]
        },
        "config-desc": "مئدیاویکی قوروجوسو",
@@ -23,7 +24,7 @@
        "config-page-readme": "منی اوخو",
        "config-env-php": "PHP $1 قورولوبدور.",
        "config-env-hhvm": "HHVM $1 قورولوبدور.",
-       "config-help": "یاردیم",
+       "config-help": "کؤمک",
        "config-help-tooltip": "گئنیشلتمک اوچون کلیک ائدین",
        "config-nofile": "«$1» فایلی تاپیلانمادی. سیلینیبدیرمی؟"
 }
index d8405cf..8109c2e 100644 (file)
@@ -48,7 +48,9 @@
        "config-env-hhvm": "Το HHVM $1 είναι εγκατεστημένο.",
        "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Εάν λειτουργείτε έναν ιστότοπο υψηλής επισκεψιμότητας, θα πρέπει να ρίξετε μια ματιά στην [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations κανονικοποίηση Unicode].",
+       "config-xcache": "[http://xcache.lighttpd.net/ Το XCache] είναι εγκατεστημένο",
        "config-apc": "Το [http://www.php.net/apc APC] είναι εγκατεστημένο",
+       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp Το WinCache] είναι εγκατεστημένο",
        "config-diff3-bad": "Το GNU diff3 δεν βρέθηκε.",
        "config-db-type": "Τύπος βάσης δεδομένων:",
        "config-db-host": "Φιλοξενία βάσης δεδομένων:",
index 1262388..7e34f96 100644 (file)
        "config-mysql-utf8": "UTF-8",
        "config-mysql-charset-help": "En '''modo binario''', MediaWiki almacena texto UTF-8 para la base de datos en campos binarios.\nEsto es más eficiente que el modo UTF-8 de MySQL y le permite utilizar la gama completa de caracteres Unicode.\n\nEn '''modo UTF-8''', MySQL sabrá qué conjunto de caracteres emplean sus datos y puede presentarlos y convertirlos adecuadamente, pero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
        "config-mssql-auth": "Tipo de autenticación:",
-       "config-mssql-install-auth": "Seleccione el tipo de autenticación que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nSi selecciona \"{{int:config-mssql-windowsauth}}\", las credenciales de cualquier usuario de el servidor web que se está ejecutando van a ser utilizadas.",
+       "config-mssql-install-auth": "Selecciona el tipo de autenticación que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nSi seleccionas \"{{int:config-mssql-windowsauth}}\", se usarán las credenciales del usuario con el que se ejecuta el servidor web.",
        "config-mssql-web-auth": "Selecciona el tipo de autenticación que utilizará el servidor web para conectarse al servidor de base de datos, durante el funcionamiento normal de la wiki.\nSi seleccionas \"{{int:config-mssql-windowsauth}}\", se usarán las credenciales del usuario con el cual se ejecuta el servidor web.",
        "config-mssql-sqlauth": "Autenticación de SQL Server",
        "config-mssql-windowsauth": "Autentificación de Windows",
        "config-admin-error-bademail": "Has escrito una dirección de correo electrónico no válida.",
        "config-subscribe": "Suscribirse a la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de correo de anuncios de versiones].",
        "config-subscribe-help": "Esta es una lista de divulgación de bajo volumen para anuncios de lanzamiento de versiones nuevas, incluyendo anuncios de seguridad importantes.\nTe recomendamos suscribirte y actualizar tu instalación MediaWiki cada vez que se lance una nueva versión.",
-       "config-subscribe-noemail": "Ha intentado suscribirse a la lista de correo de anuncios de nuevos lanzamientos sin proporcionar una dirección de correo electrónico.\nProporcione una dirección de correo electrónico si desea suscribirse a la lista de correo.",
+       "config-subscribe-noemail": "Has intentado suscribirte a la lista de correo de anuncios de nuevos lanzamientos sin proporcionar una dirección de correo electrónico.\nProporciona una dirección de correo electrónico si quieres suscribirte a la lista de correo.",
        "config-almost-done": "¡Ya casi has terminado!\nAhora puedes saltarte el resto de los pasos e instalar el wiki ya.",
        "config-optional-continue": "Hazme más preguntas.",
        "config-optional-skip": "Ya estoy aburrido, sólo instala el wiki.",
index cbe64d6..96c9fd3 100644 (file)
                        "Nemo bis",
                        "Ricordisamoa",
                        "Fpugliajno",
-                       "The Polish"
+                       "The Polish",
+                       "Sannita",
+                       "C.R."
                ]
        },
-       "config-desc": "Il programma di installazione per MediaWiki",
+       "config-desc": "Programma di installazione per MediaWiki",
        "config-title": "Installazione di MediaWiki $1",
        "config-information": "Informazioni",
        "config-localsettings-upgrade": "È stato rilevato un file <code>LocalSettings.php</code>.\nPer aggiornare questa installazione, si prega di inserire il valore di <code>$wgUpgradeKey</code> nella casella qui sotto.\nLo potete trovare in <code>LocalSettings.php</code>.",
        "config-mysql-charset": "Set di caratteri del database:",
        "config-mysql-binary": "Binario",
        "config-mysql-utf8": "UTF-8",
-       "config-mysql-charset-help": "In <strong>modalità binaria</strong>, MediaWiki archivia il testo UTF-8 nel database in cambi binari.\nQuesto è più efficiente rispetto alla modalità UTF-8 di MySQL, e consente di utilizzare la gamma completa di caratteri Unicode.\n\nIn <strong>modalità UTF-8</strong>, MySQL conoscerà in quale set di caratteri sono i tuoi dati, e può presentarli e convertirli in modo appropriato, ma non ti permetterà di memorizzare i caratteri al di sopra del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+       "config-mysql-charset-help": "In <strong>modalità binaria</strong>, MediaWiki archivia il testo UTF-8 nel database in campi binari.\nQuesto è più efficiente rispetto alla modalità UTF-8 di MySQL, e consente di utilizzare la gamma completa di caratteri Unicode.\n\nIn <strong>modalità UTF-8</strong>, MySQL conoscerà in quale set di caratteri sono i tuoi dati, e può presentarli e convertirli in modo appropriato, ma non ti permetterà di memorizzare i caratteri al di sopra del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
        "config-mssql-auth": "Tipo di autenticazione:",
        "config-mssql-install-auth": "Seleziona il tipo di autenticazione che verrà utilizzato per connettersi al database durante il processo di installazione.\nSe si seleziona \"{{int:config-mssql-windowsauth}}\", saranno utilizzate le credenziali dell'utente con cui viene eseguito il server web, qualunque esso sia.",
        "config-mssql-web-auth": "Seleziona il tipo di autenticazione che il server web utilizzerà per connettersi al database, durante il normale funzionamento del wiki.\nSe si seleziona \"{{int:config-mssql-windowsauth}}\", saranno utilizzate le credenziali dell'utente con cui viene eseguito il server web, qualunque esso sia.",
index 10119be..be3da58 100644 (file)
@@ -1,9 +1,10 @@
 {
        "@metadata": {
                "authors": [
-                       "Huslåke"
+                       "Huslåke",
+                       "Jyllanj"
                ]
        },
-       "mainpagetext": "'''MediaWiki er nu installeret.'''",
+       "mainpagetext": "'''MediaWiki ä nu installiirtj.'''",
        "mainpagedocfooter": "Se vores engelskspråĝede [//meta.wikimedia.org/wiki/MediaWiki_localisation dokumentåsje tilpasnenge'm åf æ brugergrænseflade] og [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide æ brugervejlednenge] før åplysnenger åpsætnenge'm og anvendelse."
 }
index b998e34..bffdf05 100644 (file)
        "config-email-sender": "De Adräß för de Antwoote op <i lang=\"en\">e-mails</i>:",
        "config-email-sender-help": "Jiff de Adräß för de <i lang=\"en\">e-mail</i> en, woh Antwoote ob em Wiki singe <i lang=\"en\">e-mails</i> hen jonn sulle.\nDat es och de Adräß, woh de <i lang=\"en\">e-mails</i> met Fählermäldonge hen jon.\nVill ẞöövere för de <i lang=\"en\">e-mail</i> welle winnischßdens ene jöltijje Domain en dä Adräß han.",
        "config-upload-settings": "Belder un Datteie huh laade",
-       "config-upload-enable": "Belder un Datteie huh laade zohlohße",
+       "config-upload-enable": "Et Belder un Datteie Huhlahde zohlohße",
        "config-upload-help": "Datteije huh ze laade künnt e Risiko för dem ẞööver singe Sescherheit sin.\nMieh doh drövver kam_mer em [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security Kapitel övver de Sescherheit] em Handbooch lässe.\n\nÖm et Huhlaade zohzelohße donn de Rääschde för der Zohjreff op dat Ongerverzeischneß <code lang=\"en\">images</code> em MediaWiki singem Houpverzeischneß esu enshtälle, dat et Webßööverprojramm doh Datteije un Verzeischneße eren schrieve kann.\nDonoh donn heh di Saach zohlohße.",
        "config-upload-deleted": "Dat Verzeishneß för fottjeschmeße Datteije:",
        "config-upload-deleted-help": "Söhk e Verzeijschneß uß för de fottjeschmeße Datteije vum Wiki dren afzelääje.\nEt bäß es, wam_mer vum <i lang=\"en\">world wide web</i> doh nit drahn kumme kann.",
        "config-install-extension-tables": "Ben Datebangk-Tabälle för de Zohsazprojramme aam ennreschte",
        "config-install-mainpage-failed": "Kunnt de Houpsigg nit afshpeishere: $1",
        "config-install-done": "'''Jlöckwonsch!'''\nMediaWiki es jetz enstalleet.\n\nEt Projramm zom Enreeschte hät en Dattei <code lang=\"en\">LocalSettings.php</code> aanjelaat.\nDoh sin de Enstellunge vum Wiki dren.\n\nDo weeß se eronge laade möße un dann en dem Wiki sing Aanfangsverzeishnes donn möße, et sellve Verzeisneß, woh di Dattei <code lang=\"en\">index.php</code> dren litt. Dat Erongerlaade sullt automattesch aanjefange han.\n\nWann domet jet nit jeflupp hät, udder De di Dattei norr_ens han wells, donn op dä Lengk heh dronger klecke:\n\n$3\n\n'''Opjepaß''': Wann De dat jez nit deihß, es alles verschött, wat De bes jöz enjejovve häs, weil di Dattei fott es en däm Momang, woh heh dat Projamm aam Engk es.\n\nWann De mem Ronger- un widder Huhlaade fäädesh bes, kanns De '''[$2 en Ding Wiki jonn]'''.",
-       "config-download-localsettings": "Donn di Dattei <code lang=\"en\">LocalSettings.php</code> eronger laade",
+       "config-download-localsettings": "Donn di Dattei <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">LocalSettings.php</code> eronger lahde",
        "config-help": "Hölp",
        "config-help-tooltip": "Donn Hölp heh aan däm Plaaz enblände.",
        "config-nofile": "De Dattei „$1“ ham_mer nit jefonge. Es di fottjeschmeße?",
index f94b70a..fd0ab3e 100644 (file)
@@ -51,7 +51,7 @@
        "config-unicode-using-intl": "Aúsa [http://pecl.php.net/intl l'estensione PECL intl] pe' ne fà 'a normalizzazione Unicode.",
        "config-unicode-pure-php-warning": "<strong>Attenziò:</strong> L' [http://pecl.php.net/intl estensione intl PECL] nun è a disposizione pe' gestire 'a normalizzazione Unicode, accussì se ausasse n'imprementazziona llenta 'n puro PHP.\nSi state a gestire nu pizzo ad alto traffico, avisseve a lieggere cocche considerazione ncopp' 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzaziona Unicode].",
        "config-unicode-update-warning": "<strong>Attenziò:</strong> 'A verziona installata 'e normalizzazione Unicode aùsa 'a verziona viecchia d' 'o [http://site.icu-project.org/ pruggetto ICU].\nV'avite 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations agghiurnà] si state a penzà ncopp' 'o fatto d'ausà Unicode.",
-       "config-no-db": "Nun se può truvà nu driver adatto p' 'o database! È necessario installare nu driver p' 'o PHP.\n{{PLURAL:$2|'O furmatto suppurtato|'E furmatte suppurtate}} 'e database ccà annanze: $1.\n\nSi cumpilate PHP autonomamente, riaccunciatevello attivando nu client database, p'esempio ausannoo <code>./configure --with-mysqli</code>.\nQuanno fosse installato PHP pe' bbìa 'e nu pacchetto Debian o Ubuntu, allora avite 'a installà pure 'o pacchetto <code>php5-mysql</code>.",
+       "config-no-db": "Nun se può truvà nu driver adatto p' 'o database! È necessario installare nu driver p' 'o PHP.\n{{PLURAL:$2|'O furmato suppurtato|'E furmate suppurtate}} 'e database ccà annanze: $1.\n\nSi cumpilate PHP autonomamente, riaccunciatevello attivando nu client database, p'esempio ausannoo <code>./configure --with-mysqli</code>.\nQuanno fosse installato PHP pe' bbìa 'e nu pacchetto Debian o Ubuntu, allora avite 'a installà pure 'o pacchetto <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Attenziò''': tenite 'o SQLite $1 pe' tramente ca ce vulesse 'a verziona $2, SQLite nun sarrà a disposizione.",
        "config-no-fts3": "'''Attenziò''': SQLite è cumpilato senza 'o [//sqlite.org/fts3.html modulo FTS3], 'e funziune 'e p'ascià dinto nun sarranno a disposizione ncopp'a stu backend.",
        "config-register-globals-error": "<strong>Errore: l'opzione PHP <code>[http://php.net/register_globals register_globals]</code> è apicciata.\nS'avesse 'a stutà pe' cuntinuà c' 'a installazione.</strong>\nVide [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] pe' n'avé n'aiuto ncopp'a comme s'avess'a ffà.",
        "config-mysql-engine": "Mutore d'astipo:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
+       "config-mysql-myisam-dep": "<strong>Attenziò:</strong> avite scigliuto MyISAM comm' 'o mutore 'archiviaziona MySQL, ca nun è raccummannato pe' l'ausà cu MediaWiki, pecché:\n* supporta debolmente 'a concorrenza p' 'o blocco d' 'a tabbella\n* è cchiù inchine 'a corruzione 'e l'ati mutore\n* 'o codece 'e base 'e MediaWiki nun gestisce sempe MyISAM comme l'avess'a gistiunà\n\nSi ll'installazione vosta MySQL suppuorta InnoDB, è autamente raccummandato ca si scigliesse a 'o posto suo.\nSi 'a installazione MySQL nun suppurtasse InnoDB, forse è 'o mumento 'e ll'agghiurnà.",
+       "config-mysql-only-myisam-dep": "<strong>Attenziò:</strong> MyISAM è l'uneco mutore p'astipà date ca se trova mo' a disposizione p' 'o MySQL dint'a sta macchina, e nun fosse raccumandato 'e s'ausà cu MediaWiki, pecché:\n* suppurtasse minimamente concorrenza pe' bbìa 'e bluccà tabbelle\n* è cchiù facile ca jesse a se scassà cchiù 'e l'ati mutore\n* 'o codece MediaWiki nun maniasse sempe MyISAM comme l'avesse 'e manià\n\nL'installazione MySQL nun suppurtasse InnoDB, può darse ca chist'è 'o mumento pe' ve ll'agghiurnà.",
        "config-mysql-engine-help": "<strong>InnoDB</strong> è quase sempe 'a meglia opzione, pecché ave nu buono suppuorto concorrente.\n\n<strong>MyISAM</strong> putesse ghì cchiù ampressa int'a na installazione mono-utente e liegge-surtanto.\n'E database MyISAM se scassano cchiù spisso d' 'e database InnoDB.",
        "config-mysql-charset": "Nzieme 'e carattere d' 'o database:",
        "config-mysql-binary": "Binario",
        "config-mysql-utf8": "UTF-8",
+       "config-mysql-charset-help": "Int'a <strong>modalità binaria</strong>, MediaWiki archiviasse 'o testo UTF-8 dint' 'o database a campe binarie.\nChest'è cchiù efficiente rispetto 'a modalità UTF-8 'e MySQL, e ve cunzente d'ausà 'a gamma cumpreta 'e carattere Unicode.\n\nInt'a <strong>modalità UTF-8</strong>, MySQL canoscesse dint'a quale set 'e carattere ce stanno 'e date vuoste, e putesse presentà e scagnà sti date int'a nu modo appropriato, ma nun ve premmettesse 'e dà memoria a 'e carattere ncopp' 'o [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Piano base Multilengua].",
        "config-mssql-auth": "Tipo d'autenticazione:",
        "config-mssql-install-auth": "Sceglie 'o tipo d'autenticazziona ca s'ausarrà pe cunnettà â database, durante ll'operazziona d'istallazziona. Si piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate.",
        "config-mssql-web-auth": "Sceglie 'o tipo d'autenticazziona ca 'o web server pigliarrà pe se cunnettà a 'o server 'e bbase 'e dati, durante ll'operazziona nurmale d' 'a wiki.\nSi piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate.",
        "config-ns-site-name": "'O stesso ch' 'o nomme d' 'o wiki: $1",
        "config-ns-other": "Ati (specificà)",
        "config-ns-other-default": "MyWiki",
+       "config-project-namespace-help": "Secutanno l'esempio 'e Wikipedia, tante wiki teneno 'e paggene lloro ch' 'e regole spartute d' 'e paggene 'e cuntenute, dint'a nu \"'''namespace 'e pruggetto'''\". Tuttuquante 'e titule d' 'e paggene dint'a stu namespace accummenciano cu nu certo prefisso ca se putesse nzegnà ccà.\n'O solito, stu prefisso vene d' 'o nomme d' 'o wiki, ma nun adda cuntenè carattere 'e punteggiatura comme fossero \"#\" o \":\".",
        "config-ns-invalid": "'O namespace specificato \"<nowiki>$1</nowiki>\" nun è buono.\nSpecificate nu namespace 'e pruggetto differente.",
        "config-ns-conflict": "'O namespace innecato \"<nowiki>$1</nowiki>\" tràse ncunflitto cu nu namespace predefinito 'e MediaWiki.\nSpecifiate n'atu nomme divierzo 'e namespace 'e pruggetto.",
        "config-admin-box": "Cunto ammenistratore",
        "config-admin-error-password": "Errore interno quanno se steva a mpustà na password pe ll'ammenistratore \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
        "config-admin-error-bademail": "Avite miso n'indirizzo e-mail invalido.",
        "config-subscribe": "Mettiteve dint' 'a [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list 'e ll'annunciazione 'e verziune d' 'o software rilassate].",
+       "config-subscribe-help": "Chest'è na mailing list a basso traffeco ca se dedicasse a se ffà annunzie 'e verziune nove, piglianno pure mpurtante nutarelle ca riguardassero 'a sicurezza.\nFosse cunzigliato 'e se nzegnà e s'agghiurnà l'installazione 'e MediaWiki quanno na verziona nova fosse pubbreca.",
+       "config-subscribe-noemail": "Vuje avite tentato 'e ve trasì dint' 'a mailing list addedecata a se fà annunzie ncopp' 'e verziune nove senza ve dà n'indirizzo email.\nNzertanno n'indirizzo email se vulite affettuà l'iscrizione dint'a mailing list.",
        "config-almost-done": "Avite quase fernuto!\nMo' putite zumpà 'a parta r' 'a configurazione e sempricemente installà 'a wiki.",
        "config-optional-continue": "Spiate cchiù dimanne.",
        "config-optional-skip": "Me so' scucciato già, installa surtanto 'o wiki.",
        "config-profile-no-anon": "Cunto utente obbligatorio",
        "config-profile-fishbowl": "Surtanto ll'editure premmesse",
        "config-profile-private": "Wiki privato",
+       "config-profile-help": "'E wiki funzionano meglio si se lassa ca tante perzone 'e putessero cagnà.\nInt'a MediaWiki, è semprice cuntrullà sti cagnamiente cchiù ricente, e arrepiglià 'e danne causate d' 'e prove o male ntenziune.\n\nAncora, nu cuofeno 'utente hanno truvato ca MediaWiki fosse utile int'a tante ruole, e cocche vota nun è facile 'e cunvencere tuttuquante ncopp' 'e vantagge d' 'a modalità wiki. Picciò facite 'a scelta vosta. Sciglite vuje.\n\n'O mudello <strong>{{int:config-profile-wiki}}</strong> cunzente a chiunque 'e cagnà, pure senza trasì.\nNu wiki cu <strong>{{int:config-profile-no-anon}}</strong> uffrisse na responsabilità maggiore, ma putesse scuraggià cocche cuntribbutore occasionale.\n\n'O  scenario <strong>{{int:config-profile-fishbowl}}</strong> cunzente l'utente autorizzate 'e cagnà, ma 'o pubbreco putesse vedé 'e paggene vedenno pure tutta quanta 'a cronologgia.\nNu <strong>{{int:config-profile-private}}</strong> cunzente ll'utente autorizzate surtanto 'e se vedé 'e paggene, 'o stesso gruppo 'e putesse cagnà.\n\nMpustaziune 'e deritte utente cchiù cumplesse songo a disposizione aropp'a l'installazione, vedite 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights parte relativa d' 'o manuale].",
        "config-license": "Copyright e licienza:",
        "config-license-none": "Nisciuno piede 'e paggena p' 'a licienza",
        "config-license-cc-by-sa": "Creative Commons Attribuziona-SparteEguale",
        "config-license-gfdl": "GNU Free Documentation License 1.3 o verziune aroppo",
        "config-license-pd": "Pubbreco duminio",
        "config-license-cc-choose": "Sciglite na licienza Creative Commons ca vulite",
+       "config-license-help": "Nu cuofeno 'e wiki pubbrece lassano 'e cuntribbute lloro cu na [http://freedomdefined.org/Definition licienza libbera]. Chesto aiutasse a crià nu senso 'e pruprietà spartuta dint'a communità e ncuraggiasse a cuntribbuiì a nu tèrmene luongo. Nun è generalmente necessario pe' nu wiki privato o aziendale.\n\nSi vulite ausà testi 'a Wikipedia, o vulite ca Wikipedia se pozza miette 'n grado d'accettà teste cupiate d' 'o wiki vuosto, avissev'a scegiere <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nApprimma Wikipedia aveva ausato 'a GNU Free Documentation License. 'A GFDL è una licienza valida, ma è di difficile comprensiona e complica 'o riutilizzo 'e cuntenute.",
        "config-email-settings": "Mpustaziune email",
        "config-enable-email": "Premmette mmasciate elettroniche r'asciuta",
        "config-email-user": "Premmette email utente-utente",
        "config-cc-not-chosen": "Sciglite quale licienza Creative Commons desiderate e cliccate ncopp' 'a \"prucede\".",
        "config-advanced-settings": "Configurazione avanzata",
        "config-cache-options": "Mpustaziune p' 'a cache d'oggette:",
+       "config-cache-none": "Nisciuna memorizzazione n cache (nisciuna funziunalità è luvata, ma 'a velocità se putesse ffà a meno dint' 'e wiki cchiù gruosse)",
+       "config-cache-accel": "Mettere 'n cache oggette PHP (APC, XCache o WinCache)",
+       "config-cache-memcached": "Aúsa 'o Memcached (richiede cchiù mpustaziune 'installazione e configuraziona)",
        "config-memcached-servers": "Server memcached:",
        "config-memcached-help": "Elenco 'e ll'indirizzi IP p' 'e putè ausà p' 'o Memcached.\nS'avess'a specificà uno pe' riga e scrivere 'a porta 'e trasuta. P'esempio:\n 127.0.0.1:11211\n 192.168.1.25:1234",
        "config-memcache-needservers": "È stato scigliuto 'o tipo 'e caching Memcached, ma nun è stato mpustato 'a nisciunu server.",
        "config-memcache-noport": "Nun avite specificato na porta p'ausà 'o server Memcached: $1. Si nun sapite 'a porta, chill' 'e default è 11211.",
        "config-memcache-badport": "'E nummere 'e porta 'e Memcached avesser'a stà nfra $1 e $2.",
        "config-extensions": "Estenziune",
+       "config-extensions-help": "L'estensiune elencate ncoppa so' state rilevate dint' 'a cartella vosta <code>./extensions</code>.\n\nChiste putessero richiedere nu poco 'e cchiù 'e mpustaziona, ma se putessero appiccià mo'",
        "config-skins": "Skin",
+       "config-skins-help": "'E skin elencate ncoppa so' state rilevate dint' 'a cartella vosta <code>./skins</code>. Avit'appiccià minimo una e ne scegliere chilla predefinita.",
+       "config-skins-use-as-default": "Aùsa sta skin comme predefinita",
+       "config-skins-missing": "Nisciuna skin s'è truvata, MediaWiki ausasse na soluzione 'e ripiego nfin'a quanno nun sarrà installata una buona.",
+       "config-skins-must-enable-some": "Avit'a scegliere minimo na skin p' 'a puté appiccià.",
+       "config-skins-must-enable-default": "'A skin scigliuta comme predefinita s'avess'appiccià.",
        "config-install-step-done": "fatto",
        "config-install-step-failed": "fallito",
        "config-install-extensions": "Ncludenno 'estenziune",
diff --git a/includes/installer/i18n/olo.json b/includes/installer/i18n/olo.json
new file mode 100644 (file)
index 0000000..9f8743c
--- /dev/null
@@ -0,0 +1,59 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mashoi7"
+               ]
+       },
+       "config-your-language": "Sinun kieli:",
+       "config-wiki-language": "Wikin kieli:",
+       "config-back": "← Järilleh",
+       "config-continue": "Jatka →",
+       "config-page-language": "Kieli",
+       "config-page-welcome": "Tule terveh MediaWikih!",
+       "config-page-dbconnect": "Yhtistä tiedokandah",
+       "config-page-dbsettings": "Tiedokanduazetukset",
+       "config-page-name": "Nimi",
+       "config-page-options": "Azetukset",
+       "config-page-install": "Azenda",
+       "config-page-complete": "Valmis!",
+       "config-page-readme": "Luve minut",
+       "config-page-copying": "Kopiruitah",
+       "config-page-upgradedoc": "Päivitetäh",
+       "config-page-existingwiki": "Olemasolii wiki",
+       "config-restart": "Muga, käynnistä uvvelleh",
+       "config-env-php": "PHP $1 on azendettu.",
+       "config-env-hhvm": "HHVM $1 on azendettu.",
+       "config-db-name": "Tiedokannan nimi:",
+       "config-db-username": "Tiedokannan käyttäinimi:",
+       "config-db-password": "Tiedokannan peittosana:",
+       "config-type-mssql": "Microsoft SQL Server",
+       "config-header-mysql": "MySQL-azetukset",
+       "config-header-postgres": "PostgreSQL-azetukset",
+       "config-header-sqlite": "SQLite-azetukset",
+       "config-header-oracle": "Oracle-azetukset",
+       "config-header-mssql": "Microsoft SQL Server azetukset",
+       "config-mysql-innodb": "InnoDB",
+       "config-mysql-myisam": "MyISAM",
+       "config-mysql-utf8": "UTF-8",
+       "config-site-name": "Wikin nimi:",
+       "config-site-name-blank": "Kirjuta sivun nimi.",
+       "config-project-namespace": "Projektan nimitila:",
+       "config-ns-generic": "Projektu",
+       "config-ns-other-default": "MinunWiki",
+       "config-admin-name": "Sinun käyttäitunnus:",
+       "config-admin-password": "Peittosana:",
+       "config-admin-password-confirm": "Peittosana myös:",
+       "config-admin-name-blank": "Kirjuta administruattoran käyttäinimi.",
+       "config-admin-password-blank": "Kirjuta administruattorutilin peittosana.",
+       "config-admin-password-mismatch": "Sinun kirjutetut kaksi peittosanua ei oldu yhtenjyttymät.",
+       "config-admin-email": "Sähköpoštuadressu:",
+       "config-optional-continue": "Kyzy minuspäi ližiä kyzymyksii.",
+       "config-optional-skip": "Olen jo terstavunnuh, vaiku azenda wiki.",
+       "config-email-settings": "Sähköpoštuazetukset",
+       "config-logo": "Logon URL:",
+       "config-skins": "Ketut",
+       "config-install-step-done": "ruattu",
+       "config-install-user-alreadyexists": "Käyttäi \"$1\" on jo olemas",
+       "config-help": "abu",
+       "config-nofile": "Failua \"$1\" ei löydynyh. Ongo se otettu iäre?"
+}
index 4d9fa38..27dddd3 100644 (file)
@@ -16,7 +16,8 @@
                        "Marcos dias de oliveira",
                        "Fasouzafreitas",
                        "TheEduGobi",
-                       "Dianakc"
+                       "Dianakc",
+                       "Walesson"
                ]
        },
        "config-desc": "O instalador do MediaWiki",
@@ -65,7 +66,7 @@
        "config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
        "config-unicode-pure-php-warning": "<strong>Aviso</strong>: A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode, abortando e passando para a lenta implementação de PHP puro.\nSe o seu site tem um alto volume de tráfego, informe-se sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalização Unicode].",
        "config-unicode-update-warning": "<strong>Aviso:</strong> A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [//www.site.icu-project.org/projeto ICU].\nVocê deve [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations atualizar] se você tem quaisquer preocupações com o uso do Unicode.",
-       "config-no-db": "Não foi possível encontrar um driver de banco de dados adequado! É necessário instalar um driver de banco de dados para o PHP.\nSão suportados os seguintes tipos de bancos de dados: $1.\n\nSe você mesmo tiver compilado o PHP, reconfigure-o com um cliente de banco de dados ativado usando, por exemplo <code>./configure --with-mysqli</code>.\nSe você instalou o PHP a partir de um pacote do Debian ou do Ubuntu, então será também necessário instalar, por exemplo, o pacote <code>php5-mysql</code>.",
+       "config-no-db": "Não foi possível localizar um driver de banco de dados apropriado! Você precisa instalar um driver de banco de dados para PHP. O banco de dados seguinte {{PLURAL: $ 2 | | tipo é tipos são}} suportado: $ 1. Se você compilou o PHP mesmo, reconfigurá-lo com um cliente de banco de dados ativada, por exemplo, usando <code> ./ configure --with-mysqli </ code>. Se você instalou o PHP a partir de um pacote Debian ou Ubuntu, então você também precisa instalar, por exemplo, o <code> php5-mysql </ code> pacote.",
        "config-outdated-sqlite": "<strong>Aviso:</strong> você tem o SQLite versão $1, que é menor do que a versão mínima necessária $2. O SQLite não estará disponível.",
        "config-no-fts3": "<strong>Aviso</strong> O SQLite foi compilado sem o [//sqlite.org/fts3.html módulo FTS3], as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
        "config-register-globals-error": "<strong>Erro: a opção <code>[http://php.net/register_globals register_globals]</code> do PHP está ativada.\nA mesma deve ser desativada para continuar a instalação.</strong>\nVeja [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obter ajuda com isto.",
@@ -74,7 +75,7 @@
        "config-magic-quotes-sybase": "<strong>Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está ativada!</strong>\nEsta opção corrompe os dados de entrada de forma imprevisível.\nVocê não pode instalar ou utilizar o MediaWiki a menos que esta opção seja desativada.",
        "config-mbstring": "<strong>Erro fatal: A opção [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está ativada!</strong>\nEsta opção causa erros e pode corromper os dados de forma imprevisível.\nVocê não pode instalar ou utilizar o MediaWiki a menos que esta opção seja desativada.",
        "config-safe-mode": "<strong>Aviso:</strong> O [http://www.php.net/features.safe-mode safe mode] do PHP está ativado.\nEste modo pode causar problemas, especialmente no upload de arquivos e no suporte a <code>math</code>.",
-       "config-xml-bad": "O módulo XML do PHP está ausente.\nO MediaWiki necessita de funções deste módulo e não funcionará com esta configuração.\nSe está utilizando o Mandrake, instale o pacote php-xml.",
+       "config-xml-bad": "Módulo XML do PHP está faltando. MediaWiki requer funções deste módulo e não vai funcionar nesta configuração. Pode ser necessário instalar o pacote RPM php-xml.",
        "config-pcre-old": "<strong>Erro fatal:</strong> É necessário o PCRE $1 ou versão posterior.\nO binário do seu PHP foi vinculado com o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mais informações].",
        "config-pcre-no-utf8": "<strong>Erro fatal:</strong> O módulo PCRE do PHP parece ser compilado sem suporte a PCRE_UTF8.\nO MediaWiki requer suporte a UTF-8 para funcionar corretamente.",
        "config-memory-raised": "A configuração <code>memory_limit</code> do PHP era $1; foi aumentada para $2.",
        "config-db-install-account": "Conta de usuário para instalação",
        "config-db-username": "Nome de usuário do banco de dados:",
        "config-db-password": "Senha do banco de dados:",
-       "config-db-password-empty": "Por favor digite uma senha para o novo usuário do banco de dados: $1. Embora seja possível criar usuários sem senha, isto não é seguro.",
-       "config-db-username-empty": "É necessário entrar um valor para \"{{int:config-db-username}}\".",
        "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.",
index ffb4fb6..bbf2798 100644 (file)
@@ -76,7 +76,7 @@
        "config-memory-raised": "A configuração <code>memory_limit</code> do PHP era $1; foi aumentada para $2.",
        "config-memory-bad": "'''Aviso:''' A configuração <code>memory_limit</code> do PHP é $1.\nIsto é provavelmente demasiado baixo.\nA instalação poderá falhar!",
        "config-ctype": "'''Erro fatal''': O PHP tem de ser compilado com suporte para a [http://www.php.net/manual/en/ctype.installation.php extensão Ctype].",
-       "config-iconv": "<strong>Fatal:</strong> PHP deve ser compilado com suporte à [http://www.php.net/manual/en/iconv.installation.php extensão iconv].",
+       "config-iconv": "<strong>Erro fatal:</strong> O PHP deve ser compilado com suporte à [http://www.php.net/manual/en/iconv.installation.php extensão iconv].",
        "config-json": "<strong>Erro fatal:</strong> O PHP foi compilado sem suporte de JSON.\nTem de instalar a extensão JSON do PHP (incluída no PHP 5.2 ou posterior) ou a extensão [http://pecl.php.net/package/jsonc PECL jsonc] antes de instalar o MediaWiki.\n* A extensão JSON do PHP está incluída nas distribuções 5 e 6 do Red Hat Enterprise Linux (CentOS), mas tem de estar ativa nos ficheiros <code>/etc/php.ini</code> ou <code>/etc/php.d/json.ini</code>.\n* Algumas distribuições do Linux posteriores a maio de 2013 omitem a extensão JSON do PHP e substituem-na pela extensão PECL chamando-lhe <code>php5-json</code> ou <code>php-pecl-jsonc</code>.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] instalada",
        "config-apc": "[http://www.php.net/apc APC] instalada",
index 89f2dd9..bb42d88 100644 (file)
@@ -82,7 +82,7 @@
        "config-memory-bad": "Parameters:\n* $1 is the configured <code>memory_limit</code>.",
        "config-ctype": "Message if support for [http://www.php.net/manual/en/ctype.installation.php Ctype] is missing from PHP.\n{{Related|Config-fatal}}",
        "config-iconv": "Message if support for [http://www.php.net/manual/en/iconv.installation.php iconv] is missing from PHP.\n{{Related|Config-fatal}}",
-       "config-json": "Message if support for [[wikipedia:JSON|JSON]] is missing from PHP.\n* \"[[wikipedia:Red Hat Enterprise Linux|Red Hat Enterprise Linux]]\" (RHEL) and \"[[wikipedia:CentOS|CentOS]]\" refer to two almost-identical Linux distributions. \"5 and 6\" refers to version 5 or 6 of either distribution. Because RHEL 7 likely will not include the PHP extension, do not translate as \"5 or newer\".\n* \"The [http://www.php.net/json PHP extension]\" is the JSON extension included with PHP 5.2 and newer.\n* \"The [http://pecl.php.net/package/jsonc PECL extension]\" is based on the PHP extension, though excludes code some distributions have found unacceptable (see [[bugzilla:47431]]).\n{{Related|Config-fatal}}",
+       "config-json": "Message if support for [[wikipedia:JSON|JSON]] is missing from PHP.\n* \"[[wikipedia:Red Hat Enterprise Linux|Red Hat Enterprise Linux]]\" (RHEL) and \"[[wikipedia:CentOS|CentOS]]\" refer to two almost-identical Linux distributions. \"5 and 6\" refers to version 5 or 6 of either distribution. Because RHEL 7 likely will not include the PHP extension, do not translate as \"5 or newer\".\n* \"The [http://www.php.net/json PHP extension]\" is the JSON extension included with PHP 5.2 and newer.\n* \"The [http://pecl.php.net/package/jsonc PECL extension]\" is based on the PHP extension, though excludes code some distributions have found unacceptable (see [[phab:T49431]]).\n{{Related|Config-fatal}}",
        "config-xcache": "Message indicates if this program is available",
        "config-apc": "Message indicates if this program is available",
        "config-wincache": "Message indicates if this program is available",
index ee68882..7f0ad67 100644 (file)
@@ -4,9 +4,40 @@
                        "Ammartivari"
                ]
        },
+       "config-desc": "Instaluesi për MediaWiki",
+       "config-title": "Instalimi MediaWiki $1",
+       "config-information": "Të dhëna",
+       "config-your-language": "Gjuha juaj:",
+       "config-your-language-help": "Zgjidhni një gjuhë për ta përdorur gjatë procesit të instalimit.",
+       "config-wiki-language": "Gjuha wiki:",
+       "config-wiki-language-help": "Zgjidhni gjuhën në të cilën wiki do të jetë kryesisht e shkruar.",
+       "config-back": "← Prapa",
+       "config-continue": "Para →",
+       "config-page-language": "Gjuha",
+       "config-page-welcome": "Mirë se vini në MediaWiki!",
+       "config-page-dbconnect": "Lidhuni me bazën e të dhënave",
+       "config-page-dbsettings": "Cilësimet e bazës së të dhënave",
+       "config-page-name": "Emri",
+       "config-page-options": "Opcionet",
+       "config-page-install": "Instalo",
+       "config-page-complete": "Përfundoi!",
+       "config-page-restart": "Rinisni instalimin",
+       "config-page-copying": "Duke kopjuar",
+       "config-restart": "Po, rinisni",
+       "config-xcache": "[http://xcache.lighttpd.net/ XCache] u instalua",
+       "config-apc": "[http://www.php.net/apc APC] u instalua",
+       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] u instalua",
+       "config-diff3-bad": "GNU diff3 nuk u gjet.",
+       "config-db-wiki-settings": "Identifikoni këtë wiki",
+       "config-db-name": "Emri i bazës së të dhënave:",
        "config-admin-box": "Llogari administruesi",
        "config-admin-name-blank": "Shkruani nofkën e një administruesi.",
        "config-admin-password-blank": "Shkruani një fjalëkalim për llogarinë e administruesit.",
+       "config-admin-email": "Email adresa:",
+       "config-license-pd": "Domeni publik",
+       "config-logo": "URL-ja i logos:",
+       "config-install-tables": "Duke krijuar tabela",
+       "config-help": "ndihmë",
        "mainpagetext": "'''MediaWiki software u instalua me sukses.'''",
        "mainpagedocfooter": "Për më shumë informata rreth përdorimit të softwerit wiki , ju lutem shikoni [//meta.wikimedia.org/wiki/Help:Contents dokumentacionin përkatës].\n\n== Sa për fillim==\n* [//www.mediawiki.org/wiki/Help:Configuration_settings Parazgjedhjet e MediaWiki-t]\n* [//www.mediawiki.org/wiki/Help:FAQ Pyetjet e shpeshta rreth MediaWiki-t]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Njoftime rreth MediaWiki-t]"
 }
diff --git a/includes/installer/i18n/tokipona.json b/includes/installer/i18n/tokipona.json
new file mode 100644 (file)
index 0000000..348380f
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Robin0van0der0vliet"
+               ]
+       },
+       "config-page-language": "toki"
+}
index 92b2d3b..e877280 100644 (file)
        "config-using-server": "באניצן סארווער־נאמען \"<nowiki>$1</nowiki>\".",
        "config-using-uri": "באניצן סארווער־אדרעס \"<nowiki>$1$2</nowiki>\".",
        "config-db-type": "דאטנבאזע טיפ:",
+       "config-db-host": "דאטנבאזע־סארווער:",
        "config-db-host-oracle": "דאטנבאזע־TNS:",
        "config-db-wiki-settings": "אידענטיפיצירן די דאזיקע וויקי",
        "config-db-name": "דאטנבאזע נאָמען:",
+       "config-db-install-account": "באניצער־קאנטע פאר אינסטאלאציע",
        "config-db-username": "דאטנבאזע באניצער־נאָמען:",
        "config-db-password": "דאטנבאזע־פאסווארט:",
+       "config-invalid-db-type": "אומגילטיגער דאטנבאזע־טיפ",
+       "config-missing-db-name": "איר דארפט איינגעבן א ווערט פאר \"{{int:config-db-name}}\".",
+       "config-missing-db-host": "איר דארפט איינגעבן א ווערט פאר \"{{int:config-db-host}}\".",
+       "config-missing-db-server-oracle": "איר דארפט איינגעבן א ווערט פאר \"{{int:config-db-host-oracle}}\".",
        "config-project-namespace": "פראיעקט נאָמענטייל:",
        "config-ns-generic": "פראיעקט",
        "config-admin-name": "אײַער באַניצער־נאָמען:",
index dec944a..935d2fb 100644 (file)
@@ -111,9 +111,6 @@ class RefreshLinksJob extends Job {
         * @return bool
         */
        protected function runForTitle( Title $title = null ) {
-               $linkCache = LinkCache::singleton();
-               $linkCache->clear();
-
                if ( is_null( $title ) ) {
                        $this->setLastError( "refreshLinks: Invalid title" );
                        return false;
@@ -126,14 +123,18 @@ class RefreshLinksJob extends Job {
                        wfGetLB()->waitFor( $this->params['masterPos'] );
                }
 
-               $page = WikiPage::factory( $title );
+               // Clear out title cache data from prior job transaction snapshots
+               $linkCache = LinkCache::singleton();
+               $linkCache->clear();
 
-               // Fetch the current revision...
+               // Fetch the current page and revision...
+               $page = WikiPage::factory( $title );
                $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                if ( !$revision ) {
                        $this->setLastError( "refreshLinks: Article not found {$title->getPrefixedDBkey()}" );
                        return false; // XXX: what if it was just deleted?
                }
+
                $content = $revision->getContent( Revision::RAW );
                if ( !$content ) {
                        // If there is no content, pretend the content is empty
index 2c90431..5a8c4c7 100644 (file)
@@ -60,13 +60,15 @@ class CSSMin {
        /* Static Methods */
 
        /**
-        * Gets a list of local file paths which are referenced in a CSS style sheet
+        * Gets a list of local file paths which are referenced in a CSS style sheet.
         *
-        * This function will always return an empty array if the second parameter is not given or null
-        * for backwards-compatibility.
+        * If you wish non-existent files to be listed too, use getAllLocalFileReferences().
         *
-        * @param string $source CSS data to remap
-        * @param string $path File path where the source was read from (optional)
+        * For backwards-compatibility, if the second parameter is not given or null,
+        * this function will return an empty array instead of erroring out.
+        *
+        * @param string $source CSS stylesheet source to process
+        * @param string $path File path where the source was read from
         * @return array List of local file references
         */
        public static function getLocalFileReferences( $source, $path = null ) {
@@ -74,11 +76,31 @@ class CSSMin {
                        return array();
                }
 
+               $files = self::getAllLocalFileReferences( $source, $path );
+
+               // Skip non-existent files
+               $files = array_filter( $files, function ( $file ) {
+                       return file_exists( $file );
+               } );
+
+               return $files;
+       }
+
+       /**
+        * Gets a list of local file paths which are referenced in a CSS style sheet, including
+        * non-existent files.
+        *
+        * @param string $source CSS stylesheet source to process
+        * @param string $path File path where the source was read from
+        * @return array List of local file references
+        */
+       public static function getAllLocalFileReferences( $source, $path ) {
+               $stripped = preg_replace( '/' . self::COMMENT_REGEX . '/s', '', $source );
                $path = rtrim( $path, '/' ) . '/';
                $files = array();
 
                $rFlags = PREG_OFFSET_CAPTURE | PREG_SET_ORDER;
-               if ( preg_match_all( '/' . self::URL_REGEX . '/', $source, $matches, $rFlags ) ) {
+               if ( preg_match_all( '/' . self::URL_REGEX . '/', $stripped, $matches, $rFlags ) ) {
                        foreach ( $matches as $match ) {
                                $url = $match['file'][0];
 
@@ -87,13 +109,7 @@ class CSSMin {
                                        break;
                                }
 
-                               $file = $path . $url;
-                               // Skip non-existent files
-                               if ( file_exists( $file ) ) {
-                                       break;
-                               }
-
-                               $files[] = $file;
+                               $files[] = $path . $url;
                        }
                }
                return $files;
index 185914c..b6faa37 100644 (file)
@@ -111,7 +111,10 @@ class ReplacementArray {
         * @return string
         */
        public function replace( $subject ) {
-               if ( function_exists( 'fss_prep_replace' ) ) {
+               if (
+                       function_exists( 'fss_prep_replace' )  &&
+                       version_compare( PHP_VERSION, '5.5.0' ) < 0
+               ) {
                        if ( $this->fss === false ) {
                                $this->fss = fss_prep_replace( $this->data );
                        }
index dcd413d..130caeb 100644 (file)
@@ -73,6 +73,10 @@ class WANObjectCache {
        const CHECK_KEY_TTL = 31536000; // 1 year
        /** Seconds to keep lock keys around */
        const LOCK_TTL = 5;
+       /** Default remaining TTL at which to consider pre-emptive regeneration */
+       const LOW_TTL = 10;
+       /** Default TTL for temporarily caching tombstoned keys */
+       const TEMP_TTL = 5;
 
        /** Idiom for set()/getWithSetCallback() TTL */
        const TTL_NONE = 0;
@@ -256,9 +260,10 @@ class WANObjectCache {
        /**
         * Purge a key from all clusters
         *
-        * This deletes the key and instantiates a hold-off period where the key
-        * cannot be written to for the next few seconds (HOLDOFF_TTL). This is to
-        * avoid the following race condition:
+        * This should only be called when the underlying data (being cached)
+        * changes in a significant way. This deletes the key and starts a hold-off
+        * period where the key cannot be written to for a few seconds (HOLDOFF_TTL).
+        * This is done to avoid the following race condition:
         *   a) Some DB data changes and delete() is called on a corresponding key
         *   b) A request refills the key with a stale value from a lagged DB
         *   c) The stale value is stuck there until the key is expired/evicted
@@ -270,9 +275,10 @@ class WANObjectCache {
         *   a) Replication lag is bounded to being less than HOLDOFF_TTL; or
         *   b) If lag is higher, the DB will have gone into read-only mode already
         *
-        * This should only be called when the underlying data (being cached)
-        * changes in a significant way. If called twice on the same key, then
-        * the last TTL takes precedence.
+        * If called twice on the same key, then the last hold-off TTL takes
+        * precedence. For idempotence, the $ttl should not vary for different
+        * delete() calls on the same key. Also note that lowering $ttl reduces
+        * the effective range of the 'lockTSE' parameter to getWithSetCallback().
         *
         * @param string $key Cache key
         * @param integer $ttl How long to block writes to the key [seconds]
@@ -465,6 +471,7 @@ class WANObjectCache {
         *               Other threads will try to use stale values if possible.
         *               If, on miss, the time since expiration is low, the assumption
         *               is that the key is hot and that a stampede is worth avoiding.
+        *               Setting this above WANObjectCache::HOLDOFF_TTL makes no difference.
         *   - tempTTL : TTL of the temp key used to cache values while a key is tombstoned.
         *               This avoids excessive regeneration of hot keys on delete() but may
         *               result in stale values.
@@ -473,9 +480,9 @@ class WANObjectCache {
        final public function getWithSetCallback(
                $key, $callback, $ttl, array $checkKeys = array(), array $opts = array()
        ) {
-               $lowTTL = isset( $opts['lowTTL'] ) ? $opts['lowTTL'] : min( 10, $ttl );
+               $lowTTL = isset( $opts['lowTTL'] ) ? $opts['lowTTL'] : min( self::LOW_TTL, $ttl );
                $lockTSE = isset( $opts['lockTSE'] ) ? $opts['lockTSE'] : -1;
-               $tempTTL = isset( $opts['tempTTL'] ) ? $opts['tempTTL'] : 5;
+               $tempTTL = isset( $opts['tempTTL'] ) ? $opts['tempTTL'] : self::TEMP_TTL;
 
                // Get the current key value
                $curTTL = null;
@@ -487,23 +494,24 @@ class WANObjectCache {
                        return $value;
                }
 
+               // A deleted key with a negative TTL left must be tombstoned
                $isTombstone = ( $curTTL !== null && $value === false );
                // Assume a key is hot if requested soon after invalidation
                $isHot = ( $curTTL !== null && $curTTL <= 0 && abs( $curTTL ) <= $lockTSE );
 
-               $locked = false;
+               $lockAcquired = false;
                if ( $isHot ) {
                        // Acquire a cluster-local non-blocking lock
                        if ( $this->cache->lock( $key, 0, self::LOCK_TTL ) ) {
                                // Lock acquired; this thread should update the key
-                               $locked = true;
+                               $lockAcquired = true;
                        } elseif ( $value !== false ) {
                                // If it cannot be acquired; then the stale value can be used
                                return $value;
                        }
                }
 
-               if ( !$locked && ( $isTombstone || $isHot ) ) {
+               if ( !$lockAcquired && ( $isTombstone || $isHot ) ) {
                        // Use the stash value for tombstoned keys to reduce regeneration load.
                        // For hot keys, either another thread has the lock or the lock failed;
                        // use the stash value from the last thread that regenerated it.
@@ -525,7 +533,7 @@ class WANObjectCache {
                        $this->cache->set( self::STASH_KEY_PREFIX . $key, $value, $tempTTL );
                }
 
-               if ( $locked ) {
+               if ( $lockAcquired ) {
                        $this->cache->unlock( $key );
                }
 
index 4c96e29..43dfab3 100644 (file)
@@ -54,6 +54,7 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
                }
                // set up defaults and merge them with the given params
                $mparams = array_merge( array(
+                       'name' => 'parsoid',
                        'url' => 'http://localhost:8000/',
                        'prefix' => 'localhost',
                        'domain' => 'localhost',
@@ -91,7 +92,7 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
                                // $revision (optional)
                        ) = $parts;
 
-                       if ( $this->params['restbaseCompat'] ) {
+                       if ( isset( $this->params['restbaseCompat'] ) && $this->params['restbaseCompat'] ) {
                                if ( $version !== 'v1' ) {
                                        throw new Exception( "Only RESTBase v1 API is supported." );
                                }
index bc520aa..3a7bc58 100644 (file)
@@ -48,6 +48,7 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
        public function __construct( array $params ) {
                // set up defaults and merge them with the given params
                $mparams = array_merge( array(
+                       'name' => 'restbase',
                        'url' => 'http://localhost:7231/',
                        'domain' => 'localhost',
                        'timeout' => 100,
index 011dabe..88b0e1f 100644 (file)
@@ -45,7 +45,11 @@ class SwiftVirtualRESTService extends VirtualRESTService {
         *   - swiftAuthTTL       : Swift authentication TTL (seconds)
         */
        public function __construct( array $params ) {
-               parent::__construct( $params );
+               // set up defaults and merge them with the given params
+               $mparams = array_merge( array(
+                       'name' => 'swift'
+               ), $params );
+               parent::__construct( $mparams );
        }
 
        /**
index 2a0b3f0..01a4ea6 100644 (file)
@@ -44,6 +44,17 @@ abstract class VirtualRESTService {
                $this->params = $params;
        }
 
+       /**
+        * Return the name of this service, in a form suitable for error
+        * reporting or debugging.
+        *
+        * @return string The name of the service behind this VRS object.
+        */
+       public function getName() {
+               return isset( $this->params['name'] ) ? $this->params['name'] :
+                       get_class( $this );
+       }
+
        /**
         * Prepare virtual HTTP(S) requests (for this service) for execution
         *
index 4be20b2..1f00650 100644 (file)
@@ -70,8 +70,7 @@ class BitmapHandler extends TransformationalImageHandler {
        protected function transformImageMagick( $image, $params ) {
                # use ImageMagick
                global $wgSharpenReductionThreshold, $wgSharpenParameter, $wgMaxAnimatedGifArea,
-                       $wgImageMagickTempDir, $wgImageMagickConvertCommand, $wgResourceBasePath,
-                       $wgUseTinyRGBForJPGThumbnails;
+                       $wgImageMagickTempDir, $wgImageMagickConvertCommand;
 
                $quality = array();
                $sharpen = array();
index dbbe991..dac76fa 100644 (file)
@@ -150,7 +150,7 @@ class DjVuImage {
                                wfDebug( __METHOD__ . ": not a DjVu file\n" );
                        } elseif ( $subtype == 'DJVU' ) {
                                // Single-page document
-                               $info = $this->getPageInfo( $file, $formLength );
+                               $info = $this->getPageInfo( $file );
                        } elseif ( $subtype == 'DJVM' ) {
                                // Multi-page document
                                $info = $this->getMultiPageInfo( $file, $formLength );
@@ -202,7 +202,7 @@ class DjVuImage {
                                if ( $subtype == 'DJVU' ) {
                                        wfDebug( __METHOD__ . ": found first subpage\n" );
 
-                                       return $this->getPageInfo( $file, $length );
+                                       return $this->getPageInfo( $file );
                                }
                                $this->skipChunk( $file, $length - 4 );
                        } else {
@@ -216,7 +216,7 @@ class DjVuImage {
                return false;
        }
 
-       private function getPageInfo( $file, $formLength ) {
+       private function getPageInfo( $file ) {
                list( $chunk, $length ) = $this->readChunk( $file );
                if ( $chunk != 'INFO' ) {
                        wfDebug( __METHOD__ . ": expected INFO chunk, got '$chunk'\n" );
index 8afa31b..1ec2f81 100644 (file)
@@ -319,16 +319,6 @@ class SVGReader {
                }
        }
 
-       // @todo FIXME: Unused, remove?
-       private function warn( $data ) {
-               wfDebug( "SVGReader: $data\n" );
-       }
-
-       // @todo FIXME: Unused, remove?
-       private function notice( $data ) {
-               wfDebug( "SVGReader WARN: $data\n" );
-       }
-
        /**
         * Parse the attributes of an SVG element
         *
index 97aa796..1d8d777 100644 (file)
@@ -34,8 +34,6 @@ class XMPInfo {
                return self::$items;
        }
 
-       static private $ranHooks = false;
-
        /**
         * XMPInfo::$items keeps a list of all the items
         * we are interested to extract, as well as
index 7e6a4d7..1b2c8db 100644 (file)
@@ -236,8 +236,13 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
        public function getMulti( array $keys, $flags = 0 ) {
                $this->debugLog( 'getMulti(' . implode( ', ', $keys ) . ')' );
                $callback = array( $this, 'encodeKey' );
-               $result = $this->client->getMulti( array_map( $callback, $keys ) );
-               $result = $result ?: array(); // must be an array
+               $encodedResult = $this->client->getMulti( array_map( $callback, $keys ) );
+               $encodedResult = $encodedResult ?: array(); // must be an array
+               $result = array();
+               foreach ( $encodedResult as $key => $value ) {
+                       $key = $this->decodeKey( $key );
+                       $result[$key] = $value;
+               }
                return $this->checkResult( false, $result );
        }
 
index 69792ad..6f0ba58 100644 (file)
@@ -59,7 +59,13 @@ class MemcachedPhpBagOStuff extends MemcachedBagOStuff {
 
        public function getMulti( array $keys, $flags = 0 ) {
                $callback = array( $this, 'encodeKey' );
-               return $this->client->get_multi( array_map( $callback, $keys ) );
+               $encodedResult = $this->client->get_multi( array_map( $callback, $keys ) );
+               $result = array();
+               foreach ( $encodedResult as $key => $value ) {
+                       $key = $this->decodeKey( $key );
+                       $result[$key] = $value;
+               }
+               return $result;
        }
 
        /**
index bbfaa5e..1a52930 100644 (file)
 class MultiWriteBagOStuff extends BagOStuff {
        /** @var BagOStuff[] */
        protected $caches;
+       /** @var bool Use async secondary writes */
+       protected $asyncWrites = false;
 
        /**
-        * Constructor. Parameters are:
-        *
-        *   - caches:   This should have a numbered array of cache parameter
-        *               structures, in the style required by $wgObjectCaches. See
-        *               the documentation of $wgObjectCaches for more detail.
+        * $params include:
+        *   - caches:      This should have a numbered array of cache parameter
+        *                  structures, in the style required by $wgObjectCaches. See
+        *                  the documentation of $wgObjectCaches for more detail.
+        *                  BagOStuff objects can also be used as values.
+        *                  The first cache is the primary one, being the first to
+        *                  be read in the fallback chain. Writes happen to all stores
+        *                  in the order they are defined. However, lock()/unlock() calls
+        *                  only use the primary store.
+        *   - replication: Either 'sync' or 'async'. This controls whether writes to
+        *                  secondary stores are deferred when possible. Async writes
+        *                  require the HHVM register_postsend_function() function.
+        *                  Async writes can increase the chance of some race conditions
+        *                  or cause keys to expire seconds later than expected. It is
+        *                  safe to use for modules when cached values: are immutable,
+        *                  invalidation uses logical TTLs, invalidation uses etag/timestamp
+        *                  validation against the DB, or merge() is used to handle races.
         *
         * @param array $params
         * @throws InvalidArgumentException
         */
        public function __construct( $params ) {
                parent::__construct( $params );
-               if ( !isset( $params['caches'] ) ) {
-                       throw new InvalidArgumentException( __METHOD__ . ': the caches parameter is required' );
+
+               if ( empty( $params['caches'] ) || !is_array( $params['caches'] ) ) {
+                       throw new InvalidArgumentException( __METHOD__ . ': "caches" parameter must be an array of caches' );
                }
 
                $this->caches = array();
                foreach ( $params['caches'] as $cacheInfo ) {
-                       $this->caches[] = ObjectCache::newFromParams( $cacheInfo );
+                       $this->caches[] = ( $cacheInfo instanceof BagOStuff )
+                               ? $cacheInfo
+                               : ObjectCache::newFromParams( $cacheInfo );
                }
+
+               $this->asyncWrites = isset( $params['replication'] ) && $params['replication'] === 'async';
        }
 
        /**
@@ -126,11 +145,7 @@ class MultiWriteBagOStuff extends BagOStuff {
         */
        public function lock( $key, $timeout = 6, $expiry = 6, $rclass = '' ) {
                // Lock only the first cache, to avoid deadlocks
-               if ( isset( $this->caches[0] ) ) {
-                       return $this->caches[0]->lock( $key, $timeout, $expiry, $rclass );
-               } else {
-                       return true;
-               }
+               return $this->caches[0]->lock( $key, $timeout, $expiry, $rclass );
        }
 
        /**
@@ -138,11 +153,7 @@ class MultiWriteBagOStuff extends BagOStuff {
         * @return bool
         */
        public function unlock( $key ) {
-               if ( isset( $this->caches[0] ) ) {
-                       return $this->caches[0]->unlock( $key );
-               } else {
-                       return true;
-               }
+               return $this->caches[0]->unlock( $key );
        }
 
        /**
@@ -157,13 +168,11 @@ class MultiWriteBagOStuff extends BagOStuff {
        }
 
        public function getLastError() {
-               return isset( $this->caches[0] ) ? $this->caches[0]->getLastError() : self::ERR_NONE;
+               return $this->caches[0]->getLastError();
        }
 
        public function clearLastError() {
-               if ( isset( $this->caches[0] ) ) {
-                       $this->caches[0]->clearLastError();
-               }
+               $this->caches[0]->clearLastError();
        }
 
        /**
@@ -175,11 +184,25 @@ class MultiWriteBagOStuff extends BagOStuff {
                $args = func_get_args();
                array_shift( $args );
 
-               foreach ( $this->caches as $cache ) {
-                       if ( !call_user_func_array( array( $cache, $method ), $args ) ) {
-                               $ret = false;
+               foreach ( $this->caches as $i => $cache ) {
+                       if ( $i == 0 || !$this->asyncWrites ) {
+                               // First store or in sync mode: write now and get result
+                               if ( !call_user_func_array( array( $cache, $method ), $args ) ) {
+                                       $ret = false;
+                               }
+                       } else {
+                               // Secondary write in async mode: do not block this HTTP request
+                               $logger = $this->logger;
+                               DeferredUpdates::addCallableUpdate(
+                                       function () use ( $cache, $method, $args, $logger ) {
+                                               if ( !call_user_func_array( array( $cache, $method ), $args ) ) {
+                                                       $logger->warning( "Async $method op failed" );
+                                               }
+                                       }
+                               );
                        }
                }
+
                return $ret;
        }
 
@@ -198,6 +221,7 @@ class MultiWriteBagOStuff extends BagOStuff {
                                $ret = true;
                        }
                }
+
                return $ret;
        }
 }
index 54db19c..56b9520 100644 (file)
@@ -1091,11 +1091,6 @@ class Article implements Page {
                // 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() ) ) ) {
-                       return false;
-               }
-
                if ( $this->mRevision
                        && !RecentChange::isInRCLifespan( $this->mRevision->getTimestamp(), 21600 )
                ) {
@@ -1104,6 +1099,12 @@ class Article implements Page {
                        return false;
                }
 
+               // Check for cached results
+               $key = wfMemcKey( 'NotPatrollablePage', $this->getTitle()->getArticleID() );
+               if ( $cache->get( $key ) ) {
+                       return false;
+               }
+
                $dbr = wfGetDB( DB_SLAVE );
                $oldestRevisionTimestamp = $dbr->selectField(
                        'revision',
@@ -1121,20 +1122,30 @@ class Article implements Page {
                                        'rc_new' => 1,
                                        'rc_timestamp' => $oldestRevisionTimestamp,
                                        'rc_namespace' => $this->getTitle()->getNamespace(),
-                                       'rc_cur_id' => $this->getTitle()->getArticleID(),
-                                       'rc_patrolled' => 0
+                                       'rc_cur_id' => $this->getTitle()->getArticleID()
                                ),
                                __METHOD__,
                                array( 'USE INDEX' => 'new_name_timestamp' )
                        );
+               } else {
+                       // 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( $key, '1' );
                }
 
                if ( !$rc ) {
-                       // No RC entry around
+                       // Don't cache: This can be hit if the page gets accessed very fast after
+                       // its creation or in case we have high slave lag. In case the revision is
+                       // too old, we will already return above.
+                       return false;
+               }
+
+               if ( $rc->getAttribute( 'rc_patrolled' ) ) {
+                       // Patrolled 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' );
+                       $cache->set( $key, '1' );
 
                        return false;
                }
@@ -1224,18 +1235,33 @@ class Article implements Page {
 
                Hooks::run( 'ShowMissingArticle', array( $this ) );
 
-               // Give extensions a chance to hide their (unrelated) log entries
-               $logTypes = array( 'delete', 'move' );
-               $conds = array( "log_action != 'revision'" );
-               Hooks::run( 'Article::MissingArticleConditions', array( &$conds, $logTypes ) );
-
-               # Show delete and move logs
-               LogEventsList::showLogExtract( $outputPage, $logTypes, $title, '',
-                       array( 'lim' => 10,
-                               'conds' => $conds,
-                               'showIfEmpty' => false,
-                               'msgKey' => array( 'moveddeleted-notice' ) )
-               );
+               # Show delete and move logs if there were any such events.
+               # The logging query can DOS the site when bots/crawlers cause 404 floods,
+               # so be careful showing this. 404 pages must be cheap as they are hard to cache.
+               $cache = ObjectCache::getMainStashInstance();
+               $key = wfMemcKey( 'page-recent-delete', md5( $title->getPrefixedText() ) );
+               $loggedIn = $this->getContext()->getUser()->isLoggedIn();
+               if ( $loggedIn || $cache->get( $key ) ) {
+                       $logTypes = array( 'delete', 'move' );
+                       $conds = array( "log_action != 'revision'" );
+                       // Give extensions a chance to hide their (unrelated) log entries
+                       Hooks::run( 'Article::MissingArticleConditions', array( &$conds, $logTypes ) );
+                       LogEventsList::showLogExtract(
+                               $outputPage,
+                               $logTypes,
+                               $title,
+                               '',
+                               array(
+                                       'lim' => 10,
+                                       'conds' => $conds,
+                                       'showIfEmpty' => false,
+                                       'msgKey' => array( $loggedIn
+                                               ? 'moveddeleted-notice'
+                                               : 'moveddeleted-notice-recent'
+                                       )
+                               )
+                       );
+               }
 
                if ( !$this->mPage->hasViewableContent() && $wgSend404Code && !$validUserPage ) {
                        // If there's no backing content, send a 404 Not Found
index 4ec377a..9b9e3cb 100644 (file)
@@ -219,6 +219,9 @@ class ImagePage extends Article {
                }
                // always show the local local Filepage.css, bug 29277
                $out->addModuleStyles( 'filepage' );
+
+               // Add MediaWiki styles for a file page
+               $out->addModuleStyles( 'mediawiki.action.view.filepage' );
        }
 
        /**
@@ -706,10 +709,10 @@ EOT
                $out->addHTML( "<ul>\n" );
 
                # "Upload a new version of this file" link
-               $canUpload = $this->getTitle()->userCan( 'upload', $this->getContext()->getUser() );
+               $canUpload = $this->getTitle()->quickUserCan( 'upload', $this->getContext()->getUser() );
                if ( $canUpload && UploadBase::userCanReUpload(
                                $this->getContext()->getUser(),
-                               $this->mPage->getFile()->name )
+                               $this->mPage->getFile() )
                ) {
                        $ulink = Linker::makeExternalLink(
                                $this->getUploadUrl(),
index 657c4d0..d1cec60 100644 (file)
@@ -1765,7 +1765,6 @@ class WikiPage implements Page, IDBAccessObject {
 
                $dbw = wfGetDB( DB_MASTER );
                $now = wfTimestampNow();
-               $this->mTimestamp = $now;
 
                if ( $flags & EDIT_UPDATE ) {
                        // Update article, but only if changed.
@@ -1844,6 +1843,7 @@ class WikiPage implements Page, IDBAccessObject {
                                $user->incEditCount();
 
                                $dbw->commit( __METHOD__ );
+                               $this->mTimestamp = $now;
                        } else {
                                // Bug 32948: revision ID must be set to page {{REVISIONID}} and
                                // related variables correctly
@@ -1938,6 +1938,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $user->incEditCount();
 
                        $dbw->commit( __METHOD__ );
+                       $this->mTimestamp = $now;
 
                        // Update links, etc.
                        $this->doEditUpdates( $revision, $user, array( 'created' => true ) );
@@ -2854,7 +2855,7 @@ class WikiPage implements Page, IDBAccessObject {
                // Clone the title, so we have the information we need when we log
                $logTitle = clone $this->mTitle;
 
-               // Log the deletion, if the page was suppressed, log it at Oversight instead
+               // Log the deletion, if the page was suppressed, put it in the suppression log instead
                $logtype = $suppress ? 'suppress' : 'delete';
 
                $logEntry = new ManualLogEntry( $logtype, 'delete' );
@@ -2872,6 +2873,10 @@ class WikiPage implements Page, IDBAccessObject {
                        $dbw->commit( __METHOD__ );
                }
 
+               // Show log excerpt on 404 pages rather than just a link
+               $key = wfMemcKey( 'page-recent-delete', md5( $logTitle->getPrefixedText() ) );
+               ObjectCache::getMainStashInstance()->set( $key, 1, 86400 );
+
                $this->doDeleteUpdates( $id, $content );
 
                Hooks::run( 'ArticleDeleteComplete', array( &$this, &$user, $reason, $id, $content, $logEntry ) );
@@ -3218,10 +3223,10 @@ class WikiPage implements Page, IDBAccessObject {
         */
        public static function onArticleEdit( Title $title, Revision $revision = null ) {
                // Invalidate caches of articles which include this page
-               DeferredUpdates::addHTMLCacheUpdate( $title, 'templatelinks' );
+               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'templatelinks' ) );
 
                // Invalidate the caches of all pages which redirect here
-               DeferredUpdates::addHTMLCacheUpdate( $title, 'redirect' );
+               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'redirect' ) );
 
                // Purge squid for this page only
                $title->purgeSquid();
index e29ee88..807842b 100644 (file)
  * @ingroup Parser
  */
 
-/**
- * Class used to hide mw:editsection tokens from Tidy so that it doesn't break them
- * or break on them. This is a bit of a hack for now, but hopefully in the future
- * we may create a real postprocessor or something that will replace this.
- * It's called wrapper because for now it basically takes over MWTidy::tidy's task
- * of wrapping the text in a xhtml block
- *
- * This re-uses some of the parser's UNIQ tricks, though some of it is private so it's
- * duplicated. Perhaps we should create an abstract marker hiding class.
- *
- * @ingroup Parser
- */
-class MWTidyWrapper {
-
-       /**
-        * @var ReplacementArray
-        */
-       protected $mTokens;
-
-       protected $mMarkerIndex;
-
-       public function __construct() {
-               $this->mTokens = null;
-       }
-
-       /**
-        * @param string $text
-        * @return string
-        */
-       public function getWrapped( $text ) {
-               $this->mTokens = new ReplacementArray;
-               $this->mMarkerIndex = 0;
-
-               // Replace <mw:editsection> elements with placeholders
-               $wrappedtext = preg_replace_callback( ParserOutput::EDITSECTION_REGEX,
-                       array( &$this, 'replaceCallback' ), $text );
-               // ...and <mw:toc> markers
-               $wrappedtext = preg_replace_callback( '/\<\\/?mw:toc\>/',
-                       array( &$this, 'replaceCallback' ), $wrappedtext );
-               // ... and <math> tags
-               $wrappedtext = preg_replace_callback( '/\<math(.*?)\<\\/math\>/s',
-                       array( &$this, 'replaceCallback' ), $wrappedtext );
-               // Modify inline Microdata <link> and <meta> elements so they say <html-link> and <html-meta> so
-               // we can trick Tidy into not stripping them out by including them in tidy's new-empty-tags config
-               $wrappedtext = preg_replace( '!<(link|meta)([^>]*?)(/{0,1}>)!', '<html-$1$2$3', $wrappedtext );
-
-               // Wrap the whole thing in a doctype and body for Tidy.
-               $wrappedtext = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' .
-                       ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>' .
-                       '<head><title>test</title></head><body>' . $wrappedtext . '</body></html>';
-
-               return $wrappedtext;
-       }
-
-       /**
-        * @param array $m
-        *
-        * @return string
-        */
-       public function replaceCallback( $m ) {
-               $marker = Parser::MARKER_PREFIX . "-item-{$this->mMarkerIndex}" . Parser::MARKER_SUFFIX;
-               $this->mMarkerIndex++;
-               $this->mTokens->setPair( $marker, $m[0] );
-               return $marker;
-       }
-
-       /**
-        * @param string $text
-        * @return string
-        */
-       public function postprocess( $text ) {
-               // Revert <html-{link,meta}> back to <{link,meta}>
-               $text = preg_replace( '!<html-(link|meta)([^>]*?)(/{0,1}>)!', '<$1$2$3', $text );
-
-               // Restore the contents of placeholder tokens
-               $text = $this->mTokens->replace( $text );
-
-               return $text;
-       }
-
-}
-
 /**
  * Class to interact with HTML tidy
  *
@@ -113,32 +31,24 @@ class MWTidyWrapper {
  * @ingroup Parser
  */
 class MWTidy {
+       private static $instance;
+
        /**
-        * Interface with html tidy, used if $wgUseTidy = true.
+        * Interface with html tidy.
         * If tidy isn't able to correct the markup, the original will be
         * returned in all its glory with a warning comment appended.
         *
-        * @param string $text Hideous HTML input
+        * @param string $text HTML input fragment. This should not contain a
+        *                     <body> or <html> tag.
         * @return string Corrected HTML output
         */
        public static function tidy( $text ) {
-               $wrapper = new MWTidyWrapper;
-               $wrappedtext = $wrapper->getWrapped( $text );
-
-               $retVal = null;
-               $correctedtext = self::clean( $wrappedtext, false, $retVal );
-
-               if ( $retVal < 0 ) {
-                       wfDebug( "Possible tidy configuration error!\n" );
-                       return $text . "\n<!-- Tidy was unable to run -->\n";
-               } elseif ( is_null( $correctedtext ) ) {
-                       wfDebug( "Tidy error detected!\n" );
-                       return $text . "\n<!-- Tidy found serious XHTML errors -->\n";
+               $driver = self::singleton();
+               if ( !$driver ) {
+                       throw new MWException( __METHOD__.
+                               ': tidy is disabled, caller should have checked MWTidy::isEnabled()' );
                }
-
-               $correctedtext = $wrapper->postprocess( $correctedtext ); // restore any hidden tokens
-
-               return $correctedtext;
+               return $driver->tidy( $text );
        }
 
        /**
@@ -149,170 +59,80 @@ class MWTidy {
         * @return bool Whether the HTML is valid
         */
        public static function checkErrors( $text, &$errorStr = null ) {
-               $retval = 0;
-               $errorStr = self::clean( $text, true, $retval );
-               return ( $retval < 0 && $errorStr == '' ) || $retval == 0;
+               $driver = self::singleton();
+               if ( !$driver ) {
+                       throw new MWException( __METHOD__.
+                               ': tidy is disabled, caller should have checked MWTidy::isEnabled()' );
+               }
+               if ( $driver->supportsValidate() ) {
+                       return $driver->validate( $text, $errorStr );
+               } else {
+                       throw new MWException( __METHOD__ . ": error text return from HHVM tidy is not supported" );
+               }
        }
 
-       /**
-        * Perform a clean/repair operation
-        * @param string $text HTML to check
-        * @param bool $stderr Whether to read result from STDERR rather than STDOUT
-        * @param int &$retval Exit code (-1 on internal error)
-        * @return null|string
-        * @throws MWException
-        */
-       private static function clean( $text, $stderr = false, &$retval = null ) {
-               global $wgTidyInternal;
+       public static function isEnabled() {
+               return self::singleton() !== false;
+       }
 
-               if ( $wgTidyInternal ) {
-                       if ( wfIsHHVM() ) {
-                               if ( $stderr ) {
-                                       throw new MWException( __METHOD__ . ": error text return from HHVM tidy is not supported" );
+       protected static function singleton() {
+               global $wgUseTidy, $wgTidyInternal, $wgTidyConf, $wgDebugTidy, $wgTidyConfig,
+                       $wgTidyBin, $wgTidyOpts;
+
+               if ( self::$instance === null ) {
+                       if ( $wgTidyConfig !== null ) {
+                               $config = $wgTidyConfig;
+                       } elseif ( $wgUseTidy ) {
+                               // b/c configuration
+                               $config = array(
+                                       'tidyConfigFile' => $wgTidyConf,
+                                       'debugComment' => $wgDebugTidy,
+                                       'tidyBin' => $wgTidyBin,
+                                       'tidyCommandLine' => $wgTidyOpts );
+                               if ( $wgTidyInternal ) {
+                                       if ( wfIsHHVM() ) {
+                                               $config['driver'] = 'RaggettInternalHHVM';
+                                       } else {
+                                               $config['driver'] = 'RaggettInternalPHP';
+                                       }
+                               } else {
+                                       $config['driver'] = 'RaggettExternal';
                                }
-                               return self::hhvmClean( $text, $retval );
                        } else {
-                               return self::phpClean( $text, $stderr, $retval );
+                               return false;
                        }
-               } else {
-                       return self::externalClean( $text, $stderr, $retval );
-               }
-       }
-
-       /**
-        * Spawn an external HTML tidy process and get corrected markup back from it.
-        * Also called in OutputHandler.php for full page validation
-        *
-        * @param string $text HTML to check
-        * @param bool $stderr Whether to read result from STDERR rather than STDOUT
-        * @param int &$retval Exit code (-1 on internal error)
-        * @return string|null
-        */
-       private static function externalClean( $text, $stderr = false, &$retval = null ) {
-               global $wgTidyConf, $wgTidyBin, $wgTidyOpts;
-
-               $cleansource = '';
-               $opts = ' -utf8';
-
-               if ( $stderr ) {
-                       $descriptorspec = array(
-                               0 => array( 'pipe', 'r' ),
-                               1 => array( 'file', wfGetNull(), 'a' ),
-                               2 => array( 'pipe', 'w' )
-                       );
-               } else {
-                       $descriptorspec = array(
-                               0 => array( 'pipe', 'r' ),
-                               1 => array( 'pipe', 'w' ),
-                               2 => array( 'file', wfGetNull(), 'a' )
-                       );
-               }
-
-               $readpipe = $stderr ? 2 : 1;
-               $pipes = array();
-
-               $process = proc_open(
-                       "$wgTidyBin -config $wgTidyConf $wgTidyOpts$opts", $descriptorspec, $pipes );
-
-               //NOTE: At least on linux, the process will be created even if tidy is not installed.
-               //      This means that missing tidy will be treated as a validation failure.
-
-               if ( is_resource( $process ) ) {
-                       // Theoretically, this style of communication could cause a deadlock
-                       // here. If the stdout buffer fills up, then writes to stdin could
-                       // block. This doesn't appear to happen with tidy, because tidy only
-                       // writes to stdout after it's finished reading from stdin. Search
-                       // for tidyParseStdin and tidySaveStdout in console/tidy.c
-                       fwrite( $pipes[0], $text );
-                       fclose( $pipes[0] );
-                       while ( !feof( $pipes[$readpipe] ) ) {
-                               $cleansource .= fgets( $pipes[$readpipe], 1024 );
+                       switch ( $config['driver'] ) {
+                               case 'RaggettInternalHHVM':
+                                       self::$instance = new MediaWiki\Tidy\RaggettInternalHHVM( $config );
+                                       break;
+                               case 'RaggettInternalPHP':
+                                       self::$instance = new MediaWiki\Tidy\RaggettInternalPHP( $config );
+                                       break;
+                               case 'RaggettExternal':
+                                       self::$instance = new MediaWiki\Tidy\RaggettExternal( $config );
+                                       break;
+                               case 'Html5Depurate':
+                                       self::$instance = new MediaWiki\Tidy\Html5Depurate( $config );
+                                       break;
+                               default:
+                                       throw new MWException( "Invalid tidy driver: \"{$config['driver']}\"" );
                        }
-                       fclose( $pipes[$readpipe] );
-                       $retval = proc_close( $process );
-               } else {
-                       wfWarn( "Unable to start external tidy process" );
-                       $retval = -1;
                }
-
-               if ( !$stderr && $cleansource == '' && $text != '' ) {
-                       // Some kind of error happened, so we couldn't get the corrected text.
-                       // Just give up; we'll use the source text and append a warning.
-                       $cleansource = null;
-               }
-
-               return $cleansource;
+               return self::$instance;
        }
 
        /**
-        * Use the HTML tidy extension to use the tidy library in-process,
-        * saving the overhead of spawning a new process.
-        *
-        * @param string $text HTML to check
-        * @param bool $stderr Whether to read result from error status instead of output
-        * @param int &$retval Exit code (-1 on internal error)
-        * @return string|null
+        * Set the driver to be used. This is for testing.
+        * @param TidyDriverBase|false|null $instance
         */
-       private static function phpClean( $text, $stderr = false, &$retval = null ) {
-               global $wgTidyConf, $wgDebugTidy;
-
-               if ( ( !wfIsHHVM() && !class_exists( 'tidy' ) ) ||
-                       ( wfIsHHVM() && !function_exists( 'tidy_repair_string' ) )
-               ) {
-                       wfWarn( "Unable to load internal tidy class." );
-                       $retval = -1;
-
-                       return null;
-               }
-
-               $tidy = new tidy;
-               $tidy->parseString( $text, $wgTidyConf, 'utf8' );
-
-               if ( $stderr ) {
-                       $retval = $tidy->getStatus();
-                       return $tidy->errorBuffer;
-               }
-
-               $tidy->cleanRepair();
-               $retval = $tidy->getStatus();
-               if ( $retval == 2 ) {
-                       // 2 is magic number for fatal error
-                       // http://www.php.net/manual/en/function.tidy-get-status.php
-                       $cleansource = null;
-               } else {
-                       $cleansource = tidy_get_output( $tidy );
-                       if ( $wgDebugTidy && $retval > 0 ) {
-                               $cleansource .= "<!--\nTidy reports:\n" .
-                                       str_replace( '-->', '--&gt;', $tidy->errorBuffer ) .
-                                       "\n-->";
-                       }
-               }
-
-               return $cleansource;
+       public static function setInstance( $instance ) {
+               self::$instance = $instance;
        }
 
        /**
-        * Use the tidy extension for HHVM from
-        * https://github.com/wikimedia/mediawiki-php-tidy
-        *
-        * This currently does not support the object-oriented interface, but
-        * tidy_repair_string() can be used for the most common tasks.
-        *
-        * @param string $text HTML to check
-        * @param int &$retval Exit code (-1 on internal error)
-        * @return string|null
+        * Destroy the current singleton instance
         */
-       private static function hhvmClean( $text, &$retval ) {
-               global $wgTidyConf;
-
-               $cleansource = tidy_repair_string( $text, $wgTidyConf, 'utf8' );
-               if ( $cleansource === false ) {
-                       $cleansource = null;
-                       $retval = -1;
-               } else {
-                       $retval = 0;
-               }
-
-               return $cleansource;
+       public static function destroySingleton() {
+               self::$instance = null;
        }
 }
index 664f0a4..677da63 100644 (file)
@@ -1283,8 +1283,6 @@ class Parser {
         * @return string
         */
        private function internalParseHalfParsed( $text, $isMain = true, $linestart = true ) {
-               global $wgUseTidy, $wgAlwaysUseTidy;
-
                $text = $this->mStripState->unstripGeneral( $text );
 
                if ( $isMain ) {
@@ -1335,7 +1333,7 @@ class Parser {
 
                $text = Sanitizer::normalizeCharReferences( $text );
 
-               if ( ( $wgUseTidy && $this->mOptions->getTidy() ) || $wgAlwaysUseTidy ) {
+               if ( MWTidy::isEnabled() && $this->mOptions->getTidy() ) {
                        $text = MWTidy::tidy( $text );
                } else {
                        # attempt to sanitize at least some nesting problems
@@ -3326,7 +3324,8 @@ class Parser {
         */
        public function replaceVariables( $text, $frame = false, $argsOnly = false ) {
                # Is there any text? Also, Prevent too big inclusions!
-               if ( strlen( $text ) < 1 || strlen( $text ) > $this->mOptions->getMaxIncludeSize() ) {
+               $textSize = strlen( $text );
+               if ( $textSize < 1 || $textSize > $this->mOptions->getMaxIncludeSize() ) {
                        return $text;
                }
 
index 47fcd30..abff543 100644 (file)
@@ -44,15 +44,14 @@ class ParserCache {
 
        /**
         * Setup a cache pathway with a given back-end storage mechanism.
-        * May be a memcached client or a BagOStuff derivative.
+        *
+        * This class use an invalidation strategy that is compatible with
+        * MultiWriteBagOStuff in async replication mode.
         *
         * @param BagOStuff $memCached
         * @throws MWException
         */
-       protected function __construct( $memCached ) {
-               if ( !$memCached ) {
-                       throw new MWException( "Tried to create a ParserCache with an invalid memcached" );
-               }
+       protected function __construct( BagOStuff $memCached ) {
                $this->mMemc = $memCached;
        }
 
index 4459047..1073aed 100644 (file)
@@ -802,6 +802,10 @@ class ParserOptions {
 
                $confstr .= $wgRenderHashAppend;
 
+               // @note: as of Feb 2015, core never sets the editsection flag, since it uses
+               // <mw:editsection> tags to inject editsections on the fly. However, extensions
+               // may be using it by calling ParserOption::optionUsed resp. ParserOutput::registerOption
+               // directly. At least Wikibase does at this point in time.
                if ( !in_array( 'editsection', $forOptions ) ) {
                        $confstr .= '!*';
                } elseif ( !$this->mEditSection ) {
index 8ddb401..9429e44 100644 (file)
@@ -734,8 +734,12 @@ class Preprocessor_Hash implements Preprocessor {
                // Cache
                if ( $cacheable ) {
                        $cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . serialize( $rootNode );
-                       $wgMemc->set( $cacheKey, $cacheValue, 86400 );
-                       wfDebugLog( "Preprocessor", "Saved preprocessor Hash to memcached (key $cacheKey)" );
+
+                       // T111289: Cache values should not exceed 1 Mb, but they do.
+                       if ( strlen( $cacheValue ) <= 1e6 ) {
+                               $wgMemc->set( $cacheKey, $cacheValue, 86400 );
+                               wfDebugLog( "Preprocessor", "Saved preprocessor Hash to memcached (key $cacheKey)" );
+                       }
                }
 
                return $rootNode;
index 39da32d..6723793 100644 (file)
@@ -47,7 +47,7 @@ class EncryptedPassword extends ParameterizedPassword {
                                        $secret, 0, base64_decode( $this->args[0] )
                                ) );
                } else {
-                       $underlyingPassword = $this->factory->newFromType( $this->config['underlying'], $this->config );
+                       $underlyingPassword = $this->factory->newFromType( $this->config['underlying'] );
                }
 
                $underlyingPassword->crypt( $password );
index 98797a3..d7357cf 100644 (file)
@@ -76,7 +76,7 @@ class PoolCounterRedis extends PoolCounter {
        const AWAKE_ONE = 1; // wake-up if when a slot can be taken from an existing process
        const AWAKE_ALL = 2; // wake-up if an existing process finishes and wake up such others
 
-       /** @var array List of active PoolCounterRedis objects in this script */
+       /** @var PoolCounterRedis[] List of active PoolCounterRedis objects in this script */
        protected static $active = null;
 
        function __construct( $conf, $type, $key ) {
@@ -121,7 +121,6 @@ class PoolCounterRedis extends PoolCounter {
        }
 
        function acquireForMe() {
-
                $status = $this->precheckAcquire();
                if ( !$status->isGood() ) {
                        return $status;
@@ -131,7 +130,6 @@ class PoolCounterRedis extends PoolCounter {
        }
 
        function acquireForAnyone() {
-
                $status = $this->precheckAcquire();
                if ( !$status->isGood() ) {
                        return $status;
@@ -141,7 +139,6 @@ class PoolCounterRedis extends PoolCounter {
        }
 
        function release() {
-
                if ( $this->slot === null ) {
                        return Status::newGood( PoolCounter::NOT_LOCKED ); // not locked
                }
@@ -190,7 +187,7 @@ class PoolCounterRedis extends PoolCounter {
                return 1
 LUA;
                try {
-                       $res = $conn->luaEval( $script,
+                       $conn->luaEval( $script,
                                array(
                                        $this->getSlotListKey(),
                                        $this->getSlotRTimeSetKey(),
index 1ceded1..a286f6b 100644 (file)
@@ -315,9 +315,15 @@ class ExtensionProcessor implements Processor {
         */
        protected function extractConfig( array $info ) {
                if ( isset( $info['config'] ) ) {
+                       if ( isset( $info['config']['_prefix'] ) ) {
+                               $prefix = $info['config']['_prefix'];
+                               unset( $info['config']['_prefix'] );
+                       } else {
+                               $prefix = 'wg';
+                       }
                        foreach ( $info['config'] as $key => $val ) {
                                if ( $key[0] !== '@' ) {
-                                       $this->globals["wg$key"] = $val;
+                                       $this->globals["$prefix$key"] = $val;
                                }
                        }
                }
index 63bee07..23e29d8 100644 (file)
@@ -249,17 +249,10 @@ class ExtensionRegistry {
                                        $GLOBALS[$key] = array_merge_recursive( $GLOBALS[$key], $val );
                                        break;
                                case 'array_plus_2d':
-                                       // First merge items that are in both arrays
-                                       foreach ( $GLOBALS[$key] as $name => &$groupVal ) {
-                                               if ( isset( $val[$name] ) ) {
-                                                       $groupVal += $val[$name];
-                                               }
-                                       }
-                                       // Now add items that didn't exist yet
-                                       $GLOBALS[$key] += $val;
+                                       $GLOBALS[$key] = wfArrayPlus2d( $GLOBALS[$key], $val );
                                        break;
                                case 'array_plus':
-                                       $GLOBALS[$key] = $val + $GLOBALS[$key];
+                                       $GLOBALS[$key] += $val;
                                        break;
                                case 'array_merge':
                                        $GLOBALS[$key] = array_merge( $val, $GLOBALS[$key] );
index fd2263b..1f48514 100644 (file)
@@ -191,6 +191,7 @@ class ResourceLoader implements LoggerAwareInterface {
                }
                // Defaults
                $options += array( 'cache' => true, 'cacheReport' => false );
+               $stats = RequestContext::getMain()->getStats();
 
                // Don't filter empty content
                if ( trim( $data ) === '' ) {
@@ -211,18 +212,16 @@ class ResourceLoader implements LoggerAwareInterface {
                        $cache = wfGetCache( wfIsHHVM() ? CACHE_ACCEL : CACHE_ANYTHING );
                        $cacheEntry = $cache->get( $key );
                        if ( is_string( $cacheEntry ) ) {
-                               wfIncrStats( "resourceloader_cache.$filter.hit" );
+                               $stats->increment( "resourceloader_cache.$filter.hit" );
                                return $cacheEntry;
                        }
                        $result = '';
                        try {
-                               $stats = RequestContext::getMain()->getStats();
                                $statStart = microtime( true );
-
                                $result = self::applyFilter( $filter, $data, $this->config );
-
                                $statTiming = microtime( true ) - $statStart;
-                               $stats->timing( "resourceloader_cache.$filter.miss", 1000 * $statTiming );
+                               $stats->increment( "resourceloader_cache.$filter.miss" );
+                               $stats->timing( "resourceloader_cache.$filter.timing", 1000 * $statTiming );
                                if ( $options['cacheReport'] ) {
                                        $result .= "\n/* cache key: $key */";
                                }
@@ -284,8 +283,8 @@ class ResourceLoader implements LoggerAwareInterface {
                $this->register( include "$IP/resources/Resources.php" );
                $this->register( include "$IP/resources/ResourcesOOUI.php" );
                // Register extension modules
-               Hooks::run( 'ResourceLoaderRegisterModules', array( &$this ) );
                $this->register( $config->get( 'ResourceModules' ) );
+               Hooks::run( 'ResourceLoaderRegisterModules', array( &$this ) );
 
                if ( $config->get( 'EnableJavaScriptTest' ) === true ) {
                        $this->registerTestModules();
@@ -748,18 +747,18 @@ class ResourceLoader implements LoggerAwareInterface {
 
                if ( $context->getImageObj() && $this->errors ) {
                        // We can't show both the error messages and the response when it's an image.
-                       $errorText = '';
-                       foreach ( $this->errors as $error ) {
-                               $errorText .= $error . "\n";
-                       }
-                       $response = $errorText;
+                       $response = implode( "\n\n",  $this->errors );
                } elseif ( $this->errors ) {
-                       // Prepend comments indicating errors
-                       $errorText = '';
-                       foreach ( $this->errors as $error ) {
-                               $errorText .= self::makeComment( $error );
+                       $errorText = implode( "\n\n", $this->errors );
+                       $errorResponse = self::makeComment( $errorText );
+                       if ( $context->shouldIncludeScripts() ) {
+                               $errorResponse .= 'if (window.console && console.error) {'
+                                       . Xml::encodeJsCall( 'console.error', array( $errorText ) )
+                                       . "}\n";
                        }
-                       $response = $errorText . $response;
+
+                       // Prepend error info to the response
+                       $response = $errorResponse . $response;
                }
 
                $this->errors = array();
@@ -941,11 +940,11 @@ class ResourceLoader implements LoggerAwareInterface {
        protected static function formatExceptionNoComment( $e ) {
                global $wgShowExceptionDetails;
 
-               if ( $wgShowExceptionDetails ) {
-                       return $e->__toString();
-               } else {
-                       return wfMessage( 'internalerror' )->text();
+               if ( !$wgShowExceptionDetails ) {
+                       return 'Internal error';
                }
+
+               return $e->__toString();
        }
 
        /**
@@ -1012,7 +1011,7 @@ MESSAGE;
                                                        $out .= $scripts;
                                                } elseif ( is_array( $scripts ) ) {
                                                        // ...except when $scripts is an array of URLs
-                                                       $out .= self::makeLoaderImplementScript( $name, $scripts, array(), array() );
+                                                       $out .= self::makeLoaderImplementScript( $name, $scripts, array(), array(), array() );
                                                }
                                                break;
                                        case 'styles':
@@ -1486,7 +1485,7 @@ MESSAGE;
                $query = self::createLoaderQuery( $context, $extraQuery );
                $script = $this->getLoadScript( $source );
 
-               return wfExpandUrl( wfAppendQuery( $script, $query ), PROTO_RELATIVE );
+               return wfAppendQuery( $script, $query );
        }
 
        /**
@@ -1514,7 +1513,7 @@ MESSAGE;
                        $only, $printable, $handheld, $extraQuery
                );
 
-               return wfExpandUrl( wfAppendQuery( $wgLoadScript, $query ), PROTO_RELATIVE );
+               return wfAppendQuery( $wgLoadScript, $query );
        }
 
        /**
@@ -1609,27 +1608,23 @@ MESSAGE;
         * @param Config $config
         * @throws MWException
         * @since 1.22
-        * @return lessc
+        * @return Less_Parser
         */
        public static function getLessCompiler( Config $config ) {
                // When called from the installer, it is possible that a required PHP extension
                // is missing (at least for now; see bug 47564). If this is the case, throw an
                // exception (caught by the installer) to prevent a fatal error later on.
-               if ( !class_exists( 'lessc' ) ) {
-                       throw new MWException( 'MediaWiki requires the lessphp compiler' );
-               }
-               if ( !function_exists( 'ctype_digit' ) ) {
-                       throw new MWException( 'lessc requires the Ctype extension' );
+               if ( !class_exists( 'Less_Parser' ) ) {
+                       throw new MWException( 'MediaWiki requires the less.php parser' );
                }
 
-               $less = new lessc();
-               $less->setPreserveComments( true );
-               $less->setVariables( self::getLessVars( $config ) );
-               $less->setImportDir( $config->get( 'ResourceLoaderLESSImportPaths' ) );
-               foreach ( $config->get( 'ResourceLoaderLESSFunctions' ) as $name => $func ) {
-                       $less->registerFunction( $name, $func );
-               }
-               return $less;
+               $parser = new Less_Parser;
+               $parser->ModifyVars( self::getLessVars( $config ) );
+               $parser->SetImportDirs( array_fill_keys( $config->get( 'ResourceLoaderLESSImportPaths' ), '' ) );
+               $parser->SetOption( 'relativeUrls', false );
+               $parser->SetCacheDir( $config->get( 'CacheDirectory' ) ?: wfTempDir() );
+
+               return $parser;
        }
 
        /**
index f3fae0e..da729fd 100644 (file)
@@ -56,7 +56,7 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule {
                // This is very conveniently formatted and we can pass it right through
                $vars = $language->getImageFiles();
 
-               // lessc tries to be helpful and parse our variables as LESS source code
+               // less.php tries to be helpful and parse our variables as LESS source code
                foreach ( $vars as $key => &$value ) {
                        $value = self::cssSerializeString( $value );
                }
@@ -78,11 +78,11 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule {
         *
         * @throws MWException
         * @param ResourceLoaderContext $context
-        * @return lessc
+        * @return Less_Parser
         */
        protected function getLessCompiler( ResourceLoaderContext $context = null ) {
-               $compiler = parent::getLessCompiler();
-               $compiler->setVariables( $this->getLessVars( $context ) );
-               return $compiler;
+               $parser = parent::getLessCompiler();
+               $parser->ModifyVars( $this->getLessVars( $context ) );
+               return $parser;
        }
 }
index 3224b13..7fbc1cb 100644 (file)
@@ -152,6 +152,12 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         */
        protected $localFileRefs = array();
 
+       /**
+        * @var array Place where readStyleFile() tracks file dependencies for non-existent files.
+        * Used in tests to detect missing dependencies.
+        */
+       protected $missingLocalFileRefs = array();
+
        /* Methods */
 
        /**
@@ -591,10 +597,14 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
 
                $options = array();
                foreach ( array(
-                       // T104950: Do not include localBasePath or remoteBasePath!
-                       // Those paths may vary over time and needlessly invalidate cache. If the path changes
-                       // in a way that makes relative file paths point to something else, getFileHashes() will
-                       // account for that already.
+                       // The following properties are omitted because they don't affect the module reponse:
+                       // - localBasePath (Per T104950; Changes when absolute directory name changes. If
+                       //    this affects 'scripts' and other file paths, getFileHashes accounts for that.)
+                       // - remoteBasePath (Per T104950)
+                       // - dependencies (provided via startup module)
+                       // - targets
+                       // - group (provided via startup module)
+                       // - position (only used by OutputPage)
                        'scripts',
                        'debugScripts',
                        'loaderScripts',
@@ -602,12 +612,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        'languageScripts',
                        'skinScripts',
                        'skinStyles',
-                       'dependencies',
                        'messages',
-                       'targets',
                        'templates',
-                       'group',
-                       'position',
                        'skipFunction',
                        'debugRaw',
                        'raw',
@@ -917,10 +923,14 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                $localDir = dirname( $localPath );
                $remoteDir = dirname( $remotePath );
                // Get and register local file references
-               $this->localFileRefs = array_merge(
-                       $this->localFileRefs,
-                       CSSMin::getLocalFileReferences( $style, $localDir )
-               );
+               $localFileRefs = CSSMin::getAllLocalFileReferences( $style, $localDir );
+               foreach ( $localFileRefs as $file ) {
+                       if ( file_exists( $file ) ) {
+                               $this->localFileRefs[] = $file;
+                       } else {
+                               $this->missingLocalFileRefs[] = $file;
+                       }
+               }
                return CSSMin::remap(
                        $style, $localDir, $remoteDir, true
                );
@@ -950,17 +960,17 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * Keeps track of all used files and adds them to localFileRefs.
         *
         * @since 1.22
-        * @throws Exception If lessc encounters a parse error
+        * @throws Exception If less.php encounters a parse error
         * @param string $fileName File path of LESS source
-        * @param lessc $compiler Compiler to use, if not default
+        * @param Less_Parser $parser Compiler to use, if not default
         * @return string CSS source
         */
        protected function compileLessFile( $fileName, $compiler = null ) {
                if ( !$compiler ) {
                        $compiler = $this->getLessCompiler();
                }
-               $result = $compiler->compileFile( $fileName );
-               $this->localFileRefs += array_keys( $compiler->allParsedFiles() );
+               $result = $compiler->parseFile( $fileName )->getCss();
+               $this->localFileRefs += array_keys( $compiler->AllParsedFiles() );
                return $result;
        }
 
@@ -972,7 +982,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @param ResourceLoaderContext $context
         * @throws MWException
         * @since 1.24
-        * @return lessc
+        * @return Less_Parser
         */
        protected function getLessCompiler( ResourceLoaderContext $context = null ) {
                return ResourceLoader::getLessCompiler( $this->getConfig() );
index 1243f23..1d3ffb5 100644 (file)
@@ -849,16 +849,43 @@ abstract class ResourceLoaderModule {
        }
 
        /**
-        * Safe version of sha1_file(), which doesn't throw a PHP warning if the file doesn't exist.
-        * Defaults to empty string.
+        * Compute a non-cryptographic string hash of a file's contents.
+        * If the file does not exist or cannot be read, returns an empty string.
         *
+        * @since 1.26 Uses MD4 instead of SHA1.
         * @param string $filePath File path
         * @return string Hash
         */
        protected static function safeFileHash( $filePath ) {
+               static $cache;
+
+               if ( !$cache ) {
+                       $cache = ObjectCache::newAccelerator( CACHE_NONE );
+               }
+
+               MediaWiki\suppressWarnings();
+               $mtime = filemtime( $filePath );
+               MediaWiki\restoreWarnings();
+               if ( !$mtime ) {
+                       return '';
+               }
+
+               $cacheKey = wfGlobalCacheKey( 'resourceloader', __METHOD__, $filePath );
+               $cachedHash = $cache->get( $cacheKey );
+               if ( isset( $cachedHash['mtime'] ) && $cachedHash['mtime'] === $mtime ) {
+                       return $cachedHash['hash'];
+               }
+
                MediaWiki\suppressWarnings();
-               $hash = sha1_file( $filePath ) ?: '';
+               $contents = file_get_contents( $filePath );
                MediaWiki\restoreWarnings();
+               if ( !$contents ) {
+                       return '';
+               }
+
+               $hash = hash( 'md4', $contents );
+               $cache->set( $cacheKey, array( 'mtime' => $mtime, 'hash' => $hash ), 60 * 60 * 24 );
+
                return $hash;
        }
 }
index 837557c..7aac3b8 100644 (file)
@@ -251,7 +251,7 @@ abstract class RevDelList extends RevisionListBase {
                if ( !$field ) {
                        throw new MWException( "Bad log URL param type!" );
                }
-               // Put things hidden from sysops in the oversight log
+               // Put things hidden from sysops in the suppression log
                if ( ( $params['newBits'] | $params['oldBits'] ) & $this->getSuppressBit() ) {
                        $logType = 'suppress';
                } else {
index 0a05eef..8d18b0e 100644 (file)
@@ -60,6 +60,33 @@ class SearchResultSet {
                return null;
        }
 
+       /**
+        * Some search modes will run an alternative query that it thinks gives
+        * a better result than the provided search. Returns true if this has
+        * occured.
+        *
+        * @return bool
+        */
+       function hasRewrittenQuery() {
+               return false;
+       }
+
+       /**
+        * @return string|null The search the query was internally rewritten to,
+        *  or null when the result of the original query was returned.
+        */
+       function getQueryAfterRewrite() {
+               return null;
+       }
+
+       /**
+        * @return string|null Same as self::getQueryAfterRewrite(), but in HTML
+        *  and with changes highlighted. Null when the query was not rewritten.
+        */
+       function getQueryAfterRewriteSnippet() {
+               return null;
+       }
+
        /**
         * Some search modes return a suggested alternate term if there are
         * no exact hits. Returns true if there is one on this set.
index 53af3e7..4e6201c 100644 (file)
@@ -200,16 +200,15 @@ abstract class Skin extends ContextSource {
                );
 
                // Add various resources if required
-               if ( $wgUseAjax ) {
-                       if ( $wgEnableAPI ) {
-                               if ( $wgEnableWriteAPI && $wgAjaxWatch && $user->isLoggedIn()
-                                       && $user->isAllowed( 'writeapi' )
-                               ) {
-                                       $modules['watch'][] = 'mediawiki.page.watch.ajax';
-                               }
-
-                               $modules['search'][] = 'mediawiki.searchSuggest';
+               if ( $wgUseAjax && $wgEnableAPI ) {
+                       if ( $wgEnableWriteAPI && $wgAjaxWatch && $user->isLoggedIn()
+                               && $user->isAllowedAll( 'writeapi', 'viewmywatchlist', 'editmywatchlist' )
+                               && $this->getRelevantTitle()->canExist()
+                       ) {
+                               $modules['watch'][] = 'mediawiki.page.watch.ajax';
                        }
+
+                       $modules['search'][] = 'mediawiki.searchSuggest';
                }
 
                if ( $user->getBoolOption( 'editsectiononrightclick' ) ) {
@@ -238,8 +237,8 @@ abstract class Skin extends ContextSource {
                        $titles[] = $user->getTalkPage();
                }
 
-               // Other tab link
-               if ( $title->isSpecialPage() ) {
+               // Check, if the page can hold some kind of content, otherwise do nothing
+               if ( !$title->canExist() ) {
                        // nothing
                } elseif ( $title->isTalkPage() ) {
                        $titles[] = $title->getSubjectPage();
index a1844a8..baf9d95 100644 (file)
@@ -54,12 +54,18 @@ class SkinTemplate extends Skin {
                $moduleStyles = array(
                        'mediawiki.legacy.shared',
                        'mediawiki.legacy.commonPrint',
-                       'mediawiki.ui.button',
                        'mediawiki.sectionAnchor'
                );
                if ( $out->isSyndicated() ) {
                        $moduleStyles[] = 'mediawiki.feedlink';
                }
+
+               // Deprecated since 1.26: Unconditional loading of mediawiki.ui.button
+               // on every page is deprecated. Express a dependency instead.
+               if ( strpos( $out->getHTML(), 'mw-ui-button' ) !== false ) {
+                       $moduleStyles[] = 'mediawiki.ui.button';
+               }
+
                $out->addModuleStyles( $moduleStyles );
        }
 
index e0f35c6..cd6cc76 100644 (file)
@@ -662,8 +662,8 @@ class SpecialBlock extends FormSpecialPage {
                if ( $data['HideUser'] ) {
                        if ( !$performer->isAllowed( 'hideuser' ) ) {
                                # this codepath is unreachable except by a malicious user spoofing forms,
-                               # or by race conditions (user has oversight and sysop, loads block form,
-                               # and is de-oversighted before submission); so need to fail completely
+                               # or by race conditions (user has hideuser and block rights, loads block form,
+                               # and loses hideuser rights before submission); so need to fail completely
                                # rather than just silently disable hiding
                                return array( 'badaccess-group0' );
                        }
@@ -787,7 +787,7 @@ class SpecialBlock extends FormSpecialPage {
                $logParams['5::duration'] = $data['Expiry'];
                $logParams['6::flags'] = self::blockLogFlags( $data, $type );
 
-               # Make log entry, if the name is hidden, put it in the oversight log
+               # Make log entry, if the name is hidden, put it in the suppression log
                $log_type = $data['HideUser'] ? 'suppress' : 'block';
                $logEntry = new ManualLogEntry( $log_type, $logaction );
                $logEntry->setTarget( Title::makeTitle( NS_USER, $target ) );
index c2aa704..22df04e 100644 (file)
@@ -160,6 +160,10 @@ class SpecialChangeEmail extends FormSpecialPage {
                        return Status::newFatal( 'invalidemailaddress' );
                }
 
+               if ( $newaddr === $user->getEmail() ) {
+                       return Status::newFatal( 'changeemail-nochange' );
+               }
+
                $throttleCount = LoginForm::incLoginThrottle( $user->getName() );
                if ( $throttleCount === true ) {
                        $lang = $this->getLanguage();
index f41a1f1..d2b2e70 100644 (file)
@@ -123,7 +123,7 @@ class SpecialEditTags extends UnlistedSpecialPage {
 
                // Either submit or create our form
                if ( $this->isAllowed && $this->submitClicked ) {
-                       $this->submit( $request );
+                       $this->submit();
                } else {
                        $this->showForm();
                }
@@ -349,20 +349,18 @@ class SpecialEditTags extends UnlistedSpecialPage {
        protected function getTagSelect( $selectedTags, $label ) {
                $result = array();
                $result[0] = Xml::label( $label, 'mw-edittags-tag-list' );
-               $result[1] = Xml::openElement( 'select', array(
-                       'name' => 'wpTagList[]',
-                       'id' => 'mw-edittags-tag-list',
-                       'multiple' => 'multiple',
-                       'size' => '8',
-               ) );
+
+               $select = new XmlSelect( 'wpTagList[]', 'mw-edittags-tag-list', $selectedTags );
+               $select->setAttribute( 'multiple', 'multiple' );
+               $select->setAttribute( 'size', '8' );
 
                $tags = ChangeTags::listExplicitlyDefinedTags();
                $tags = array_unique( array_merge( $tags, $selectedTags ) );
-               foreach ( $tags as $tag ) {
-                       $result[1] .= Xml::option( $tag, $tag, in_array( $tag, $selectedTags ) );
-               }
 
-               $result[1] .= Xml::closeElement( 'select' );
+               // Values of $tags are also used as <option> labels
+               $select->addOptions( array_combine( $tags, $tags ) );
+
+               $result[1] = $select->getHTML();
                return $result;
        }
 
index 1754471..92cb8bf 100644 (file)
@@ -369,7 +369,10 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        if ( $data['CCMe'] && $to != $from ) {
                                $cc_subject = $context->msg( 'emailccsubject' )->rawParams(
                                        $target->getName(), $subject )->text();
+
+                               // target and sender are equal, because this is the CC for the sender
                                Hooks::run( 'EmailUserCC', array( &$from, &$from, &$cc_subject, &$text ) );
+
                                $ccStatus = UserMailer::send( $from, $from, $cc_subject, $text );
                                $status->merge( $ccStatus );
                        }
index 69b795d..39c4d77 100644 (file)
@@ -30,7 +30,6 @@
  */
 class SpecialExport extends SpecialPage {
        private $curonly, $doExport, $pageLinkDepth, $templates;
-       private $images;
 
        public function __construct() {
                parent::__construct( 'Export' );
@@ -46,7 +45,6 @@ class SpecialExport extends SpecialPage {
                $this->doExport = false;
                $request = $this->getRequest();
                $this->templates = $request->getCheck( 'templates' );
-               $this->images = $request->getCheck( 'images' ); // Doesn't do anything yet
                $this->pageLinkDepth = $this->validateLinkDepth(
                        $request->getIntOrNull( 'pagelink-depth' )
                );
@@ -279,13 +277,6 @@ class SpecialExport extends SpecialPage {
                }
 
                $formDescriptor += array(
-                       /* Enable this when we can do something useful exporting/importing image information.
-                       'images' => array(
-                               'type' => 'check',
-                               'name' => 'images',
-                               'id' => 'wpExportImages',
-                               'default' => false,
-                       ),*/
                        'wpDownload' => array(
                                'type' => 'check',
                                'name' =>'wpDownload',
@@ -359,11 +350,6 @@ class SpecialExport extends SpecialPage {
                                $pageSet = $this->getPageLinks( $inputPages, $pageSet, $linkDepth );
                        }
 
-                       // Enable this when we can do something useful exporting/importing image information.
-                       // if( $this->images ) ) {
-                       // $pageSet = $this->getImages( $inputPages, $pageSet );
-                       // }
-
                        $pages = array_keys( $pageSet );
 
                        // Normalize titles to the same format and remove dupes, see bug 17374
@@ -549,24 +535,6 @@ class SpecialExport extends SpecialPage {
                return $pageSet;
        }
 
-       /**
-        * Expand a list of pages to include images used in those pages.
-        *
-        * @param array $inputPages List of titles to look up
-        * @param array $pageSet Associative array indexed by titles for output
-        *
-        * @return array Associative array index by titles
-        */
-       private function getImages( $inputPages, $pageSet ) {
-               return $this->getLinks(
-                       $inputPages,
-                       $pageSet,
-                       'imagelinks',
-                       array( 'namespace' => NS_FILE, 'title' => 'il_to' ),
-                       array( 'page_id=il_from' )
-               );
-       }
-
        /**
         * Expand a list of pages to include items used in those pages.
         * @param array $inputPages Array of page titles
index dc882d4..f474867 100644 (file)
@@ -91,7 +91,7 @@ class LinkSearchPage extends QueryPage {
 
                $request = $this->getRequest();
                $target = $request->getVal( 'target', $par );
-               $namespace = $request->getIntOrNull( 'namespace', null );
+               $namespace = $request->getIntOrNull( 'namespace' );
 
                $protocols_list = array();
                foreach ( $this->getConfig()->get( 'UrlProtocols' ) as $prot ) {
index 9e7dc00..31200c8 100644 (file)
@@ -263,6 +263,8 @@ class UsersPager extends AlphabeticPager {
        function getPageHeader() {
                list( $self ) = explode( '/', $this->getTitle()->getPrefixedDBkey() );
 
+               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
+
                # Form tag
                $out = Xml::openElement(
                        'form',
@@ -271,13 +273,14 @@ class UsersPager extends AlphabeticPager {
                        Xml::fieldset( $this->msg( 'listusers' )->text() ) .
                        Html::hidden( 'title', $self );
 
-               # Username field
+               # Username field (with autocompletion support)
                $out .= Xml::label( $this->msg( 'listusersfrom' )->text(), 'offset' ) . ' ' .
                        Html::input(
                                'username',
                                $this->requestedUser,
                                'text',
                                array(
+                                       'class' => 'mw-autocomplete-user',
                                        'id' => 'offset',
                                        'size' => 20,
                                        'autofocus' => $this->requestedUser === ''
index eb8a274..8091f1b 100644 (file)
@@ -147,6 +147,7 @@ class MovePageForm extends UnlistedSpecialPage {
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'move-page', $this->oldTitle->getPrefixedText() ) );
                $out->addModules( 'mediawiki.special.movePage' );
+               $out->addModuleStyles( 'mediawiki.special.movePage.styles' );
                $this->addHelpLink( 'Help:Moving a page' );
 
                $newTitle = $this->newTitle;
@@ -290,7 +291,6 @@ class MovePageForm extends UnlistedSpecialPage {
                // is enforced in the mediawiki.special.movePage module
 
                $immovableNamespaces = array();
-
                foreach ( array_keys( $this->getLanguage()->getNamespaces() ) as $nsId ) {
                        if ( !MWNamespace::isMovable( $nsId ) ) {
                                $immovableNamespaces[] = $nsId;
@@ -299,202 +299,207 @@ class MovePageForm extends UnlistedSpecialPage {
 
                $handler = ContentHandler::getForTitle( $this->oldTitle );
 
-               $out->addHTML(
-                       Xml::openElement(
-                               'form',
-                               array(
-                                       'method' => 'post',
-                                       'action' => $this->getPageTitle()->getLocalURL( 'action=submit' ),
-                                       'id' => 'movepage'
-                               )
-                       ) .
-                       Xml::openElement( 'fieldset' ) .
-                       Xml::element( 'legend', null, $this->msg( 'move-page-legend' )->text() ) .
-                       Xml::openElement( 'table', array( 'id' => 'mw-movepage-table' ) )
+               $out->enableOOUI();
+               $fields = array();
+
+               $fields[] = new OOUI\FieldLayout(
+                       new OOUI\LabelWidget( array(
+                               'label' => new OOUI\HtmlSnippet( "<strong>$oldTitleLink</strong>" )
+                       ) ),
+                       array(
+                               'label' => $this->msg( 'movearticle' )->text(),
+                               'align' => 'top',
+                       )
                );
 
-               $out->addHTML(
-                       "<tr>
-                               <td class='mw-label'>" .
-                                       $this->msg( 'movearticle' )->escaped() .
-                               "</td>
-                               <td class='mw-input'>
-                                       <strong>{$oldTitleLink}</strong>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td class='mw-label'>" .
-                                       Xml::label( $this->msg( 'newtitle' )->text(), 'wpNewTitleMain' ) .
-                               "</td>
-                               <td class='mw-input'>" .
-                                       Html::namespaceSelector(
-                                               array(
-                                                       'selected' => $newTitle->getNamespace(),
-                                                       'exclude' => $immovableNamespaces
-                                               ),
-                                               array( 'name' => 'wpNewTitleNs', 'id' => 'wpNewTitleNs' )
-                                       ) .
-                                       Xml::input(
-                                               'wpNewTitleMain',
-                                               60,
-                                               $wgContLang->recodeForEdit( $newTitle->getText() ),
-                                               array(
-                                                       'type' => 'text',
-                                                       'id' => 'wpNewTitleMain',
-                                                       'maxlength' => 255
-                                               )
-                                       ) .
-                                       Html::hidden( 'wpOldTitle', $this->oldTitle->getPrefixedText() ) .
-                               "</td>
-                       </tr>
-                       <tr>
-                               <td class='mw-label'>" .
-                                       Xml::label( $this->msg( 'movereason' )->text(), 'wpReason' ) .
-                               "</td>
-                               <td class='mw-input'>" .
-                                       Xml::input( 'wpReason', 60, $this->reason, array(
-                                               'type' => 'text',
-                                               'id' => 'wpReason',
-                                               'maxlength' => 200,
-                                       ) ) .
-                               "</td>
-                       </tr>"
+               $fields[] = new OOUI\FieldLayout(
+                       new MediaWiki\Widget\ComplexTitleInputWidget( array(
+                               'id' => 'wpNewTitle',
+                               'namespace' => array(
+                                       'id' => 'wpNewTitleNs',
+                                       'name' => 'wpNewTitleNs',
+                                       'value' => $newTitle->getNamespace(),
+                                       'exclude' => $immovableNamespaces,
+                               ),
+                               'title' => array(
+                                       'id' => 'wpNewTitleMain',
+                                       'name' => 'wpNewTitleMain',
+                                       'value' => $wgContLang->recodeForEdit( $newTitle->getText() ),
+                                       // Inappropriate, since we're expecting the user to input a non-existent page's title
+                                       'suggestions' => false,
+                               ),
+                               'infusable' => true,
+                       ) ),
+                       array(
+                               'label' => $this->msg( 'newtitle' )->text(),
+                               'align' => 'top',
+                       )
+               );
+
+               $fields[] = new OOUI\FieldLayout(
+                       new OOUI\TextInputWidget( array(
+                               'name' => 'wpReason',
+                               'id' => 'wpReason',
+                               'maxLength' => 200,
+                               'infusable' => true,
+                       ) ),
+                       array(
+                               'label' => $this->msg( 'movereason' )->text(),
+                               'align' => 'top',
+                       )
                );
 
                if ( $considerTalk ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'movetalk' )->text(),
-                                                       'wpMovetalk',
-                                                       'wpMovetalk',
-                                                       $this->moveTalk
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpMovetalk',
+                                       'id' => 'wpMovetalk',
+                                       'value' => '1',
+                                       'selected' => $this->moveTalk,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'movetalk' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $user->isAllowed( 'suppressredirect' ) ) {
                        if ( $handler->supportsRedirects() ) {
                                $isChecked = $this->leaveRedirect;
-                               $options = array();
+                               $isDisabled = false;
                        } else {
                                $isChecked = false;
-                               $options = array(
-                                       'disabled' => 'disabled'
-                               );
+                               $isDisabled = true;
                        }
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'move-leave-redirect' )->text(),
-                                                       'wpLeaveRedirect',
-                                                       'wpLeaveRedirect',
-                                                       $isChecked,
-                                                       $options
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpLeaveRedirect',
+                                       'id' => 'wpLeaveRedirect',
+                                       'value' => '1',
+                                       'selected' => $isChecked,
+                                       'disabled' => $isDisabled,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'move-leave-redirect' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $hasRedirects ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'fix-double-redirects' )->text(),
-                                                       'wpFixRedirects',
-                                                       'wpFixRedirects',
-                                                       $this->fixRedirects
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpFixRedirects',
+                                       'id' => 'wpFixRedirects',
+                                       'value' => '1',
+                                       'selected' => $this->fixRedirects,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'fix-double-redirects' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $canMoveSubpage ) {
                        $maximumMovedPages = $this->getConfig()->get( 'MaximumMovedPages' );
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::check(
-                                                       'wpMovesubpages',
-                                                       # Don't check the box if we only have talk subpages to
-                                                       # move and we aren't moving the talk page.
-                                                       $this->moveSubpages && ( $this->oldTitle->hasSubpages() || $this->moveTalk ),
-                                                       array( 'id' => 'wpMovesubpages' )
-                                               ) . '&#160;' .
-                                               Xml::tags(
-                                                       'label',
-                                                       array( 'for' => 'wpMovesubpages' ),
-                                                       $this->msg(
-                                                               ( $this->oldTitle->hasSubpages()
-                                                                       ? 'move-subpages'
-                                                                       : 'move-talk-subpages' )
-                                                       )->numParams( $maximumMovedPages )->params( $maximumMovedPages )->parse()
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpMovesubpages',
+                                       'id' => 'wpMovesubpages',
+                                       'value' => '1',
+                                       # Don't check the box if we only have talk subpages to
+                                       # move and we aren't moving the talk page.
+                                       'selected' => $this->moveSubpages && ( $this->oldTitle->hasSubpages() || $this->moveTalk ),
+                               ) ),
+                               array(
+                                       'label' => new OOUI\HtmlSnippet(
+                                               $this->msg(
+                                                       ( $this->oldTitle->hasSubpages()
+                                                               ? 'move-subpages'
+                                                               : 'move-talk-subpages' )
+                                               )->numParams( $maximumMovedPages )->params( $maximumMovedPages )->parse()
+                                       ),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
-               $watchChecked = $user->isLoggedIn() && ( $this->watch || $user->getBoolOption( 'watchmoves' )
-                       || $user->isWatched( $this->oldTitle ) );
                # Don't allow watching if user is not logged in
                if ( $user->isLoggedIn() ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'move-watch' )->text(),
-                                                       'wpWatch',
-                                                       'watch',
-                                                       $watchChecked
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $watchChecked = $user->isLoggedIn() && ( $this->watch || $user->getBoolOption( 'watchmoves' )
+                               || $user->isWatched( $this->oldTitle ) );
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpWatch',
+                                       'id' => 'watch', # ew
+                                       'value' => '1',
+                                       'selected' => $watchChecked,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'move-watch' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $confirm ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'delete_and_move_confirm' )->text(),
-                                                       'wpConfirm',
-                                                       'wpConfirm'
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $watchChecked = $user->isLoggedIn() && ( $this->watch || $user->getBoolOption( 'watchmoves' )
+                               || $user->isWatched( $this->oldTitle ) );
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpConfirm',
+                                       'id' => 'wpConfirm',
+                                       'value' => '1',
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'delete_and_move_confirm' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
-               $out->addHTML( "
-                       <tr>
-                               <td></td>
-                               <td class='mw-submit'>" .
-                                       Xml::submitButton( $movepagebtn, array( 'name' => $submitVar ) ) .
-                               "</td>
-                       </tr>"
+               $fields[] = new OOUI\FieldLayout(
+                       new OOUI\ButtonInputWidget( array(
+                               'name' => $submitVar,
+                               'value' => $movepagebtn,
+                               'label' => $movepagebtn,
+                               'flags' => array( 'progressive', 'primary' ),
+                               'type' => 'submit',
+                       ) ),
+                       array(
+                               'align' => 'top',
+                       )
+               );
+
+               $fieldset = new OOUI\FieldsetLayout( array(
+                       'label' => $this->msg( 'move-page-legend' )->text(),
+                       'id' => 'mw-movepage-table',
+                       'items' => $fields,
+               ) );
+
+               $form = new OOUI\FormLayout( array(
+                       'method' => 'post',
+                       'action' => $this->getPageTitle()->getLocalURL( 'action=submit' ),
+                       'id' => 'movepage',
+               ) );
+               $form->appendContent(
+                       $fieldset,
+                       new OOUI\HtmlSnippet(
+                               Html::hidden( 'wpOldTitle', $this->oldTitle->getPrefixedText() ) .
+                               Html::hidden( 'wpEditToken', $user->getEditToken() )
+                       )
                );
 
                $out->addHTML(
-                       Xml::closeElement( 'table' ) .
-                       Html::hidden( 'wpEditToken', $user->getEditToken() ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       Xml::closeElement( 'form' ) .
-                       "\n"
+                       new OOUI\PanelLayout( array(
+                               'classes' => array( 'movepage-wrapper' ),
+                               'expanded' => false,
+                               'padded' => true,
+                               'framed' => true,
+                               'content' => $form,
+                       ) )
                );
 
                $this->showLogFragment( $this->oldTitle );
index 26d0fe8..f211ec9 100644 (file)
@@ -113,9 +113,11 @@ class SpecialPagesWithProp extends QueryPage {
                                'pp_value',
                        ),
                        'conds' => array(
-                               'page_id = pp_page',
                                'pp_propname' => $this->propName,
                        ),
+                       'join_conds' => array(
+                               'page' => array( 'INNER JOIN', 'page_id = pp_page' )
+                       ),
                        'options' => array()
                );
        }
index f2a315e..4b75e5f 100644 (file)
@@ -50,10 +50,13 @@ class SpecialPreferences extends SpecialPage {
 
                if ( $this->getRequest()->getCheck( 'success' ) ) {
                        $out->wrapWikiMsg(
-                               Xml::tags(
+                               Html::rawElement(
                                        'div',
-                                       array( 'class' => 'successbox', 'id' => 'mw-preferences-success' ),
-                                       '$1'
+                                       array(
+                                               'class' => 'mw-preferences-messagebox successbox',
+                                               'id' => 'mw-preferences-success'
+                                       ),
+                                       Html::element( 'p', array(), '$1' )
                                ),
                                'savedprefs'
                        );
index 27a3a69..cba5a44 100644 (file)
@@ -25,6 +25,7 @@
  * Let users reset tokens like the watchlist token.
  *
  * @ingroup SpecialPage
+ * @deprecated 1.26
  */
 class SpecialResetTokens extends FormSpecialPage {
        private $tokensList;
index af2dc94..fd0745f 100644 (file)
@@ -216,6 +216,7 @@ class SpecialSearch extends SpecialPage {
                global $wgContLang;
 
                $search = $this->getSearchEngine();
+               $search->setFeatureData( 'rewrite', $this->runSuggestion );
                $search->setLimitOffset( $this->limit, $this->offset );
                $search->setNamespaces( $this->namespaces );
                $search->prefix = $this->mPrefix;
@@ -272,12 +273,8 @@ class SpecialSearch extends SpecialPage {
                // did you mean... suggestions
                $didYouMeanHtml = '';
                if ( $showSuggestion && $textMatches && !$textStatus ) {
-                       if ( $this->shouldRunSuggestedQuery( $textMatches ) ) {
-                               $newMatches = $search->searchText( $textMatches->getSuggestionQuery() );
-                               if ( $newMatches instanceof SearchResultSet && $newMatches->numRows() > 0 ) {
-                                       $didYouMeanHtml = $this->getDidYouMeanRewrittenHtml( $term, $textMatches );
-                                       $textMatches = $newMatches;
-                               }
+                       if ( $textMatches->hasRewrittenQuery() ) {
+                               $didYouMeanHtml = $this->getDidYouMeanRewrittenHtml( $term, $textMatches );
                        } elseif ( $textMatches->hasSuggestion() ) {
                                $didYouMeanHtml = $this->getDidYouMeanHtml( $textMatches );
                        }
@@ -369,14 +366,14 @@ class SpecialSearch extends SpecialPage {
                                $out->wrapWikiMsg( "==$1==\n", 'textmatches' );
                        }
 
-                       // show interwiki results if any
-                       if ( $textMatches->hasInterwikiResults() ) {
-                               $out->addHTML( $this->showInterwiki( $textMatches->getInterwikiResults(), $term ) );
-                       }
                        // show results
                        if ( $numTextMatches > 0 ) {
                                $out->addHTML( $this->showMatches( $textMatches ) );
                        }
+                       // show interwiki results if any
+                       if ( $textMatches->hasInterwikiResults() ) {
+                               $out->addHTML( $this->showInterwiki( $textMatches->getInterwikiResults(), $term ) );
+                       }
 
                        $textMatches->free();
                }
@@ -391,6 +388,7 @@ class SpecialSearch extends SpecialPage {
                        }
                }
 
+               $out->addHTML( '<div class="visualClear"></div>\n' );
                if ( $prevnext ) {
                        $out->addHTML( "<p class='mw-search-pager-bottom'>{$prevnext}</p>\n" );
                }
@@ -463,7 +461,7 @@ class SpecialSearch extends SpecialPage {
                // Showing results for '$rewritten'
                // Search instead for '$orig'
 
-               $params = array( 'search' => $textMatches->getSuggestionQuery() );
+               $params = array( 'search' => $textMatches->getQueryAfterRewrite() );
                if ( $this->fulltext != null ) {
                        $params['fulltext'] = $this->fulltext;
                }
@@ -471,7 +469,7 @@ class SpecialSearch extends SpecialPage {
 
                $rewritten = Linker::linkKnown(
                        $this->getPageTitle(),
-                       $textMatches->getSuggestionSnippet() ?: null,
+                       $textMatches->getQueryAfterRewriteSnippet() ?: null,
                        array(),
                        $stParams
                );
index 44be81c..10d55b2 100644 (file)
@@ -359,7 +359,7 @@ class SpecialUpload extends SpecialPage {
                $sessionKey = $this->mUpload->stashSession();
 
                $warningHtml = '<h2>' . $this->msg( 'uploadwarning' )->escaped() . "</h2>\n"
-                       . '<ul class="warning">';
+                       . '<div class="warningbox"><ul>';
                foreach ( $warnings as $warning => $args ) {
                        if ( $warning == 'badfilename' ) {
                                $this->mDesiredDestName = Title::makeTitle( NS_FILE, $args )->getText();
@@ -387,7 +387,7 @@ class SpecialUpload extends SpecialPage {
                        }
                        $warningHtml .= $msg;
                }
-               $warningHtml .= "</ul>\n";
+               $warningHtml .= "</ul></div>\n";
                $warningHtml .= $this->msg( 'uploadwarning-text' )->parseAsBlock();
 
                $form = $this->getUploadForm( $warningHtml, $sessionKey, /* $hideIgnoreWarning */ true );
index 5b6d22b..0410ef0 100644 (file)
@@ -1367,9 +1367,6 @@ class LoginForm extends SpecialPage {
                        'mediawiki.ui.input',
                        'mediawiki.special.userlogin.common.styles'
                ) );
-               $out->addModules( array(
-                       'mediawiki.special.userlogin.common.js'
-               ) );
 
                if ( $this->mType == 'signup' ) {
                        // XXX hack pending RL or JS parse() support for complex content messages
index a4b9dd8..9e26f0f 100644 (file)
@@ -44,10 +44,7 @@ class WantedTemplatesPage extends WantedQueryPage {
                                'title' => 'tl_title',
                                'value' => 'COUNT(*)'
                        ),
-                       'conds' => array(
-                               'page_title IS NULL',
-                               'tl_namespace' => NS_TEMPLATE
-                       ),
+                       'conds' => array( 'page_title IS NULL' ),
                        'options' => array( 'GROUP BY' => array( 'tl_namespace', 'tl_title' ) ),
                        'join_conds' => array( 'page' => array( 'LEFT JOIN',
                                array( 'page_namespace = tl_namespace',
index c17d575..a39690a 100644 (file)
@@ -38,8 +38,6 @@ class UsercreateTemplate extends BaseTemplate {
        }
 
        function execute() {
-               global $wgCookieExpiration;
-               $expirationDays = ceil( $wgCookieExpiration / ( 3600 * 24 ) );
 ?>
 <div class="mw-ui-container">
        <?php if ( $this->haveData( 'languages' ) ) { ?>
diff --git a/includes/tidy.conf b/includes/tidy.conf
deleted file mode 100644 (file)
index 4c4daed..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# html tidy (http://tidy.sf.net) configuration
-# tidy - validate, correct, and pretty-print HTML files
-# see: man 1 tidy, http://tidy.sourceforge.net/docs/quickref.html
-
-show-body-only: yes
-force-output: yes
-tidy-mark: no
-wrap: 0
-wrap-attributes: no
-literal-attributes: yes
-output-xhtml: yes
-numeric-entities: yes
-enclose-text: yes
-enclose-block-text: yes
-quiet: yes
-quote-nbsp: yes
-fix-backslash: no
-fix-uri: no
-# Don't strip html5 elements we support
-# html-{meta,link} is a hack we use to prevent Tidy from stripping <meta> and <link> used in the body for Microdata
-new-empty-tags: html-meta, html-link, wbr
-new-inline-tags: video, audio, source, track, bdi, data, time, mark
diff --git a/includes/tidy/Html5Depurate.php b/includes/tidy/Html5Depurate.php
new file mode 100644 (file)
index 0000000..23e445f
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+
+namespace MediaWiki\Tidy;
+use MWHttpRequest;
+use Exception;
+
+class Html5Depurate extends TidyDriverBase {
+       public function __construct( array $config ) {
+               parent::__construct( $config + array(
+                       'url' => 'http://localhost:4339/document',
+                       'timeout' => 10,
+                       'connectTimeout' => 0.5,
+               ) );
+       }
+
+       public function tidy( $text ) {
+               $wrappedtext = '<!DOCTYPE html><html>' .
+                       '<body>' . $text . '</body></html>';
+
+               $req = MWHttpRequest::factory( $this->config['url'],
+                       array(
+                               'method' => 'POST',
+                               'timeout' => $this->config['timeout'],
+                               'connectTimeout' => $this->config['connectTimeout'],
+                               'postData' => array(
+                                       'text' => $wrappedtext
+                               )
+                       ) );
+               $status = $req->execute();
+               if ( !$status->isOK() ) {
+                       throw new Exception( "Error contacting depurate service: " . $status->getWikiText() );
+               } elseif ( $req->getStatus() !== 200 ) {
+                       throw new Exception( "Depurate returned error: " . $status->getWikiText() );
+               }
+               $result = $req->getContent();
+               $startBody = strpos( $result, "<body>" );
+               $endBody = strrpos( $result, "</body>" );
+               if ( $startBody !== false && $endBody !== false && $endBody > $startBody ) {
+                       $startBody += strlen( "<body>" );
+                       return substr( $result, $startBody, $endBody - $startBody );
+               } else {
+                       return $text . "\n<!-- Html5Depurate returned an invalid result -->";
+               }
+       }
+}
diff --git a/includes/tidy/RaggettBase.php b/includes/tidy/RaggettBase.php
new file mode 100644 (file)
index 0000000..a3717b2
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+namespace MediaWiki\Tidy;
+
+abstract class RaggettBase extends TidyDriverBase {
+       /**
+        * Generic interface for wrapping and unwrapping HTML for Dave Raggett's tidy.
+        *
+        * @param string $text Hideous HTML input
+        * @return string Corrected HTML output
+        */
+       public function tidy( $text ) {
+               $wrapper = new RaggettWrapper;
+               $wrappedtext = $wrapper->getWrapped( $text );
+
+               $retVal = null;
+               $correctedtext = $this->cleanWrapped( $wrappedtext, false, $retVal );
+
+               if ( $retVal < 0 ) {
+                       wfDebug( "Possible tidy configuration error!\n" );
+                       return $text . "\n<!-- Tidy was unable to run -->\n";
+               } elseif ( is_null( $correctedtext ) ) {
+                       wfDebug( "Tidy error detected!\n" );
+                       return $text . "\n<!-- Tidy found serious XHTML errors -->\n";
+               }
+
+               $correctedtext = $wrapper->postprocess( $correctedtext ); // restore any hidden tokens
+
+               return $correctedtext;
+       }
+
+       public function validate( $text, &$errorStr ) {
+               $retval = 0;
+               $errorStr = $this->cleanWrapped( $text, true, $retval );
+               return ( $retval < 0 && $errorStr == '' ) || $retval == 0;
+       }
+
+       /**
+        * Perform a clean/repair operation
+        * @param string $text HTML to check
+        * @param bool $stderr Whether to read result from STDERR rather than STDOUT
+        * @param int &$retval Exit code (-1 on internal error)
+        * @return null|string
+        * @throws MWException
+        */
+       abstract protected function cleanWrapped( $text, $stderr = false, &$retval = null );
+}
diff --git a/includes/tidy/RaggettExternal.php b/includes/tidy/RaggettExternal.php
new file mode 100644 (file)
index 0000000..1193318
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+
+namespace MediaWiki\Tidy;
+
+class RaggettExternal extends RaggettBase {
+       /**
+        * Spawn an external HTML tidy process and get corrected markup back from it.
+        * Also called in OutputHandler.php for full page validation
+        *
+        * @param string $text HTML to check
+        * @param bool $stderr Whether to read result from STDERR rather than STDOUT
+        * @param int &$retval Exit code (-1 on internal error)
+        * @return string|null
+        */
+       protected function cleanWrapped( $text, $stderr = false, &$retval = null ) {
+               $cleansource = '';
+               $opts = ' -utf8';
+
+               if ( $stderr ) {
+                       $descriptorspec = array(
+                               0 => array( 'pipe', 'r' ),
+                               1 => array( 'file', wfGetNull(), 'a' ),
+                               2 => array( 'pipe', 'w' )
+                       );
+               } else {
+                       $descriptorspec = array(
+                               0 => array( 'pipe', 'r' ),
+                               1 => array( 'pipe', 'w' ),
+                               2 => array( 'file', wfGetNull(), 'a' )
+                       );
+               }
+
+               $readpipe = $stderr ? 2 : 1;
+               $pipes = array();
+
+               $process = proc_open(
+                       "{$this->config['tidyBin']} -config {$this->config['tidyConfigFile']} " .
+                       $this->config['tidyCommandLine'] . $opts, $descriptorspec, $pipes );
+
+               //NOTE: At least on linux, the process will be created even if tidy is not installed.
+               //      This means that missing tidy will be treated as a validation failure.
+
+               if ( is_resource( $process ) ) {
+                       // Theoretically, this style of communication could cause a deadlock
+                       // here. If the stdout buffer fills up, then writes to stdin could
+                       // block. This doesn't appear to happen with tidy, because tidy only
+                       // writes to stdout after it's finished reading from stdin. Search
+                       // for tidyParseStdin and tidySaveStdout in console/tidy.c
+                       fwrite( $pipes[0], $text );
+                       fclose( $pipes[0] );
+                       while ( !feof( $pipes[$readpipe] ) ) {
+                               $cleansource .= fgets( $pipes[$readpipe], 1024 );
+                       }
+                       fclose( $pipes[$readpipe] );
+                       $retval = proc_close( $process );
+               } else {
+                       wfWarn( "Unable to start external tidy process" );
+                       $retval = -1;
+               }
+
+               if ( !$stderr && $cleansource == '' && $text != '' ) {
+                       // Some kind of error happened, so we couldn't get the corrected text.
+                       // Just give up; we'll use the source text and append a warning.
+                       $cleansource = null;
+               }
+
+               return $cleansource;
+       }
+
+       public function supportsValidate() {
+               return true;
+       }
+}
diff --git a/includes/tidy/RaggettInternalHHVM.php b/includes/tidy/RaggettInternalHHVM.php
new file mode 100644 (file)
index 0000000..2a3986d
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+namespace MediaWiki\Tidy;
+
+class RaggettInternalHHVM extends RaggettBase {
+       /**
+        * Use the HTML tidy extension to use the tidy library in-process,
+        * saving the overhead of spawning a new process.
+        *
+        * @param string $text HTML to check
+        * @param bool $stderr Whether to read result from error status instead of output
+        * @param int &$retval Exit code (-1 on internal error)
+        * @return string|null
+        */
+       protected function cleanWrapped( $text, $stderr = false, &$retval = null ) {
+               if ( $stderr ) {
+                       throw new Exception( "\$stderr cannot be used with RaggettInternalHHVM" );
+               }
+               $cleansource = tidy_repair_string( $text, $this->config['tidyConfigFile'], 'utf8' );
+               if ( $cleansource === false ) {
+                       $cleansource = null;
+                       $retval = -1;
+               } else {
+                       $retval = 0;
+               }
+
+               return $cleansource;
+       }
+}
diff --git a/includes/tidy/RaggettInternalPHP.php b/includes/tidy/RaggettInternalPHP.php
new file mode 100644 (file)
index 0000000..1ce14b6
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+
+namespace MediaWiki\Tidy;
+
+class RaggettInternalPHP extends RaggettBase {
+       /**
+        * Use the HTML tidy extension to use the tidy library in-process,
+        * saving the overhead of spawning a new process.
+        *
+        * @param string $text HTML to check
+        * @param bool $stderr Whether to read result from error status instead of output
+        * @param int &$retval Exit code (-1 on internal error)
+        * @return string|null
+        */
+       protected function cleanWrapped( $text, $stderr = false, &$retval = null ) {
+               if ( !class_exists( 'tidy' ) ) {
+                       wfWarn( "Unable to load internal tidy class." );
+                       $retval = -1;
+
+                       return null;
+               }
+
+               $tidy = new \tidy;
+               $tidy->parseString( $text, $this->config['tidyConfigFile'], 'utf8' );
+
+               if ( $stderr ) {
+                       $retval = $tidy->getStatus();
+                       return $tidy->errorBuffer;
+               }
+
+               $tidy->cleanRepair();
+               $retval = $tidy->getStatus();
+               if ( $retval == 2 ) {
+                       // 2 is magic number for fatal error
+                       // http://www.php.net/manual/en/function.tidy-get-status.php
+                       $cleansource = null;
+               } else {
+                       $cleansource = tidy_get_output( $tidy );
+                       if ( !empty( $this->config['debugComment'] ) && $retval > 0 ) {
+                               $cleansource .= "<!--\nTidy reports:\n" .
+                                       str_replace( '-->', '--&gt;', $tidy->errorBuffer ) .
+                                       "\n-->";
+                       }
+               }
+
+               return $cleansource;
+       }
+
+       public function supportsValidate() {
+               return true;
+       }
+}
diff --git a/includes/tidy/RaggettWrapper.php b/includes/tidy/RaggettWrapper.php
new file mode 100644 (file)
index 0000000..083f402
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+namespace MediaWiki\Tidy;
+
+use ReplacementArray;
+use ParserOutput;
+use Parser;
+
+/**
+ * Class used to hide mw:editsection tokens from Tidy so that it doesn't break them
+ * or break on them. This is a bit of a hack for now, but hopefully in the future
+ * we may create a real postprocessor or something that will replace this.
+ * It's called wrapper because for now it basically takes over MWTidy::tidy's task
+ * of wrapping the text in a xhtml block
+ *
+ * This re-uses some of the parser's UNIQ tricks, though some of it is private so it's
+ * duplicated. Perhaps we should create an abstract marker hiding class.
+ *
+ * @ingroup Parser
+ */
+class RaggettWrapper {
+
+       /**
+        * @var ReplacementArray
+        */
+       protected $mTokens;
+
+       protected $mMarkerIndex;
+
+       public function __construct() {
+               $this->mTokens = null;
+       }
+
+       /**
+        * @param string $text
+        * @return string
+        */
+       public function getWrapped( $text ) {
+               $this->mTokens = new ReplacementArray;
+               $this->mMarkerIndex = 0;
+
+               // Replace <mw:editsection> elements with placeholders
+               $wrappedtext = preg_replace_callback( ParserOutput::EDITSECTION_REGEX,
+                       array( &$this, 'replaceCallback' ), $text );
+               // ...and <mw:toc> markers
+               $wrappedtext = preg_replace_callback( '/\<\\/?mw:toc\>/',
+                       array( &$this, 'replaceCallback' ), $wrappedtext );
+               // ... and <math> tags
+               $wrappedtext = preg_replace_callback( '/\<math(.*?)\<\\/math\>/s',
+                       array( &$this, 'replaceCallback' ), $wrappedtext );
+               // Modify inline Microdata <link> and <meta> elements so they say <html-link> and <html-meta> so
+               // we can trick Tidy into not stripping them out by including them in tidy's new-empty-tags config
+               $wrappedtext = preg_replace( '!<(link|meta)([^>]*?)(/{0,1}>)!', '<html-$1$2$3', $wrappedtext );
+
+               // Wrap the whole thing in a doctype and body for Tidy.
+               $wrappedtext = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' .
+                       ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>' .
+                       '<head><title>test</title></head><body>' . $wrappedtext . '</body></html>';
+
+               return $wrappedtext;
+       }
+
+       /**
+        * @param array $m
+        *
+        * @return string
+        */
+       public function replaceCallback( $m ) {
+               $marker = Parser::MARKER_PREFIX . "-item-{$this->mMarkerIndex}" . Parser::MARKER_SUFFIX;
+               $this->mMarkerIndex++;
+               $this->mTokens->setPair( $marker, $m[0] );
+               return $marker;
+       }
+
+       /**
+        * @param string $text
+        * @return string
+        */
+       public function postprocess( $text ) {
+               // Revert <html-{link,meta}> back to <{link,meta}>
+               $text = preg_replace( '!<html-(link|meta)([^>]*?)(/{0,1}>)!', '<$1$2$3', $text );
+
+               // Restore the contents of placeholder tokens
+               $text = $this->mTokens->replace( $text );
+
+               return $text;
+       }
+
+}
+?>
diff --git a/includes/tidy/TidyDriverBase.php b/includes/tidy/TidyDriverBase.php
new file mode 100644 (file)
index 0000000..1d994aa
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+namespace MediaWiki\Tidy;
+
+/**
+ * Base class for HTML cleanup utilities
+ */
+abstract class TidyDriverBase {
+       protected $config;
+
+       function __construct( $config ) {
+               $this->config = $config;
+       }
+
+       /**
+        * Return true if validate() can be used
+        */
+       public function supportsValidate() {
+               return false;
+       }
+
+       /**
+        * Check HTML for errors, used if $wgValidateAllHtml = true.
+        *
+        * @param string $text
+        * @param string &$errorStr Return the error string
+        * @return bool Whether the HTML is valid
+        */
+       public function validate( $text, &$errorStr ) {
+               throw new MWException( get_class( $this ) . " does not support validate()" );
+       }
+
+       /**
+        * Clean up HTML
+        *
+        * @param string HTML document fragment to clean up
+        * @param string The corrected HTML output
+        */
+       public abstract function tidy( $text );
+}
diff --git a/includes/tidy/tidy.conf b/includes/tidy/tidy.conf
new file mode 100644 (file)
index 0000000..4c4daed
--- /dev/null
@@ -0,0 +1,22 @@
+# html tidy (http://tidy.sf.net) configuration
+# tidy - validate, correct, and pretty-print HTML files
+# see: man 1 tidy, http://tidy.sourceforge.net/docs/quickref.html
+
+show-body-only: yes
+force-output: yes
+tidy-mark: no
+wrap: 0
+wrap-attributes: no
+literal-attributes: yes
+output-xhtml: yes
+numeric-entities: yes
+enclose-text: yes
+enclose-block-text: yes
+quiet: yes
+quote-nbsp: yes
+fix-backslash: no
+fix-uri: no
+# Don't strip html5 elements we support
+# html-{meta,link} is a hack we use to prevent Tidy from stripping <meta> and <link> used in the body for Microdata
+new-empty-tags: html-meta, html-link, wbr
+new-inline-tags: video, audio, source, track, bdi, data, time, mark
index 493df2e..30a85ae 100644 (file)
@@ -752,6 +752,12 @@ abstract class UploadBase {
                if ( $this->mTitle !== false ) {
                        return $this->mTitle;
                }
+               if ( !is_string( $this->mDesiredDestName ) ) {
+                       $this->mTitleError = self::ILLEGAL_FILENAME;
+                       $this->mTitle = null;
+
+                       return $this->mTitle;
+               }
                /* Assume that if a user specified File:Something.jpg, this is an error
                 * and that the namespace prefix needs to be stripped of.
                 */
@@ -1700,24 +1706,21 @@ abstract class UploadBase {
         * Check if a user is the last uploader
         *
         * @param User $user
-        * @param string $img Image name
+        * @param File $img
         * @return bool
         */
-       public static function userCanReUpload( User $user, $img ) {
+       public static function userCanReUpload( User $user, File $img ) {
                if ( $user->isAllowed( 'reupload' ) ) {
                        return true; // non-conditional
-               }
-               if ( !$user->isAllowed( 'reupload-own' ) ) {
+               } elseif ( !$user->isAllowed( 'reupload-own' ) ) {
                        return false;
                }
-               if ( is_string( $img ) ) {
-                       $img = wfLocalFile( $img );
-               }
+
                if ( !( $img instanceof LocalFile ) ) {
                        return false;
                }
 
-               $img->load( File::READ_LATEST );
+               $img->load();
 
                return $user->getId() == $img->getUser( 'id' );
        }
diff --git a/includes/utils/AvroValidator.php b/includes/utils/AvroValidator.php
new file mode 100644 (file)
index 0000000..4f8e0b1
--- /dev/null
@@ -0,0 +1,184 @@
+<?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
+ */
+
+/**
+ * Generate error strings for data that doesn't match the specified
+ * Avro schema. This is very similar to AvroSchema::is_valid_datum(),
+ * but returns error messages instead of a boolean.
+ *
+ * @since 1.26
+ * @author Erik Bernhardson <ebernhardson@wikimedia.org>
+ * @copyright © 2015 Erik Bernhardson and Wikimedia Foundation.
+ */
+class AvroValidator {
+       /**
+        * @param AvroSchema $schema The rules to conform to.
+        * @param mixed $datum The value to validate against $schema.
+        * @return string|string[] An error or list of errors in the
+        *  provided $datum. When no errors exist the empty array is
+        *  returned.
+        */
+       public static function getErrors( AvroSchema $schema, $datum ) {
+               switch ( $schema->type) {
+               case AvroSchema::NULL_TYPE:
+                       if ( !is_null($datum) ) {
+                               return self::wrongType( 'null', $datum );
+                       }
+                       return array();
+               case AvroSchema::BOOLEAN_TYPE:
+                       if ( !is_bool($datum) ) {
+                               return self::wrongType( 'boolean', $datum );
+                       }
+                       return array();
+               case AvroSchema::STRING_TYPE:
+               case AvroSchema::BYTES_TYPE:
+                       if ( !is_string($datum) ) {
+                               return self::wrongType( 'string', $datum );
+                       }
+                       return array();
+               case AvroSchema::INT_TYPE:
+                       if ( !is_int($datum) ) {
+                               return self::wrongType( 'integer', $datum );
+                       }
+                       if ( AvroSchema::INT_MIN_VALUE > $datum
+                               || $datum > AvroSchema::INT_MAX_VALUE
+                       ) {
+                               return self::outOfRange(
+                                       AvroSchema::INT_MIN_VALUE,
+                                       AvroSchema::INT_MAX_VALUE,
+                                       $datum
+                               );
+                       }
+                       return array();
+               case AvroSchema::LONG_TYPE:
+                       if ( !is_int($datum) ) {
+                               return self::wrongType( 'integer', $datum );
+                       }
+                       if ( AvroSchema::LONG_MIN_VALUE > $datum
+                               || $datum > AvroSchema::LONG_MAX_VALUE
+                       ) {
+                               return self::outOfRange(
+                                       AvroSchema::LONG_MIN_VALUE,
+                                       AvroSchema::LONG_MAX_VALUE,
+                                       $datum
+                               );
+                       }
+                       return array();
+               case AvroSchema::FLOAT_TYPE:
+               case AvroSchema::DOUBLE_TYPE:
+                       if ( !is_float($datum) && !is_int($datum) ) {
+                               return self::wrongType( 'float or integer', $datum );
+                       }
+                       return array();
+               case AvroSchema::ARRAY_SCHEMA:
+                       if (!is_array($datum)) {
+                               return self::wrongType( 'array', $datum );
+                       }
+                       $errors = array();
+                       foreach ($datum as $d) {
+                               $result = $this->validate( $schema->items(), $d );
+                               if ( $result ) {
+                                       $errors[] = $result;
+                               }
+                       }
+                       if ( $errors ) {
+                               return $errors;
+                       }
+                       return array();
+               case AvroSchema::MAP_SCHEMA:
+                       if (!is_array($datum)) {
+                               return self::wrongType( 'array', $datum );
+                       }
+                       $errors = array();
+                       foreach ($datum as $k => $v) {
+                       if ( !is_string($k) ) {
+                                       $errors[] = self::wrongType( 'string key', $k );
+                               }
+                               $result = self::getErrors( $schema->values(), $v );
+                               if ( $result ) {
+                                       $errors[$k] = $result;
+                               }
+                       }
+                       return $errors;
+               case AvroSchema::UNION_SCHEMA:
+                       $errors = array();
+                       foreach ($schema->schemas() as $schema) {
+                               $result = self::getErrors( $schema, $datum );
+                               if ( !$result ) {
+                                       return array();
+                               }
+                               $errors[] = $result;
+                       }
+                       if ( $errors ) {
+                               return array( "Expected any one of these to be true", $errors );
+                       }
+                       return "No schemas provided to union";
+               case AvroSchema::ENUM_SCHEMA:
+                       if ( !in_array( $datum, $schema->symbols() ) ) {
+                               $symbols = implode( ', ', $schema->symbols );
+                               return "Expected one of $symbols but recieved $datum";
+                       }
+                       return array();
+               case AvroSchema::FIXED_SCHEMA:
+                       if ( !is_string( $datum ) ) {
+                               return self::wrongType( 'string', $datum );
+                       }
+                       $len = strlen( $datum );
+                       if ( $len !== $schema->size() ) {
+                               return "Expected string of length {$schema->size()}, "
+                                       . "but recieved one of length $len";
+                       }
+                       return array();
+               case AvroSchema::RECORD_SCHEMA:
+               case AvroSchema::ERROR_SCHEMA:
+               case AvroSchema::REQUEST_SCHEMA:
+                       if ( !is_array( $datum ) ) {
+                               return self::wrongType( 'array', $datum );
+                       }
+                       $errors = array();
+                       foreach ( $schema->fields() as $field ) {
+                               $name = $field->name();
+                               if ( !array_key_exists( $name, $datum ) ) {
+                                       $errors[$name] = 'Missing expected field';
+                                       continue;
+                               }
+                               $result = self::getErrors( $field->type(), $datum[$name] );
+                               if ( $result ) {
+                                       $errors[$name] = $result;
+                               }
+                       }
+                       return $errors;
+               default:
+                       return "Unknown avro schema type: {$schema->type}";
+               }
+       }
+
+       public static function typeOf( $datum ) {
+               return is_object( $datum ) ? get_class( $datum ) : gettype( $datum );
+       }
+
+       public static function wrongType( $expected, $datum ) {
+               return "Expected $expected, but recieved " . self::typeOf( $datum );
+       }
+
+       public static function outOfRange( $min, $max, $datum ) {
+               return "Expected value between $min and $max, but recieved $datum";
+       }
+}
index 288a311..c1b5020 100644 (file)
@@ -37,11 +37,11 @@ abstract class IteratorDecorator implements Iterator {
        }
 
        public function next() {
-               return $this->iterator->next();
+               $this->iterator->next();
        }
 
        public function rewind() {
-               return $this->iterator->rewind();
+               $this->iterator->rewind();
        }
 
        public function valid() {
diff --git a/includes/widget/ComplexTitleInputWidget.php b/includes/widget/ComplexTitleInputWidget.php
new file mode 100644 (file)
index 0000000..73ef54c
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+/**
+ * MediaWiki Widgets – ComplexTitleInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+namespace MediaWiki\Widget;
+
+/**
+ * Complex title input widget.
+ */
+class ComplexTitleInputWidget extends \OOUI\Widget {
+
+       protected $namespace = null;
+       protected $title = null;
+
+       /**
+        * Like TitleInputWidget, but the namespace has to be input through a separate dropdown field.
+        *
+        * @param array $config Configuration options
+        * @param array $config['namespace'] Configuration for the NamespaceInputWidget dropdown with list
+        *     of namespaces
+        * @param array $config['title'] Configuration for the TitleInputWidget text field
+        */
+       public function __construct( array $config = array() ) {
+               // Configuration initialization
+               $config = array_merge(
+                       array(
+                               'namespace' => array(),
+                               'title' => array(),
+                       ),
+                       $config
+               );
+
+               // Parent constructor
+               parent::__construct( $config );
+
+               // Properties
+               $this->config = $config;
+               $this->namespace = new NamespaceInputWidget( $config['namespace'] );
+               $this->title = new TitleInputWidget( array_merge(
+                       $config['title'],
+                       array(
+                               // The inner TitleInputWidget shouldn't be infusable, only the ComplexTitleInputWidget itself can be.
+                               'infusable' => false,
+                               'relative' => true,
+                               'namespace' => isset( $config['namespace']['value'] ) ? $config['namespace']['value'] : null,
+                       )
+               ) );
+
+               // Initialization
+               $this
+                       ->addClasses( array( 'mw-widget-complexTitleInputWidget' ) )
+                       ->appendContent( $this->namespace, $this->title );
+       }
+
+       protected function getJavaScriptClassName() {
+               return 'mw.widgets.ComplexTitleInputWidget';
+       }
+
+       public function getConfig( &$config ) {
+               $config['namespace'] = $this->config['namespace'];
+               $config['title'] = $this->config['title'];
+               return parent::getConfig( $config );
+       }
+}
index a99227e..696c8ad 100644 (file)
@@ -18,6 +18,7 @@ class NamespaceInputWidget extends \OOUI\DropdownInputWidget {
         * @param array $config Configuration options
         * @param string $config['includeAllValue'] If specified, add a "all namespaces" option to the
         *     namespace dropdown, and use this as the input value for it
+        * @param number[] $config['exclude'] List of namespace numbers to exclude from the selector
         */
        public function __construct( array $config = array() ) {
                // Configuration initialization
@@ -28,14 +29,17 @@ class NamespaceInputWidget extends \OOUI\DropdownInputWidget {
 
                // Properties
                $this->includeAllValue = isset( $config['includeAllValue'] ) ? $config['includeAllValue'] : null;
+               $this->exclude = isset( $config['exclude'] ) ? $config['exclude'] : array();
 
                // Initialization
                $this->addClasses( array( 'mw-widget-namespaceInputWidget' ) );
        }
 
        protected function getNamespaceDropdownOptions( array $config ) {
-               $namespaceOptionsParams = isset( $config['includeAllValue'] ) ?
-                       array( 'all' => $config['includeAllValue'] ) : array();
+               $namespaceOptionsParams = array(
+                       'all' => isset( $config['includeAllValue'] ) ? $config['includeAllValue'] : null,
+                       'exclude' => isset( $config['exclude'] ) ? $config['exclude'] : null
+               );
                $namespaceOptions = \Html::namespaceSelectorOptions( $namespaceOptionsParams );
 
                $options = array();
@@ -55,6 +59,7 @@ class NamespaceInputWidget extends \OOUI\DropdownInputWidget {
 
        public function getConfig( &$config ) {
                $config['includeAllValue'] = $this->includeAllValue;
+               $config['exclude'] = $this->exclude;
                // Skip DropdownInputWidget's getConfig(), we don't need 'options' config
                return \OOUI\InputWidget::getConfig( $config );
        }
index 370e2ed..1613536 100644 (file)
@@ -167,9 +167,11 @@ class Language {
         * Generated by UnicodeJS (see tools/strongDir) from the UCD; see
         * https://git.wikimedia.org/summary/unicodejs.git .
         */
+       // @codingStandardsIgnoreStart
        // @codeCoverageIgnoreStart
        static private $strongDirRegex = '/(?:([\x{41}-\x{5a}\x{61}-\x{7a}\x{aa}\x{b5}\x{ba}\x{c0}-\x{d6}\x{d8}-\x{f6}\x{f8}-\x{2b8}\x{2bb}-\x{2c1}\x{2d0}\x{2d1}\x{2e0}-\x{2e4}\x{2ee}\x{370}-\x{373}\x{376}\x{377}\x{37a}-\x{37d}\x{37f}\x{386}\x{388}-\x{38a}\x{38c}\x{38e}-\x{3a1}\x{3a3}-\x{3f5}\x{3f7}-\x{482}\x{48a}-\x{52f}\x{531}-\x{556}\x{559}-\x{55f}\x{561}-\x{587}\x{589}\x{903}-\x{939}\x{93b}\x{93d}-\x{940}\x{949}-\x{94c}\x{94e}-\x{950}\x{958}-\x{961}\x{964}-\x{980}\x{982}\x{983}\x{985}-\x{98c}\x{98f}\x{990}\x{993}-\x{9a8}\x{9aa}-\x{9b0}\x{9b2}\x{9b6}-\x{9b9}\x{9bd}-\x{9c0}\x{9c7}\x{9c8}\x{9cb}\x{9cc}\x{9ce}\x{9d7}\x{9dc}\x{9dd}\x{9df}-\x{9e1}\x{9e6}-\x{9f1}\x{9f4}-\x{9fa}\x{a03}\x{a05}-\x{a0a}\x{a0f}\x{a10}\x{a13}-\x{a28}\x{a2a}-\x{a30}\x{a32}\x{a33}\x{a35}\x{a36}\x{a38}\x{a39}\x{a3e}-\x{a40}\x{a59}-\x{a5c}\x{a5e}\x{a66}-\x{a6f}\x{a72}-\x{a74}\x{a83}\x{a85}-\x{a8d}\x{a8f}-\x{a91}\x{a93}-\x{aa8}\x{aaa}-\x{ab0}\x{ab2}\x{ab3}\x{ab5}-\x{ab9}\x{abd}-\x{ac0}\x{ac9}\x{acb}\x{acc}\x{ad0}\x{ae0}\x{ae1}\x{ae6}-\x{af0}\x{af9}\x{b02}\x{b03}\x{b05}-\x{b0c}\x{b0f}\x{b10}\x{b13}-\x{b28}\x{b2a}-\x{b30}\x{b32}\x{b33}\x{b35}-\x{b39}\x{b3d}\x{b3e}\x{b40}\x{b47}\x{b48}\x{b4b}\x{b4c}\x{b57}\x{b5c}\x{b5d}\x{b5f}-\x{b61}\x{b66}-\x{b77}\x{b83}\x{b85}-\x{b8a}\x{b8e}-\x{b90}\x{b92}-\x{b95}\x{b99}\x{b9a}\x{b9c}\x{b9e}\x{b9f}\x{ba3}\x{ba4}\x{ba8}-\x{baa}\x{bae}-\x{bb9}\x{bbe}\x{bbf}\x{bc1}\x{bc2}\x{bc6}-\x{bc8}\x{bca}-\x{bcc}\x{bd0}\x{bd7}\x{be6}-\x{bf2}\x{c01}-\x{c03}\x{c05}-\x{c0c}\x{c0e}-\x{c10}\x{c12}-\x{c28}\x{c2a}-\x{c39}\x{c3d}\x{c41}-\x{c44}\x{c58}-\x{c5a}\x{c60}\x{c61}\x{c66}-\x{c6f}\x{c7f}\x{c82}\x{c83}\x{c85}-\x{c8c}\x{c8e}-\x{c90}\x{c92}-\x{ca8}\x{caa}-\x{cb3}\x{cb5}-\x{cb9}\x{cbd}-\x{cc4}\x{cc6}-\x{cc8}\x{cca}\x{ccb}\x{cd5}\x{cd6}\x{cde}\x{ce0}\x{ce1}\x{ce6}-\x{cef}\x{cf1}\x{cf2}\x{d02}\x{d03}\x{d05}-\x{d0c}\x{d0e}-\x{d10}\x{d12}-\x{d3a}\x{d3d}-\x{d40}\x{d46}-\x{d48}\x{d4a}-\x{d4c}\x{d4e}\x{d57}\x{d5f}-\x{d61}\x{d66}-\x{d75}\x{d79}-\x{d7f}\x{d82}\x{d83}\x{d85}-\x{d96}\x{d9a}-\x{db1}\x{db3}-\x{dbb}\x{dbd}\x{dc0}-\x{dc6}\x{dcf}-\x{dd1}\x{dd8}-\x{ddf}\x{de6}-\x{def}\x{df2}-\x{df4}\x{e01}-\x{e30}\x{e32}\x{e33}\x{e40}-\x{e46}\x{e4f}-\x{e5b}\x{e81}\x{e82}\x{e84}\x{e87}\x{e88}\x{e8a}\x{e8d}\x{e94}-\x{e97}\x{e99}-\x{e9f}\x{ea1}-\x{ea3}\x{ea5}\x{ea7}\x{eaa}\x{eab}\x{ead}-\x{eb0}\x{eb2}\x{eb3}\x{ebd}\x{ec0}-\x{ec4}\x{ec6}\x{ed0}-\x{ed9}\x{edc}-\x{edf}\x{f00}-\x{f17}\x{f1a}-\x{f34}\x{f36}\x{f38}\x{f3e}-\x{f47}\x{f49}-\x{f6c}\x{f7f}\x{f85}\x{f88}-\x{f8c}\x{fbe}-\x{fc5}\x{fc7}-\x{fcc}\x{fce}-\x{fda}\x{1000}-\x{102c}\x{1031}\x{1038}\x{103b}\x{103c}\x{103f}-\x{1057}\x{105a}-\x{105d}\x{1061}-\x{1070}\x{1075}-\x{1081}\x{1083}\x{1084}\x{1087}-\x{108c}\x{108e}-\x{109c}\x{109e}-\x{10c5}\x{10c7}\x{10cd}\x{10d0}-\x{1248}\x{124a}-\x{124d}\x{1250}-\x{1256}\x{1258}\x{125a}-\x{125d}\x{1260}-\x{1288}\x{128a}-\x{128d}\x{1290}-\x{12b0}\x{12b2}-\x{12b5}\x{12b8}-\x{12be}\x{12c0}\x{12c2}-\x{12c5}\x{12c8}-\x{12d6}\x{12d8}-\x{1310}\x{1312}-\x{1315}\x{1318}-\x{135a}\x{1360}-\x{137c}\x{1380}-\x{138f}\x{13a0}-\x{13f5}\x{13f8}-\x{13fd}\x{1401}-\x{167f}\x{1681}-\x{169a}\x{16a0}-\x{16f8}\x{1700}-\x{170c}\x{170e}-\x{1711}\x{1720}-\x{1731}\x{1735}\x{1736}\x{1740}-\x{1751}\x{1760}-\x{176c}\x{176e}-\x{1770}\x{1780}-\x{17b3}\x{17b6}\x{17be}-\x{17c5}\x{17c7}\x{17c8}\x{17d4}-\x{17da}\x{17dc}\x{17e0}-\x{17e9}\x{1810}-\x{1819}\x{1820}-\x{1877}\x{1880}-\x{18a8}\x{18aa}\x{18b0}-\x{18f5}\x{1900}-\x{191e}\x{1923}-\x{1926}\x{1929}-\x{192b}\x{1930}\x{1931}\x{1933}-\x{1938}\x{1946}-\x{196d}\x{1970}-\x{1974}\x{1980}-\x{19ab}\x{19b0}-\x{19c9}\x{19d0}-\x{19da}\x{1a00}-\x{1a16}\x{1a19}\x{1a1a}\x{1a1e}-\x{1a55}\x{1a57}\x{1a61}\x{1a63}\x{1a64}\x{1a6d}-\x{1a72}\x{1a80}-\x{1a89}\x{1a90}-\x{1a99}\x{1aa0}-\x{1aad}\x{1b04}-\x{1b33}\x{1b35}\x{1b3b}\x{1b3d}-\x{1b41}\x{1b43}-\x{1b4b}\x{1b50}-\x{1b6a}\x{1b74}-\x{1b7c}\x{1b82}-\x{1ba1}\x{1ba6}\x{1ba7}\x{1baa}\x{1bae}-\x{1be5}\x{1be7}\x{1bea}-\x{1bec}\x{1bee}\x{1bf2}\x{1bf3}\x{1bfc}-\x{1c2b}\x{1c34}\x{1c35}\x{1c3b}-\x{1c49}\x{1c4d}-\x{1c7f}\x{1cc0}-\x{1cc7}\x{1cd3}\x{1ce1}\x{1ce9}-\x{1cec}\x{1cee}-\x{1cf3}\x{1cf5}\x{1cf6}\x{1d00}-\x{1dbf}\x{1e00}-\x{1f15}\x{1f18}-\x{1f1d}\x{1f20}-\x{1f45}\x{1f48}-\x{1f4d}\x{1f50}-\x{1f57}\x{1f59}\x{1f5b}\x{1f5d}\x{1f5f}-\x{1f7d}\x{1f80}-\x{1fb4}\x{1fb6}-\x{1fbc}\x{1fbe}\x{1fc2}-\x{1fc4}\x{1fc6}-\x{1fcc}\x{1fd0}-\x{1fd3}\x{1fd6}-\x{1fdb}\x{1fe0}-\x{1fec}\x{1ff2}-\x{1ff4}\x{1ff6}-\x{1ffc}\x{200e}\x{2071}\x{207f}\x{2090}-\x{209c}\x{2102}\x{2107}\x{210a}-\x{2113}\x{2115}\x{2119}-\x{211d}\x{2124}\x{2126}\x{2128}\x{212a}-\x{212d}\x{212f}-\x{2139}\x{213c}-\x{213f}\x{2145}-\x{2149}\x{214e}\x{214f}\x{2160}-\x{2188}\x{2336}-\x{237a}\x{2395}\x{249c}-\x{24e9}\x{26ac}\x{2800}-\x{28ff}\x{2c00}-\x{2c2e}\x{2c30}-\x{2c5e}\x{2c60}-\x{2ce4}\x{2ceb}-\x{2cee}\x{2cf2}\x{2cf3}\x{2d00}-\x{2d25}\x{2d27}\x{2d2d}\x{2d30}-\x{2d67}\x{2d6f}\x{2d70}\x{2d80}-\x{2d96}\x{2da0}-\x{2da6}\x{2da8}-\x{2dae}\x{2db0}-\x{2db6}\x{2db8}-\x{2dbe}\x{2dc0}-\x{2dc6}\x{2dc8}-\x{2dce}\x{2dd0}-\x{2dd6}\x{2dd8}-\x{2dde}\x{3005}-\x{3007}\x{3021}-\x{3029}\x{302e}\x{302f}\x{3031}-\x{3035}\x{3038}-\x{303c}\x{3041}-\x{3096}\x{309d}-\x{309f}\x{30a1}-\x{30fa}\x{30fc}-\x{30ff}\x{3105}-\x{312d}\x{3131}-\x{318e}\x{3190}-\x{31ba}\x{31f0}-\x{321c}\x{3220}-\x{324f}\x{3260}-\x{327b}\x{327f}-\x{32b0}\x{32c0}-\x{32cb}\x{32d0}-\x{32fe}\x{3300}-\x{3376}\x{337b}-\x{33dd}\x{33e0}-\x{33fe}\x{3400}-\x{4db5}\x{4e00}-\x{9fd5}\x{a000}-\x{a48c}\x{a4d0}-\x{a60c}\x{a610}-\x{a62b}\x{a640}-\x{a66e}\x{a680}-\x{a69d}\x{a6a0}-\x{a6ef}\x{a6f2}-\x{a6f7}\x{a722}-\x{a787}\x{a789}-\x{a7ad}\x{a7b0}-\x{a7b7}\x{a7f7}-\x{a801}\x{a803}-\x{a805}\x{a807}-\x{a80a}\x{a80c}-\x{a824}\x{a827}\x{a830}-\x{a837}\x{a840}-\x{a873}\x{a880}-\x{a8c3}\x{a8ce}-\x{a8d9}\x{a8f2}-\x{a8fd}\x{a900}-\x{a925}\x{a92e}-\x{a946}\x{a952}\x{a953}\x{a95f}-\x{a97c}\x{a983}-\x{a9b2}\x{a9b4}\x{a9b5}\x{a9ba}\x{a9bb}\x{a9bd}-\x{a9cd}\x{a9cf}-\x{a9d9}\x{a9de}-\x{a9e4}\x{a9e6}-\x{a9fe}\x{aa00}-\x{aa28}\x{aa2f}\x{aa30}\x{aa33}\x{aa34}\x{aa40}-\x{aa42}\x{aa44}-\x{aa4b}\x{aa4d}\x{aa50}-\x{aa59}\x{aa5c}-\x{aa7b}\x{aa7d}-\x{aaaf}\x{aab1}\x{aab5}\x{aab6}\x{aab9}-\x{aabd}\x{aac0}\x{aac2}\x{aadb}-\x{aaeb}\x{aaee}-\x{aaf5}\x{ab01}-\x{ab06}\x{ab09}-\x{ab0e}\x{ab11}-\x{ab16}\x{ab20}-\x{ab26}\x{ab28}-\x{ab2e}\x{ab30}-\x{ab65}\x{ab70}-\x{abe4}\x{abe6}\x{abe7}\x{abe9}-\x{abec}\x{abf0}-\x{abf9}\x{ac00}-\x{d7a3}\x{d7b0}-\x{d7c6}\x{d7cb}-\x{d7fb}\x{e000}-\x{fa6d}\x{fa70}-\x{fad9}\x{fb00}-\x{fb06}\x{fb13}-\x{fb17}\x{ff21}-\x{ff3a}\x{ff41}-\x{ff5a}\x{ff66}-\x{ffbe}\x{ffc2}-\x{ffc7}\x{ffca}-\x{ffcf}\x{ffd2}-\x{ffd7}\x{ffda}-\x{ffdc}\x{10000}-\x{1000b}\x{1000d}-\x{10026}\x{10028}-\x{1003a}\x{1003c}\x{1003d}\x{1003f}-\x{1004d}\x{10050}-\x{1005d}\x{10080}-\x{100fa}\x{10100}\x{10102}\x{10107}-\x{10133}\x{10137}-\x{1013f}\x{101d0}-\x{101fc}\x{10280}-\x{1029c}\x{102a0}-\x{102d0}\x{10300}-\x{10323}\x{10330}-\x{1034a}\x{10350}-\x{10375}\x{10380}-\x{1039d}\x{1039f}-\x{103c3}\x{103c8}-\x{103d5}\x{10400}-\x{1049d}\x{104a0}-\x{104a9}\x{10500}-\x{10527}\x{10530}-\x{10563}\x{1056f}\x{10600}-\x{10736}\x{10740}-\x{10755}\x{10760}-\x{10767}\x{11000}\x{11002}-\x{11037}\x{11047}-\x{1104d}\x{11066}-\x{1106f}\x{11082}-\x{110b2}\x{110b7}\x{110b8}\x{110bb}-\x{110c1}\x{110d0}-\x{110e8}\x{110f0}-\x{110f9}\x{11103}-\x{11126}\x{1112c}\x{11136}-\x{11143}\x{11150}-\x{11172}\x{11174}-\x{11176}\x{11182}-\x{111b5}\x{111bf}-\x{111c9}\x{111cd}\x{111d0}-\x{111df}\x{111e1}-\x{111f4}\x{11200}-\x{11211}\x{11213}-\x{1122e}\x{11232}\x{11233}\x{11235}\x{11238}-\x{1123d}\x{11280}-\x{11286}\x{11288}\x{1128a}-\x{1128d}\x{1128f}-\x{1129d}\x{1129f}-\x{112a9}\x{112b0}-\x{112de}\x{112e0}-\x{112e2}\x{112f0}-\x{112f9}\x{11302}\x{11303}\x{11305}-\x{1130c}\x{1130f}\x{11310}\x{11313}-\x{11328}\x{1132a}-\x{11330}\x{11332}\x{11333}\x{11335}-\x{11339}\x{1133d}-\x{1133f}\x{11341}-\x{11344}\x{11347}\x{11348}\x{1134b}-\x{1134d}\x{11350}\x{11357}\x{1135d}-\x{11363}\x{11480}-\x{114b2}\x{114b9}\x{114bb}-\x{114be}\x{114c1}\x{114c4}-\x{114c7}\x{114d0}-\x{114d9}\x{11580}-\x{115b1}\x{115b8}-\x{115bb}\x{115be}\x{115c1}-\x{115db}\x{11600}-\x{11632}\x{1163b}\x{1163c}\x{1163e}\x{11641}-\x{11644}\x{11650}-\x{11659}\x{11680}-\x{116aa}\x{116ac}\x{116ae}\x{116af}\x{116b6}\x{116c0}-\x{116c9}\x{11700}-\x{11719}\x{11720}\x{11721}\x{11726}\x{11730}-\x{1173f}\x{118a0}-\x{118f2}\x{118ff}\x{11ac0}-\x{11af8}\x{12000}-\x{12399}\x{12400}-\x{1246e}\x{12470}-\x{12474}\x{12480}-\x{12543}\x{13000}-\x{1342e}\x{14400}-\x{14646}\x{16800}-\x{16a38}\x{16a40}-\x{16a5e}\x{16a60}-\x{16a69}\x{16a6e}\x{16a6f}\x{16ad0}-\x{16aed}\x{16af5}\x{16b00}-\x{16b2f}\x{16b37}-\x{16b45}\x{16b50}-\x{16b59}\x{16b5b}-\x{16b61}\x{16b63}-\x{16b77}\x{16b7d}-\x{16b8f}\x{16f00}-\x{16f44}\x{16f50}-\x{16f7e}\x{16f93}-\x{16f9f}\x{1b000}\x{1b001}\x{1bc00}-\x{1bc6a}\x{1bc70}-\x{1bc7c}\x{1bc80}-\x{1bc88}\x{1bc90}-\x{1bc99}\x{1bc9c}\x{1bc9f}\x{1d000}-\x{1d0f5}\x{1d100}-\x{1d126}\x{1d129}-\x{1d166}\x{1d16a}-\x{1d172}\x{1d183}\x{1d184}\x{1d18c}-\x{1d1a9}\x{1d1ae}-\x{1d1e8}\x{1d360}-\x{1d371}\x{1d400}-\x{1d454}\x{1d456}-\x{1d49c}\x{1d49e}\x{1d49f}\x{1d4a2}\x{1d4a5}\x{1d4a6}\x{1d4a9}-\x{1d4ac}\x{1d4ae}-\x{1d4b9}\x{1d4bb}\x{1d4bd}-\x{1d4c3}\x{1d4c5}-\x{1d505}\x{1d507}-\x{1d50a}\x{1d50d}-\x{1d514}\x{1d516}-\x{1d51c}\x{1d51e}-\x{1d539}\x{1d53b}-\x{1d53e}\x{1d540}-\x{1d544}\x{1d546}\x{1d54a}-\x{1d550}\x{1d552}-\x{1d6a5}\x{1d6a8}-\x{1d6da}\x{1d6dc}-\x{1d714}\x{1d716}-\x{1d74e}\x{1d750}-\x{1d788}\x{1d78a}-\x{1d7c2}\x{1d7c4}-\x{1d7cb}\x{1d800}-\x{1d9ff}\x{1da37}-\x{1da3a}\x{1da6d}-\x{1da74}\x{1da76}-\x{1da83}\x{1da85}-\x{1da8b}\x{1f110}-\x{1f12e}\x{1f130}-\x{1f169}\x{1f170}-\x{1f19a}\x{1f1e6}-\x{1f202}\x{1f210}-\x{1f23a}\x{1f240}-\x{1f248}\x{1f250}\x{1f251}\x{20000}-\x{2a6d6}\x{2a700}-\x{2b734}\x{2b740}-\x{2b81d}\x{2b820}-\x{2cea1}\x{2f800}-\x{2fa1d}\x{f0000}-\x{ffffd}\x{100000}-\x{10fffd}])|([\x{590}\x{5be}\x{5c0}\x{5c3}\x{5c6}\x{5c8}-\x{5ff}\x{7c0}-\x{7ea}\x{7f4}\x{7f5}\x{7fa}-\x{815}\x{81a}\x{824}\x{828}\x{82e}-\x{858}\x{85c}-\x{89f}\x{200f}\x{fb1d}\x{fb1f}-\x{fb28}\x{fb2a}-\x{fb4f}\x{10800}-\x{1091e}\x{10920}-\x{10a00}\x{10a04}\x{10a07}-\x{10a0b}\x{10a10}-\x{10a37}\x{10a3b}-\x{10a3e}\x{10a40}-\x{10ae4}\x{10ae7}-\x{10b38}\x{10b40}-\x{10e5f}\x{10e7f}-\x{10fff}\x{1e800}-\x{1e8cf}\x{1e8d7}-\x{1edff}\x{1ef00}-\x{1efff}\x{608}\x{60b}\x{60d}\x{61b}-\x{64a}\x{66d}-\x{66f}\x{671}-\x{6d5}\x{6e5}\x{6e6}\x{6ee}\x{6ef}\x{6fa}-\x{710}\x{712}-\x{72f}\x{74b}-\x{7a5}\x{7b1}-\x{7bf}\x{8a0}-\x{8e2}\x{fb50}-\x{fd3d}\x{fd40}-\x{fdcf}\x{fdf0}-\x{fdfc}\x{fdfe}\x{fdff}\x{fe70}-\x{fefe}\x{1ee00}-\x{1eeef}\x{1eef2}-\x{1eeff}]))/u';
        // @codeCoverageIgnoreEnd
+       // @codingStandardsIgnoreEnd
 
        /**
         * Get a cached or new language object for a given language code
@@ -2270,30 +2272,33 @@ class Language {
 
        /**
         * Get a format string for a given type and preference
-        * @param string $type May be date, time or both
-        * @param string $pref The format name as it appears in Messages*.php
+        * @param string $type May be 'date', 'time', 'both', or 'pretty'.
+        * @param string $pref The format name as it appears in Messages*.php under
+        *  $datePreferences.
         *
         * @since 1.22 New type 'pretty' that provides a more readable timestamp format
         *
         * @return string
         */
        function getDateFormatString( $type, $pref ) {
+               $wasDefault = false;
+               if ( $pref == 'default' ) {
+                       $wasDefault = true;
+                       $pref = $this->getDefaultDateFormat();
+               }
+
                if ( !isset( $this->dateFormatStrings[$type][$pref] ) ) {
-                       if ( $pref == 'default' ) {
-                               $pref = $this->getDefaultDateFormat();
-                               $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
-                       } else {
-                               $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
+                       $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
 
-                               if ( $type === 'pretty' && $df === null ) {
-                                       $df = $this->getDateFormatString( 'date', $pref );
-                               }
+                       if ( $type === 'pretty' && $df === null ) {
+                               $df = $this->getDateFormatString( 'date', $pref );
+                       }
 
-                               if ( $df === null ) {
-                                       $pref = $this->getDefaultDateFormat();
-                                       $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
-                               }
+                       if ( !$wasDefault && $df === null ) {
+                               $pref = $this->getDefaultDateFormat();
+                               $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
                        }
+
                        $this->dateFormatStrings[$type][$pref] = $df;
                }
                return $this->dateFormatStrings[$type][$pref];
index fef06bc..5bab69a 100644 (file)
        "passwordreset": "Atô keulayi lageuëm rahsia",
        "passwordreset-text-one": "Neupeuleungkap formulir nyoë keu meuatô keulayi narit rahsia",
        "passwordreset-text-many": "{{PLURAL:$1|Neupasoë saboh kutak dimeuyub nyoë keu neuteumèe narit rahsia siat rot e-surat}}",
-       "passwordreset-legend": "Atô keulayi lageuëm rahsia",
        "passwordreset-disabled": "Meuatô narit rahsia keulayi ka geupeumaté lam wiki nyoë",
        "passwordreset-emaildisabled": "Tanda e-surat ka geupeumaté lam wiki nyoë",
        "passwordreset-username": "Ureueng ngui:",
        "passwordreset-capture-help": "Meunyoë droëneuh neuceuë kutak nyoë, e-surat (ngon narit rahsia siat) ka geupeuleumah keudroëneuh ngon geukirém cit keu ureuëng ngui",
        "passwordreset-email": "Alamat surat-e:",
        "passwordreset-emailtitle": "Teuneurang nan ureueng ngui bak {{SITENAME}}",
-       "passwordreset-emailelement": "Nan ureuëng ngui: $1\nLageuëm rahsia sijamong: $2",
+       "passwordreset-emailelement": "Nan ureuëng ngui: \n$1\n\nLageuëm rahsia sijamong: \n$2",
        "changeemail": "Gantoe alamat surat-e",
        "changeemail-no-info": "Droeneuh suwah neutamöng mangat jeuet neu'eu laman nyoe",
        "changeemail-oldemail": "Alamat surat-e jinoe:",
        "emailuser": "Surat-e ureuëng ngui",
        "emailuser-title-target": "Peu'ét surat-e keu {{GENDER:$1|ureuëng ngui}} nyoë",
        "emailuser-title-notarget": "Peu'ét surat-e",
-       "emailpage": "Peu'ét surat-e keu ureuëng ngui",
        "emailusername": "Ureueng ngui:",
        "emailusernamesubmit": "Kirém",
        "email-legend": "Kirém surat-e keu ureueng ngui {{SITENAME}} la'én",
index 8cf83e5..2b6bd58 100644 (file)
        "cannotdelete": "НэкIубгъоу е файлэу \"$1\" тегъэкIын лъэкIыгъэп.\nПэмыкI нэбгырэм тыригъэкIыгъахэн фае.",
        "cannotdelete-title": "НэкIубгъоу \"$1\" тегъэкIыгъэн лъэкIырэп",
        "badtitle": "ЦӀэ дэгъуэп",
+       "badtitletext": "УзкIэупчIэрэ нэкIубгъом ыцIэр къуанчэ, е нэкIы, е бзэзэпыщэ е интервики гъэнэфагъэп.\nМыхъущт символ агъэфедагъэнкIи мэхъу.",
        "viewsource": "Еплъ лъапсэм",
        "viewsource-title": "Еплъ лъапсэм $1 пае",
        "protectedpagetext": "ЕIэзэнхэм ыкIи нэмыкI шIэнмэ яягъэ къэмыкIынэу мы нэкIубгъор ухъумагъэу щыт.",
        "passwordreset-capture": "Къэхъурэ емэйлым уеплъыщта?",
        "passwordreset-email": "Емэйл адрес:",
        "passwordreset-emailtitle": "Аккаунт и гъэпсыкIэхэр, мий щыI {{SITENAME}}",
-       "passwordreset-emailelement": "НэбгырацIэ: $1\nTemporary password: $2",
+       "passwordreset-emailelement": "НэбгырацIэ: \n$1\n\nTemporary password: \n$2",
        "passwordreset-emailsent": "ШъэфгущыIэм и зэтедзым пае емэйл агъэхьыгъ.",
        "passwordreset-emailsent-capture": "ШъэфгущыIэм изэтедз фэгъэхьыгъэ емэйлыр гъахьыгъэ, ычIэгъкIэ ар олъэгъу.",
        "changeemail": "Зэблэхъу емэйл адресыр",
        "loginreqlink": "системэм хахь",
        "accmailtitle": "ШъэфгущыIэр агъэхьыгъ",
        "newarticle": "(КIэ)",
+       "newarticletext": "ЩымыIэ нэкIубгъом уекIугъ зэпыщэмкIэ.\nНэкIубгъор ебгъэжьэным пае ычIэгъ щыт плIэмыем зыгорэ итх (еплъ [$1 IэпыIэгъу нэкIубгъом] нахьыбэу пшIэным пае).\nУмышIахэу мыщ укъэкIуагъэмэ, уи броузерым и <strong>зэкIакIо</strong> кнопкэм теIункI.",
        "noarticletext": "Текст пари итыгоп мы нэкIубгъом.\n[[Special:Search/{{PAGENAME}}|Мы нэкIубгъом ыцIэ улъыхъун]] плъэкIыщт нэмыкI нэкIубгъомэ,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ехьылIэгъэ журналхэм къащыбгъотын],\nе [{{fullurl:{{FULLPAGENAME}}|action=edit}} мы нэкIубгъом уеIэзэн]</span>.",
        "noarticletext-nopermission": "Текст пари итыгоп мы нэкIубгъом.\n[[Special:Search/{{PAGENAME}}|Мы нэкIубгъом ыцIэ улъыхъун]] плъэкIыщт нэмыкI нэкIубгъомэ, е\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ехьылIэгъэ журналхэм къащыбгъотын]</span>. Ау мы нэкIубгъор уублэнэу фитыныгъэ уиIэп.",
        "userpage-userdoesnotexist-view": "Аккаунтэу \"$1\" регистрацие ыкIугъэп.",
        "compareselectedversions": "Хэгъэщыгъэ версиехэр зэгъапш",
        "editundo": "зэкӀэгъэкӀожь",
        "diff-empty": "(зэфэмыдэ яIэп)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Зы гурыт версие горэ|$1 гурыт версиехэр}} зы нэбгырэм иеу къэгъэлъэгъуагъэп)",
        "searchresults": "Къэгъотынэу хъугъэр",
        "searchresults-title": "$1-м пае къэгъот",
        "prevn": "ыпэ {{PLURAL:$1|$1}}",
        "whatlinkshere-next": "{{PLURAL:$1|кӀэлъыкӀорэр|кӀэлъыкӀорэ $1}}",
        "whatlinkshere-links": "← зэпыщэхэр",
        "whatlinkshere-hideredirs": "$1 гъэкӀожьын",
+       "whatlinkshere-hidetrans": "$1 хэлъхьаныгъэ",
        "whatlinkshere-hidelinks": "$1 зэпыщ",
        "whatlinkshere-filters": "Филтрэхэр",
        "ipaddressorusername": "IP-адрес е нэбгырацIэ:",
        "tooltip-t-permalink": "Мы нэкӀубгъом къакIорэ зэмыхъокӀ зэпыщ",
        "tooltip-ca-nstab-main": "КӀоцӀытхагъэм еплъ",
        "tooltip-ca-nstab-user": "ЦӀыфым итхьапэ еплъ",
-       "tooltip-ca-nstab-special": "Мы нэкӀубгъор шъхьафы, зыцэ хэптхэжьынэу щытэп",
+       "tooltip-ca-nstab-special": "Мы нэкӀубгъор шъхьафы, зыцэ хэптхэжьын хъущтэп",
        "tooltip-ca-nstab-project": "Проектым и нэкӀубгъу",
        "tooltip-ca-nstab-image": "Тхьапэм и файл еплъ",
        "tooltip-ca-nstab-mediawiki": "Систем мессаджым еплъ",
        "previousdiff": "← ЫпэкъэкӀорэ еӀэзэн",
        "nextdiff": "Нахь еӀэзэныгъакӀ →",
        "file-info-size": "Пиксел $1 × $2, файлым иинагъэ: $3, MIME-тип: $4",
+       "file-nohires": "Нахь зэхэщыкIэ ин щыIэп.",
        "svg-long-desc": "SVG файл, номиналэу $1 × $2 пиксел, файлым иинагъэ: $3",
        "show-big-image": "Оригинал файлыр",
        "show-big-image-preview": "Мыщ и ыпэтеплъэм иинагъэр: $1.",
        "exif-orientation-1": "Тэрэз",
        "namespacesall": "зэкӀэ",
        "monthsall": "зэкӀэ",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|тегущыIэныр]])",
        "fileduplicatesearch-submit": "Лъыхъу",
        "specialpages": "ЯӀамышӀыкӀ нэкӀубгъохэр",
        "specialpages-group-login": "Къыхахь / аккаунт къэубл",
index b72324c..906ef0c 100644 (file)
        "passwordreset-emailtitle": "تفاصيل حساب {{SITENAME}}",
        "passwordreset-emailtext-ip": "احد ما (قد يكون انت$1)طلب مذكرة تفاصيل الحساب ل{{SITENAME}} ($4).المستخدم الاتي {{PLURAL:$3|الحساب هو|الحسابات هي}} قد قرن بهذا العنوان :\n\n$2\n\n{{PLURAL:$3|كلمة المرور المؤقتة|كلمات المرور المؤقة}}سينتهي في {{PLURAL:$5|يوم|ايام$5 }}\nمن الافضل ان تسجل الدخول وتختار كلمة مرور جديدة الان .\nإذا قام شخص آخر بهذا الطلب، أو إذا  تذكرت كلمة المرور الأصلية الخاصة بك،ولم تعد ترغب في تغييره، يمكنك تجاهل هذه الرسالة ومتابعة استخدام  كلمة المرورالقديمة.",
        "passwordreset-emailtext-user": "احد ما (قد يكون انت$1)طلب مذكرة تفاصيل الحساب ل{{SITENAME}} ($4).المستخدم الاتي {{PLURAL:$3|الحساب هو|الحسابات هي}} قد قرن بهذا العنوان :\n\n$2\n\n{{PLURAL:$3|كلمة المرور المؤقتة|كلمات المرور المؤقة}}سينتهي في {{PLURAL:$5|يوم|ايام$5 }}\nمن الافضل ان تسجل الدخول وتختار كلمة مرور جديدة الان .\nإذا قام شخص آخر بهذا الطلب، أو إذا  تذكرت كلمة المرور الأصلية الخاصة بك،ولم تعد ترغب في تغييره، يمكنك تجاهل هذه الرسالة ومتابعة استخدام  كلمة المرورالقديمة.",
-       "passwordreset-emailelement": "اسم المستخدم: $1\nكلمة السر المؤقتة: $2",
+       "passwordreset-emailelement": "اسم المستخدم: \n$1\n\nكلمة السر المؤقتة: \n$2",
        "passwordreset-emailsent": "أرسل بريد إلكتروني تذكيري",
        "passwordreset-emailsent-capture": "أرسل بريد إلكتروني تذكيري وهو معروض بالأسفل.",
        "passwordreset-emailerror-capture": "ولّد بريد إلكتروني تذكيري وهو معروض بالأسفل لكن فشل إرساله للمستخدم: $1",
index e9e2f89..d1a8fd4 100644 (file)
@@ -39,6 +39,7 @@
        "tog-watchdefault": "Voeg bladsye en lêers wat ek wysig by my dophoulys",
        "tog-watchmoves": "Voeg bladsye en lêers wat ek skuif by my dophoulys",
        "tog-watchdeletion": "Voeg bladsye en lêers wat ek skrap by my dophoulys",
+       "tog-watchrollback": "Voeg bladsye wat ek teruggerol het by my dophoulys",
        "tog-minordefault": "Merk alle wysigings automaties as klein by verstek.",
        "tog-previewontop": "Wys voorskou bo wysigingsboks.",
        "tog-previewonfirst": "Wys voorskou met eerste wysiging",
        "passwordreset-emailtitle": "Gebruiker se details op {{site name}}",
        "passwordreset-emailtext-ip": "Iemand, waarskynlik u vanaf die IP-adres $1, het u gebruikersgegewens vir {{SITENAME}} ($4) opgevra.\nDie volgende {{PLURAL:$3|gebruiker is|gebruikers is}} aan die e-posadres gekoppel:\n\n$2\n\n{{PLURAL:$3|Die tydelike wagwoord verval|Hierdie tydelike wagwoorde verval}} oor {{PLURAL:$5|een dag|$5 dae}}.\nMeld asseblief nou aan en wysig u wagwoord. As u dit nie versoek het nie, of as u die oorspronklike wagwoord nog ken en dit nie wil verander nie, ignoreer die berig en hou aan om u ou wagwoord te gebruik.",
        "passwordreset-emailtext-user": "Gebruiker $1 op die webtuiste {{SITENAME}} het u gebruikersgegewens vir {{SITENAME}} ($4) opgevra.\nDie volgende {{PLURAL:$3|gebruiker is|gebruikers is}} aan die e-posadres gekoppel:\n\n$2\n\n{{PLURAL:$3|Die tydelike wagwoord verval|Hierdie tydelike wagwoorde verval}} oor {{PLURAL:$5|een dag|$5 dae}}.\nMeld asseblief aan en verander u wagwoord nou. As u dit nie versoek het nie, of as u die oorspronklike wagwoord nog ken en dit nie wil verander nie, ignoreer die berig en hou aan om u ou wagwoord te gebruik.",
-       "passwordreset-emailelement": "Gebruikersnaam: $1\nTydelike wagwoord: $2",
+       "passwordreset-emailelement": "Gebruikersnaam: \n$1\n\nTydelike wagwoord: \n$2",
        "passwordreset-emailsent": "'n E-pos is gestuur om u wagwoord te herstel.",
        "passwordreset-emailsent-capture": "'n E-pos vir die herstel van 'n wagwoord is gestuur. Dit word hieronder vertoon.",
        "passwordreset-emailerror-capture": "'n E-pos vir die herstel van 'n wagwoord is saamgestel. Dit word hieronder vertoon. Die uitstuur daarvan na die {{GENDER:$2|gebruiker}} het egter gefaal: $1",
        "updated": "(Gewysig)",
        "note": "'''Nota:'''",
        "previewnote": "'''Onthou dat hierdie slegs 'n voorskou is.'''\nU teks is nog nie gestoor nie!",
-       "continue-editing": "Wysig verder",
+       "continue-editing": "Gaan na redigeerarea",
        "previewconflict": "Hierdie voorskou vertoon die teks in die boonste teksarea soos dit sou lyk as u die bladsy stoor.",
        "session_fail_preview": "'''Jammer! Weens verlies aan sessie-inligting is die wysiging nie verwerk nie.\nProbeer asseblief weer. As dit steeds nie werk nie, probeer om [[Special:UserLogout|af te teken]] en dan weer aan te meld.'''",
        "session_fail_preview_html": "'''Jammer! U wysigings is nie verwerk nie omdat sessie-data verlore gegaan het.'''\n\n''Omrede rou HTML hier by {{SITENAME}} ingevoer kan word, kan die voorskou nie gesien word nie ter beskerming teen aanvalle met JavaScript.''\n\n'''As dit 'n regmatige wysiging is, probeer asseblief weer. As dit daarna nog nie werk nie, [[Special:UserLogout|teken dan af]] en weer aan.'''",
        "listgrouprights-removegroup-self-all": "Alle groepe verwyder van eie gebruiker",
        "listgrouprights-namespaceprotection-header": "Naamruimtebeperkings",
        "listgrouprights-namespaceprotection-namespace": "Naamruimte",
+       "trackingcategories": "Volg kategorieë",
        "trackingcategories-msg": "Volg kategorie",
        "trackingcategories-name": "Boodskapnaam",
        "trackingcategories-nodesc": "Geen beskrywing beskikbaar nie.",
        "log-name-pagelang": "Logboek van taalwysigings",
        "log-description-pagelang": "Hierdie is 'n logboek van wysigings van die taal van bladsye.",
        "logentry-pagelang-pagelang": "$1 wysig die taal van bladsy '$3' van $4 na $5.",
+       "mediastatistics": "Mediastatistieke",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 greep|$1 grepe}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME-tipe",
        "mediastatistics-table-extensions": "Moontlike uitbreidings",
index 4ed68bc..3b8eee3 100644 (file)
@@ -5,7 +5,9 @@
                        "Cradel",
                        "Dardan",
                        "Mdupont",
-                       "아라"
+                       "아라",
+                       "Ammartivari",
+                       "Olsi"
                ]
        },
        "tog-underline": "Nënvizoji vegzat",
@@ -26,7 +28,7 @@
        "tog-previewontop": "Vendose parapamjen përpara kutisë redaktuese",
        "tog-previewonfirst": "Shfaqe parapamjen në redaktimin e parë",
        "tog-enotifwatchlistpages": "Njoftomë me email, kur ndryshojnë faqet e mbikëqyruna",
-       "tog-enotifusertalkpages": "Njoftomë me email kur ndryshon faqja ime e diskutimit",
+       "tog-enotifusertalkpages": "Njoftomë me email kur ndryshon faqja ime e bisedimit",
        "tog-enotifminoredits": "Njoftomë me email për redaktime të vogla të faqeve",
        "tog-enotifrevealaddr": "Shfaqe adresën time në emailat njoftues",
        "tog-shownumberswatching": "Shfaqe numrin e përdoruesve mbikëqyrës",
        "oct": "Tet",
        "nov": "Nan",
        "dec": "Dhe",
+       "january-date": "$1 kallnor",
+       "february-date": "$1 fror",
+       "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ândor",
+       "december-date": "$1 dhetor",
        "pagecategories": "{{PLURAL:$1|Kategoria|Kategoritë}}",
        "category_header": "Artikuj në kategorinë \"$1\"",
        "subcategories": "Nënkategori",
        "newwindow": "(çelet në nji dritare të re)",
        "cancel": "Harroje",
        "moredotdotdot": "Mâ shumë...",
-       "mypage": "Faqja jeme",
-       "mytalk": "Diskutimet e mija",
-       "anontalk": "Diskutimet për këtë IP",
+       "morenotlisted": "Kjo listë nuk âsht e plotë.",
+       "mypage": "Faqja",
+       "mytalk": "Bisedimet",
+       "anontalk": "Bisedimet për këtë adres IP",
        "navigation": "Lundrimi",
        "and": "&#32;dhe",
        "qbfind": "Kërko",
        "printableversion": "Version për shtyp",
        "permalink": "Vegëz e përhershme",
        "print": "Shtyp",
+       "view": "Shiko",
+       "view-foreign": "Shiko në $1",
        "edit": "Redakto",
+       "edit-local": "Redakto përshkrimin vendor",
        "create": "Krijo",
        "editthispage": "Redaktoje kët faqe",
-       "create-this-page": "Krijo këtë faqe",
-       "delete": "Fshij",
-       "deletethispage": "Fshije këtë faqe",
+       "create-this-page": "Krijo kët faqe",
+       "delete": "Fshije",
+       "deletethispage": "Fshije kët faqe",
        "undelete_short": "Kthe {{PLURAL:$1|redaktimin e fshimë|$1 redaktime të fshime}}",
        "protect": "Mbroj",
        "protect_change": "ndrysho",
        "unprotect": "Hiq mbrojtjen",
        "unprotectthispage": "Hiq mbrojtjen nga kjo faqe",
        "newpage": "Faqe e re",
-       "talkpage": "Diskuto këtë faqe",
+       "talkpage": "Bisedo këtë faqe",
        "talkpagelinktext": "Bisedo",
        "specialpage": "Faqe speciale",
        "personaltools": "Vegla vetjake",
        "articlepage": "Shiko artikullin",
-       "talk": "Diskutimi",
+       "talk": "Bisedimi",
        "views": "Paraqitje",
        "toolbox": "Veglat",
        "userpage": "Shiko faqen e përdoruesit",
        "templatepage": "Shiko faqen e shabllonit",
        "viewhelppage": "Shiko faqen për ndihmë",
        "categorypage": "Shiko faqen e kategorisë",
-       "viewtalkpage": "Shiko diskutimin",
+       "viewtalkpage": "Shiko bisedimin",
        "otherlanguages": "Në gjuhë tjera",
        "redirectedfrom": "(Përcjellë nga $1)",
        "redirectpagesub": "Faqe përcjellëse",
        "right-read": "Lexo faqe",
        "right-edit": "Redakto faqet",
        "right-createpage": "Hap faqe (që nuk janë faqe diskutimi)",
-       "right-createtalk": "Hap faqe diskutimi",
+       "right-createtalk": "Hap faqe bisedimi",
        "right-createaccount": "Hap llogari të re",
        "right-minoredit": "Shëno redaktimet si të vogla",
        "right-move": "Lëviz faqet",
        "action-read": "lexo këtë faqe",
        "action-edit": "redakto këtë faqe",
        "action-createpage": "hapë faqe",
-       "action-createtalk": "hap faqe diskutimi",
+       "action-createtalk": "hap faqe bisedimi",
        "action-createaccount": "hapë këtë llogari",
        "action-minoredit": "shëno këtë redaktim si të vogël",
        "action-move": "lëviz këtë faqe",
        "year": "Prej vjetit (e mâ herët):",
        "sp-contributions-newbies": "Trego sall kontributet e përdoruesve të rij",
        "sp-contributions-blocklog": "regjistri i bllokimeve",
-       "sp-contributions-talk": "Diskuto",
+       "sp-contributions-talk": "Bisedo",
        "sp-contributions-search": "Kërko te kontributet",
        "sp-contributions-username": "Adresa IP ose përdoruesi:",
        "sp-contributions-submit": "Lyp",
        "thumbnail-more": "Zmadho",
        "thumbnail_error": "Gabim gjatë krijimit të figurës përmbledhëse: $1",
        "tooltip-pt-userpage": "Faqja juej e përdoruesit",
-       "tooltip-pt-mytalk": "Faqja juej e diskutimeve",
+       "tooltip-pt-mytalk": "Faqja juej e bisedimeve",
        "tooltip-pt-preferences": "Parapëlqimet tuaja",
        "tooltip-pt-watchlist": "Lista e faqeve nën mbikqyrjen tuej.",
        "tooltip-pt-mycontris": "Lista e kontributeve tueja",
        "tooltip-pt-login": "Të këshillojmë me u kyçë; mirëpo, nuk asht e detyrueshme",
        "tooltip-pt-logout": "Dalje",
-       "tooltip-ca-talk": "Diskuto për përmbajtjen e faqes",
+       "tooltip-ca-talk": "Bisedo për përmbajtjen e faqes",
        "tooltip-ca-edit": "Mund ta redaktosh kët faqe. Përdore pullën >>Shfaqe parapamjen<< para se t'i krysh ndryshimet.",
        "tooltip-ca-addsection": "Nis nji sekcion të ri.",
        "tooltip-ca-viewsource": "Kjo faqe asht e mbrojtun. Mundesh veç me pa burimin e tekstit.",
        "rightsnone": "(asgjë)",
        "revdelete-summary": "përmbledhja redaktimit",
        "searchsuggest-search": "Kërkim",
-       "searchsuggest-containing": "përmban ..."
+       "searchsuggest-containing": "përmban ...",
+       "special-characters-group-latin": "Latinisht",
+       "special-characters-group-latinextended": "Latine zgjeruar",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simbolet",
+       "special-characters-group-greek": "Grek",
+       "special-characters-group-cyrillic": "I sllavishtes së vjetër",
+       "special-characters-group-arabic": "Arabisht",
+       "special-characters-group-hebrew": "Hebraisht",
+       "special-characters-group-bangla": "Shqip",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Guxharati"
 }
index 5716334..1a649c8 100644 (file)
        "resetpass-wrong-oldpass": "ጊዜያዊው ወይም ያሁኑኑ መግቢያ ቃል አይስማማም።\nምናልባት መግቢያ ቃልዎን መቀይሩ ተከናወነ፣ ወይም አዲስ ጊዜያዊ መግቢያ ቃልን ጠየቁ።",
        "resetpass-temp-password": "ኅላፊ (ጊዜያዊ) መግቢያ ቃል፦",
        "passwordreset": "መግቢያ ቃል መቀይር",
-       "passwordreset-legend": "መግቢያ ቃልዎን ለመቀይር",
        "passwordreset-disabled": "በዚሁ ዊኪ መግቢያ ቃል መቀይር አልተቻለም",
        "passwordreset-username": "የብዕር ስም:",
        "passwordreset-email": "የኢ-ሜል አድራሻ:",
-       "passwordreset-emailelement": "የአባል ስም፦ $1\nጊዜያዊ መግቢያ ቃል፦ $2",
+       "passwordreset-emailelement": "የአባል ስም፦ \n$1\n\nጊዜያዊ መግቢያ ቃል፦ \n$2",
        "passwordreset-emailsent": "የማስታወሻ ኢ-ሜል ተልኳል።",
        "passwordreset-emailsent-capture": "የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል።",
        "passwordreset-emailerror-capture": "የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል፤ ነገር ግን ወደ ተጠቃሚው ለመላክ ስንል አልተከናወነም፡",
        "nlinks": "$1 መያያዣዎች",
        "nmembers": "$1 {{PLURAL:$1|መጣጥፍ|መጣጥፎች}}",
        "nrevisions": "$1 ለውጦች",
-       "nviews": "$1 {{PLURAL:$1|ዕይታ|ዕይታዎች}}",
        "nimagelinks": "በ$1 {{PLURAL:$1|ገጽ|ገጾች}} ላይ ይጠቀማል።",
        "ntransclusions": "በ$1 {{PLURAL:$1|ገጽ|ገጾች}} ይጠቀማል።",
        "specialpage-empty": "(ይህ ገጽ ባዶ ነው።)",
        "emailuser": "ለዚህ/ች ሰው ኢሜል መላክ",
        "emailuser-title-target": "{{GENDER:$1|ለዚህ|ለዚች}} አባል ኢ-ሜል መላክ",
        "emailuser-title-notarget": "ወደ አባል ኢ-ሜል ለመላክ",
-       "emailpage": "ወደዚህ/ች አባል ኢ-ሜል ለመላክ",
        "emailpagetext": "አባሉ በሳቸው «ምርጫዎች» ክፍል ተግባራዊ ኢ-ሜል አድራሻ ያስገቡ እንደሆነ፣ ከታች ያለው ማመልከቻ አንድን ደብዳቤ በቀጥታ ይልካቸዋል።\n\nተቀባዩም መልስ በቀጥታ ሊሰጡዎ እንዲችሉ፣ በእርስዎ «ምርጫዎች» ክፍል ያስገቡት ኢ-ሜል አድራሻ በደብዳቤዎ «From:» መስመር ይታይላቸዋል።",
        "defemailsubject": "{{SITENAME}} Email / ኢ-ሜል",
        "usermaildisabledtext": "በዚሁ ዊኪ ኢ-ሜል ለአባላት መላክ አይችሉም።",
index a3d10dc..3351302 100644 (file)
@@ -12,7 +12,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Macofe",
-                       "Carlos Cristia"
+                       "Carlos Cristia",
+                       "MarcoAurelio"
                ]
        },
        "tog-underline": "Subrayar os vinclos:",
        "passwordreset-emailtitle": "Detalles d'a cuenta en {{SITENAME}}",
        "passwordreset-emailtext-ip": "Belún (probablement vusté, dende l'adreza IP $1) ha demandau un recordatorio d'a información d'a suya cuenta en  {{SITENAME}} ($4). {{PLURAL:$3|A cuenta d'usuario siguient ye asociata|As cuentas d'usuario siguients son asociatas}} a ista adreza de correu-e:\n\n$2\n\n{{PLURAL:$3|Ista clau temporal circumducirá|Istas claus temporals circumducirán}} en {{PLURAL:$5|un día|$5 días}}. Habría de connectar-se agora y trigar una nueva clau. Si ista demanda no dimana de vusté, u ya se'n ha acordau d'a suya clau inicial y ya no deseya modificar-la, puet ignorar iste mensache y continar emplegando a suya viella clau.",
        "passwordreset-emailtext-user": "L'usuario $1 en {{SITENAME}} ha demandau un recordatorio d'a información d'a suya cuenta en {{SITENAME}} ($4). {{PLURAL:$3|A cuenta d'usuario siguient ye asociata|As cuentas d'usuario siguients son asociatas}} a ista adreza de correu-e:\n\n$2\n\n{{PLURAL:$3|Ista clau d'acceso temporal circumducirá|Istas claus d'acceso temporals circumducirán}} en {{PLURAL:$5|un día|$5 días}}. Habría de connectar-se agora y trigar una nueva clau. Si ista demanda no dimana de vusté, u ya se'n ha acordau d'a suya clau inicial y ya no deseya modificar-la, puet ignorar iste mensache y continar emplegando a suya viella clau.",
-       "passwordreset-emailelement": "Nombre de usuario: $1\nClau d'acceso temporal: $2",
+       "passwordreset-emailelement": "Nombre de usuario: \n$1\n\nClau d'acceso temporal: \n$2",
        "passwordreset-emailsent": "S'ha ninviau un recordatorio por correu-e.",
        "passwordreset-emailsent-capture": "Se le ha ninviau un recordatorio por correu electronico, que s'amuestra contino.",
        "passwordreset-emailerror-capture": "S'ha chenerau un recordatorio por correu electronico, que s'amuestra contino, pero o ninvío ta l'usuario ha fallau: $1",
        "prefs-reset-intro": "Puet emplegar ista pachina ta restaurar as suyas preferencias a las valuras por defecto d'o sitio.\nNo se podrá desfer iste cambio.",
        "prefs-emailconfirm-label": "Confirmación de correu electronico:",
        "youremail": "Adreza de correu electronico:",
-       "username": "Nombre d'usuario:",
+       "username": "{{GENDER:$1|Nombre d'usuario|Nombre d'usuaria|Nombre d'usuario}}:",
        "prefs-memberingroups": "Miembro {{PLURAL:$1|d'a colla|d'as collas}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "Tiempo de rechistro:",
        "mailnologin": "No ninviar l'adreza",
        "mailnologintext": "Ha d'haber [[Special:UserLogin|encetato una sesión]] y tener una adreza conforme de correu-e en as suyas [[Special:Preferences|preferencias]] ta ninviar un correu electronico ta atros usuarios.",
        "emailuser": "Ninviar un correu electronico ta iste usuario",
-       "emailpage": "Ninviar correu ta l'usuario",
        "emailpagetext": "Puede fer servir o formulario que bi ye contino ta ninviar un correu electronico a iste usuario.\nL'adreza de correu-e que endicó en as suyas [[Special:Preferences|preferencias d'usuario]] amaneixerá en o campo \"Remitent\" ta que o destinatario pueda responder-le.",
        "defemailsubject": "Correu de {{SITENAME}} de l'usuario $1",
        "usermaildisabled": "S'ha desactivau o ninvío de correus electronicos a os usuarios",
index 94c021e..ad3d672 100644 (file)
        "title-invalid-interwiki": "عنوان الصفحة المطلوب يتضمن وصلة لحلقة لغة وهو ما لا يمكن استخدامه في العناوين.",
        "title-invalid-talk-namespace": "عنوان الصفحة المطلوبة يشير إلى صفحة نقاش غير موجودة.",
        "title-invalid-characters": "عنوان الصفحة المطلوب يتضمن محارف غير صالحة: \"$1\"",
+       "title-invalid-leading-colon": "عنوان الصفحة المطلوب يتضمن فاصلة غير صالحة في بدايته.",
        "perfcached": "البيانات التالية مخبأة و قد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مخبّأة|مخبّأتان|مخبّأة}}.",
        "perfcachedts": "البيانات التالية مخزنة، وكان آخر تحديث لها في $1. العدد الأقصى للنتائج المخزنة هو {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}}.",
        "querypage-no-updates": "تحديثات هذه الصفحة معطلة حاليا.\nالبيانات هنا لن يتم تحديثها حاليا.",
        "createacct-benefit-body2": "{{PLURAL:$1|صفحة}}",
        "createacct-benefit-body3": "آخر {{PLURAL:$1|مساهم|مساهمين}}",
        "badretype": "كلمات السر التي أدخلتها لا تتطابق.",
+       "usernameinprogress": "إن عملية إنشاء حساب لاسم المستخدم هذا جارية بالفعل. برجاء الانتظار.",
        "userexists": "اسم المستخدم الذي تم إدخاله مستعمل بالفعل.\nالرجاء اختيار اسم مختلف.",
        "loginerror": "خطأ في الدخول",
        "createacct-error": "خطأ في إنشاء حساب",
        "passwordreset-emailtitle": "تفاصيل حساب {{SITENAME}}",
        "passwordreset-emailtext-ip": "أحد ما (قد يكون أنت، من العنوان $1)  طلب إعادة ضبط كلمة سر حسابك على {{SITENAME}} ($4). {{PLURAL:$3||الحساب|الحسابان| الحسابات}} أدناه قد اقترنت ببريدك الإلكتروني :\n\n$2\n\n{{PLURAL:$3||كلمة السر المؤقتة|كلمات السر المؤقتة}} ستنتهي صلاحيتها في {{PLURAL:$5||يوم واحد|يومين|$5 أيام|$5 يوما|$5 يوم}}\nيمكنك تسجيل الدخول واختيار كلمة سر جديدة. إذا كان هذا الطلب تم بواسطة شخص أخر، أو إذا تذكرت كلمة السر الأصلية الخاصة بك، ولم تعد ترغب في تغييرها، يمكنك تجاهل هذه الرسالة ومتابعة استخدام كلمة السر القديمة.",
        "passwordreset-emailtext-user": "المستخدم $1 على {{SITENAME}} طلب إعادة ضبط كلمة سر حسابك على {{SITENAME}} ($4). {{PLURAL:$3||الحساب|الحسابان| الحسابات}} أدناه قد اقترنت ببريدك الإلكتروني :\n\n$2\n\n{{PLURAL:$3||كلمة السر المؤقتة|كلمات السر المؤقتة}} ستنتهي صلاحيتها في {{PLURAL:$5||يوم واحد|يومين|$5 أيام|$5 يوما|$5 يوم}}\nيمكنك تسجيل الدخول واختيار كلمة سر جديدة. إذا كان هذا الطلب تم بواسطة شخص أخر، أو إذا تذكرت كلمة السر الأصلية الخاصة بك، ولم تعد ترغب في تغييرها، يمكنك تجاهل هذه الرسالة ومتابعة استخدام كلمة السر القديمة.",
-       "passwordreset-emailelement": "اسم {{GENDER:$1|المستخدم|المستخدمة}}: $1\nكلمة السر المؤقتة: $2",
+       "passwordreset-emailelement": "اسم {{GENDER:$1\n|المستخدم|المستخدمة}}: \n$1\n\nكلمة السر المؤقتة: \n$2",
        "passwordreset-emailsent": "أُرسل بريد إلكتروني لإعادة ضبط كلمة السر.",
        "passwordreset-emailsent-capture": "أُرسل بريد إلكتروني لإعادة ضبط كلمة السر، وهو معروض بالأسفل.",
        "passwordreset-emailerror-capture": "تم توليد رسالة بريد إلكتروني لتصفير كلمة السر نصّه التالي، إلا أنه تعذّر إرسال الرّسالة إلى {{GENDER:$2|المستخدم|المستخدمة}}: $1",
        "rows": "صفوف:",
        "columns": "أعمدة:",
        "searchresultshead": "بحث",
-       "stub-threshold": "الحد لتنسيق <a href=\"#\" class=\"stub\">وصلة البذرة</a>:",
+       "stub-threshold": "الحد لتنسيق وصلة البذرة ($1):",
+       "stub-threshold-sample-link": "عينة",
        "stub-threshold-disabled": "معطل",
        "recentchangesdays": "عدد الأيام المعروضة في أحدث التغييرات:",
        "recentchangesdays-max": "الحد الأقصى {{PLURAL:$1|أقل من يوم|يوم واحد|يومان|$1 أيام|$1 يوما|$1 يوم}}",
        "newpageletter": "ج‌",
        "boteditletter": "ب",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|لا مستخدمون يراقبون|مستخدم واحد يراقب|مستخدمان يراقبان|$1 مستخدمين يراقبون|$1 مستخدما يراقب|$1 مستخدم يراقب}}]",
-       "rc_categories": "حصر لتصنيفات (مفرقة برمز \"|\")",
-       "rc_categories_any": "أي",
+       "rc_categories": "حصر لتصنيفات (مفرقة برمز \"|\"):",
+       "rc_categories_any": "أي من المختار",
        "rc-change-size-new": "$1 {{PLURAL:$1|بايت|بايت}} بعد التغيير",
        "newsectionsummary": "/* $1 */ قسم جديد",
        "rc-enhanced-expand": "عرض التفاصيل",
        "upload-too-many-redirects": "احتوى المسار تحويلات كثيرة جدا",
        "upload-http-error": "صودف خطأ HTTP: $1",
        "upload-copy-upload-invalid-domain": "رفع النسخ غير متاح من هذا الموقع",
+       "upload-dialog-title": "رفع الملف",
+       "upload-dialog-error": "حدث خطأ",
+       "upload-dialog-warning": "حدث تنبيه",
+       "upload-dialog-button-cancel": "إلغاء",
+       "upload-dialog-button-done": "تم",
+       "upload-dialog-button-save": "احفظ",
+       "upload-dialog-button-upload": "رفع",
+       "upload-dialog-label-select-file": "اختر ملفا",
+       "upload-dialog-label-infoform-title": "التفاصيل",
+       "upload-dialog-label-infoform-name": "الاسم",
+       "upload-dialog-label-infoform-description": "الوصف",
+       "upload-dialog-label-usage-title": "الاستخدام",
+       "upload-dialog-label-usage-filename": "اسم الملف",
        "backend-fail-stream": "لا يمكن عرض الملف $1.",
        "backend-fail-backup": "لا يمكن صنع نسخة أحتياطية للملف $1.",
        "backend-fail-notexists": "الملف $1 غير موجود.",
        "undeletepagetext": "حُذفت {{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|$1 الصفحات التالية|ال$1 صفحة التالية}} ولكنها مازالت في الأرشيف ويمكن استرجاعها.\nقد يمسح الأرشيف دوريا.",
        "undelete-fieldset-title": "استرجاع المراجعات",
        "undeleteextrahelp": "لاسترجاع تاريخ الصفحة كاملا، اترك جميع الصناديق فارغة واضغط '''''{{int:undeletebtn}}'''''..\nللاسترجاع بشكل انتقائي، ضع علامة في الصناديق أمام المراجعات التي تريد استرجاعها، واضغط '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "{{PLURAL:$1|Ù\84Ù\85 ØªØ¤Ø±Ø´Ù\81 Ø£Ù\8a Ù\85راجعة|أرشÙ\81ت Ù\85راجعة Ù\88احدة|أرشÙ\81ت Ù\85راجعتاÙ\86|أرشÙ\81ت $1 Ù\85راجعات|أرشفت $1 مراجعة}}",
+       "undeleterevisions": "{{PLURAL:$1|Ù\84Ù\85 ØªØ­Ø°Ù\81 Ø£Ù\8a Ù\85راجعة|حذÙ\81ت Ù\85راجعة Ù\88احدة|حذÙ\81ت Ù\85راجعتاÙ\86|حذÙ\81ت $1 Ù\85راجعات|حذفت $1 مراجعة}}",
        "undeletehistory": "لو استرجعت الصفحة، كل المراجعات سيتم استرجاعها إلى التاريخ.\nلو كان قد تم إنشاء صفحة جديدة بالاسم نفسه بعد الحذف، المراجعات المسترجعة ستظهر في التاريخ السابق.",
        "undeleterevdel": "الاسترجاع لن يتم إذا كان سينتج عنه أن تكون المراجعة أعلى الصفحة أو الملف محذوفة جزئيا.\nفي مثل هذه الحالات، يجب عليك إظهار أحدث المراجعات المحذوفة.",
        "undeletehistorynoadmin": "هذه الصفحة تم حذفها.\nالسبب للحذف معروض في الملخص بالأسفل، إلى جانب تفاصيل المستخدمين الذين قاموا بالتعديل على هذه الصفحة قبل حذفها.\nنص المراجعات المحذوفة هذه متوفر فقط للإداريين.",
        "sp-contributions-uploads": "مرفوعات",
        "sp-contributions-logs": "سجلات",
        "sp-contributions-talk": "نقاش",
-       "sp-contributions-userrights": "صلاحيات المستخدم",
+       "sp-contributions-userrights": "إدارة ØµÙ\84احÙ\8aات Ø§Ù\84Ù\85ستخدÙ\85",
        "sp-contributions-blocked-notice": "هذا المستخدم ممنوع حاليا.\nإن آخر مدخلة في سجل المنع موجودة أدناه كمرجع:",
        "sp-contributions-blocked-notice-anon": "عنوان الأيبي هذا ممنوع حاليا.\nآخر مدخلة لسجل المنع معروضة هنا كمرجع:",
        "sp-contributions-search": "بحث عن مساهمات",
        "allmessagesname": "الاسم",
        "allmessagesdefault": "النص الافتراضي",
        "allmessagescurrent": "النص الحالي",
-       "allmessagestext": "Ù\87Ø°Ù\87 Ù\82ائÙ\85Ø© Ø¨Ø±Ø³Ø§Ø¦Ù\84 Ø§Ù\84Ù\86ظاÙ\85 Ø§Ù\84Ù\85تÙ\88Ù\81رة Ù\81Ù\8a Ù\86طاÙ\82 Ù\85Ù\8aدÙ\8aاÙ\88Ù\8aÙ\83Ù\8a.\nÙ\85Ù\86 Ù\81ضÙ\84Ù\83 Ø²Ø± [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation ØªØ±Ø¬Ù\85Ø© Ù\85Ù\8aدÙ\8aاÙ\88Ù\8aÙ\83Ù\8a] Ù\88 [//translatewiki.net Ø¨Ù\8aتاÙ\88Ù\8aÙ\83Ù\8a] لو كنت ترغب في المساهمة في ترجمة ميدياويكي الأساسية.",
+       "allmessagestext": "Ù\87Ø°Ù\87 Ù\82ائÙ\85Ø© Ø¨Ø±Ø³Ø§Ø¦Ù\84 Ø§Ù\84Ù\86ظاÙ\85 Ø§Ù\84Ù\85تÙ\88Ù\81رة Ù\81Ù\8a Ù\86طاÙ\82 Ù\85Ù\8aدÙ\8aاÙ\88Ù\8aÙ\83Ù\8a.\nÙ\85Ù\86 Ù\81ضÙ\84Ù\83 Ø²Ø± [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation ØªØ±Ø¬Ù\85Ø© Ù\85Ù\8aدÙ\8aاÙ\88Ù\8aÙ\83Ù\8a] Ù\88 [//translatewiki.net ØªØ±Ø§Ù\86سÙ\84Ù\8aت Ù\88Ù\8aÙ\83Ù\8a Ø¯Ù\88ت Ù\86ت] لو كنت ترغب في المساهمة في ترجمة ميدياويكي الأساسية.",
        "allmessagesnotsupportedDB": "هذه الصفحة لا يمكن استخدامها لأن '''$wgUseDatabaseMessages''' تم تعطيله.",
        "allmessages-filter-legend": "المرشح",
        "allmessages-filter": "رشح حسب حالة التخصيص:",
        "spam_reverting": "استرجاع آخر نسخة ليس بها وصلات إلى $1",
        "spam_blanking": "كل النسخ احتوت على وصلات ل $1، إفراغ",
        "spam_deleting": "جميع النسخ تحوي رابطا إلى $1، يتم الحذف",
-       "simpleantispam-label": "اختبار ضد السبام.\n'''لا''' تملأ هذا!",
+       "simpleantispam-label": "اختبار ضد السبام.\n<strong>لا</strong> تملأ هذا!",
        "pageinfo-title": "المعلومات عن «$1»",
        "pageinfo-not-current": "عذرا، لا يمكن عرض تلك المعلومات للنسخ القديمة.",
        "pageinfo-header-basic": "المعلومات الأساسية",
index a15dabd..fc2fc81 100644 (file)
        "passwordreset": "صفّي كلمت` السرّ",
        "passwordreset-text-one": "كمّل هاد الجدوال تاع الإختيارات باش تلحق لك كلمت` سرّ جديدة بل إيمال.",
        "passwordreset-text-many": "{{PLURAL:$1|عمّر واحد من هاد قويبسات باش تلحق لك كلمت` سرّ جديدة بل إيمال.}}",
-       "passwordreset-legend": "استرجع كلمت` السرّ",
        "passwordreset-disabled": "التبدال تاع كلمت` السرّ راهي محبّسة ف هاد الويكي.",
        "passwordreset-emaildisabled": "الفعاليّات تاع الإيمال راهي محبّسة ف هاد الويكي.",
        "passwordreset-username": "سميّت` المستعملي:",
        "passwordreset-emailtitle": "وصافات تاع الحساب ف {{SITENAME}}",
        "passwordreset-emailtext-ip": "شي واحد (يكون بالاك نتا، لادريسة إيپي $1) راه طلَب المصاوبة تاع كلمت` السرّ تاعك ف {{SITENAME}} ($4). {{PLURAL:$3|هاد الحساب |هاد الحسابات}} تاع المستعملي {{PLURAL:$3|راه مربوط|راهم مربوطين}} ب لادريسة تاع الإيمال:\n\n$2\n\n{{PLURAL:$3|هاد كلمت` السرّ المأقّتة|هادي كلمات` السرّ المأقّتة}} غادي يكمل صلوحها منّا على {{PLURAL:$5|نهار واحد|$5 إيّام}}.\nمليح لوكان تدخُل ل`السيت من ضركا و تبدّل كلمت` السرّ.\nيلا كاش ما وحداخُر دار هاد المطلب ولا راك تفكّرت كلمت` السرّ تاعك و ما بقيتش باغي تبدّلها، تنجم برك تنسا هاد الميساج و تستعمل كلمت` السرّ تاعك تاع مضاري.",
        "passwordreset-emailtext-user": "المستعملي $1 ف {{SITENAME}} راه طلب تبدال ف كلمت` السرّ تاعك ف {{SITENAME}}\n($4). {{PLURAL:$3|الحساب|الحسايات}} تاع المستعملي {{PLURAL:$3|راه مربوط|راهم مربوطين}} ب لادريسة تاع ليمال هادي:\n\n$2\n\n{{PLURAL:$3|هاد كلمت` السرّ المأقّتة|هادي كلمات` السرّ المأقّتة}} غادي يكمل صلوحها منّا على {{PLURAL:$5|نهار واحد|$5 إيّام}}.\nمادابيك تسجّل داخل ضركا و تختار كلمت` سرّ جديدة. يلا كان وحداخُر دار هاد المطلب، ولا راك ضركا تفكّرت كلمت` السرّ تاعك القديمة و ما بقيتش باغي تبدّلها، تنجم برك تتنسّا هاد الميساج و تدخُل ب كلمت` السرّ تاعك تاع مضاري.",
-       "passwordreset-emailelement": "سميّت` المستعملي: $1\nكلمت` السرّ المأقّتة: $2",
+       "passwordreset-emailelement": "سميّت` المستعملي: \n$1\n\nكلمت` السرّ المأقّتة: \n$2",
        "passwordreset-emailsent": "راه نبعَت إيمال تاع تبدال كلمت` السرّ.",
        "passwordreset-emailsent-capture": "راه اترسل إيمال تاع تبدال كلمت` السرّ، و راه محطوط هنا لتحت.",
        "passwordreset-emailerror-capture": "راه اترسل الإيمال تاع تبدال كلمت` السرّ، الّي راح محطوط هنا لتحت، بصّح البعيت تاعهُ لل {{GENDER:$2|مستعملي}} ما نجحش: $1",
        "resettokens": "بدّل المفاتح",
        "resettokens-text": "تنجم تبدّل المفاتح الّي يخلّيوك توصل ل شي معلومات خوصوصيّة، مربوطة بل حساب تاعك هنا.\n\nلازم لك تديرها يلا كُنت نتا مدّيتهم ل شي واحد ولا بلا كان الحساب تاعك اتهدّد.",
        "resettokens-no-tokens": "ما كاين حتا مفاتح تنجم تبدّلهم.",
-       "resettokens-legend": "بدّل المفاتح",
        "resettokens-tokens": "مفاتح:",
        "resettokens-token-label": "$1 (القيمة تاع ضركا: $2)",
        "resettokens-watchlist-token": "المفتاح تاع السيل (Atom/RSS) تاع [[Special:Watchlist|التبدالات الّي فل ليستة تاع المتابعة تاعك]]",
index 3b89d8b..9d4f6c4 100644 (file)
        "passwordreset-emailtitle": "ṫafaṣil l-ḫisab f-{{SITENAME}}",
        "passwordreset-emailtext-ip": "ċi waḫd (ġaliban nṫa, mn ĝonwan l-IP $1) tlḅ ṫdkir\nb-ṫṫafaṣil dial l-ḫisab ṫaĝk f-{{SITENAME}} ($4). {{PLURAL:$3|l-ḫisab lli mrṫabt|l-ḫisabat lli mrṫabta}}\nb-had l-ĝonwan dl-email {{PLURAL:$3|howa|hiya}}:\n\n$2\n\nhad {{PLURAL:$3|klmṫ|klmaṫ}} s-srr l-mo'qaṫa ġadi ṫṫḫyyad mn bĝd {{PLURAL:$5|nhar waḫd|$5 yyam/yom}}.\nĥaṣṣk ṫdĥol o-ṫbddal klmṫ s-srr. ila kan ċi waḫd aĥor hwwa lli dar had\ntalab, wlla ila ṫfkkarṫi klmṫ s-srr l-qdima, o-ma bqiti-ċ baġi ṫbddalha, ġir bqa ĥddam biha o-nsa ĝlik had l-mesaj.",
        "passwordreset-emailtext-user": "l_mosṫĥdim $1 f-{{SITENAME}} tlḅ ṫdkir b-ṫṫafaṣil dial l-ḫisab ṫaĝk f-{{SITENAME}} ($4). {{PLURAL:$3|l-ḫisab lli mrṫabt|l-ḫisabat lli mrṫabta}} b-had l-ĝonwan dl-email {{PLURAL:$3|howa|hiya}}:\n\n$2\n\nhad {{PLURAL:$3|klmṫ|klmaṫ}} s-srr l-mo'qaṫa ġadi ṫṫḫyyad mn bĝd {{PLURAL:$5|nhar waḫd|$5 yyam/yom}}.\nĥaṣṣk ṫdĥol o-ṫbddal klmṫ s-srr. ila kan ċi waḫd aĥor hwwa lli dar had\ntalab, wlla ila ṫfkkarṫi klmṫ s-srr l-qdima, o-ma bqiti-ċ baġi ṫbddalha, ġir bqa ĥddam biha o-nsa ĝlik had l-mesaj.",
-       "passwordreset-emailelement": "smiṫ l-mosṫĥdim: $1\nklmṫ s-srr l-mo'qaṫa: $2",
+       "passwordreset-emailelement": "smiṫ l-mosṫĥdim: \n$1\n\nklmṫ s-srr l-mo'qaṫa: \n$2",
        "passwordreset-emailsent": "ṫsift email liṫ-ṫdkir.",
        "changeemail": "bddel ĝonwan l-email",
        "changeemail-no-info": "ĥaṣṣ tkon daĥol baĥ tqdr twṣl l-had ṣfḫa niċan.",
index 6bbfe2d..301dcc8 100644 (file)
        "deletethispage": "امسح الصفحه دى",
        "undeletethispage": "استرجاع الصفحه دى",
        "undelete_short": "استرجاع {{PLURAL:$1|تعديل واحد|تعديلان|$1 تعديلات|$1 تعديل|$1 تعديلا}}",
-       "viewdeleted_short": "عرض {{PLURAL:$1||تعديل واحد|تعديلين|$1 تعديلات|$1 تعديل|$1 تعديل}}",
+       "viewdeleted_short": "عرض {{PLURAL:$1||تعديل واحد ملغى|تعديلين ملغيين|$1 تعديلات  ملغيه}}",
        "protect": "حمايه",
        "protect_change": "غيّر",
        "protectthispage": "احمى الصفحه دى",
        "disclaimers": "تنازل عن مسئوليه",
        "disclaimerpage": "Project:تنازل عن مسئوليه عمومى",
        "edithelp": "مساعده فى التعديل",
+       "helppage-top-gethelp": "مساعده",
        "mainpage": "الصفحه الرئيسيه",
        "mainpage-description": "الصفحه الرئيسيه",
        "policy-url": "Project:سياسة",
        "hidetoc": "تخبية",
        "collapsible-collapse": "خبى",
        "collapsible-expand": "اتوسع",
+       "confirmable-confirm": "انت متأكد{{GENDER:$1||ه}}؟",
+       "confirmable-yes": "ايوه",
+       "confirmable-no": "لا",
        "thisisdeleted": "عرض او استرجاع $1؟",
        "viewdeleted": "عرض $1؟",
        "restorelink": "{{PLURAL:$1|تعديل واحد ملغي|تعديلين ملغيين|$1 تعديلات ملغية|$1 تعديل ملغي|$1 تعديل ملغي}}",
        "readonly_lag": "قاعدة البيانات (الـ database) اتقفلت اوتوماتيكى علشان تقدر السيرڤرات الـ slave تلحق السيرڤر الـ master",
        "internalerror": "غلط جوّانى",
        "internalerror_info": "غلط جوّانى: $1",
+       "internalerror-fatal-exception": "استثناء مميت من النوع \"$1\"",
        "filecopyerror": "ما نفع ش  يتنسخ الفايل \"$1\" لـ \"$2\".",
        "filerenameerror": "ما نفع ش يتغير اسم الفايل \"$1\" لـ \"$2\".",
        "filedeleteerror": "ما نفع ش يتمسح الفايل \"$1\".",
        "protectedpagetext": "الصفحة دى اتحمت من التعديل.",
        "viewsourcetext": "ممكن تشوف وتنسخ مصدر الصفحه دى",
        "protectedinterface": "الصفحة دى هى اللى بتوفر نص الواجهة بتاعة البرنامج،وهى مقفولة لمنع التخريب.\nعلشان إضافة أو تغيير الترجمات لجميع مشاريع الويكي،  لو سمحت روح على [//translatewiki.net/ translatewiki.net]، مشروع ترجمة ميدياويكى",
-       "editinginterface": "'''تحذير''': أنت بتعدل صفحة بتستخدم فى الواجهة النصية  بتاعة البرنامج. \nالتغييرات فى الصفحة دى ها تأثر على مظهر واجهة اليوزر لليوزرز التانيين. \nعلشان إضافة أو تغيير الترجمات لجميع مشاريع الويكي،  لو سمحت روح على [//translatewiki.net/ translatewiki.net]، مشروع ترجمة ميدياويكى",
-       "cascadeprotected": "الصفحة دى محمية من التعديل، بسبب انها مدمجة فى {{PLURAL:$1|الصفحة|الصفحات}} دي، اللى مستعمل فيها خاصية \"حماية الصفحات المدمجة\" :\n$2",
+       "editinginterface": "<strong>تحذير</strong> : أنت بتعدل صفحة بتستخدم فى الواجهة النصية  بتاعة البرنامج. \nالتغييرات فى الصفحة دى ها تأثر على مظهر واجهة اليوزر لليوزرز التانيين. \nعلشان إضافة أو تغيير الترجمات لجميع مشاريع الويكي،  لو سمحت روح على [//translatewiki.net/ translatewiki.net]، مشروع ترجمة ميدياويكى",
+       "cascadeprotected": "اÙ\84صÙ\81حة Ø¯Ù\89 Ù\85Ø­Ù\85Ù\8aØ© Ù\85Ù\86 Ø§Ù\84تعدÙ\8aÙ\84Ø\8c Ø¨Ø³Ø¨Ø¨ Ø§Ù\86Ù\87ا Ù\85دÙ\85جة Ù\81Ù\89 {{PLURAL:$1|اÙ\84صÙ\81حة|اÙ\84صÙ\81حتÙ\8aÙ\86|اÙ\84صÙ\81حات}} Ø¯Ù\8aØ\8c Ø§Ù\84Ù\84Ù\89 Ù\85ستعÙ\85Ù\84 Ù\81Ù\8aÙ\87ا Ø®Ø§ØµÙ\8aØ© \"Ø­Ù\85اÙ\8aØ© Ø§Ù\84صÙ\81حات Ø§Ù\84Ù\85دÙ\85جة\" :\n$2",
        "namespaceprotected": "ما عندكش صلاحية تعديل الصفحات  اللى فى نطاق '''$1'''.",
        "ns-specialprotected": "الصفحات المخصوصة مش ممكن تعديلها.",
        "titleprotected": "العنوان دا محمى من الإنشاء بـ[[User:$1|$1]]. السبب هو ''$2''.",
        "yourpassword": "الباسوورد:",
        "userlogin-yourpassword": "الباسورد:",
        "yourpasswordagain": "اكتب الباسورد تاني:",
+       "createacct-yourpasswordagain": "أكد كلمه السر",
        "remembermypassword": " (لمدة   $1 {{PLURAL:$1|يوم|يوم}})خليك فاكر دخولى على الكمبيوتر دا",
        "yourdomainname": "النطاق بتاعك:",
        "externaldberror": "يا إما فى حاجة غلط فى الدخول على قاعدة البيانات الخارجية أو انت مش مسموح لك تعمل تحديث لحسابك الخارجي.",
        "gotaccount": "عندك حساب؟ '''$1'''.",
        "gotaccountlink": "دخول",
        "userlogin-resetlink": "نسيت تفاصيل الدخول؟",
+       "userlogin-helplink2": "مساعده ف الدخول",
        "createacct-email-ph": "أكتب عنوان الإيميل بتاعك",
        "createaccountmail": "استخدم باسورد مؤقته و إبعتها ع الايميل المحدد ده",
        "createaccountreason": "السبب:",
+       "createacct-reason": "سبب:",
        "createacct-submit": "افتح حسابك",
        "createacct-benefit-body1": "$1 {{PLURAL:$1|تعديل|تعديلات}}",
        "createacct-benefit-body2": "{{PLURAL:$1|صفحه|صفحات}}",
        "pt-createaccount": "افتح حساب",
        "pt-userlogout": "خروج",
        "changepassword": "غير الباسورد",
-       "resetpass_announce": "اتسجل دخولك دلوقتى بالكود اللى اتبعتلك فى الايميل. علشان تخلص عملية الدخول ،لازم تعملك باسورد جديدة هنا:",
+       "resetpass_announce": " علشان تخلص عملية  تسجيل الدخول ،لازم تعملك باسورد جديده:",
        "resetpass_text": "<!-- أضف نصا هنا -->",
        "resetpass_header": "غيّر الباسورد بتاعة الحساب",
        "oldpassword": "الباسورد القديمة:",
        "retypenew": "اكتب الباسورد الجديده تانى:",
        "resetpass_submit": "اظبط الباسورد و ادخل",
        "changepassword-success": "الباسورد بتاعتك اتغيرت بنجاح!",
+       "changepassword-throttled": "انت عملت  محاولات لوجين كتيره  ع الحساب ده.\nمن فضلك استنى $1 قبل المحاولة مرة تانيه.",
        "resetpass_forbidden": "مش ممكن تغيير الباسورد",
        "resetpass-no-info": "لازم تسجل دخولك علشان تقدر توصل للصفحة دى على طول.",
        "resetpass-submit-loggedin": "غير الباسورد",
        "tooltip-ca-nstab-main": "اعرض صفحة المحتوى",
        "tooltip-ca-nstab-user": "اعرض صفحة اليوزر",
        "tooltip-ca-nstab-media": "اعرض صفحة الميديا",
-       "tooltip-ca-nstab-special": "دى صفحه مخصوصه, ما تقدر ش تعدل الصفحه نفسها",
+       "tooltip-ca-nstab-special": "دى صفحه مخصوصه, ما تقدرش تعدلها",
        "tooltip-ca-nstab-project": "اعرض صفحة المشروع",
        "tooltip-ca-nstab-image": "اعرض صفحة الفايل",
        "tooltip-ca-nstab-mediawiki": "اعرض رسالة النظام",
        "file-nohires": "مافيش  ريزوليوشن اعلى متوفر.",
        "svg-long-desc": "ملف SVG، اساسا $1 × $2 بكسل، حجم الملف: $3",
        "show-big-image": "الصوره الاصليه",
+       "show-big-image-other": "{{PLURAL:$2||البعد التانى|البعدان التانيين|الأبعاد التانيه}}: $1.",
        "show-big-image-size": "$1 × $2 بكسل",
        "file-info-gif-looped": "ملفوف",
        "file-info-gif-frames": "$1 {{PLURAL:$1|برواز|براويز}}",
        "htmlform-submit": "تقديم",
        "htmlform-reset": "الرجوع فى التغييرات",
        "htmlform-selectorother-other": "تانيين",
+       "logentry-delete-delete": "{{GENDER:$2|مسح|مسحت}} $1 صفحة $3",
        "revdelete-restricted": "طبق التعليمات على السيسوبات",
        "revdelete-unrestricted": "شيل الضوابط من على السيسوبات",
+       "logentry-newusers-create": "تم فتح حساب {{GENDER:$2|اليوزر|اليوزره}} $1",
        "logentry-upload-upload": " {{GENDER:$2|رفع|اترفعت}} $1 $3",
        "rightsnone": "(فاضى)",
        "revdelete-summary": "ملخص التعديل",
index ec213a1..f8a88f2 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}}ত একাউণ্টৰ সবিশেষ তথ্য আছে ।",
        "passwordreset-emailtext-ip": "কোনোবাই (IP ঠিকনা $1 ৰ পৰা সম্ভৱতঃ আপুনিয়েই) {{SITENAME}} ($4) ৰ বাবে আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ অনুৰোধ জনাইছিল। ইমেইল ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টবোৰ}} জড়িত হৈ আছে ।\n\n$2\n \n{{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত । যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে ।",
        "passwordreset-emailtext-user": "{{SITENAME}}ত $1 ব্যৱহাৰকাৰীয়ে {{SITENAME}} ($4)ৰ বাবে আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ অনুৰোধ জনাইছিল। ই-পত্ৰ ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টসমূহ}} জড়িত হৈ আছে।\n \n$2\n \n{{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত। যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে।",
-       "passwordreset-emailelement": "সদস্যনাম: $1\nঅস্থায়ী গুপ্তশব্দ: $2",
+       "passwordreset-emailelement": "সদস্যনাম: \n$1\n\nঅস্থায়ী গুপ্তশব্দ: \n$2",
        "passwordreset-emailsent": "এখন গুপ্তশব্দ উদ্ধাৰ ই-মেইল পঠিওৱা হৈছে।",
        "passwordreset-emailsent-capture": "এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হৈছে, এইখন তলত দেখা পাব।",
        "passwordreset-emailerror-capture": "এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল সৃষ্টি কৰা হ'ল, কিন্তু {{GENDER:$2|সদস্যজনলৈ}} পঠিয়াব পৰা নগ'ল। সেইখন তলত দেখুওৱা হৈছে: $1",
index 03001da..f615bed 100644 (file)
        "passwordreset-emailtitle": "Detalles de la cuenta en {{SITENAME}}",
        "passwordreset-emailtext-ip": "Dalguién (seique vusté, dende la direición IP $1)solicitó'l reaniciu de la so contraseña de {{SITENAME}} ($4).\n{{PLURAL:$3|La cuenta d'usuariu siguiente ta asociada|Les cuentes d'usuariu siguientes tán asociaes}}\na esta direición de corréu electrónicu:\n\n$2\n\n{{PLURAL:$3|Esta contraseña provisional caduca|Estes contraseñes provisionales caduquen}} {{PLURAL:$5|nun día|en $5 díes}}.\nTendría d'aniciar sesión y escoyer una contraseña nueva agora. Si esta solicitú la fizo otra persona,\no si recordó la clave orixinal y yá nun quier camudala, pue escaecer esti mensaxe y siguir\nusando la contraseña antigua.",
        "passwordreset-emailtext-user": "L'usuariu $1 de {{SITENAME}} solicitó un reaniciu de la so contraseña de {{SITENAME}} ($4). {{PLURAL:$3|La cuenta d'usuariu siguiente ta asociada|Les cuentes d'usuariu siguientes tán asociaes}} con esta direición de corréu electrónicu:\n\n$2\n\n{{PLURAL:$3|Esta contraseña provisional caduca|Estes contraseñes provisionales caduquen}} {{PLURAL:$5|nun día|en $5 díes}}.\nTendría d'aniciar sesión y escoyer una contraseña nueva agora. Si esta solicitú la fizo otra persona, o si recordó la clave orixinal y yá nun quier camudala, pue escaecer esti mensaxe y siguir usando la contraseña antigua.",
-       "passwordreset-emailelement": "Nome d'usuariu: $1\nContraseña temporal: $2",
+       "passwordreset-emailelement": "Nome d'usuariu: \n$1\n\nContraseña temporal: \n$2",
        "passwordreset-emailsent": "Unvióse un corréu electrónicu pa reaniciar la contraseña.",
        "passwordreset-emailsent-capture": "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo.",
        "passwordreset-emailerror-capture": "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo, pero falló l'unviu {{GENDER:$2|al usuariu|a la usuaria}}: $1",
        "rows": "Fileres:",
        "columns": "Columnes:",
        "searchresultshead": "Buscar",
-       "stub-threshold": "Llímite superior pa considerar como <a href=\"#\" class=\"stub\">enllaz a entamu</a> (bytes):",
+       "stub-threshold": "Llende superior pa dar formatu d'entamu a un enllaz ($1):",
+       "stub-threshold-sample-link": "exemplu",
        "stub-threshold-disabled": "Desactivao",
        "recentchangesdays": "Díes que s'amuesen nos cambios recientes:",
        "recentchangesdays-max": "(máximo $1 {{PLURAL:$1|día|díes}})",
        "booksources-text": "Esta ye una llista d'enllaces a otros sitios que vienden llibros nuevos y usaos, y que puen tener más información sobre los llibros que ta buscando:",
        "booksources-invalid-isbn": "El códigu ISBN que puxisti nun paez que valga; mira que te vien copiáu de la fonte orixinal.",
        "specialloguserlabel": "Fecho por:",
-       "speciallogtitlelabel": "Oxetivu (títulu o usuariu):",
+       "speciallogtitlelabel": "Oxetivu (títulu o {{ns:user}}:nome d'usuariu):",
        "log": "Rexistros",
        "all-logs-page": "Tolos rexistros públicos",
        "alllogstext": "Visualización combinada de tolos rexistros disponibles de {{SITENAME}}.\nPues filtrar la visualización seleicionando una mena de rexistru, el nome d'usuariu (teniendo en cuenta les mayúscules y minúscules) o la páxina afectada (teniendo en cuenta tamién les mayúscules y minúscules).",
        "tooltip-ca-nstab-main": "Ver la páxina de conteníu",
        "tooltip-ca-nstab-user": "Ver la páxina d'usuariu",
        "tooltip-ca-nstab-media": "Amuesa la páxina de multimedia",
-       "tooltip-ca-nstab-special": "Esta ye una páxina especial, nun pues editar la propia páxina",
+       "tooltip-ca-nstab-special": "Esta ye una páxina especial y nun pué editase",
        "tooltip-ca-nstab-project": "Vera la páxina de proyeutu",
        "tooltip-ca-nstab-image": "Ver la páxina del ficheru",
        "tooltip-ca-nstab-mediawiki": "Amuesa'l mensaxe de sistema",
index 2d2e09a..14b9db7 100644 (file)
        "resetpass-submit-cancel": "Kuidera",
        "resetpass-temp-password": "Ugaloraf remravlem :",
        "passwordreset": "Va remravlem tolbazel",
-       "passwordreset-legend": "Va remravlem tolbazel",
        "passwordreset-username": "Favesikyolt :",
        "passwordreset-domain": "Ind",
        "passwordreset-email": "E-mail mane",
        "passwordreset-emailtitle": "Pinta va pata dene {{SITENAME}}",
-       "passwordreset-emailelement": "Favesikyolt : $1\nUgaloraf remravlem : $2",
+       "passwordreset-emailelement": "Favesikyolt : \n$1\n\nUgaloraf remravlem : \n$2",
        "changeemail": "Betara va e-mail mane",
        "changeemail-oldemail": "Noelafe e-mail mane",
        "changeemail-newemail": "Warzafe e-mail mane",
        "nlinks": "$1 {{PLURAL:$1|gluyasiki|gluyasiki}}",
        "nmembers": "$1 {{PLURAL:$1|bewik}}",
        "nrevisions": "$1 betara",
-       "nviews": "$1 rupera",
        "specialpage-empty": "Mek trasiks tori bat munsteks.",
        "lonelypages": "Avuwikaf bueem",
        "lonelypagestext": "Batu bu tid gluyasikiiskafu male aru bu koe {{SITENAME}}.",
        "mailnologin": "Meke mane",
        "mailnologintext": "Rin gotil [[Special:UserLogin|dogluyarakiraf]]\nis bazeyes va wadafe internetmane ko rinaf [[Special:Preferences|lodamaceem]]\nta da pu ar favesik rostaksal.",
        "emailuser": "Staksara va bat favesik",
-       "emailpage": "E-mail staksara va tel favesik",
        "emailpagetext": "Si cet utilisateur a indiqué une adresse électronique valide dans ses préférences, le formulaire ci-dessous lui enverra un message.\nL'adresse électronique que vous avez indiquée dans vos préférences apparaîtra dans le champ « Expéditeur » de votre message afin que le destinataire puisse vous répondre.",
        "defemailsubject": "internettwa staksayana mal {{SITENAME}}",
        "noemailtitle": "Me internetmane",
index e00af38..e331139 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} पे खाता कय विवरण",
        "passwordreset-emailtext-ip": "केहु (शायद आप कय, $1 आइ॰पी ठहर से) {{SITENAME}} ($4) पे अपने {{PLURAL:$3|गुप्त कुंजी}} कय रीसेट करेक अनुरोध करे है। इ ई-मेल ठहर से निचे  कय{{PLURAL:$3|खाता जोड़ान् है}}:\n\n$2\n\n{{PLURAL:$3|इ}} अस्थायी गुप्त कुंजी {{PLURAL:$5|दिन}} कय बाद काम नाइ करि। आप लॉग इन कई कय एकठु नँवा गुप्त कुंजी अभीनै चुन लुहा जाए। यदि इ अनुरोध केहु अउर करे है, या फिर आप कय आपन गुप्त कुंजी याद आइ गा है, औ आप {{PLURAL:$3|आपन}} गुप्त कुंजी नाइ बदलेक चाहा जात है तव आप इ संदेश कय अनदेखा कई कय आपन पुरान गुप्तकुंजी कय प्रयोग कै सका जात है।",
        "passwordreset-emailtext-user": "{{SITENAME}} ($4) पे सदस्य $1 आपकय {{PLURAL:$3|खाता}} कय गुप्तकुंजी कय रीसेट करेक अनुरोध करे हैं। इ ई-मेल ठहर से इ {{PLURAL:$3|खाता जोडान है}}:\n\n$2\n\n{{PLURAL:$3|ई}} अस्थायी गुप्तकुंजी {{PLURAL:$5|दिन}} कय बाद काम नाइ करि।\nआप लॉग इन कइकै एकठु नँवा गुप्त कुंजी अभीन लै लेक चाहि। यदि इ अनुरोध केहु दुसर करे है, या फिर आप कय आपन गुप्त कुंजी याद आई गा है, अव आप {{PLURAL:$3|आपन}} गुप्तकुंजी नाई बदलेक चाहा जात है, आप इ संदेश कय अनदेखा कई कय आपन पुरान गुप्तकुंजी कय प्रयोग कइ सका जात है।",
-       "passwordreset-emailelement": "सदस्यनाँव: $1\nअस्थायी गुप्तकुंजी: $2",
+       "passwordreset-emailelement": "सदस्यनाँव: \n$1\n\nअस्थायी गुप्तकुंजी: \n$2",
        "passwordreset-emailsent": "एक गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
        "passwordreset-emailsent-capture": "नीचे जवन देखावा है ओकर गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
        "passwordreset-emailerror-capture": "नीचे दिहा गुप्त कुंजी रीसेट ई-मेल पैदा भा रहा, लेकिन ओका {{GENDER:$2|सदस्य}} कय भेजब असफल रहा।\nत्रुटि: $1",
        "emailuser": "इ सदस्य कय ई-मेल पठवा जाय",
        "emailuser-title-target": "इ {{GENDER:$1|सदस्य|सदस्या}} कय ई-मेल करा जाय।",
        "emailuser-title-notarget": "सदस्य कय ई-मेल करा जाय",
-       "emailpage": "सदस्य कय ई-मेल करा जाय",
        "emailpagetext": "नीचे कय पर्चा से आप इ {{GENDER:$1|सदस्य}} कय ई-मेल भेजि सका जात है।\nआप जवन ठहर [[Special:Preferences|आप कय पसंद]] में दिहा गा है उ इ ई-मेल कय \"भेजय वाले\" कय तौर पे आइ, इही से प्राप्तकर्ता आप कय सीधय जवाब दई सकत हैं।",
        "defemailsubject": "{{SITENAME}} ई-मेल \"$1\" सदस्य से",
        "usermaildisabled": "सदस्य ई-मेल अक्षम कै गय",
index cca3b29..1a0ea3b 100644 (file)
        "passwordreset-domain": "Domen:",
        "passwordreset-email": "E-mail ünvanı:",
        "passwordreset-emailtitle": "{{SITENAME}} hesabın yaradılması",
-       "passwordreset-emailelement": "İstifadəçi adı: $1\nMüvəqqəti parol: $2",
+       "passwordreset-emailelement": "İstifadəçi adı: \n$1\n\nMüvəqqəti parol: \n$2",
        "passwordreset-emailsent": "Xəbərdarlıq məktubu e-maillə göndərildi.",
        "changeemail": "E-məktub ünvanını dəyiş",
        "changeemail-oldemail": "Hazırkı e-poçt ünvanı:",
index cf9d6dd..8e0eea5 100644 (file)
@@ -16,7 +16,8 @@
                        "Baloch Afghanistan",
                        "Macofe",
                        "Sadiqr",
-                       "Mjbmr"
+                       "Mjbmr",
+                       "Alp Er Tunqa"
                ]
        },
        "tog-underline": "باغلانتی‌لارین آلتینی خطله:",
@@ -88,7 +89,7 @@
        "june": "ژوئن",
        "july": "ژولای",
        "august": "آقوست",
-       "september": "سئپتامبر",
+       "september": "سپتامبر",
        "october": "اوْکتوبر",
        "november": "نوْوامبر",
        "december": "دئسامبر",
        "june-gen": "ژوئن",
        "july-gen": "جولای",
        "august-gen": "آقوست",
-       "september-gen": "سئپتامبر",
+       "september-gen": "سپتامبر",
        "october-gen": "اوکتوبر",
        "november-gen": "نووامبر",
        "december-gen": "دئسامبر",
        "jun": "ژوئن",
        "jul": "ژولای",
        "aug": "آقوست",
-       "sep": "سئپتامبر",
+       "sep": "سپتامبر",
        "oct": "اوْکتوبر",
        "nov": "نوْوامبر",
        "dec": "دئسامبر",
        "errorpagetitle": "خطا",
        "returnto": "$1-ه قاییت.",
        "tagline": "{{SITENAME}} سایتیندان",
-       "help": "یاردیم",
+       "help": "کؤمک",
        "search": "آختار",
        "searchbutton": "آختار",
        "go": "گئت",
        "history": "صفحه‌‌نین گئچمیشی",
        "history_short": "گئچمیش",
        "updatedmarker": "سوْن باخیشیمدان سوْنرا یئنی‌لنیب‌دیر",
-       "printableversion": "یازدیریرا بیلن سۆروم",
+       "printableversion": "چاپ اۆچون نۆسخه",
        "permalink": "قالیجی باغلانتی",
        "print": "یازدیر",
        "view": "باخ",
        "disclaimers": "یالانلامالار",
        "disclaimerpage": "Project:گنل یالانلاما",
        "edithelp": "ديَیشتیرمک یاردیمی",
-       "helppage-top-gethelp": "یاردیم",
+       "helppage-top-gethelp": "کؤمک",
        "mainpage": "آنا صفحه",
        "mainpage-description": "آنا صفحه",
        "policy-url": "Project:قایدالار",
-       "portal": "تÙ\88Ù\92Ù¾Ù\84Ù\88Ù\85 پوْرتالی",
-       "portal-url": "Project:تÙ\88Ù\92Ù¾Ù\84Ù\88Ù\85 پوْرتالی",
+       "portal": "اÛ\8cØ´Ù\84دÙ\86Ù\84ر پوْرتالی",
+       "portal-url": "Project:اÛ\8cØ´Ù\84دÙ\86Ù\84ر پوْرتالی",
        "privacy": "گیزلیلیک سیاستی",
        "privacypage": "Project:گیزلیلیک سیاستی",
        "badaccess": "ایجازه خطاسی",
        "welcomecreation-msg": "حسابینیز آچیلدی.\n[[Special:Preferences|{{SITENAME}}ترجیحلر]] دییشدیرمیی اونوتمایین.",
        "yourname": "ایستیفاده‌چی آدی:",
        "userlogin-yourname": "ایشلدن آدی",
-       "userlogin-yourname-ph": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ø¢Ø¯Û\8cÙ\86Û\8cزÛ\8c Ø¯Ù\8eÛ\8cÛ\8cشدÛ\8cرین",
-       "createacct-another-username-ph": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ø¢Ø¯Û\8cÙ\86Û\8cزÛ\8c Ø¯Ø§Ø®Û\8cÙ\84 Ø§Ø¦Ø¯ین",
+       "userlogin-yourname-ph": "اÛ\8cØ´Ù\84دÙ\86 Ø¢Ø¯Û\8cÙ\86Û\8cزÛ\8c Û\8cازین",
+       "createacct-another-username-ph": "اÛ\8cØ´Ù\84دÙ\86 Ø¢Ø¯Û\8cÙ\86Û\8cزÛ\8c Û\8cازین",
        "yourpassword": "رمز:",
        "userlogin-yourpassword": "رمز",
-       "userlogin-yourpassword-ph": "رمزینیزی داخیل ائدین",
-       "createacct-yourpassword-ph": "بÛ\8cر Ø±Ù\85ز Ø¯Ø§Ø®Û\8cÙ\84 Ø§Ø¦Ø¯ین",
+       "userlogin-yourpassword-ph": "رمزینیزی یازین",
+       "createacct-yourpassword-ph": "رÙ\85زÛ\8c Û\8cازین",
        "yourpasswordagain": "رمزی یئنی‌دن یازین:",
        "createacct-yourpasswordagain": "رمزی دوغرولایین",
-       "createacct-yourpasswordagain-ph": "رمزی یئنی‌دن داخیل ائدین",
+       "createacct-yourpasswordagain-ph": "رمزی یئنی‌دن یازین",
        "remembermypassword": "بو بیلگی‌سایاردا منیم گیریشیمی (چوخو $1 {{PLURAL:$1|گون}}ه قدر) یاددا ساخلا",
        "userlogin-remembermypassword": "منی ایچری‌ده ساخلا",
        "userlogin-signwithsecure": "آرخایین باغلانتی ایشلدین",
        "gotaccountlink": "گیریش",
        "userlogin-resetlink": "گیریش بیلگیلرینیزی اونوتموسونوز؟",
        "userlogin-resetpassword-link": "رمزینیزی اونوتموسوز مو؟",
-       "userlogin-helplink2": "یاردیم ایله گیریش",
+       "userlogin-helplink2": "گیریش ایله کؤمک",
        "userlogin-loggedin": "سیر حال حاضیردا {{GENDER:$1|$1}} عونوانیندا گیریش ائدیب سیز.\nآشاغیداکی فورمودان بیر آیری ایشلدن عونوانیندا گیریش اوچون ایشلدین.",
        "userlogin-createanother": "بیر باشقا حساب یارات",
        "createacct-emailrequired": "ایمیل آدرسی",
        "createacct-emailoptional": "ایمیل آدرسی (ایستگه باغلی)",
-       "createacct-email-ph": "ایمیل آدرسینیزی داخیل ائدین",
-       "createacct-another-email-ph": "ایمیل آدرسینیزی داخیل ائدین",
+       "createacct-email-ph": "ایمیل آدرسینیزی یازین",
+       "createacct-another-email-ph": "ایمیل آدرسینیزی یازین",
        "createaccountmail": "بیر گئچیجی راست‌گله رمز ایشلت و اونو آشاغیدا بللندیرن ایمیل آدرسینه گؤندر",
        "createacct-realname": "دوغرو آد (ایستگه باغلی)",
        "createaccountreason": "نَدَن‌لیک:",
        "createacct-reason": "سبب",
        "createacct-reason-ph": "ندن سیز باشقا حساب یارادیرسینیز",
        "createacct-captcha": "امنیت یوخلاماسی",
-       "createacct-imgcaptcha-ph": "اوست‌ده‌کی گؤردوگونوز یازی‌نی داخیل ائدین",
+       "createacct-imgcaptcha-ph": "اۆستده‌کی گؤردوگونوز یازینی یازین",
        "createacct-submit": "حسابینیزی یارادین",
        "createacct-another-submit": "بیر باشقا حساب یارات",
        "createacct-benefit-heading": "{{SITENAME}} سیزین کیمی آدام‌لارین الی ایله یارانیب‌دیر.",
        "createacct-benefit-body1": "{{PLURAL:$1|دَییشیکلیک}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|صحیفه}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|صفحه}}",
        "createacct-benefit-body3": "سون {{PLURAL:$1|قاتیلان|قاتیلانلار}}",
        "badretype": "یازدیغینیز رمزلر بیر دئییل‌لر.",
        "userexists": "یازدیغینیز آد، اؤنجه‌دن ایشده‌دیر.\nلوطفاً باشقا بیر آد سئچین.",
        "passwordreset-emailtitle": "{{SITENAME}}-ده حساب بیلگیلری",
        "passwordreset-emailtext-ip": "بیر کس (احتیمالاً سیز، $1 آی‌پی آدرسی‌له)، {{SITENAME}} ($4) سایتینداکی حسابینیز اوچون رمزی یئنیله‌مک ایسته‌ییب‌دیر. آشاغیداکی ایستیفاده‌چی {{PLURAL:$3|حسابی|حسابلاری}} بو ایمیل ایله ایلگی‌لی‌دیرلر:\n\n$2\n\nبو گئچیجی {{PLURAL:$3|رمز|رمزلر}}، {{PLURAL:$5|بیر گون|$5 گون}}‌ده {{PLURAL:$3|واختی|واختلاری}} قورتاراجاق‌دیر.\nسیز گرک ایندی سایتا گیریب و یئنی بیر رمز سئچه‌سینیز. باشقا آدام بو ایستَگی وئرمیش‌سه، یوخسا سیز اسکی رمزینیزی یادا گتیرمیشسینیزسه، و داها اونو چئویرمک ایسته‌میرسینیزسه، بو مئساژی سایماییب و اسکی رمزینیزی ایشلدمگه داوام ائده بیلرسینیز.",
        "passwordreset-emailtext-user": "{{SITENAME}} سایتیندا، $1 ایستیفاده‌چی، سیزین اوردا ($4) حسابینیزین رمزینی یئنیله‌مک ایستگی وئریب‌دیر. آشاغیداکی {{PLURAL:$3|ایستیفاده‌چی|ایستیفاده‌چیلر}} بو ایمیل ایله ایلگیلیدیرلر:\n\n$2\n\nبو گئچیجی {{PLURAL:$3|رمز|رمزلر}}، {{PLURAL:$5|بیر|$5گون}} سونرا واختلاری قورتاراجاق‌دیر. \nسیز گرک ایندی گیریب و بیر یئنی رمز سئچه‌سینیز. باشقا آدام بو ایستَگی وئرمیش‌سه، یوخسا سیز اسکی رمزینیزی یادا گتیرمیشسینیزسه، و داها اونو چئویرمک ایسته‌میرسینیزسه، بو مئساژی سایماییب و اسکی رمزینیزی ایشلدمگه داوام ائده بیلرسینیز.",
-       "passwordreset-emailelement": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ø¢Ø¯Û\8c: $1\nگئÚ\86Û\8cجÛ\8c Ø±Ù\85ز: $2",
+       "passwordreset-emailelement": "اÛ\8cØ´Ù\84دÙ\86 Ø¢Ø¯Û\8c: \n$1\n\nگئÚ\86Û\8cجÛ\8c Ø±Ù\85ز: \n$2",
        "passwordreset-emailsent": "بیر رمز یئنیله‌مه ایمیلی گؤندریلیب‌دیر.",
        "passwordreset-emailsent-capture": "آشاغیدا گؤستریلن کیمی بیر رمز یئنیله‌مه ایمیلی گؤندریلیب‌دیر.",
        "passwordreset-emailerror-capture": "آشاغیدا گؤستریلن کیمی بیر رمز یئنیله‌مه ایمیلی یارادیلیب‌دیر، اما {{GENDER:$2ایستیفاده‌چی}}‌یه گؤندرمگی باشاریلی اولمادی: $1",
        "prefs-advancedrendering": "گلیشمیش سئچَنکلر",
        "prefs-advancedsearchoptions": "گلیشمیش سئچَنکلر",
        "prefs-advancedwatchlist": "گلیشمیش سئچَنکلر",
-       "prefs-displayrc": "گؤرونتو سئچَنکلری",
-       "prefs-displaywatchlist": "گؤرونتو سئچَنکلری",
+       "prefs-displayrc": "گؤرونوش سئچَنکلری",
+       "prefs-displaywatchlist": "گؤرونوش سئچَنکلری",
        "prefs-tokenwatchlist": "آدرس",
        "prefs-diffs": "فرق‌لر",
        "prefs-help-prefershttps": "سیزین بو ترجیحینیزین اثری سیزین سونراکی گیریشینیز دن سونرا اولاجاق.",
        "recentchanges-label-minor": "بو بیر کیچیک دَییشدیرمه‌دیر",
        "recentchanges-label-bot": "بو دییشیک بیر بوت طرفیندن ائدیلیب‌دیر",
        "recentchanges-label-unpatrolled": "بو دییشیکلیک هله گؤزدن گئچیریلمه‌ییب‌دیر",
-       "recentchanges-label-plusminus": "صحیفه‌نین اؤلچوسو بایت میقداری ایله تعیین ائدیلیر",
-       "recentchanges-legend-heading": "'''ایختیصارلار:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (هم‌ده [[Special:NewPages|یئنی صحیفه‌لرین لیستینه]] باخین)",
+       "recentchanges-label-plusminus": "صفحه‌نین اؤلچوسو بایت میقداری ایله تعیین ائدیلیر",
+       "recentchanges-legend-heading": "'''قیسالتمالار:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بیرده [[Special:NewPages|یئنی صفحه‌لرین لیستینه]] باخین)",
        "rcnotefrom": "آشاغی داکی دَییشیک لرده <strong>$3, $4</strong> (دن <strong>$1</strong> {{PLURAL:$5|چان گوستریلیب|چان گوستریلیب دیر}}).",
        "rclistfrom": "$3 $2 واختیندان باشلایاراق یئنی دییشیکلری گؤستر",
        "rcshowhideminor": "کیچیک دَییشیکلری $1",
        "rcshowhidebots": "بوتلاری $1",
        "rcshowhidebots-show": "گؤستر",
        "rcshowhidebots-hide": "گیزلت",
-       "rcshowhideliu": "Û\8cازÛ\8cÙ\84Ù\85Û\8cØ´ Ø§Û\8cستÙ\81ادÙ\87â\80\8cÚ\86Û\8cلری $1",
+       "rcshowhideliu": "Û\8cازÛ\8cÙ\84Ù\85Û\8cØ´ Ø§Û\8cØ´Ù\84دÙ\86لری $1",
        "rcshowhideliu-show": "گؤستر",
        "rcshowhideliu-hide": "گیزلت",
-       "rcshowhideanons": "تاÙ\86Û\8cÙ\86Ù\85اÙ\85Û\8cØ´ Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cلری $1",
+       "rcshowhideanons": "تاÙ\86Û\8cÙ\86Ù\85اÙ\85Û\8cØ´ Ø§Û\8cØ´Ù\84دÙ\86لری $1",
        "rcshowhideanons-show": "گؤستر",
        "rcshowhideanons-hide": "گیزلت",
        "rcshowhidepatr": "نظارت ائدیلن دَییشیکلیکلری $1",
        "rc-enhanced-expand": "تفصیل‌لری گؤستر",
        "rc-enhanced-hide": "تفصیل‌لری گیزلت",
        "rc-old-title": "ایلک‌جه «$1» آدی‌له یارانمیشدیر",
-       "recentchangeslinked": "ایلگیلی دَییشیکلیکلر",
-       "recentchangeslinked-feed": "ایلگیلی دَییشیکلیکلر",
-       "recentchangeslinked-toolbox": "ایلگیلی دَییشیکلیکلر",
+       "recentchangeslinked": "مربوط دَییشیکلیکلر",
+       "recentchangeslinked-feed": "مربوط دَییشیکلیکلر",
+       "recentchangeslinked-toolbox": "مربوط دَییشیکلیکلر",
        "recentchangeslinked-title": "''$1'' ایله ایلگی‌لی دییشیکلر",
        "recentchangeslinked-summary": "آشاغیداکی سیياهی، قئيد اوْلونان صحیفه‌‌يه (و يا قئيد اوْلونان کاتئقوْرياداکی صحیفه‌‌لره) داخیلی کئچید وئرن صحیفه‌‌لرده ائدیلمیش سوْن ديَیشیکلیکلرین سیياهیسیدیر. \n[[Special:Watchlist|ایزله‌مه سیياهینیزداکی]] صحیفه‌‌لر '''قالین''' شریفتله گؤستریلمیشدیر.",
        "recentchangeslinked-page": "صفحه آدی:",
        "unusedtemplates": "ایشلدیلمه‌میش شابلونلار",
        "unusedtemplatestext": "بو صحیفه بوتون، {{ns:template}} آدفضاسیندا اولان و باشقا صحیفه‌لرده اولمایان صحیفه‌لری لیست ائدیر.\nشابلونلاری سیلمک‌دن اؤنجه، لوطفاً اونلارا اولان باشقا باغلانتیلاری یوخلایین.",
        "unusedtemplateswlh": "باشقا باغلانتیلار",
-       "randompage": "راستâ\80\8cÚ¯Ù\84Ù\87 صفحه",
+       "randompage": "تصادÙ\88Ù\81Û\8c صفحه",
        "randompage-nopages": "بو {{PLURAL:$2|آدفضاسیندا|آدفضالاریندا}} هئچ صحیفه یوخدور: $1.",
        "randomincategory": "بؤلمه‌ده راست‌گله صحیفه",
        "randomincategory-invalidcategory": "«$1» بیر گئچرلی بؤلمه آدی دئییل.",
        "randomincategory-nopages": "[[:Category:$1|$1]] بؤلمه‌سین‌ده، هئچ صحیفه یوخدور.",
        "randomincategory-category": "بؤلمه:",
-       "randomincategory-legend": "بؤÙ\84Ù\85Ù\87â\80\8cدÙ\87 Ø±Ø§Ø³Øªâ\80\8cÚ¯Ù\84Ù\87 صفحه",
+       "randomincategory-legend": "بؤÙ\84Ù\85Ù\87â\80\8cدÙ\87 ØªØµØ§Ø¯Ù\88Ù\81Û\8c صفحه",
        "randomincategory-submit": "گئت",
        "randomredirect": "راست‌گله یول‌لاندیرما",
        "randomredirect-nopages": "«$1» آدفضاسیندا هئچ بیر یول‌لاندیرما یوخدور.",
        "special-categories-sort-abc": "الیفبا سیراسی ایله دوز",
        "deletedcontributions": "سیلینمیش ایستیفاده‌چی چالیشمالاری",
        "deletedcontributions-title": "سیلین‌میش ایستیفاده‌چی چالیشمالاری",
-       "sp-deletedcontributions-contribs": "فالیت",
+       "sp-deletedcontributions-contribs": "چالیشمالار",
        "linksearch": "خاریجی باغلانتی آختار",
        "linksearch-pat": "آختاریش اولگوسو:",
        "linksearch-ns": "آد فضاسی:",
        "activeusers-intro": "بوردا سون {{PLURAL:$1|بیر|$1}} گون‌ده بیر ایشلر گؤرن ایستیفاده‌چیلرین لیستی گؤستریلیر.",
        "activeusers-count": "سون {{PLURAL:$3|گون|$3 گون}}‌ده، {{PLURAL:$1|$1}} چالیشما",
        "activeusers-from": "بوندان باشلایاراق ایستیفاده‌چیلری گؤستر:",
-       "activeusers-hidebots": "بÙ\88تلاری گیزلت",
+       "activeusers-hidebots": "رÙ\88Ù\92باتâ\80\8cلاری گیزلت",
        "activeusers-hidesysops": "ایداره‌چیلری گیزلت",
        "activeusers-noresult": "هئچ ایشلدن تاپیلمادی.",
        "listgrouprights": "ایستیفاده‌چی قروپ حاقلاری",
        "notvisiblerev": "باشقا ایستیفادی‌چی‌نین سون دییشیک‌لیگی سیلینیب",
        "watchlist-details": "دانیشیق صفحه‌لرینی آیری سایمایاراق، {{PLURAL:$1|$1 صفحه‌نی}} ایزله‌ییرسینیز.",
        "wlheader-enotif": "ایمیل ایله بیلدیریش آچیلیب‌دیر.",
-       "wlheader-showupdated": "سÙ\88Ù\86 Ú¯Ø¤Ø±Ù\88Ø´Ù\88Ù\86Ù\88زدÙ\86 Ø³Ù\88Ù\86را Ø§Ø¦Ø¯Û\8cÙ\84Ù\86 Ø¯Û\8cÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©Ù\84ر '''Ù\82اÙ\84Û\8cÙ\86''' Ú¯Ø¤Ø³ØªØ±Û\8cÙ\84Û\8cبدÛ\8cÙ\84ر.",
+       "wlheader-showupdated": "سÙ\88Ù\86 Ú¯Ø¤Ø±Ù\88Ø´Ù\88Ù\86Ù\88زدÙ\86 Ø³Ù\88Ù\92Ù\86را Ø§Ø¦Ø¯Û\8cÙ\84Ù\86 Ø¯Û\8cÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©Ù\84ر '''Ù\82اÙ\84Û\8cÙ\86''' Ú¯Ø¤Ø±Ø³Ø¯Û\8cÙ\84Û\8cبâ\80\8cدÛ\8cر.",
        "wlnote": "آشاغیداکی {{PLURAL:$1|بیر ديَیشیک‌لیک|<strong>$1</strong> ديَیشیک‌لیک}}  سون {{PLURAL:$2|ساعتدا|<strong>$2</strong> ساعتدا}} ائدیلمیشدیر. $3، $4",
        "wlshowlast": "سون $1 ساعات $2 گون گؤستر",
        "watchlist-options": "ایزله‌دیکلر سئچمه‌لری",
        "watching": "ایزله‌نیلیر...",
        "unwatching": "ایزله‌مه...",
        "watcherrortext": "ایزلئمئ سیاهی‌سی ترجیحلرینیزی \"$1\" اوچون دییشدیررکن بیر خطا میدانا گلدی.",
-       "enotif_reset": "باخیلمیش بوتون صحیفه‌لری ایشاره‌له.",
+       "enotif_reset": "باخیلمیش بۆتون صفحه‌لری علامت‌له.",
        "enotif_impersonal_salutation": "{{SITENAME}} ایستیفاده‌چی‌سی",
        "enotif_subject_deleted": "{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله سیلینیب‌دیر",
        "enotif_subject_created": "{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله یارانیب‌دیر",
        "invert": "سئچیلنی دؤندر",
        "tooltip-invert": "بو قوتونی علامتله یین تا انتخاب اولان آد فضا سینین ایچری صحیفه لری دییشیک لیک لری(و اوبیری علامتلنمیش فضالار) گیزله نه آدی",
        "tooltip-whatlinkshere-invert": "سئچیلمیش آدفضاسیندان اولان باغلانتیلاری گیزلتمک اوچون بو قوتویا نیشان قویون.",
-       "namespace_association": "اÛ\8cÙ\84Ú¯Û\8cلی آدفضاسی",
+       "namespace_association": "باغلی آدفضاسی",
        "tooltip-namespace_association": "بو قوتونو علامت له ین یالنیز آد بحث فضاسی یا مرتبط اولان آد فضاسی ایله انتخاب اولا",
        "blanknamespace": "(آنا)",
        "contributions": "{{GENDER:$1|ایشلدن}} چالیشمالاری",
        "tooltip-n-portal": "پروژه‌ یه گؤره، سیز نه ایش گوره بیلرسیز، هاردا نه‌لری تاپا بیلرسیز",
        "tooltip-n-currentevents": "ایندیکی اولای‌لارا ایلگیلی بیلگی‌لر تاپ",
        "tooltip-n-recentchanges": "بو ویکی‌ده سون دَییشیکلرین لیستی",
-       "tooltip-n-randompage": "بÛ\8cر Ø±Ø§Ø³Øªâ\80\8cÚ¯Ù\84Ù\87 صفحه گتیر",
+       "tooltip-n-randompage": "بÛ\8cر ØªØµØ§Ø¯Ù\88Ù\81Û\8c صفحه گتیر",
        "tooltip-n-help": "آنلاماق یئری",
        "tooltip-t-whatlinkshere": "بورایا باغلانان بوتون ویکی صفحه‌لرین لیستی",
        "tooltip-t-recentchangeslinked": "بو صفحه‌دن باغلانان صفحه‌لرین سون دَییشیکلیک‌لری",
        "previousdiff": "اسکی دَییشدیرمه",
        "nextdiff": "یئنی دَییشدیرمه",
        "mediawarning": "'''خبردارلیق: بو ​​فایل نوعو پیس نیت‌لی کودلار اولا بیلر.\nبونو ایشلتمک، سیستئمینیزی تهلوکه‌یه آتا بیلر.",
-       "imagemaxsize": "گؤرونتو ماکسیمال توتومو:<br />(فایلین تصویری صفحه‌لری اۆچون)'",
+       "imagemaxsize": "عکس ماکسیمال توتومو:<br />(فایلین تصویری صفحه‌لری اۆچون)'",
        "thumbsize": "کیچیک اؤلچو:",
        "widthheightpage": "$1 × $2، $3 {{PLURAL:$3|صحیف|صحیفه‌لر}}",
        "file-info": "فایلین اؤلچوسو: $1، MIME تیپی: $2",
        "tags-edit-nooldid-title": "گئچرسیز هدف نوسخه",
        "comparepages": "صحیفه‌لری قارشی‌لاش‌دیر",
        "compare-page1": "صفحه 1",
-       "compare-page2": "صحیفه 2",
+       "compare-page2": "صفحه ۲",
        "compare-rev1": "نوسخه ۱",
        "compare-rev2": "نوسخه ۲",
        "compare-submit": "قارشی‌لاش‌دیر",
index d2f7c5b..c3e558a 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} иҫәп яҙыуы мәғлүмәттәре",
        "passwordreset-emailtext-ip": "Берәү (бәлки һәҙ, $1 IP-адресынан ) {{SITENAME}} ($4) проектындағы иҫәп яҙыуығыҙҙы хәтерләтеүҙе һоратты.\nКиләһе ҡулланыусы {{PLURAL:$3|1=иҫәп яҙыуы|иҫәп яҙыуҙары}} был электрон почта адресы менән бәйле:\n\n$2\n\nБыл ваҡытлыса {{PLURAL:$3|1=серһүҙ|серһүҙҙәр}} {{PLURAL:$5|$5 көн}} ғәмәлдә буласаҡ.\nҺеҙ системала танылырға һәм яңы серһүҙ һайларға тейешһегеҙ.\nӘгәр, һеҙ быны һоратмаған булһағыҙ йәки элекке серһүҙегеҙҙе киренән иҫләһәгеҙ һәм уны үҙгәртергә теләмәһәгеҙ, был хатҡа иғтибар итмәгеҙ һәм элекке серһүҙегеҙҙе ҡулланыуҙы дауам итегеҙ.",
        "passwordreset-emailtext-user": "{{SITENAME}} проектындағы $1 ҡулланыусыһы {{SITENAME}} ($4) проектындағы иҫәп яҙыуығыҙҙы хәтерләтеүҙе һоратты. Киләһе ҡулланыусы {{PLURAL:$3|1=иҫәп яҙыуы|иҫәп яҙыуҙары}} был электрон почта адресы менән бәйле:\n\n$2\n\nБыл ваҡытлыса {{PLURAL:$3|1=серһүҙ|серһүҙҙәр}} {{PLURAL:$5|$5 көн}} ғәмәлдә буласаҡ.\nҺеҙ системала танылырға һәм яңы серһүҙ һайларға тейешһегеҙ.\nӘгәр, һеҙ быны һоратмаған булһағыҙ йәки элекке серһүҙегеҙҙе киренән иҫләһәгеҙ һәм уны үҙгәртергә теләмәһәгеҙ, был хатҡа иғтибар итмәгеҙ һәм элекке серһүҙеҙҙе ҡулланыуҙы дауам итегеҙ.",
-       "passwordreset-emailelement": "Ҡулланыусы исеме: $1\nВаҡытлыса серһүҙ: $2",
+       "passwordreset-emailelement": "Ҡулланыусы исеме: \n$1\n\nВаҡытлыса серһүҙ: \n$2",
        "passwordreset-emailsent": "Серһүҙҙе ташлау тураһындағы мәғлүмәт менән электрон почта аша хат ебәрелде.",
        "passwordreset-emailsent-capture": "Серһүҙҙе ташлау тураһындағы мәғлүмәт менән электрон хат ебәрелде, уның тексы түбәндә бирелә:",
        "passwordreset-emailerror-capture": "Серһүҙҙе ташлау тураһында хәбәр итеүсе электрон хат булдырылғайны, ләкин уны  {{GENDER:$2|kullanıcıya}} түбәндәге сәбәп арҡаһында ебәреп булманы: $1",
        "emailuser": "Ҡатнашыусыға хат",
        "emailuser-title-target": "{{GENDER:$1|Ҡатнашыусыға}} хат яҙыу",
        "emailuser-title-notarget": "Ҡатнашыусыға хат",
-       "emailpage": "Ҡатнашыусыға хат",
        "emailpagetext": "Был {{GENDER:$1|ҡатнашыусы}} электрон почта аша хат ебәреү өсөн, һеҙ түбәндәге форманы ҡуллана алаһығыҙ.\nЯуап өсөн адрес булараҡ һеҙ [[Special:Preferences|көйләүҙәрегеҙҙә]] күрһәткән электрон почта адресы күрһәтеләсәк, шулай итеп, хатты алыусы һеҙгә тура яуап ебәрә аласаҡ.",
        "defemailsubject": "{{SITENAME}} — $1 ҡулланыусыһынан хат",
        "usermaildisabled": "Ҡатнашыусының электрон почтаһы һүндерелгән",
index b280c97..f6a041b 100644 (file)
        "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-emailelement": "یوزرنام: \n$1\n\nموکتین پسورد: \n$2",
        "passwordreset-emailsent": "یک ایمیلء گون پسوردء واترء راهیگ بوت.",
        "passwordreset-emailsent-capture": "یک ایمیلء پر پسورد واترء واسته که جهلیگء پیش دارگ بیت، راهیگ بیتگ انت.",
        "passwordreset-emailerror-capture": "واترین ایمیل، که جهلیگء پیش دارگ بیت، اڈ بوت، بلئی آئی راهیگ پر {{GENDER:$2|کاربر}} پکا نبوت: $1",
        "mailnologin": "هچ آدرس دیم دهگ",
        "mailnologintext": "شما بایدن [[Special:UserLogin|وارد بیت]] و یک معتبرین آدرس ایمیلی داشته بیت ته وتی [[Special:Preferences|ترجیحات]] په دیم داتن ایمیل په دگه کاربران",
        "emailuser": "په ای کابر ایمیل دیم دی",
-       "emailpage": "ایمیل کاربر",
        "emailpagetext": "گر ای کاربر یک معتبرین آدرس ایمیلی ته وتی ترجیحات کاربری وارد کتت،جهلگین فرم په آیء یک کوله ای دیم دنت.\nآدرس ایمیلی که شما وارد کتت ته [[Special:Preferences|وتی ترجیحات]] په داب آدرس  \"From\" پیش دارگ بیت، اچه گروک ایمیل تونیت پسوء دنت.",
        "defemailsubject": "{{SITENAME}} ایمیل",
        "noemailtitle": "هچ آدرس ایمیل",
index ac35bce..ddd2575 100644 (file)
        "passwordreset-emailtitle": "Mga detalye kan panindog sa {{SITENAME}}",
        "passwordreset-emailtext-ip": "May sarong tawo (pwedeng ika gayod, gikan sa IP address na $1) naghahagad nin pagliliwat kan saimong sekretong panlaog para sa{{SITENAME}}($4). An minasunod na paragamit {{PLURAL:$3|panindog iyo an|mga panindog iyo an}} na asosyado kaining e-surat na adres:\n\n$2\n\n{{PLURAL:$3|Ining temporaryong sekretong panlaog|Ining mga temporaryong sekretong panlaog}} mapapaso sa laog nin {{PLURAL:$5|sarong aldaw|$5 mga aldaw}}.\nDapat kang maglaog asin magpili nin sarong baguhon na sekretong panlaog ngunyan. Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong orihinal na sekretong panlaog, asin habo mo nang ribayan ini, ipasipara mo na sana ining mensahe asin ipagpadagos mo nang gamiton an luma mong sekretong panlaog.",
        "passwordreset-emailtext-user": "Paragamit $1 sa {{SITENAME}} naghahagad nin sarong pagiromdom kan detalye nin saimong panindog para sa {{SITENAME}}\n($4). An minasunod na paragamit {{PLURAL:$3|panindog iyo an|mga panindog iyo an}} na asosyado kaining e-koreong address:\n\n$2\n\n\n{{PLURAL:$3|Ining temporaryong sekretong panlaog|Ining mga temporaryong panlaog}} mapapaso sa {{PLURAL:$5|sarong aldaw|$5 mga aldaw}}.\nIka dapat na maglaog asin magpili nin sarong bagong sekretong panlaog ngunyan. Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong orihinal na sekretong panlaog, asin habo mo nang ribayan ini, ipasapara mo na sana an mensaheng ini asin ipadagos mo nang gamiton an saimong lumang sekretong panlaog.",
-       "passwordreset-emailelement": "Paragamit-ngaran: $1\nTemporaryong sekretong panlaog: $2",
+       "passwordreset-emailelement": "Paragamit-ngaran: \n$1\n\nTemporaryong sekretong panlaog: \n$2",
        "passwordreset-emailsent": "Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na.",
        "passwordreset-emailsent-capture": "Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na, yaon ipinapahiling sa ibaba.",
        "passwordreset-emailerror-capture": "Sarong e-surat sa pagliliwat kan sekretong panlaog an pinagpuyos na, yaon ipinapahiling sa ibaba, alagad sa pagpapadara kaini sa {{GENDER:$2|paragamit}} nagpalya: $1",
        "preview": "Tànawón",
        "showpreview": "Ipahiling an patanaw",
        "showdiff": "Ipahiling an mga kaliwatan",
-       "anoneditwarning": "'''Patanid:''' Ika dae nakapaglaog. An saimong estada kan IP maisusurat sa laog kan historiya nin pagliliwat sa pahinang ini.",
+       "anoneditwarning": "<strong>Patanid:</strong> Ika dae nakalaog. An saimong estada kan IP mahihiling kan publiko kun ika makahimo nin arinman na mga pagliliwat. Kun ika <strong>[$1 naglaog]</strong> o <strong>[$2 magmukna nin panindog]</strong>, an saimong mga pagliliwat ipagpapanungod sa saimong ngaran-paragamit, kaiba an iba pang mga benepisyo.",
        "anonpreviewwarning": "Dae ka tabi nakalaog. An pagtatagama matala kan saimong IP address sa historya nin pagliwat sa pahinang ini.",
        "missingsummary": "<strong>Pagiromdom:</strong>Ika dae pa nakapagtao nin sumaryo sa pagliwat. Kun i-klik mo an \"{{int:savearticle}}\" giraray, an saimong pagliwat ipagtatagama na mayo kaiyan.",
        "missingcommenttext": "Pakikaag nin sarong komento sa ibaba.",
        "spam_reverting": "Mabalik sa huring bersion na mayong takod sa $1",
        "spam_blanking": "An gabos na mga pahirá na may takod sa $1, pigblablanko",
        "spam_deleting": "An gabos na mga rebisyon na igwang mga kasugpunan sa $1, pinupura",
-       "simpleantispam-label": "Rikisa nin Kontra-Ispam.\nGiboha na '''DAE''' paglaogan digde!",
+       "simpleantispam-label": "Rikisa nin Kontra-Ispam.\nGiboha na <strong>dae</strong> paglaogan ini!",
        "pageinfo-title": "Impormasyon para sa \"$1\"",
        "pageinfo-not-current": "Sori, imposible baya na maitao ining impormasyon para sa lumaon nang mga rebisyon.",
        "pageinfo-header-basic": "Panuntungang impormasyon",
index 57252e7..752db99 100644 (file)
        "passwordreset-emailtitle": "Падрабязнасьці рахунку ў {{GRAMMAR:месны|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Нехта (магчыма Вы, з IP-адрасу $1) зрабіў запыт на скіданьне вашага паролю ў {{GRAMMAR:месны|{{SITENAME}}}} ($4). {{PLURAL:$3|1=Наступны рахунак удзельніка зьвязаны|Наступныя рахункі ўдзельнікаў зьвязаныя}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|1=Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць $5 {{PLURAL:$5|дзень|дні|дзён}}.\nЦяпер Вам неабходна ўвайсьці і выбраць новы пароль. Калі нехта іншы зрабіў гэты запыт, ці Вы ўспомнілі Ваш пачатковы пароль, які ня хочаце мяняць, Вы можаце праігнараваць гэтае паведамленьне, і працягваць выкарыстоўваць стары пароль.",
        "passwordreset-emailtext-user": "Удзельнік $1 зрабіў запыт на скіданьне вашага паролю ў {{GRAMMAR:месны|{{SITENAME}}}} ($4). {{PLURAL:$3|1=Наступны рахунак удзельніка зьвязаны|Наступныя рахункі ўдзельнікаў зьвязаныя}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|1=Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць $5 {{PLURAL:$5|дзень|дні|дзён}}.\nЦяпер Вам неабходна ўвайсьці і выбраць новы пароль. Калі нехта іншы зрабіў гэты запыт, ці Вы ўспомнілі Ваш пачатковы пароль, які ня хочаце мяняць, Вы можаце праігнараваць гэтае паведамленьне, і працягваць выкарыстоўваць стары пароль.",
-       "passwordreset-emailelement": "Імя ўдзельніка: $1\nЧасовы пароль: $2",
+       "passwordreset-emailelement": "Імя ўдзельніка: \n$1\n\nЧасовы пароль: \n$2",
        "passwordreset-emailsent": "Ліст пра скіданьне паролю быў дасланы.",
        "passwordreset-emailsent-capture": "Ліст пра скіданьне паролю быў дасланы, што паказана ніжэй.",
        "passwordreset-emailerror-capture": "Ліст пра скіданьне паролю быў створаны і паказаны ніжэй, але не ўдалося адправіць яго {{GENDER:$2|ўдзельніку|ўдзельніцы}}: $1",
        "changeemail-password": "Ваш пароль у {{GRAMMAR:месны|{{SITENAME}}}}:",
        "changeemail-submit": "Зьмяніць адрас электроннай пошты",
        "changeemail-throttled": "Вы зрабілі зашмат спробаў увайсьці ў сыстэму.\nКалі ласка, пачакайце $1 перад наступнай спробай.",
+       "changeemail-nochange": "Калі ласка, увядзіце іншы новы адрас электроннай пошты",
        "resettokens": "Скідваньне токенаў",
        "resettokens-text": "Тут вы можаце скінуць токены, якія даюць вамд доступ да пэўных прыватных зьвестак, асацыяваных з вашым рахункам.\n\nКалі вы выпадкова падзяліліся токенамі зь іншымі, або калі ваш рахунак быў скампрамэтаваны, скарыстайцеся гэтай магчымасьцю і скіньце токены.",
        "resettokens-no-tokens": "Няма што скідаць.",
        "rows": "Радкоў:",
        "columns": "Слупкоў:",
        "searchresultshead": "Пошук",
-       "stub-threshold": "Максымальны памер старонкі для паказу спасылак <a href=\"#\" class=\"stub\">як на накід</a> (у байтах):",
+       "stub-threshold": "Максымальны памер старонкі для паказу спасылак як на накід ($1):",
+       "stub-threshold-sample-link": "прыклад",
        "stub-threshold-disabled": "Выключаны",
        "recentchangesdays": "Колькасьць дзён для паказу ў апошніх зьменах:",
        "recentchangesdays-max": "(максымальна $1 {{PLURAL:$1|дзень|дні|дзён}})",
        "right-minoredit": "пазначэньне рэдагаваньняў як дробныя",
        "right-move": "перанос старонак",
        "right-move-subpages": "перанос старонак разам зь іх падстаронкамі",
-       "right-move-rootuserpages": "Ð\9fеранос карэнных старонак удзельнікаў",
+       "right-move-rootuserpages": "перанос карэнных старонак удзельнікаў",
        "right-move-categorypages": "перанос старонак катэгорыяў",
        "right-movefile": "перайменаваньне файлаў",
        "right-suppressredirect": "не ствараць перанакіраваньне са старой назвы пасьля пераносу старонкі",
        "right-bot": "лічыцца аўтаматычным працэсам",
        "right-nominornewtalk": "не паведамляць удзельнікам пра новыя паведамленьні на іх старонках гутарак, калі зробленыя там праўкі былі дробнымі",
        "right-apihighlimits": "менш абмежаваньняў на выкананьне API-запытаў",
-       "right-writeapi": "выкарыстаньне API для запісаў",
+       "right-writeapi": "выкарыстаньне API для запісу",
        "right-delete": "выдаленьне старонак",
        "right-bigdelete": "Выдаленьне старонак зь вялікімі гісторыямі",
        "right-deletelogentry": "выдаленьне і аднаўленьне асобных запісаў журналу",
        "recentchangeslinked-feed": "Зьвязаныя праўкі",
        "recentchangeslinked-toolbox": "Зьвязаныя праўкі",
        "recentchangeslinked-title": "Зьвязаныя праўкі для «$1»",
-       "recentchangeslinked-summary": "Гэта сьпіс апошніх зьменаў старонак, на якія спасылаецца азначаная старонка (ці ўсіх старонак, якія належаць азначанай катэгорыі).\nСтаронкі з [[Special:Watchlist|Вашага сьпісу назіраньня]] пазначаныя '''тлустым шрыфтам'''.",
+       "recentchangeslinked-summary": "Гэта сьпіс апошніх зьменаў старонак, на якія спасылаецца азначаная старонка (ці ўсіх старонак, якія належаць азначанай катэгорыі).\nСтаронкі з [[Special:Watchlist|Вашага сьпісу назіраньня]] пазначаныя <strong>тоўстым шрыфтам</strong>.",
        "recentchangeslinked-page": "Назва старонкі:",
        "recentchangeslinked-to": "Замест гэтага паказваць зьмены на старонках, што спасылаюцца на гэтую старонку",
        "upload": "Загрузіць файл",
        "upload-dialog-label-infoform-name": "Назва",
        "upload-dialog-label-infoform-description": "Апісаньне",
        "upload-dialog-label-usage-title": "Выкарыстаньне",
+       "upload-dialog-label-usage-filename": "Назва файлу",
        "backend-fail-stream": "Немагчыма накіраваць файл $1.",
        "backend-fail-backup": "Немагчыма зрабіць рэзэрвовую копію файла $1.",
        "backend-fail-notexists": "Файл $1 не існуе.",
        "booksources-text": "Ніжэй знаходзіцца сьпіс спасылак на іншыя сайты, якія прадаюць новыя і патрыманыя кнігі, і могуць таксама мець інфармацыю пра кнігі, якія Вы шукаеце:",
        "booksources-invalid-isbn": "Пададзены няслушны ISBN; праверце, магчыма ўзьніклі памылкі пры пераносе нумару з арыгінальнай крыніцы.",
        "specialloguserlabel": "Выканаўца:",
-       "speciallogtitlelabel": "Мэта (назва ці удзельнік):",
+       "speciallogtitlelabel": "Мэта (назва ці {{ns:user}}:імя_ўдзельніка для ўдзельніка):",
        "log": "Журналы падзеяў",
        "all-logs-page": "Усе публічныя журналы падзеяў",
        "alllogstext": "Сумесны паказ усіх журналаў падзеяў {{GRAMMAR:родны|{{SITENAME}}}}.\nВы можаце адфільтраваць вынікі па тыпе журналу, удзельніку ці старонцы.",
        "undelete-show-file-submit": "Так",
        "namespace": "Прастора назваў:",
        "invert": "Адваротны выбар",
-       "tooltip-invert": "Пазначце гэтае поле каб схаваць зьмены ў старонках з выбранай прасторы назваў (і зьвязнай прасторы назваў, калі пазначана)",
+       "tooltip-invert": "Пазначце гэтае поле, каб схаваць зьмены старонак з выбранай прасторы назваў (і зьвязнай прасторы назваў, калі пазначана)",
        "tooltip-whatlinkshere-invert": "Адзначце гэтае поле, каб схаваць спасылкі з старонак у вызначанай прасторы назваў",
        "namespace_association": "Зьвязаная прастора назваў",
-       "tooltip-namespace_association": "Пазначце гэтае поле каб уключыць простору назваў абмеркаваньняў (альбо прадметную), зьвязаных з выбранай прасторай назваў",
+       "tooltip-namespace_association": "Пазначце гэтае поле, каб уключыць прастору назваў абмеркаваньняў (альбо прадметную), зьвязаных з выбранай прасторай назваў",
        "blanknamespace": "(Асноўная)",
        "contributions": "Унёсак {{GENDER:$1|удзельніка|удзельніцы}}",
        "contributions-title": "Унёсак {{GENDER:$1|удзельніка|удзельніцы}} $1",
        "tooltip-ca-nstab-main": "Паказаць зьмест старонкі",
        "tooltip-ca-nstab-user": "Паказаць старонку ўдзельніка",
        "tooltip-ca-nstab-media": "Паказаць старонку мэдыяфайла",
-       "tooltip-ca-nstab-special": "Гэта спэцыяльная старонка, і Вы ня можаце яе рэдагаваць",
+       "tooltip-ca-nstab-special": "Гэта спэцыяльная старонка і яе нельга рэдагаваць",
        "tooltip-ca-nstab-project": "Паказаць старонку праекту",
        "tooltip-ca-nstab-image": "Паказаць старонку файла",
        "tooltip-ca-nstab-mediawiki": "Паказаць сыстэмнае паведамленьне",
        "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-looped": "паўтараецца",
        "file-info-gif-frames": "$1 {{PLURAL:$1|кадар|кадры|кадраў}}",
        "file-info-png-looped": "паўтараючыся",
        "file-info-png-repeat": "паўтораны $1 {{PLURAL:$1|раз|разы|разоў}}",
        "blankpage": "Пустая старонка",
        "intentionallyblankpage": "Гэтая старонка наўмысна пакінутая пустой",
        "external_image_whitelist": " #Пакіньце гэты радок такім, які ён ёсьць<pre>\n#Зьмясьціце часткі рэгулярных выразаў (толькі частку якая знаходзіцца паміж //) ніжэй\n#Яны будуць суаднесеныя з URL-адрасамі вонкавых выяваў\n#Тыя, якія будуць пасаваць будуць паказвацца як выявы, астатнія толькі як спасылкі\n#Радкі, пазначаныя #, лічыцца камэнтарамі\n#Рэгістар сымбаляў ня ўлічваецца\n\n#Зьмясьціце ўсе часткі рэгулярных выразаў над гэтым радком. Сам радок пакіньце ў такім жа выглядзе</pre>",
-       "tags": "СлÑ\83Ñ\88нÑ\8bÑ\8f Ñ\82Ñ\8dгі зьменаў",
-       "tag-filter": "Фільтар [[Special:Tags|тэгаў]]:",
+       "tags": "Ð\94зейнÑ\8bÑ\8f Ð¼ÐµÑ\82кі зьменаў",
+       "tag-filter": "Фільтар [[Special:Tags|метак]]:",
        "tag-filter-submit": "Фільтар",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=ТÑ\8dг|ТÑ\8dгі}}]]: $2)",
-       "tags-title": "ТÑ\8dгі",
-       "tags-intro": "На гэтай старонцы знаходзіцца сьпіс тэгаў, якімі праграмнае забесьпячэньне можа пазначыць рэдагаваньне, і іх значэньне.",
-       "tags-tag": "Назва тэга",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Ð\9cеÑ\82ка|Ð\9cеÑ\82кі}}]]: $2)",
+       "tags-title": "Ð\9cеÑ\82кі",
+       "tags-intro": "На гэтай старонцы знаходзіцца сьпіс метак, якімі праграмнае забесьпячэньне можа пазначыць рэдагаваньне, і іх значэньне.",
+       "tags-tag": "Назва меткі",
        "tags-display-header": "Новыя запісы ў сьпісе зьменаў",
        "tags-description-header": "Поўнае апісаньне значэньня",
        "tags-source-header": "Крыніца",
-       "tags-active-header": "Актыўны?",
+       "tags-active-header": "Актыўная?",
        "tags-hitcount-header": "Пазначаныя зьмены",
        "tags-actions-header": "Дзеяньні",
        "tags-active-yes": "Так",
        "tags-deactivate-submit": "Адключыць",
        "tags-apply-no-permission": "Вы ня маеце права прымяняць меткі да вашых рэдагаваньняў.",
        "tags-apply-not-allowed-one": "Метка «$1» ня можа быць прызначаная ўручную.",
+       "tags-apply-not-allowed-multi": "{{PLURAL:$2|Наступную метку|Наступныя меткі}} нельга дадаваць уручную: $1",
+       "tags-update-no-permission": "Вы ня маеце права на дадаваньне ці выдаленьне метак зьменаў для асобных вэрсіяў ці запісаў журналаў.",
+       "tags-update-add-not-allowed-one": "Метка «$1» ня можа быць дададзеная ўручную.",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|1=Наступную метку|Наступныя меткі}} нельга дадаваць уручную: $1",
+       "tags-update-remove-not-allowed-one": "Метка «$1» ня можа быць выдаленая.",
+       "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|1=Наступная метка на можа быць выдаленая|Наступныя меткі ня могуць быць выдаленыя}} ўручную: $1",
        "tags-edit-title": "Рэдагаваньне метак",
        "tags-edit-manage-link": "Кіраваньне меткамі",
        "tags-edit-revision-selected": "{{PLURAL:$1|1=Абраная вэрсія|Абраныя вэрсіі}} [[:$2]]:",
        "tags-edit-remove": "Выдаліць гэтыя меткі:",
        "tags-edit-remove-all-tags": "(выдаліць усе меткі)",
        "tags-edit-chosen-placeholder": "Абярыце меткі",
+       "tags-edit-chosen-no-results": "Адпаведныя меткі ня знойдзеныя",
+       "tags-edit-reason": "Прычына:",
+       "tags-edit-revision-submit": "Дастасаваць зьмены да {{PLURAL:$1|1=гэтай вэрсіі|$1 вэрсіяў}}",
+       "tags-edit-logentry-submit": "Дастасаваць зьмены да {{PLURAL:$1|$1 журнальнага запісу|$1 журнальных запісаў}}",
+       "tags-edit-success": "Зьмены былі пасьпяхова дастасаваныя.",
+       "tags-edit-failure": "Гэтыя зьмены ня могуць быць дастасаваныя:\n$1",
        "comparepages": "Параўнаньне старонак",
        "compare-page1": "Старонка 1",
        "compare-page2": "Старонка 2",
index 61b60cb..e387bd6 100644 (file)
        "passwordreset-emailtitle": "Інфармацыя пра рахунак на сайце {{SITENAME}}",
        "passwordreset-emailtext-ip": "Нехта (магчыма вы, з IP-адрасу $1) запытаў скід  вашага пароля ў праекце {{SITENAME}} ($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя ўліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|адзін дзень|$5 дні|$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і абраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягнуць выкарыстоўваць свой стары пароль.",
        "passwordreset-emailtext-user": "Удзельнік $1 з праекта {{SITENAME}} запытаў скід вашага пароля ў праекце {{SITENAME}}\n($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя уліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|$5 дзень |$5 дні |$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і выбраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягваць выкарыстоўваць свой стары пароль.",
-       "passwordreset-emailelement": "Імя ўдзельніка: $1\nЧасовы пароль: $2",
+       "passwordreset-emailelement": "Імя ўдзельніка: \n$1\n\nЧасовы пароль: \n$2",
        "passwordreset-emailsent": "Па электроннай пошце быў адпраўлены ліст пра скід пароля.",
        "passwordreset-emailsent-capture": "Ніжэй прыведзены адпраўлены ліст пра скід пароля.",
        "passwordreset-emailerror-capture": "Ніжэй прыведзены створаны ліст пра скід пароля, яго адпраўка не атрымалася па прычыне: $1",
        "emailuser": "Эл.пошта ўдзельніка",
        "emailuser-title-target": "Напісаць ліст {{GENDER:$1|удзельніку|удзельніцы}}",
        "emailuser-title-notarget": "Напісанне электроннага ліста ўдзельніку",
-       "emailpage": "Зварот да ўдзельніка праз эл.пошту",
        "emailpagetext": "Тут можна выслаць эл.пошту гэта{{GENDER:$1|му ўдзельніку|й удзельніцы}}.\nАдрас эл.пошты, уведзены вамі ў [[Special:Preferences|сваіх настройках]], з'явіцца ў полі \"Ад каго (From)\" вашага ліста, і атрымальнік зможа адказаць на ваш ліст.",
        "defemailsubject": "{{SITENAME}} — Ліст ад $1",
        "usermaildisabled": "Электронная пошта ўдзельніка не працуе",
index 1f6b7ca..bbe437f 100644 (file)
        "noindex-category": "Неиндексирани страници",
        "broken-file-category": "Страници с неработещи препратки към файлове",
        "about": "За {{SITENAME}}",
-       "article": "Статия",
+       "article": "Страница",
        "newwindow": "(отваря се в нов прозорец)",
        "cancel": "Отказ",
        "moredotdotdot": "Още…",
        "nouserspecified": "Необходимо е да се посочи потребителско име.",
        "login-userblocked": "Този потребител е блокиран. Влизането в системата не е позволено.",
        "wrongpassword": "Въведената парола е невалидна. Опитайте отново.",
-       "wrongpasswordempty": "Ð\92Ñ\8aведенаÑ\82а Ð¿Ð°Ñ\80ола Ðµ Ð¿Ñ\80азна. Опитайте отново.",
+       "wrongpasswordempty": "Ð\9dе Ðµ Ð²Ñ\8aведена Ð¿Ð°Ñ\80ола. Опитайте отново.",
        "passwordtooshort": "Необходимо е паролата да съдържа поне {{PLURAL:$1|1 знак|$1 знака}}.",
        "password-name-match": "Паролата ви трябва да се различава от потребителското ви име.",
        "password-login-forbidden": "Използването на това потребителско име и парола е забранено.",
        "passwordreset-emailtitle": "Подробности за сметката в {{SITENAME}}",
        "passwordreset-emailtext-ip": "Някой (вероятно вие, от IP адрес $1) поиска възстановяване на паролата за сметката в {{SITENAME}} ($4). За {{PLURAL:$3|следната сметка|следните сметки}}\nе посочен този адрес за електронна поща:\n\n$2\n\n{{PLURAL:$3|Тази временна парола ще бъде активна|Тези временни пароли ще бъдат активни}} {{PLURAL:$5|един ден|$5 дни}}.\nСега би трябвало да влезете в системата и да си изберете нова парола. Ако заявката е направена от друг или пък сте си спомнили паролата и не искате да я променяте, можете да пренебрегнете това съобщение и да продължите да използвате старата си парола.",
        "passwordreset-emailtext-user": "Потребител $1 от {{SITENAME}} поиска възстановяване на паролата за сметката в {{SITENAME}}\n($4). За {{PLURAL:$3|следната сметка|следните сметки}} е посочен този адрес за електронна поща:\n\n$2\n\n{{PLURAL:$3|Тази временна парола ще бъде активна|Тези временни пароли ще бъдат активни}} {{PLURAL:$5|един ден|$5 дни}}.\nСега би трябвало да влезете в системата и да изберете нова парола. Ако заявката е направена \nот друг или пък сте си спомнили паролата и не искате да я променяте, можете да пренебрегнете \nтова съобщение и да продължите да използвате старата си парола.",
-       "passwordreset-emailelement": "Потребителско име: $1\nВременна парола: $2",
+       "passwordreset-emailelement": "Потребителско име: \n$1\n\nВременна парола: \n$2",
        "passwordreset-emailsent": "На електронната поща беше изпратено писмо за възстановяване на паролата.",
        "passwordreset-emailsent-capture": "По-долу е показано електронното писмо за възстановяване на паролата, което беше изпратено.",
        "passwordreset-emailerror-capture": "По-долу е показано създадено електронно писмо за възстановяване на паролата, което не беше изпратено на {{GENDER:$2|потребителя}}: $1",
index cf12609..2c93cc7 100644 (file)
        "passwordreset-capture-help": "اگه ای گزینه ئا بگیندیت ، ایمیل (گو موقتین پاسوردا) بی شما نشان داته ئه بیئت و په کار زوروکا هم دیم داته ئه بیئت.",
        "passwordreset-email": "ایمیل ادرس:",
        "passwordreset-emailtitle": "حسابئ مئلومات بی {{SITENAME}}",
-       "passwordreset-emailelement": "کار زوروکئ نام: $1\nموقت ئین چیهرگال: $2",
+       "passwordreset-emailelement": "کار زوروکئ نام: \n$1\n\nموقت ئین چیهرگال: \n$2",
        "passwordreset-emailsent": "یک ایمیل په چیهر گالئ  پاک بوتین  خاتیرا دیم داته بوت.",
        "passwordreset-emailsent-capture": "یک ایمیلئ په بیئرگردینتین ئا پاسوردئ خاتیرا، دیم داته بوت.",
        "changeemail": "ایمیل ادرسی تغیر داتین",
        "emailuser": "ای کار زوروکئ ایمیل",
        "emailuser-title-target": "ایمیل په {{GENDER:$1|کار زوروکا}}",
        "emailuser-title-notarget": "کار زوروکی ایمیل",
-       "emailpage": "کار زوروکی ایمیل",
        "defemailsubject": "{{SITENAME}} ایمیل شه کار زوروکئ نیمگا «$1»",
        "usermaildisabled": "کار زوروکئ ایمیل غیر پئال اینت",
        "usermaildisabledtext": "شما نه توانیت ای ویکی تا په دیگه رین کارزوروکان ایمیل دیم دهیت.",
index b0a7ed1..9467810 100644 (file)
@@ -8,48 +8,48 @@
                        "SatyamMishra"
                ]
        },
-       "tog-underline": "लिà¤\82à¤\95 à¤\95à¥\87 à¤¨à¥\80à¤\9aà¥\87 à¤°à¥\87à¤\96ा",
-       "tog-hideminor": "हाल à¤\95à¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤®à¥\87à¤\82 à¤®à¤¾à¤®à¥\82लà¥\80 à¤¸à¤\82पादन à¤\9bà¥\81पाईं",
-       "tog-hidepatrolled": "हाल à¤\95à¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤®à¥\87à¤\82 à¤®à¤¾à¤®à¥\82लà¥\80 à¤¸à¤\82पादन à¤\9bà¥\81पाईं",
-       "tog-newpageshidepatrolled": "नयà¤\95ा à¤ªà¥\83षà¥\8dठ à¤\95à¥\87 à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9cाà¤\81à¤\9aल à¤ªà¥\83षà¥\8dà¤\95 à¤\95à¥\87 à¤\9bà¥\81पाà¤\81à¤\88",
-       "tog-extendwatchlist": "मातà¥\8dर à¤¹à¤¾à¤² à¤\95à¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¥\80 à¤¨à¤¾à¤¹à¥\80,बलà¥\8dà¤\95ि à¤¸à¤¬ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95à¥\87 à¤¦à¥\87à¤\96ावà¥\87 à¤\96ातिर à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80 à¤\95à¥\87 à¤µिस्तारित करीं",
-       "tog-usenewrc": "तà¥\81रà¤\82त à¤­à¤\87ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤®à¥\87à¤\82 à¤\86 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤­à¤\87ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनन à¤\95à¥\87 à¤ªà¤¨à¥\8dना à¤\85नà¥\81सार à¤¸à¤®à¥\82ह में बांटी",
-       "tog-numberheadings": "सà¥\8dवयà¤\82-साà¤\82à¤\96à¥\8dयिà¤\95à¥\80 à¤¶à¤¿à¤°à¥\8dषà¤\95",
-       "tog-showtoolbar": "समà¥\8dपादन à¤\94à¤\9cारपà¤\9fà¥\8dà¤\9fà¥\80 à¤\95à¥\87 à¤¦à¤¿खावल जाव",
-       "tog-editondblclick": "दà¥\81à¤\88 à¤\95à¥\8dलिà¤\95 à¤ªà¤° à¤ªà¤¨à¥\8dना संपादन करीं",
-       "tog-editsectiononrightclick": "à¤\85नà¥\81भाà¤\97 à¤¶à¥\80रà¥\8dषà¤\95 à¤ªà¤° à¤¦à¤¾à¤¯à¤¾à¤\81 à¤\95à¥\8dलिà¤\95 à¤\95र à¤\85नà¥\81भाà¤\97 सम्पादित करीं",
-       "tog-watchcreations": "हमरा à¤¦à¥\8dवारा à¤¨à¤¿à¤°à¥\8dमित à¤ªà¥\83षà¥\8dठ à¤\86 à¤¹à¤®à¤°à¤¾ à¤¦à¥\8dवारा à¤²à¤¾à¤¦à¤² à¤«à¤¼à¤¾à¤\87लन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\80",
-       "tog-watchdefault": "हमरा द्वारा निर्मित पृष्ठ आ हमरा द्वारा लादल फ़ाइलन के हमार ध्यानसूची में जोड़ी",
-       "tog-watchmoves": "हमरा à¤¦à¥\8dवारा à¤¸à¥\8dथानाà¤\82तरित à¤ªà¥\83षà¥\8dठ à¤\86 à¤²à¤¾à¤¦à¤² à¤«à¤¾à¤\88ल à¤\95à¥\87 à¤¹à¤®à¤°à¤¾ à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\80",
-       "tog-watchdeletion": "हमरा à¤¦à¥\8dवारा à¤®à¤¿à¤\9fावल à¤ªà¥\83षà¥\8dठ à¤«à¤¼à¤¾à¤\87लन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\80",
-       "tog-watchrollback": "हमरा à¤¦à¥\8dवारा à¤ªà¥\8dरतà¥\8dयापनà¥\8dन (रà¥\8bलबà¥\88à¤\95) à¤\95रल à¤\97à¤\87ल à¤ªà¤¨à¥\8dनन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\80à¤\82।",
-       "tog-minordefault": "सारा à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤\9bà¥\8bà¤\9f à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤°à¥\81प à¤®à¥\87à¤\82 à¤\9aिनà¥\8dहित à¤\95रà¥\80à¤\82",
-       "tog-previewontop": "समà¥\8dपादन à¤¬à¤\95à¥\8dसा à¤¸à¥\87 à¤ªà¤¹à¤¿à¤²à¥\87 à¤ªà¥\81रà¥\8dवदरà¥\8dशन à¤¦à¤¿à¤\96ाà¤\88à¤\82।",
-       "tog-previewonfirst": "पहिलà¤\95ा à¤¸à¤®à¥\8dपादन à¤ªà¤° à¤ªà¥\82रà¥\8dवावलà¥\8bà¤\95न à¤¦à¥\87à¤\96à¥\80à¤\82",
-       "tog-enotifwatchlistpages": "हमार à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¦à¤°à¥\8dà¤\9c à¤\95à¥\8cनà¥\8b à¤­à¥\80 à¤ªà¤¨à¥\8dना à¤¯à¤¾ à¤«à¤¾à¤\88ल à¤®à¥\87à¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन होखला पर हमके ई-मेल करल जाव",
-       "tog-enotifusertalkpages": "यदि हमार वार्तालाप पन्ना पर कौनो परिवर्तन होखे त हमके ई मेल करल जाव",
-       "tog-enotifminoredits": "पनà¥\8dना à¤\86 à¤«à¤¾à¤\88ल à¤ªà¤° à¤\9bà¥\8bà¤\9fà¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¥\8bà¤\96à¥\87 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤\88 मेल करल जाव",
-       "tog-enotifrevealaddr": "अधिसूचना ई-मेल में हमार ई मेल पता दिखावल जाव",
-       "tog-shownumberswatching": "धà¥\8dयान रखे वालन सदस्यन के देखावल जाव",
+       "tog-underline": "à¤\95ड़à¥\80 à¤\85à¤\82डरलाà¤\87न à¤\95à¤\87ल:",
+       "tog-hideminor": "हाल à¤\95à¥\87 à¤¬à¤¦à¤²à¤¾à¤µ à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9bà¥\8bà¤\9f à¤¸à¤\82पादन à¤\9bिपाईं",
+       "tog-hidepatrolled": "हाल à¤\95à¥\87 à¤¬à¤¦à¤²à¤¾à¤µ à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9cाà¤\81à¤\9aल à¤¸à¤\82पादन à¤\9bिपाईं",
+       "tog-newpageshidepatrolled": "नया à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9cाà¤\81à¤\9aल à¤ªà¤¨à¥\8dना à¤¸à¤­ à¤\95à¥\87 à¤\9bिपाà¤\88à¤\82",
+       "tog-extendwatchlist": "à¤\96ालà¥\80 à¤¹à¤¾à¤²à¥\87 à¤\95à¥\87 à¤¬à¤¦à¤²à¤¾à¤µ à¤¨à¤¾ à¤¬à¤¾à¤²à¥\81à¤\95, à¤¸à¤\97रà¥\80 à¤¬à¤¦à¤²à¤¾à¤µ à¤\95à¥\87 à¤¦à¥\87à¤\96ावà¥\87 à¤\96ातिर à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤\95à¥\87 à¤¬िस्तारित करीं",
+       "tog-usenewrc": "तà¥\81रà¤\82त à¤­à¤\87ल à¤¬à¤¦à¤²à¤¾à¤µ à¤®à¥\87à¤\82 à¤\86 à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤­à¤\87ल à¤¬à¤¦à¤²à¤¾à¤µ à¤¸à¤­ à¤\95à¥\87 à¤ªà¤¨à¥\8dना à¤\85नà¥\81सार à¤\9dà¥\81à¤\82ड में बांटी",
+       "tog-numberheadings": "हà¥\87डिà¤\82à¤\97 à¤\95à¥\87 à¤\91à¤\9fà¥\8b-नà¤\82बरिà¤\82à¤\97",
+       "tog-showtoolbar": "समà¥\8dपादन à¤\94à¤\9cारपà¤\9fà¥\8dà¤\9fà¥\80 à¤\95à¥\87 à¤¦à¥\87खावल जाव",
+       "tog-editondblclick": "दà¥\81à¤\87 à¤\95à¥\8dलिà¤\95 à¤ªà¤° à¤ªà¤¨à¥\8dना à¤¸à¤­ à¤\95à¥\87 संपादन करीं",
+       "tog-editsectiononrightclick": "à¤\96à¤\82ड à¤\95à¥\80 à¤¹à¥\87डिà¤\82à¤\97 à¤ªà¤° à¤¦à¤¾à¤¯à¤¾à¤\81 à¤\95à¥\8dलिà¤\95 à¤\95à¤\87 à¤\95à¥\87 à¤\96à¤\82ड à¤\95à¥\87 सम्पादित करीं",
+       "tog-watchcreations": "हमार à¤¬à¤¨à¤¾à¤µà¤² à¤ªà¤¨à¥\8dना à¤\86 à¤¹à¤®à¤¾à¤° à¤\85पलà¥\8bड à¤\95à¤\87ल à¤«à¤¾à¤\87ल à¤¸à¤­ à¤\95à¥\87 à¤¹à¤®à¤°à¥\80 à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़ à¤¦à¤¿à¤¹à¤² à¤\9cाव",
+       "tog-watchdefault": "हम जौना पन्ना आ फाइलन के संपादित करीं उनहन के हमरी धियानसूची में जोड़ दिहल जाव",
+       "tog-watchmoves": "हमरा à¤¦à¥\8dवारा à¤¸à¥\8dथानाà¤\82तरित à¤ªà¤¨à¥\8dना à¤\86 à¤«à¤¾à¤\87लन à¤\95à¥\87 à¤¹à¤®à¤°à¤¾ à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़ à¤¦à¤¿à¤¹à¤² à¤\9cाव",
+       "tog-watchdeletion": "हमरा à¤¦à¥\8dवारा à¤¹à¤\9fावल à¤ªà¤¨à¥\8dना à¤\86 à¤«à¤¾à¤\87ल à¤¸à¤­ à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़ à¤¦à¤¿à¤¹à¤² à¤\9cाव",
+       "tog-watchrollback": "हमरा à¤¦à¥\8dवारा à¤°à¥\8bलबà¥\88à¤\95 à¤\95à¤\87ल à¤\97à¤\87ल à¤ªà¤¨à¥\8dना à¤¸à¤­ à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़ à¤¦à¤¿à¤¹à¤² à¤\9cाव",
+       "tog-minordefault": "डिफालà¥\8dà¤\9f à¤°à¥\82प à¤¸à¥\87 à¤¸à¤\97रà¥\80 à¤¸à¤\82पादन à¤\95à¥\81ल à¤\95à¥\87 à¤\9bà¥\8bà¤\9f à¤¸à¤\82पादन à¤\95à¥\80 à¤°à¥\81प à¤®à¥\87à¤\82 à¤\9aिनà¥\8dहित à¤\95à¤\87ल à¤\9cाव",
+       "tog-previewontop": "नमà¥\82ना (preview) à¤¸à¤\82पादन à¤¬à¤\95à¥\8dसा à¤¸à¥\87 à¤ªà¤¹à¤¿à¤²à¥\87 à¤¦à¥\87à¤\96ावल à¤\9cाय",
+       "tog-previewonfirst": "पहिला à¤¸à¤\82पादन à¤ªà¤° à¤¨à¤®à¥\82ना à¤¦à¥\87à¤\96ावल à¤\9cाय",
+       "tog-enotifwatchlistpages": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¦à¤°à¥\8dà¤\9c à¤\95à¥\8cनà¥\8b à¤­à¥\80 à¤ªà¤¨à¥\8dना à¤¯à¤¾ à¤«à¤¾à¤\87ल à¤®à¥\87à¤\82 à¤¬à¤¦à¤²à¤¾à¤µ होखला पर हमके ई-मेल करल जाव",
+       "tog-enotifusertalkpages": "यदि हमार वार्तालाप पन्ना पर कौनो परिवर्तन होखे त हमके ई-मेल करल जाव",
+       "tog-enotifminoredits": "पनà¥\8dना à¤\86 à¤«à¤¾à¤\87ल à¤ªà¤° à¤\9bà¥\8bà¤\9fà¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¥\8bà¤\96à¥\87 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤\88-मेल करल जाव",
+       "tog-enotifrevealaddr": "अधिसूचना ई-मेल में हमार ई-मेल पता देखावल जाव",
+       "tog-shownumberswatching": "धियान रखे वालन सदस्यन के देखावल जाव",
        "tog-oldsig": "वर्तमान दसखत",
-       "tog-fancysig": "दसà¤\96त à¤\95à¥\87 à¤µà¤¿à¤\95à¥\80 à¤ªà¤¾à¤  à¤\95à¥\87 à¤°à¥\81प à¤®à¥\87à¤\82 à¤\89पयà¥\8bà¤\97 à¤\95रà¥\80à¤\82 (बिना à¤¸à¥\8dवà¤\9aालित कड़ी के)",
-       "tog-uselivepreview": "लाà¤\87व à¤ªà¥\81रà¥\8dवालà¥\8bà¤\95न के प्रयोग करीं",
-       "tog-forceeditsummary": "यदि à¤¸à¤\82पादन à¤¸à¤¾à¤°à¤¾à¤\82श à¤¨à¤¾ à¤¦à¤¿à¤¹à¤² à¤¹à¥\8bà¤\96à¥\87 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤¸à¥\82à¤\9aित à¤\95रब",
+       "tog-fancysig": "दसà¤\96त à¤\95à¥\87 à¤µà¤¿à¤\95à¥\80 à¤ªà¤¾à¤  à¤\95à¥\87 à¤°à¥\81प à¤®à¥\87à¤\82 à¤\89पयà¥\8bà¤\97 à¤\95रà¥\80à¤\82 (बिना à¤\91à¤\9fà¥\8bमà¥\87à¤\9fिà¤\95 कड़ी के)",
+       "tog-uselivepreview": "लà¤\97ातार à¤\9aालà¥\82 à¤¨à¤®à¥\82ना à¤¦à¥\87à¤\96ावल (preview) के प्रयोग करीं",
+       "tog-forceeditsummary": "यदि à¤¸à¤\82पादन à¤¸à¤¾à¤°à¤¾à¤\82श à¤¨à¤¾ à¤¦à¤¿à¤¹à¤² à¤¹à¥\8bà¤\96à¥\87 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤¸à¥\82à¤\9aित à¤\95à¤\87ल à¤\9cाय",
        "tog-watchlisthideown": "हमरी धियानसूची से हमार खुद के संपादन छिपाईं",
-       "tog-watchlisthidebots": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤¬à¥\8bà¤\9f à¤¦à¥\8dवारा à¤\95रल à¤\97à¤\87ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन के छिपाईं",
-       "tog-watchlisthideminor": "हमार à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤\9bà¥\8bà¤\9f à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95à¥\87 à¤\9bà¥\81पाà¤\88à¤\82",
-       "tog-watchlisthideliu": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤²à¥\89à¤\97-à¤\87न à¤­à¤\87ल à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤¸à¤\82पादन à¤®à¤¤ à¤¦à¥\87à¤\96ाà¤\88à¤\82",
-       "tog-watchlisthideanons": "à¤\86à¤\87॰पà¥\80॰ à¤¸à¤¦à¤¸à¥\8dयन à¤¦à¥\8dवारा à¤\95रल à¤\97à¤\87ल à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¨ à¤¦à¤¿à¤\96ाà¤\88à¤\82",
-       "tog-watchlisthidepatrolled": "à¤\9cाà¤\81à¤\9aल à¤\97à¤\87ल à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¨ à¤¦à¤¿à¤\96ाà¤\88à¤\82",
-       "tog-ccmeonemails": "हमरा à¤¦à¥\8dवारा à¤\85नà¥\8dय à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤­à¥\87à¤\9cल à¤\97à¤\87ल à¤\88मà¥\87ल à¤\95à¥\87 à¤\95à¥\89पà¥\80 à¤¹à¤®à¤°à¥\8b à¤\95à¥\87 à¤­à¥\87à¤\9cà¥\80à¤\82",
-       "tog-diffonly": "à¤\85वतरण à¤\95à¥\81ल à¤®à¥\87à¤\82 à¤\85नà¥\8dतर à¤¦à¥\87à¤\96ावत à¤¸à¤®à¤¯ à¤ªà¥\81रान à¤\85वतरण à¤¨ à¤¦à¤¿à¤\96ाà¤\88à¤\82",
-       "tog-showhiddencats": "à¤\9bà¥\81पल à¤¶à¥\8dरà¥\87णियन à¤\95à¥\87 à¤­à¥\80 à¤¦à¤¿à¤\96ाà¤\88à¤\82",
-       "tog-norollbackdiff": "सà¤\82पादन à¤µà¤¾à¤ªà¤¸ à¤²à¥\87ला à¤\95à¥\87 à¤¬à¤¾à¤¦ à¤\85नà¥\8dतर à¤¨ à¤¦à¤¿à¤\96ाà¤\88à¤\82",
-       "tog-useeditwarning": "यदि à¤\95à¤\89नà¥\8b à¤ªà¤¨à¥\8dना à¤ªà¤° à¤¸à¤\82पादन à¤\95रत à¤\98रà¥\80 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95à¥\87 à¤¬à¤¿à¤¨à¤¾ à¤¸à¥\81रà¤\95à¥\8dषित à¤\95à¤\87लà¥\87 à¤\9bà¥\8bड़ à¤¦à¤¿à¤\82 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤\96बर à¤\95à¤\87ल à¤\9cाय",
-       "tog-prefershttps": "à¤\9cब à¤\96ाता à¤®à¥\87à¤\82 à¤ªà¥\8dरवà¥\87श करीं त हमेशा सुरक्षित कनेक्शन के प्रयोग कइल जाय",
+       "tog-watchlisthidebots": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤¬à¥\89à¤\9f à¤¦à¥\8dवारा à¤\95रल à¤\97à¤\87ल à¤¬à¤¦à¤²à¤¾à¤µ के छिपाईं",
+       "tog-watchlisthideminor": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤\9bà¥\8bà¤\9f à¤¬à¤¦à¤²à¤¾à¤µ à¤\95à¥\87 à¤\9bिपावल à¤\9cाव",
+       "tog-watchlisthideliu": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤²à¥\89à¤\97-à¤\87न à¤­à¤\87ल à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤¸à¤\82पादन à¤\9bिपावल à¤\9cाय",
+       "tog-watchlisthideanons": "à¤\86à¤\87॰पà¥\80॰ à¤¸à¤¦à¤¸à¥\8dयन à¤¦à¥\8dवारा à¤\95रल à¤\97à¤\87ल à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9bिपावल à¤\9cाय",
+       "tog-watchlisthidepatrolled": "à¤\9cाà¤\81à¤\9aल à¤\97à¤\87ल à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9bिपावल à¤\9cाय",
+       "tog-ccmeonemails": "हमरा à¤¦à¥\8dवारा à¤\85नà¥\8dय à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤­à¥\87à¤\9cल à¤\97à¤\87ल à¤\88मà¥\87ल à¤\95à¥\87 à¤\95à¥\89पà¥\80 à¤¹à¤®à¤°à¥\8b à¤\95à¥\87 à¤­à¥\87à¤\9cल à¤\9cाय",
+       "tog-diffonly": "à¤\85नà¥\8dतर à¤¦à¥\87à¤\96ावत à¤¸à¤®à¤¯ à¤\85à¤\82तर à¤\95à¥\80 à¤¨à¥\80à¤\9aà¥\87 à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤®à¤¤ à¤¦à¥\87à¤\96ावल à¤\9cाव।",
+       "tog-showhiddencats": "à¤\9bिपल à¤¶à¥\8dरà¥\87णियन à¤\95à¥\87 à¤­à¥\80 à¤¦à¥\87à¤\96ावल à¤\9cाय",
+       "tog-norollbackdiff": "सà¤\82पादन à¤°à¥\8bलबà¥\88à¤\95 à¤\95à¤\87ला à¤\95à¥\87 à¤¬à¤¾à¤¦ à¤\85नà¥\8dतर à¤®à¤¤ à¤¦à¥\87à¤\96ावल à¤\9cाव",
+       "tog-useeditwarning": "à¤\9cà¥\8b à¤¹à¤® à¤\95à¥\8cनà¥\8bà¤\82 à¤ªà¤¨à¥\8dना à¤ªà¤° à¤¸à¤\82पादन à¤\95रत à¤\98रà¥\80 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95à¥\87 à¤¬à¤¿à¤¨à¤¾ à¤¸à¤¹à¥\87à¤\9cलà¥\87 à¤\9bà¥\8bड़ à¤¦à¥\87à¤\88à¤\82 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤\96बर à¤\95à¤\87ल à¤\9cाव",
+       "tog-prefershttps": "à¤\9cब à¤\96ाता à¤®à¥\87à¤\82 à¤²à¥\89à¤\97िन करीं त हमेशा सुरक्षित कनेक्शन के प्रयोग कइल जाय",
        "underline-always": "हमेशा",
        "underline-never": "कभी ना",
-       "underline-default": "जिल्द या ब्राउजर डिफॉल्ट",
+       "underline-default": "जिल्द (स्किन) या ब्राउसर डिफॉल्ट",
        "editfont-style": "सम्पादन क्षेत्र के फॉन्ट स्टाइल:",
        "editfont-default": "ब्राउजर डिफाल्ट",
        "editfont-monospace": "मोनोस्पेस्ड फोंट",
        "category-media-header": "\"$1\" श्रेणी में मीडिया",
        "category-empty": "''इ श्रेणी में इ समय कउनो पन्ना या मीडिया नइखे।''",
        "hidden-categories": "{{PLURAL:$1|छिपावल गइल श्रेणी|छिपावल गइल श्रेणी सब}}",
-       "hidden-category-category": "à¤\9bà¥\81पावल गइल श्रेणी",
+       "hidden-category-category": "à¤\9bिपावल गइल श्रेणी",
        "category-subcat-count": "{{PLURAL:$2|ए श्रेणी में खाली निम्नलिखित श्रेणी बा|ए श्रेणी में कुल $2 में से {{PLURAL:$1|उपश्रेणी|$1 उपश्रेणी सब}} बा।}}",
        "category-subcat-count-limited": "ए श्रेणी में निम्नलिखित {{PLURAL:$1|उपश्रेणी बा|$1 उपश्रेणी बाड़ीं।}}",
        "category-article-count": "{{PLURAL:$2|ए श्रेणी में मात्र निम्नलिखित पन्न बा।|इ श्रेणी में निम्नलिखित {{PLURAL:$1|पन्ना बा|$1 पन्ना बाड़े}}, कुल पन्ना $2}}",
        "category-file-count": "{{PLURAL:$2|ए श्रेणी में खाली निम्नलिखित फइल बा।|ए श्रेणी में निम्नलिखित कुल फ़ाइलं $2 {{PLURAL:$1|फाइल|$1फाइलं}} बाड़े}}",
        "category-file-count-limited": "वर्तमान में निम्नलिखित {{PLURAL:$1|पन्ना|$1 पन्नां}} इ श्रेणीं में बाड़े।",
        "listingcontinuesabbrev": "जारी...",
-       "index-category": "सà¥\82à¤\9aà¥\80बदà¥\8dध à¤ªà¥\83षà¥\8dठ",
+       "index-category": "सà¥\82à¤\9aà¥\80बदà¥\8dध à¤ªà¤¨à¥\8dना",
        "noindex-category": "बिना सूचीबद्ध पन्ना",
-       "broken-file-category": "à¤\9fà¥\82à¤\9fल à¤«à¤¼à¤¾à¤\87ल à¤\95ड़ियन à¤µà¤¾à¤²à¤¾ à¤ªà¤¨à¥\8dना",
+       "broken-file-category": "टूटल फाइल कड़ियन वाला पन्ना",
        "about": "बारे में",
        "article": "सामग्री पन्ना",
        "newwindow": "(नया विंडो में खोलीं)",
        "qbpageoptions": "ई पन्ना",
        "qbmyoptions": "हमार पन्ना",
        "faq": "साधारण सवाल",
-       "faqpage": "Project:साधारण सवाल",
-       "actions": "à¤\95à¥\8dरिया",
-       "namespaces": "नामस्थान",
+       "faqpage": "Project:à¤\85à¤\95à¥\8dसर à¤ªà¥\82à¤\9bल à¤\9cाà¤\8f à¤µà¤¾à¤²à¤¾ सवाल",
+       "actions": "à¤\95ारà¥\8dयवाहà¥\80",
+       "namespaces": "नाà¤\81वस्थान",
        "variants": "अउरी प्रकार",
        "navigation-heading": "नेविगेशन मेनु",
-       "errorpagetitle": "तà¥\8dरà¥\81à¤\9fी",
-       "returnto": "जाईं $1 पर।",
+       "errorpagetitle": "à¤\96राबी",
+       "returnto": "$1 पर लौट जाईं।",
        "tagline": "भोजपुरी {{SITENAME}} से",
        "help": "मदद",
        "search": "खोज",
        "personaltools": "व्यक्तिगत औजार",
        "articlepage": "सामग्री पन्ना देखीं",
        "talk": "बात-चीत",
-       "views": "राय",
+       "views": "à¤\95à¤\87सन à¤²à¤\89à¤\95à¥\80?",
        "toolbox": "औजार",
        "userpage": "प्रयोगकर्ता पन्ना देखीं",
        "projectpage": "परियोजना पन्ना देखीं",
        "imagepage": "फाइल पन्ना देखीं",
        "mediawikipage": "सन्देश पन्ना देखीं",
-       "templatepage": "à¤\96ाà¤\81à¤\9aा पन्ना देखीं",
+       "templatepage": "à¤\9fà¥\87मà¥\8dपलà¥\87à¤\9f पन्ना देखीं",
        "viewhelppage": "मदद पन्ना देखीं",
        "categorypage": "श्रेणी पन्ना देखीं",
        "viewtalkpage": "बात-चीत देखीं",
        "otherlanguages": "दुसरी भाषा में",
-       "redirectedfrom": "($1 à¤¦à¥\8dवारा अनुप्रेषित)",
-       "redirectpagesub": "पà¥\81न: à¤¨à¤¿à¤°à¥\8dदà¥\87शित पन्ना",
+       "redirectedfrom": "($1 à¤¸à¥\87 अनुप्रेषित)",
+       "redirectpagesub": "à¤\85नà¥\81पà¥\8dरà¥\87षण पन्ना",
        "redirectto": "अनुप्रेषित:",
        "lastmodifiedat": "$1 के $2 पर ए पन्ना पर अन्तिम बेर बदलाव भइल।",
        "viewcount": "ई पन्ना {{PLURAL:$1|एक|$1}} बार देखल गईल बा।",
        "page-rss-feed": "\"$1\" आर एस एस फिड",
        "page-atom-feed": "\"$1\" एटम फीड",
        "red-link-title": "$1 (पन्ना मौजूद नइखे)।",
-       "sort-descending": "à¤\85वरà¥\8bहà¥\80 क्रम में",
-       "sort-ascending": "à¤\86रà¥\8bहà¥\80 क्रम में",
+       "sort-descending": "à¤\89तरत क्रम में",
+       "sort-ascending": "à¤\9aढ़त क्रम में",
        "nstab-main": "पन्ना",
        "nstab-user": "सदस्य पन्ना",
-       "nstab-media": "मिडà¥\80या पन्ना",
+       "nstab-media": "मà¥\80डिया पन्ना",
        "nstab-special": "विशेष पन्ना",
        "nstab-project": "प्रोजेक्ट पन्ना",
        "nstab-image": "फाइल",
        "no-null-revision": "पन्ना \"$1\" खातिर नया अशक्त संशोधन ना बन सकल",
        "badtitle": "खराब टाइटिल",
        "badtitletext": "रउआ द्वारा अनुरोधित शीर्षक अयोग्य, ख़ाली या गलत जुड़ल अंतर-भाषीय या अंतर-विकि शीर्षक बा।\nए में एक या एक से ढेर अइसन कॅरेक्टर हो सकत बा जवन शीर्षक में प्रयोग नइखे कइल जा सकत।",
+       "title-invalid-empty": "माँगल जा रहल पन्ना टाइटिल या त खाली बा या फिर खाली कौनों नाँवस्थान के नाँव भर दिहल गइल बाटे।",
+       "title-invalid-utf8": "माँगल जा रहल पन्ना टाइटिल में अइसन UTF-8 सीक्वेंस बा जेवन मान्य नइखे।",
+       "title-invalid-interwiki": "माँगल जा रहल पन्ना टाइटिल में इंटरविकि कड़ी बा जेवन टाइटिल में ना प्रयोग कइल जा सकत बा।",
+       "title-invalid-talk-namespace": "माँगल जा रहल पन्ना टाइटिल एगो अइसन वार्ता पन्ना के रेफर करत बा जेवना के होखल संभव नइखे।",
+       "title-invalid-characters": "माँगल जा रहल पन्ना टाइटिल में अमान्य अक्षर बा:\"$1\"।",
+       "title-invalid-relative": "टाइटिल के पाथ रिलेटिव (सापेक्षिक) बा। सापेक्षिक पन्ना टाइटिल (./, ../) मान्य नइखे, काहें से कि ई उपयोग करे वाला की ब्राउसर द्वारा लिहल जात समय अक्सरहा पहुँच से बाहर रहि जाला।",
+       "title-invalid-magic-tilde": "माँगल जा रहल पन्ना टाइटिल में अमान्य जादुई टिल्ड सीक्वेंस (<nowiki>~~~</nowiki>) बाटे।",
+       "title-invalid-too-long": "माँगल जा रहल पन्ना टाइटिल बहुत ढेर लंबा बा। ई UTF-8 की एनकोडिंग में $1 {{PLURAL:$1|बाइट|बाइट्स}} से ढेर ना होखे के चाहीं।",
+       "title-invalid-leading-colon": "माँगल जा रहल पन्ना टाइटिल में सुरुआते में अमान्य कोलन (:) बाटे।",
        "perfcached": "नीचे दिहल गइल डेटा कैशे मेमोरी से लिहल गइल बा, अतः हो सकता बा कि इ के पूर्ण अद्यतन ना भइल होखे। कैशे मेमोरी में अधिकतम {{PLURAL:$1|एक  नतीजा|$1 नतीजं}} उपलब्ध बाड़े।",
        "perfcachedts": "नीचे दिहल गइल डेटा कैशे मेमोरी से बा, आ एकर अंतिम अपडेट $1 के भइल रहल। कैश मेमोरी में अधिकतम {{PLURAL:$4|एक  नतीजा|$4 नतीजां}} उपलब्ध बा।",
        "querypage-no-updates": "इ पृष्ठ के अपडेट करल अयोग्य बा। अभी अहिजा के डाटा के ताज़ा नइखे करल जा सकत।",
        "actionthrottled": "कार्य समाप्त कर दिहल गइल बा",
        "actionthrottledtext": "स्पैम के रोकथाम खातिर, इ क्रिया एतना कम समय में एक सीमा से अधिक बार करे के मना बा, आ रउआ इ सीमा के पार कर चुकल बानी।\nकृपया कुछ समय बाद पुन: यत्न करीं।",
        "protectedpagetext": "इ पन्ना संपादन आ अन्य कार्यं से बचाव खातिर सुरक्षित कर दिहल गइल बा।",
-       "viewsourcetext": "रउआ एह पन्ना के स्रोत देख सकत बानी आ एकर नकल उतार सकत बानी:",
-       "viewyourtext": "रà¤\89à¤\86 à¤\87 à¤ªà¤¨à¥\8dना à¤®à¥\87à¤\82 ''à¤\86पन à¤¸à¤®à¥\8dपादन'' à¤\95à¥\87 à¤¸à¥\8dरà¥\8bत à¤¦à¥\87à¤\96 à¤¸à¤\95त à¤¬à¤¾à¤¨à¥\80 à¤\86 à¤\93à¤\95र à¤¨à¤\95ल à¤\89तार à¤¸à¤\95त à¤¬à¤¾à¤¨à¥\80:",
+       "viewsourcetext": "रउआ एह पन्ना के स्रोत देख सकत बानी आ एकर नकल उतार सकत बानी:",
+       "viewyourtext": "à¤\8fह à¤ªà¤¨à¥\8dना à¤ªà¤° <strong>राà¤\89र à¤\86पन à¤¸à¤\82पादन à¤¸à¤¬</strong>à¤\95à¥\87 à¤¸à¥\8dरà¥\8bत à¤¦à¥\87à¤\96 à¤¸à¤\95त à¤¬à¤¾à¤¨à¥\80 à¤\86 à¤\93à¤\95र à¤¨à¤\95ल à¤²à¥\87 à¤¸à¤\95त à¤¬à¤¾à¤¨à¥\80।",
        "protectedinterface": "इ पन्ना इ विकी के सॉफ़्टवेयर के इंटरफ़ेस पाठ्य के देवेला, आ इ के गलत प्रयोग से बचावे खातिर सुरक्षित कर दिहल गइल बा।\nसभन विकियन खातिर अनुवाद जोड़े या बदले खातिर कृपया मीडियाविकि के क्षेत्रीयकरण प्रकल्प [//translatewiki.net/ translatewiki.net] के प्रयोग करीं।",
        "editinginterface": "<strong>चेतावनी:</strong> आप एगो अइसन पन्ना के बदल बदल रहल बानी जवन सॉफ़्टवेयर के इंटरफ़ेस पाठ प्रदान करेला। इ पृष्ठ के बदले से अन्य सदस्यवन के प्रदर्शित इंटरफ़ेस के शक्लोसूरत में बदलाव आई।",
        "translateinterface": "सभन विकियन खातिर अनुवाद जोड़े या बदले खातिर मीडियाविकि क्षेत्रीयकरण परियोजना [//translatewiki.net/ translatewiki.net] के प्रयोग करीं।",
-       "cascadeprotected": "à¤\87 à¤ªà¤¨à¥\8dना à¤ªà¤° à¤¸à¤®à¥\8dपादन à¤\95रà¥\87 à¤\95à¥\87 à¤\85धिà¤\95ार à¤\96तà¥\8dम à¤\95र à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¬à¤¾ à¤\95ाहà¥\87 à¤\95ि à¤\87 à¤¨à¤¿à¤®à¥\8dन à¤®à¥\87à¤\82 à¤¶à¤¾à¤®à¤¿à¤² à¤¬à¤¾ {{PLURAL:$1|पनà¥\8dना, à¤\9cà¤\89न|पनà¥\8dनाà¤\82, à¤\9cà¤\89न}} \"वà¥\8dयापà¤\95\" à¤µà¤¿à¤\95लà¥\8dप à¤\95à¥\87 à¤\9aालà¥\82 à¤\95à¤\87ला à¤\95à¥\87 à¤¸à¤¾à¤¥ à¤¸à¥\81रà¤\95à¥\8dषित à¤\95र à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¬à¤¾:\n$2",
+       "cascadeprotected": "à¤\8f à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¸à¤\82पादन à¤\95à¤\87ल à¤¸à¥\81रà¤\95à¥\8dषित à¤\95 à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¬à¤¾ à¤\95ाहà¥\87à¤\82 à¤\95ि à¤\88 {{PLURAL:$1|पनà¥\8dना à¤®à¥\87à¤\82, à¤\9cà¥\8cना à¤\95à¥\87|पनà¥\8dना à¤¸à¤¬ à¤®à¥\87à¤\82, à¤\9cिनà¥\8dहन à¤\95à¥\87}} \"à¤\95à¥\88सà¥\8dà¤\95à¥\87डिà¤\82à¤\97\" (बिसà¥\8dतारित) à¤¸à¥\81रà¤\95à¥\8dषा à¤\9aालà¥\82 à¤\95 à¤\95à¥\87 à¤¸à¥\81रà¤\95à¥\8dषित à¤\95à¤\87ल à¤\97à¤\87ल à¤¬à¤¾, à¤®à¥\87à¤\82 à¤¸à¤®à¤¾à¤\87ल à¤¬à¤¾à¤\9fà¥\87:\n$2",
        "namespaceprotected": "रउआ के '''$1''' नामस्थान के पन्नं में सम्पादन करे के अधिकार नइखे दिहल गइल।",
        "customcssprotected": "रउआ के इ CSS पन्ना के संपादित करे के अनुमति नइखे, काहे कि इ में अन्य सदस्यं के व्यक्तिगत सेटिंग्स समाविष्ट बा।",
        "customjsprotected": "रउआ इ जावास्क्रिप्ट पन्ना के संपादित करे के अनुमति नइखे, काहे कि इ में अन्य सदस्यं के व्यक्तिगत सेटिंग्स समाविष्ट बा।",
        "createacct-benefit-body2": "{{PLURAL:$1|पन्ना}}",
        "createacct-benefit-body3": "हाल के {{PLURAL:$1|योगदानकर्ता}}",
        "badretype": "रउआ जौन गुप्त शब्द डालत बानी उ नईखे मेल खात।",
+       "usernameinprogress": "एही सदस्यनाँव खातिर खाता खोले के काम पहिलहीं चालू बा।\nइंतजार करीं।",
        "userexists": "लिखल गईल सदस्य नाम पहिले से प्रयोग में बा। कृपया कौनो दोसर नाम चुनीं।",
        "loginerror": "खाता प्रवेश में त्रुटि",
        "createacct-error": "खाता निर्माण त्रुटि",
        "passwordreset-emailtitle": "{{SITENAME}} पर खाता विवरण",
        "passwordreset-emailtext-ip": "केहु (शायद रउए, $1 आइ॰पी पता से) {{SITENAME}} ($4) पर आपन {{PLURAL:$3|गुप्तशब्द}} के रीसेट करे के अनुरोध कईले बानी। इ ई-मेल पता से निम्न {{PLURAL:$3|खाता जुड़ल बा}}:\n\n$2\n\n{{PLURAL:$3|इ}} अस्थायी गुप्तशब्द {{PLURAL:$5|एक दिन|$5 दिन}} के बाद काम ना करी। रउआ खाता में प्रवेश करके एगो नया गुप्तशब्द अभी चुन लेवे के चाहीं। यदि इ अनुरोध केहु अउर कइले बा, या फिर रउआ आपन मूल गुप्तशब्द याद आ गईल बा, अउर आप {{PLURAL:$3|आपन}} गुप्तशब्द नइखी बदले के चाहत त, रउआ इ संदेश के अनदेखा कर के आपन पुरानका गुप्तशब्द के प्रयोग जारी रख सकत बानी।",
        "passwordreset-emailtext-user": "{{SITENAME}} ($4) पर सदस्य $1 राउर {{PLURAL:$3|खाता}} के गुप्तशब्द के पुनर्स्थापित करे के अनुरोध कइले बानी। इ ई-मेल पता से निम्न {{PLURAL:$3|खाता जुड़ल बा}}:\n\n$2\n\n{{PLURAL:$3|इ}} अस्थायी गुप्तशब्द {{PLURAL:$5|एक दिन|$5 दिन}} के बाद काम ना करी।\nरउआ खाता में प्रवेश करके एगो नया गुप्तशब्द अभीये चुन लेवे के चाहीं। यदि इ अनुरोध केहु अउर कइले बा, या फिर रउआ आपन मूल गुप्तशब्द याद आ गईल बा, अउर रउआ {{PLURAL:$3|आपन}} गुप्तशब्द नईखीं बदले के चाहत त, रउआ इ संदेश के अनदेखा कर के आपन पुरनका गुप्तशब्द के प्रयोग जारी रख सकत बानीं।",
-       "passwordreset-emailelement": "सदस्यनाम: $1\nअस्थायी गुप्तशब्द: $2",
+       "passwordreset-emailelement": "सदस्यनाम: \n$1\n\nअस्थायी गुप्तशब्द: \n$2",
        "passwordreset-emailsent": "एगो गुप्तशब्द रिसेट ई-मेल भेजल जा चुकल बा।",
        "passwordreset-emailsent-capture": "नीचे दिखावल गईल गुप्तशब्द पुनर्स्थापना ई-मेल भेज दिहल गईल बा।",
        "passwordreset-emailerror-capture": "नीचे दिखावल गईल गुप्तशब्द पुनर्स्थापना ई-मेल उत्पन्न करल गईल रहल, परंतु उ के {{GENDER:$2|सदस्य}} के भेजे के क्रिया असफल रहल।\nत्रुटि: $1",
        "watchthis": "धियानसूची में डालीं",
        "savearticle": "पन्ना सहेजीं",
        "preview": "पूर्वावलोकन",
-       "showpreview": "नमà¥\82ना à¤¦à¥\87à¤\96ाà¤\88ं",
-       "showdiff": "परिवरà¥\8dतन à¤¦à¥\87à¤\96ाà¤\88ं",
+       "showpreview": "à¤\9dलà¤\95 à¤¦à¥\87à¤\96à¥\80ं",
+       "showdiff": "बदलाव à¤¦à¥\87à¤\96à¥\80ं",
        "blankarticle": "<strong>चेतावनी:</strong> आप एगो खाली पन्ना के बनावे जा रहल बानी।\nयदि आप \"{{int:savearticle}}\" के फेर से दबायेब त पन्ना बिना कउनो सामग्री के बन जाई।",
        "anoneditwarning": "<strong>चेतावनी:</strong> रउआ आपन खाता में प्रवेश नइखीं कइले। अगर रउआ कौनों बदलाव करत बानी त राउर आईपी पता दर्ज होई। अगर रउआ <strong>[$1 लॉग इन]</strong> या <strong>[$2 नया खाता बनाइब]</strong> त, अउरी सुबिधा सब की संघे राउर संपादन के श्रेय भी राउर सदस्य-नाँव से जुड़ जाई!",
        "anonpreviewwarning": "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"",
        "userpage-userdoesnotexist-view": "सदस्य खाता \"$1\" पंजीकृत नईखे भईल।",
        "blocked-notice-logextract": "ई प्रयोगकर्ता के ई समय निष्क्रीय कर दिहल गईल बा।\nनविनतम नष्ट लौग प्रविष्टी उद्धरण खातिर निचे दिहल बा:",
        "clearyourcache": "'''ध्यान दिं:'''  पन्ना सुरक्षित कइला के बाद बदलाव देखे खातिर आपके आपन ब्राउज़र के कैश खाली करे के पड़ सकत बा।\n* '''फ़ायरफ़ॉक्स / सफ़ारी:''' ''Reload'' (रीलोड) दबाते समय ''Shift'' (शिफ़्ट) दबा के रखीं, या फिर ''Ctrl-F5'' (कंट्रोल-F5) या ''Ctrl-R'' (कंट्रोल-R) दबाईं (मैक पर ''⌘-R'')\n* '''गूगल क्रोम:''' ''Ctrl-Shift-R'' (कंट्रोल-शिफ़्ट-R) दबाईं (मैक पर ''⌘-Shift-R'')\n* '''इन्टर्नेट एक्सप्लोरर:''' ''Ctrl'' (कंट्रोल) दबाके ''Refresh'' (रिफ़्रेश) करीं या ''Ctrl-F5'' (कंट्रोल-F5) दबाईं\n* '''ऑपेरा:''' ''Tools → Preferences'' (उपकरण → पसन्द) में कैश साफ़ करीं",
+       "usercssyoucanpreview": "<strong>टिप:</strong> आपन नया CSS के टेस्ट करे खातिर सहेजे से पहिले \"{{int:showpreview}}\" बटन के प्रयोग करीं।",
+       "userjsyoucanpreview": "<strong>टिप:</strong> आपन नया जावास्क्रिप्ट के टेस्ट करे खातिर सहेजे से पहिले \"{{int:showpreview}}\" बटन के प्रयोग करीं।",
+       "usercsspreview": "<strong>याद रहे की आप अपनी सदस्य CSS के खाली नमूना भर देखत बानी।\nई अबहिन ले सहेजल ना गइल बाटे।</strong>",
+       "userjspreview": "<strong>याद रहे की आप अपनी सदस्य जावास्क्रिप्ट के खाली टेस्ट करत बानी/नमूना देखत बानी।\nई अबहिन सहेजल ना गइल बाटे।</strong>",
+       "sitecsspreview": "<strong>याद रहे की आप ए CSS क खाली नमूना देखत बानी।\nई अबहिन ले सहेजल ना गइल बा!</strong>",
+       "sitejspreview": "<strong>याद रहे की आप ए जावास्क्रिप्ट कोड क खाली नमूना देखत बानी।\nई अबहिन ले सहेजल ना गइल बा!</strong>",
+       "userinvalidcssjstitle": "<strong>चेतावनी:</strong> कौनों skin \"$1\"नइखे।\nCustom .css आ .js पन्ना सभ छोटका अक्षर में टाइटिल इस्तेमाल करे लें जइसे की, {{ns:user}}:Foo/vector.css ना की {{ns:user}}:Foo/Vector.css।",
        "updated": "(अपडेट करल गईल)",
        "note": "'''सूचना:'''",
        "previewnote": "'''याद रखीं, इ एगो झलक मात्र हो।'''\nराउर बदलाव अभी तक सुरक्षित नईखे करल गईल!",
        "continue-editing": "संपादन क्षेत्र में जाईं",
+       "previewconflict": "ई नमूना ई देखावत बा की अगर रउआँ ए संपादन बक्सा में मौजूद पाठ के सहेजब त ऊ कइसन देखाई पड़ी।",
+       "session_fail_preview": "<strong>माफ करीं! एह सत्र के आँकड़ा के गायब हो गइला की कारण आपके संपादन के प्रॉसेस करे में हमनी के असमर्थ बाणी।</strong>\nदोबारा से कोसिस करीं।\nअगर तबो काम ना होखे तब [[Special:UserLogout|लॉग आउट करीं]] आ दोबारा लॉग इन कइ के कोसिस करी।",
+       "session_fail_preview_html": "<strong>माफ करीं! सत्र आँकड़ा के गायब होखला की कारन आपके संपादन सहेजल नइखे जा सकत।</strong>\n\n<em>चूँकि, {{SITENAME}} में मूल HTML सक्षम कइल बाटे, जावास्क्रिप्ट हमला से बचाव की खातिर नमूना देखावे के छिपावल गइल बा।</em>\n\n<strong>अगर ई एगो वैध संपादन बाटे तब एक बेर फिर से कोसिस करीं।</strong>\nअगर तबो पर काम नइखे हो पावत त [[Special:UserLogout|लॉग आउट करीं]] आ दुबारा लॉगिन क के कोसिस करीं।",
+       "token_suffix_mismatch": "<strong>राउर संपादन रिजेक्ट कइल जात बा काहें से की राउर क्लायंट संपादन टोकन में विराम चीन्हा सब से गड़बड़ क दिहले बा।</strong>\nपन्ना के पाठ के तहस-नहस होखे से बचावे खाती ई संपादन रिजेक्ट कइल गइल बा।\nकबो-कबो अइसन एहू दसा में हो सकेला जब आप खराबी-युक्त वेबआधारित बेनाम प्रॉक्सी सर्वर के इस्तेमाल करत होखीं।",
+       "edit_form_incomplete": "<strong>संपादन के कुछ हिस्सा सर्वर ले ना पहुँच पावल ह; दोहरा के चेक करीं की राउर संपादन बदलल न होखे आ एक बेर फिर से सहेजे के कोसिस करीं।</strong>",
        "editing": "$1 संपादन",
        "creating": "$1 बनावे जा रहल बानी",
        "editingsection": "$1 संपादन (खंड)",
        "editingcomment": "$1 सम्पादन (नया अनुभाग)",
        "editconflict": "संपादन अंतर्विरोध: $1",
+       "explainconflict": "आपकी संपादन शुरू कइला की बाद से केहू अउरी ए पन्ना में बदलाव क चुकल बाटे।\nऊपर के पाठ हिस्सा में लेख की पाठ के वर्तमान स्थिति देखावल जात बा।\nराउर संपादन नीचे की पाठ हिस्सा में देखावल गइल बा।\nरउआँ के आपन बदलाव एह पहिले से मौजूद पाठ में मिलावे के परी।\n<strong>खाली</strong> ऊपर की पाठ हिस्सा में लउकत पाठ सहेजल जाई अगर आप \"{{int:savearticle}}\" बटन दबाइब।",
        "yourtext": "राउर पाठ्य",
        "storedversion": "सुरक्षित करल गईल संशोधन",
+       "nonunicodebrowser": "<strong>चेतावनी: राउर ब्राउसर युनिकोड समर्थ नइखे।</strong>\nपन्ना सभ के सुरक्षित संपादित करे के एगो तरीका सुझावल जात बा: गैर-ASCII अक्षर सभ संपादन बॉक्स में हेक्साडेसिमल कोड की रूप में देखावल जाई।",
+       "editingold": "<strong>चेतावनी: रउआँ ए पन्ना क एगो पुरान अवतरण के संपादन करत बानी।</strong>\nअगर आप एकरा के सहेज देइब, त एकरी बाद के सगरी बदलाव गायब हो जाई।",
        "yourdiff": "अंतर",
+       "copyrightwarning": "ई नोट कर लीं की {{SITENAME}} पर राउर सगरी योगदान $2 की तहत रिलीज कइल मानल जाई (ढेर जानकारी खातिर $1 देखल जाय)।\nअगर रउआँ ई नइखीं चाहत की राउर लिखल चीज के केहू दूसर बेकति बे मोह-छोह के संपादित क दे या कहीं भी बाँट दे तब अइसन चीज इहाँ मत डालीं।<br />\nरउआँ इहो सकारत बानी आ वादा करत बानी की ई चीज रउआँ खुद लिखले बानी, या फिर पब्लिक पहुँच में मौजूद या कौनों अइसने फ्री स्रोत से नकल कइले बानी।\n<strong>कौनों भी कॉपीराइट वाली चीज बिना परमीशन के इहाँ कब्बो मत डालीं!</strong>",
+       "copyrightwarning2": "ई नोट कर लीं कि {{SITENAME}} पर सगरी योगदान के दुसरा योगदानकर्ता लोगन द्वारा संपादित कइल जा सकेला, बदलल या हटावल जा सकेला।\nअगर आप ई नइखीं चाहत की राउर लिखल चीज के केहू भी बे-मोहछोह के संपादित क दे, तब ए के इहाँ मत डालीं।<br />\nरउआँ इहो वादा करत बानी की आप ई खुद लिखले बानी या फिर पब्लिक पहुँच में मौजूद या अइसने कौनों फ्री स्रोत से नकल कइले बानी (ढेर जानकारी खातिर $1 देखीं)।\n<strong>बिना परमीशन के कॉपीराइट वाली चीज इहाँ कब्बो मत डालीं!</strong>",
+       "editpage-cannot-use-custom-model": "ए पन्ना के सामग्री के मॉडल के ना बदलल जा सकत बा।",
+       "longpageerror": "<strong>खराबी: आप जवन पाठ लिख के दिहले बानी ऊ {{PLURAL:$1|एक किलोबाइट|$1 किलोबाइट्स}} के बाटे, जेवन अधिकतम सीमा {{PLURAL:$2|एक किलोबाइट|$2 किलोबाइट्स}} से ढेर बा।</strong>\nई सहेजल ना जा सकेला।",
+       "readonlywarning": "<strong>चेतावनी: डेटाबेस ए समय मरम्मत खातिर लॉक कइल गइल बा, आ एही कारण आप तुरंते एही समय आपन सम्पादन ना सहेज पाइब।</strong>\nरउआँ अपनी पाठ (text) के कौनों पाठ फाइल (text file) में बाद खातिर सहेज के रख लीं।\n\nजे एडमिनिस्ट्रेटर एकरा के लॉक कइले बा ऊ नीचे लिखल कारण दिहले बा: $1",
+       "protectedpagewarning": "<strong>चेतावनी: ई पन्ना सुरक्षित कइल गइल बा जेवना से कि एकरा के खाली प्रबंधक (Admin) विशेषाधिकार वाला सदस्य लोग संपादित क सकत बा।</strong>\nप्रसंग बूझे खातिर सबसे नया लॉग एंट्री नीचे दिहल जात बा:",
+       "semiprotectedpagewarning": "<strong>नोट:</strong> ई पन्ना सुरक्षित कइल गइल बा कि एकरा के खाली रजिस्टर्ड सदस्य लोग संपादित क सकत बा।\nसभसे नया लॉग एंट्री नीचे प्रसंग बतावे खातिर दिहल जात बा:",
+       "cascadeprotectedwarning": "<strong>चेतावनी:</strong> ई पन्ना सुरक्षित क दिहल गइल बा कि एकरा के खाली प्रबंधक (Admin) विशेषाधिकार वाला सदस्य लोग संपादित क सकेला काहें से की ई नीचे दिहल बिस्तारित(कैस्केडिंग)-सुरक्षा वाला {{PLURAL:$1|पन्ना|पन्नवन}} में समाइल बाटे:",
+       "titleprotectedwarning": "<strong>चेतावनी: ई पन्ना सुरक्षित कइल गइल बा की एकरा के बनावे खातिर [[Special:ListGroupRights|विशेष अधिकार]] होखल जरूरी बा।</strong>\nसंदर्भ खातिर नीचे सबसे नया लॉग एंट्री दिहल जात बा:",
        "templatesused": "ए पन्ना पर इस्तेमाल {{PLURAL:$1|टेम्पलेट|टेम्पलेट कुल}}:",
        "templatesusedpreview": "इ पुर्वावलोकन में प्रयुक्त {{PLURAL:$1|टेम्पलेट|टेम्पलेट कुल}}:",
        "templatesusedsection": "एह खण्ड में इस्तेमाल {{PLURAL:$1|टेम्पलेट|कुल}}:",
        "template-protected": "(सुरक्षित)",
        "template-semiprotected": "(कुछ-सुरक्षित)",
        "hiddencategories": "ई पन्ना {{PLURAL:$1|1 छिपल श्रेणी|$1 छिपल श्रेणीसभ}} के सदस्य बा:",
+       "nocreatetext": "{{SITENAME}} नया पन्ना बनावे पर रोक लगवले बा।\nपीछे जाईं आ पहिले से बनल पन्ना संपादित करीं या फिर [[Special:UserLogin|लॉगिन करीं या नया खाता बनाईं]]।",
        "nocreate-loggedin": "नया पन्ना बनावे रउआ अधिकार नइखे।",
        "sectioneditnotsupported-title": "अनुभाग सम्पादन समर्थित नइखे",
        "sectioneditnotsupported-text": "इ पन्ना पर अनुभाग सम्पादन समर्थित नइखे",
        "permissionserrors": "अनुमति त्रुटी",
        "permissionserrorstext": "निम्नलिखित {{PLURAL:$1|कारण|कारणन}} के चलते आपके अइसन करे के अनुमति नइखे:",
        "permissionserrorstext-withaction": "नीचे दिहल {{PLURAL:$1|कारण|कारणन}} से रउआँ के $2 के परमीशन नइखे:",
+       "recreate-moveddeleted-warn": "<strong>चेतावनी: रउआँ एगो अइसन पन्ना दुबारा बनावे जा रहल बानी जेवन पहिले हटावल जा चुकल बा</strong>\n\nआपके ई बिचार क लेवे के चाहीं की आगे संपादन कइल ठीक बा की ना।\n\nसुविधा खातिर, ए पन्ना के हटवले आ स्थानांतरण के लॉग नीचे दिहल जात बा:",
        "moveddeleted-notice": "ई पन्ना हटा दिहल गइल बा।\nसंदर्भ खातिर हटावे आ स्थानांतरण के लॉग नीचे दिहल जात बाटे।",
        "log-fulllog": "पूरा लॉग देखीं",
+       "edit-hook-aborted": "संपादन के हुक निरस्त क दिहलस।\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 मॉडल खातिर पार्स (parse) ना हो पावल: $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": "सी॰एस॰एस",
+       "content-json-empty-object": "खाली चीज (Empty object)",
+       "content-json-empty-array": "खाली अरे (Empty array)",
+       "duplicate-args-warning": "<strong>चेतावनी:</strong> [[:$1]], [[:$2]] के \"$3\" पैरामीटर खातिर एक से अधिका वैल्यू की संघे काल करत बाटे। दिहल गइल वैल्यू में से खाली सबसे आखिरी वैल्यू के प्रयोग कइल जाई।",
        "duplicate-args-category": "टेम्पलेट कॉल में डुप्लिकेट तर्क के उपयोग करते हुए पन्नासभ",
+       "duplicate-args-category-desc": "पन्ना पर अइसन टेम्पलेट काल मौजूद बा जेवन डुप्लीकेट (दोहरा) आर्गुमेंट इस्तेमाल करत बाटे, जइसे की <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> या <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+       "expensive-parserfunction-warning": "<strong>चेतावनी:</strong> ई पन्ना बहुत ढेर सारा  खर्चीला पार्सर फंक्शन काल के इस्तेमाल करत बा।\n\nए पन्ना पर $2 {{PLURAL:$2|काल|काल कुल}} से कम संख्या में काल होखे के चाहीं, बाकी इहाँ ए समय {{PLURAL:$1|$1 काल बा|$1 काल कुल बाड़ी}}।",
+       "expensive-parserfunction-category": "बहुत ढेर खर्चीला पार्सर फंक्शन काल वाला पन्ना सभ",
        "post-expand-template-inclusion-warning": "'''चेतावनी:''' खाँचा जोड़े के सीमा पार हो चुकल बा।\nकुछ खाँचा ना जोड़ल जाई।",
        "post-expand-template-inclusion-category": "अइसन पृष्ठ जे पर साँचा जोडे के सीमा पार हो गइल बा",
+       "post-expand-template-argument-warning": "<strong>चेतावनी:</strong> ए पन्ना पर कम से कम एक ठो अइसन टेम्पलेट आर्गुमेंट बा जेवन बहुत बड़ खर्चीला साइज के बा।\nअइसन आर्गुमेंट के लोप कइ दिहल गइल बा।",
+       "post-expand-template-argument-category": "पन्ना जिनहन में लोप कइल गइल टेम्पलेट आर्गुमेंट बा",
+       "parser-template-loop-warning": "टेम्पलेट लूप पकड़ में आइल बा:[[$1]]",
+       "parser-template-recursion-depth-warning": "टेम्पलेट रिकरसन (recursion) के गहिराइ सीमा पार ($1)",
+       "language-converter-depth-warning": "भाषा बदलावक (language converter) के गहिराइ सीमा पार ($1)",
+       "node-count-exceeded-category": "पन्ना जहाँ नोड गिनती पार हो गइल बा",
+       "node-count-exceeded-category-desc": "पन्ना अधिकतम नोड गिनती (node count) के पार क गइल बा।",
+       "node-count-exceeded-warning": "पन्ना नोड गिनती (node count) के पार क गइल",
+       "expansion-depth-exceeded-category": "पन्ना जहाँ बिस्तार के गहिराई पार हो गइल बा",
+       "expansion-depth-exceeded-category-desc": "पन्ना अधिकतम बिस्तार गहिराई के पार क गइल बा।",
+       "expansion-depth-exceeded-warning": "पन्ना अधिकतम बिस्तार गहिराई के पार क गइल",
+       "parser-unstrip-loop-warning": "अनस्ट्रिप लूप पकड़ में आइल बा",
+       "parser-unstrip-recursion-limit": "अनस्ट्रिप रिकर्शन सीमा पार हो गइल ($1)",
+       "converter-manual-rule-error": "मैनुअल भाषा परिवर्तन नियम मब खराबी पकड़ल गइल",
+       "undo-success": "संपादन वापस कइल जा सकत बा।\nनीचे दिहल तुलना के चेक करीं आ पुष्टी करीं की आप इहे कइल चाहत बाड़ीं, ओकरा बाद बदलाव सहेज के संपादन वापसी के पूरा करीं।",
+       "undo-failure": "बीच में अउरी संपादन होखला की कारण ई संपादन वापस नइखे लिहल जा सकत।",
+       "undo-norev": "संपादन वापस नइखे लिहल जा सकत, काहें से की या त ई हइये नइखे या हटा दिहल गइल बाटे।",
+       "undo-nochange": "लागत बा की ई संपादन पहिलहीं वापस लिहल जा चुकल बाटे।",
+       "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|वार्ता]]) के द्वारा कइल $1 बदलाव के वापस कइल गइल",
+       "undo-summary-username-hidden": "एगो छिपल सदस्य द्वारा कइल बदलाव $1 वापस कइल गइल",
        "cantcreateaccounttitle": "खाता खुल नईखे सकत",
+       "cantcreateaccount-text": "एह आइपी पता (IP address)(<strong>$1</strong>) द्वारा नया खाता बनावे पर  [[User:$3|$3]] द्वारा रोक लगावल गइल बा।\n\nएकरा खातिर $3 के दिहल कारण:<em>$2</em>",
+       "cantcreateaccount-range-text": "आइपी पता बिस्तार (IP address range) '''$1''' पर, जेवना में आपके आइपी ('''$4''') भी बा, नया खाता बनावे पर [[User:$3|$3]] द्वारा रोक लगावल गइल बा।\n\nएकरा खातिर $3 के दिहल कारण बा:''$2''",
        "viewpagelogs": "ए पन्ना खातिर लॉग कुल देखीं",
        "nohistory": "ए पन्ना के कौनों संपादन इतिहास नइखे",
        "currentrev": "सबसे नया बदलाव",
        "history-feed-description": "विकि पर इ पन्ना के संशोधन के इतिहास",
        "history-feed-item-nocomment": "$1 $2 पर",
        "history-feed-empty": "अनुरोध करल गईल पन्ना उपलब्ध नईखे। हो सकत बा उ के विकि पर से मिटा दिहल गईल होखे, आ चाहे उ के नाम बदल देवल गईल होखे।\nप्रासंगिक पन्ना के [[Special:Search|विकि पर खोजे के]] कोशिश करत रहीं।",
+       "history-edit-tags": "सेलेक्ट कइल बदलाव खातिर संपादन टैग",
        "rev-deleted-comment": "(सम्पादन सारांश हटावल गईल)",
        "rev-deleted-user": "(प्रयोगकर्ता के नाम मिटा दिहल गईल बा)",
        "rev-deleted-event": "(लॉग विवरण हटा दिहल गईल बा)",
        "rev-deleted-user-contribs": "[प्रयोगकर्ता नाम आ चाहे आइ पी पता हटा दिहल गईल बा - योगदान से सम्पादन छुप गईल बा]",
        "rev-deleted-text-permission": "ई पन्ना के संशोधन '''मिटा'''' दिहल गईल बा।\nमेटावल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} डिलेशन लॉग] में मिली।",
        "rev-suppressed-text-permission": "ए पन्ना के बदलाव<strong>दबा दिहल गइल बा</strong>।\nबिस्तृत जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} दबावल चीज के लॉग] पर मिल जाई।",
+       "rev-deleted-text-unhide": "पन्ना पर क ई बदलाव <strong>हटा दिहल गइल बा</strong>।\nएकर डिटेल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटवले के लॉग] में मिल सकेला।\nअभी भी आप [$1 ई बदलाव देख सकत बानी]  अगर आप आगे देखल चाहत होखीं।",
+       "rev-suppressed-text-unhide": "पन्ना पर के ई बदलाव <strong>ढाँप दिहल गइल बा</strong>।\nडिटेल में जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}  ढाँपले के लॉग] पर मिल सकत बा।\nआप अभी भी [$1 ई बदलाव देख सकत बानी] अगर आप आगे बढ़ल चाहीं।",
+       "rev-deleted-text-view": "पन्ना पर के ई बदलाव <strong>हटा दिहल गइल बा</strong>।\nआप एकरा के देख सकत बानी; डिटेल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटवले के लॉग] पर मिल सकत बा।",
+       "rev-suppressed-text-view": "पन्ना पर के ई बदलाव <strong>ढाँप दिहल गइल बा</strong>।\nआप एकरा के देख सकत बानी;  डिटेल जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ढाँपले के लॉग] पर मिल सकत बा।",
+       "rev-deleted-no-diff": "रउआँ ई अंतर नइखीं देख सकत काहें से की ए बदलाव कुल में से कौनों बदलाव <strong>हटा दिहल गइल</strong> बा।\nडिटेल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटवले के लॉग] पर मिल सकत बा।",
+       "rev-suppressed-no-diff": "रउआँ ई अंतर नइखीं देख सकत काहें से की कौनों एगो बदलाव के <strong>हटा दिहल गइल बा</strong>।",
+       "rev-deleted-unhide-diff": "ए अंतर के कौनों एगो बदलाव One of the revisions of this diff has been <strong>हटा दिहल गइल</strong> बा।\nडिटेल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटवले के लॉग] पर बा।\nरउआँ [$1 ई अंतर देख सकत बानी] अगर आगे बढ़ल चाहीं।",
+       "rev-suppressed-unhide-diff": "ए अंतर में के कौनों बदलाव के <strong>ढाँप दिहल गइल</strong> बा।\nडिटेल जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ढाँपले के लॉग] पर बा।\nअभी भी आप ई अंतर [$1 देख सकत बानी] अगर आप आगे बढ़ल चाहीं।",
+       "rev-deleted-diff-view": "ए अंतर क कौनो एगो बदलाव <strong>हटा दिहल गइल</strong> बा।\nआप ई अंतर देख सकत बानी; डिटेल में जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटवले के लॉग] पर मिल सकत बा।",
+       "rev-suppressed-diff-view": "ए अंतर के कौनो एगो बदलाव <strong>ढाँप दिहल गइल</strong> बा।\nआप ई अंतर देख सकत बानी; डिटेल में जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}  ढाँपले की लॉग] पर बा।",
        "rev-delundel": "देखाईं/छिपाईं",
        "rev-showdeleted": "देखाईं",
+       "revisiondelete": "रिवीजन हटाईं/हटावल लौटाईं",
+       "revdelete-nooldid-title": "अमान्य टारगेट रिवीजन",
+       "revdelete-nooldid-text": "आप या त ए फंक्शन के लागू करे खातिर कौनो निश्चित टारगेट बदलाव नइखीं दिहले, या राउर बतावल बदलाव मौजूद नइखे, या फिर आप वर्तमान बदलाव के छिपावे के कोसिस करत बानी।",
+       "revdelete-no-file": "बतावल गइल फाइल मौजूद नइखे।",
+       "revdelete-show-file-confirm": "का सही में रउआँ फाइल \"<nowiki>$1</nowiki>\" के $2 के $3 बनल आ बाद में हटावल बदलाव देखल चाहत बानी?",
        "revdelete-show-file-submit": "जी",
+       "revdelete-selected-text": "[[:$2]] के {{PLURAL:$1|चुनल गइल बदलाव| चुनल गइल बदलाव सभ}}:",
+       "revdelete-selected-file": "[[:$2]] के {{PLURAL:$1|चुनल गइल फाइल वर्शन|चुनल गइल फाइल वर्शन सभ}}:",
+       "logdelete-selected": "{{PLURAL:$1|चुनल गइल लॉग घटना|चुनल गइल लॉग घटना सब}}:",
+       "revdelete-text-text": "हटावल गइल बदलाव पन्ना की इतिहास में जरूर लउकी बाकी ओकर सामग्री जनता खातिर पहुँच से बाहर रही।",
+       "revdelete-text-file": "हटावल फाइल वर्शन फाइल की इतिहास में जरूर लउकी बाकी ओकर सामग्री जनता की पहुँच से बाहर रही।",
+       "logdelete-text": "हटावल लॉग घटना सब लॉग की इतिहास में जरूर लउकी बाकी उन्हन के सामग्री जनता खातिर पहुँच से बाहर रही।",
+       "revdelete-text-others": "अगर अउरी अधिका प्रतिबंध ना सेट कइल जाव, त बाकी प्रबंधक लोग छिपावल सामग्री के देखे आ वापस ले आवे में सक्षम रही।",
+       "revdelete-confirm": "निश्चित रूप से बताईं की आप ई कइल चाहत बानी, आप एकर परिणाम बूझत बानी, आ आप ई उचित [[{{MediaWiki:Policy-url}}|नीति की अनुसार]] करत बानी।",
+       "revdelete-suppress-text": "ढाँपल (Suppression) <strong>खाली भर</strong> नीचे बतावल स्थिति में इस्तेमाल होखे के चाहीं:\n* potentially libelous information\n* inappropriate personal information\n*: <em>home addresses and telephone numbers, national identification numbers, etc.</em>",
+       "revdelete-legend": "देखाई दिहला पर प्रतिबन्ध सेट करीं",
        "revdelete-hide-text": "संशोधन पाठ्य",
        "revdelete-hide-image": "फाइल के सामग्री छुपाँईं",
+       "revdelete-hide-name": "टारगेट आ पैरामीटर छिपाईं",
        "revdelete-hide-comment": "सारांश सम्पादन",
        "revdelete-hide-user": "सम्पादक के सदस्यनाम/आइ॰पी पता",
+       "revdelete-hide-restricted": "डेटा के अउरी सदस्य सभ की साथै साथ प्रबंधक लोगन खातिर भी ढाँप दीं",
        "revdelete-radio-same": "(मत बदलीं)",
        "revdelete-radio-set": "छुपल",
        "revdelete-radio-unset": "दृश्यमान",
+       "revdelete-suppress": "डेटा के अउरी सदस्य आ प्रबंधक लोगन खातिर भी ढाँप दीं",
+       "revdelete-unsuppress": "दुबारा स्थापित बदलाव पर से प्रतिबन्ध हटाईं",
        "revdelete-log": "कारण:",
+       "revdelete-submit": "चुनल गइल {{PLURAL:$1|बदलाव|बदलाव कुल}} पर लागू करीं",
+       "revdelete-success": "बदलाव के देखाई पड़ले के सेटिंग अपडेट हो गइल",
+       "revdelete-failure": "बदलाव के देखाई पड़ले के सेटिंग अपडेट ना हो पावल:$1",
+       "logdelete-success": "लॉग के देखाई पड़ले के सेटिंग पूरा भइल।",
+       "logdelete-failure": "लॉग के देखाई पड़ले के सेटिंग पूरा ना भइल:$1",
        "revdel-restore": "दूश्यता बदलीं",
        "pagehist": "पन्ना के इतिहास",
        "deletedhist": "मिटावल इतिहास",
+       "revdelete-hide-current": "तारीख $2 के $1 बजे के बदलाव छिपावे में खराबी बा।\nई सबसे ताजा बदलाव बा। एकरा के ना छिपावल जा सकत बाटे।",
+       "revdelete-show-no-access": "तारीख $2, के $1 बजे के बदलाव देखावे में खराबी: ए चीज के \"प्रतिबंधित\" चिन्हित कइल गइल बा। आपकी लगे इहाँ ले के पहुँच नइखे।",
+       "revdelete-modify-no-access": "तारीख $2, समय $1, के चीज में बदलाव करे में खराबी बा: ई चीज \"प्रतिबंधित\" चिन्हित कइल गइल बा।\nआप की लगे इहाँ ले पहुँच नइखे।",
+       "revdelete-modify-missing": "आइटम ID $1 के बदलाव करे में खराबी: ई डेटाबेस से गायब बा!",
+       "revdelete-no-change": "<strong>चेतावनी:</strong> तारीख $2 के $1 बजे के ई आइटम पहिलहीं से ओही देखावे के सेटिंग वाला बाटे जवन माँगल जाता।",
        "revdelete-otherreason": "अन्य/अतिरिक्त कारण:",
        "revdelete-reasonotherlist": "अन्य कारण",
        "revdelete-edit-reasonlist": "हटावे के कारण बदलीं",
        "upload-proto-error": "गलत प्रोटोकाल",
        "upload-file-error": "इंटरनल खराबी",
        "upload-misc-error": "नामालूम अपलोड खराबी",
+       "upload-dialog-title": "फाइल अपलोड",
+       "upload-dialog-error": "कौनो खराबी आ गइल",
+       "upload-dialog-warning": "कौनो चेतावनी बा",
+       "upload-dialog-button-cancel": "कैंसिल",
+       "upload-dialog-button-done": "पूरा भइल",
+       "upload-dialog-button-save": "सहेजीं",
+       "upload-dialog-button-upload": "अपलोड",
+       "upload-dialog-label-select-file": "फाइल चुनीं",
+       "upload-dialog-label-infoform-title": "डिटेल जानकारी",
+       "upload-dialog-label-infoform-name": "नाँव",
+       "upload-dialog-label-infoform-description": "विवरण",
+       "upload-dialog-label-usage-title": "इस्तेमाल",
+       "upload-dialog-label-usage-filename": "फाइल नाँव",
+       "backend-fail-stream": "फाइल \"$1\" स्ट्रीम ना हो पावल।",
+       "backend-fail-backup": "फाइल \"$1\" के बैकअप ना हो पावल।",
+       "backend-fail-notexists": "फाइल $1 मौजूद नइखे।",
+       "backend-fail-hashes": "तुलना करे खातिर फाइल हैशेस ना मिल पावल।",
+       "backend-fail-notsame": "एगो नॉन-आइडेंटिकल (बिना-समानता) के फाइल पहिलहीं से \"$1\" पर मौजूद बा।",
+       "backend-fail-invalidpath": "\"$1\" एगो वैध भंडार पाथ नइखे।",
+       "backend-fail-delete": "फाइल \"$1\" के हटावल ना जा सकल।",
+       "backend-fail-describe": "फाइल \"$1\" खातिर मेटाडेटा ना बदलल जा सकल।",
        "backend-fail-alreadyexists": "फाइल $1 पहिले से मौजूद बाटे",
        "backend-fail-store": "फाइल $1 के $2 पर सहेजल ना जा सकल।",
        "backend-fail-copy": "फाइल $1 के $2 पर कॉपी ना कइल जा सकल।",
        "backend-fail-opentemp": "टेम्परेरी फाइल के ना खोलल जा सकल।",
        "backend-fail-writetemp": "टेम्परेरी फाइल में ना राइट कइल जा सकल।",
        "backend-fail-closetemp": "टेम्परेरी फाइल के बंद ना कइल जा सकल।",
+       "backend-fail-read": "\"$1\" के पढ़ल ना जा सकल।",
+       "backend-fail-create": "फाइल \"$1\" लिखल (राइट) ना जा सकल।",
        "license": "लाइसेंस जानकारी:",
        "license-header": "लाइसेंसिंग",
        "nolicense": "कौनों नइखे",
        "export": "पन्ना निर्यात करीं",
        "thumbnail-more": "बढ़ाईं",
        "filemissing": "फाईल गायब",
+       "import": "पन्ना आयात करीं",
+       "importinterwiki": "दुसरा विकि से आयात करीं",
+       "import-interwiki-text": "आयात करे खातिर एगो विकि आ पन्ना टाइटिल चुनल जाय।\nअवतरण के तारीख आ सम्पादक लोगन के नांव सुरक्षित रखल जाई।\nदुसरा विकि कुल से सगरी आयात कुल के लॉग [[Special:Log/import|आयात लॉग]] पर मौजूद बा।",
+       "import-interwiki-sourcewiki": "विकि, जहाँ से आयात होखी:",
+       "import-interwiki-sourcepage": "पन्ना जौन आयत होखी:",
+       "import-interwiki-history": "सगरी इतिहास के सब अवतरण कॉपी करीं",
+       "import-interwiki-templates": "सगरी टेम्पलेट कुल भी शामिल करीं",
+       "import-interwiki-submit": "आयात",
+       "import-mapping-default": "डिफाल्ट स्थान पर आयात करीं",
+       "import-mapping-namespace": "एगो नाँवस्थान पर आयात करीं:",
+       "import-mapping-subpage": "ए पन्ना की उप-पन्ना की रूप में आयात करीं:",
+       "import-upload-filename": "फाइलनाँव:",
+       "import-comment": "टिप्पणी:",
+       "importstart": "पन्ना आयात कइल जाता...",
+       "import-revision-count": "$1 {{PLURAL:$1|रिवीजन|रिवीजन कुल}}",
+       "importnopages": "आयत करे खातिर कौनों पन्ना नइखे।",
        "imported-log-entries": "लावल गइल $1 {{PLURAL:$1|लॉग प्रविष्टि|लॉग प्रविष्टिसभ}}",
+       "importfailed": "आयात फेल हो गइल: <nowiki>$1</nowiki>",
+       "importunknownsource": "नामालूम आयात स्रोत प्रकार",
+       "importcantopen": "आयात फाइल के खोले में असमर्थ",
+       "importbadinterwiki": "खराब इंटरविकि कड़ी",
+       "importsuccess": "आयात पूरा भइल!",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनसभ}} लावल गइल",
        "tooltip-pt-userpage": "हमार सदस्य पन्ना",
        "tooltip-pt-mytalk": "हमार बातचीत पन्ना",
index 863182a..643313f 100644 (file)
        "passwordreset-emailtitle": "Rarincian akun pada {{SITENAME}}",
        "passwordreset-emailtext-ip": "Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun|akun}}\ntarait awan suril:\n\n$2\n\n{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.\nPian parlu babuat log wan mamilih katasunduk hanyar wayah ni jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ngini wan manyambung mamuruk katasunduk lawas Pian.",
        "passwordreset-emailtext-user": "Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun|akun}}\ntarait awan suril:\n\n$2\n\n{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.\nPian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ngini wan manyambung mamuruk katasunduk lawas Pian.",
-       "passwordreset-emailelement": "Ngaran pamakai: $1\nKatasunduk pahadangan: $2",
+       "passwordreset-emailelement": "Ngaran pamakai: \n$1\n\nKatasunduk pahadangan: \n$2",
        "passwordreset-emailsent": "Sabuting suril pangingat sudah takirim.",
        "passwordreset-emailsent-capture": "Sabuting suril pangingat sudah dikirim, nangkaya ditampaiakan di bawah.",
        "passwordreset-emailerror-capture": "Suril paugingat, nang ditampaikan di bawah, hudah dihasilakan, tagal gagal mangirimakannya ka pamakai: $1",
        "mailnologin": "Kadada alamat kirim",
        "mailnologintext": "Pian musti [[Special:UserLogin|babuat log]] wan baisi sabuah alamat suril sah di [[Special:Preferences|kakatujuan]] Pian hagan mangirim suril ka papamuruk lain.",
        "emailuser": "Suril pamakai",
-       "emailpage": "Surili pamakai",
        "emailpagetext": "Pian kawa mamuruk purmulir di bawah hagan mangirim sabuah suril ka pamuruk ngini.\nAlamat sril Pian pintang [[Special:Preferences|kakatujuan pamuruk Pian]] akan cungul  sawagai \"Matan\" alamat suril, lalu-ai panarima akan kawa langsung mambalas ka Pian.",
        "defemailsubject": "Suril {{SITENAME}} matan pamuruk \"$1\"",
        "usermaildisabled": "Suril pamuruk dipajahakan",
index 7681660..45fa006 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} সাইটে ব্যবহারকারীর বিস্তারিত তথ্যাদি",
        "passwordreset-emailtext-ip": "কেউ একজন (সম্ভবত আপনি, $1 আইপি ঠিকানা থেকে) {{SITENAME}} ($4) সাইটের জন্য আপনার\nপাসওয়ার্ড বদলের জন্য অনুরোধ করেছে। নিচের ব্যবহারকারী {{PLURAL:$3|অ্যাকাউন্টটি|অ্যাকাউন্টগুলো}}\nএই ই-মেইল ঠিকানার সাথে সংযুক্ত:\n\n$2\n\n{{PLURAL:$3|এই অস্থায়ী পাসওয়ার্ডটি|এই অস্থায়ী পাসওয়ার্ডগুলো}} আগামী {{PLURAL:$5|এক দিন|$5 দিন}} পর মেয়াদোত্তীর্ণ হয়ে যাবে।\nআপনার অবশ্যই লগ-ইন করে একটি নতুন পাসওয়ার্ড পছন্দ করা উচিত। যদি অন্য কেউ এই অনুরোধ করে থাকে,\nঅথবা আপনি যদি পুরোনো পাসওয়ার্ড মনে করতে পারেন, এবং আপনার সেটি পরিবর্তন করার কোনো ইচ্ছা না থাকে, তবে\nআপনি এই বার্তাটি উপেক্ষা করতে পারে, এবং আপনার পুরোনো পাসওয়ার্ড ব্যবহার করা চালিয়ে যেতে পারেন।",
        "passwordreset-emailtext-user": "ব্যবহারকারী $1 {{SITENAME}} ($4) সাইটের জন্য আপনার পাসওয়ার্ড বদলের জন্য অনুরোধ করেছে। নিচের ব্যবহারকারী {{PLURAL:$3|অ্যাকাউন্টটি|অ্যাকাউন্টগুলো}}\nএই ই-মেইল ঠিকানার সাথে সংযুক্ত:\n\n$2\n\n{{PLURAL:$3|এই অস্থায়ী পাসওয়ার্ডটি|এই অস্থায়ী পাসওয়ার্ডগুলো}} আগামী {{PLURAL:$5|এক দিন|$5 দিন}} পর মেয়াদোত্তীর্ণ হয়ে যাবে।\nআপনার অবশ্যই লগ-ইন করে একটি নতুন পাসওয়ার্ড পছন্দ করা উচিত। যদি অন্য কেউ এই অনুরোধ করে থাকে,\nঅথবা আপনি যদি পুরোনো পাসওয়ার্ড মনে করতে পারেন, এবং আপনার সেটি পরিবর্তন করার কোনো ইচ্ছা না থাকে, তবে\nআপনি এই বার্তাটি উপেক্ষা করতে পারে, এবং আপনার পুরোনো পাসওয়ার্ড ব্যবহার করা চালিয়ে যেতে পারেন।",
-       "passwordreset-emailelement": "ব্যবহারকারী নাম: $1\nঅস্থায়ী পাসওয়ার্ড: $2",
+       "passwordreset-emailelement": "ব্যবহারকারী নাম: \n$1\n\nঅস্থায়ী পাসওয়ার্ড: \n$2",
        "passwordreset-emailsent": "পাসওয়ার্ড বদলের একটি ই-মেইল পাঠানো হয়েছে।",
        "passwordreset-emailsent-capture": "স্মরণ করিয়ে দেয়ার জন্য একটি ইমেইল করা হয়েছে, যা নিচে দেখানো হচ্ছে।",
        "passwordreset-emailerror-capture": "স্মরণ করিয়ে দেয়ার জন্য একটি ইমেইল তৈরী করা হয়েছিল, যা নিচে দেখানো হচ্ছে, তবে $1 {{GENDER:$2|ব্যবহারকারীকে}} এটি পাঠানো যায়নি!",
        "template-protected": "(সুরক্ষিত)",
        "template-semiprotected": "(অর্ধ-সুরক্ষিত)",
        "hiddencategories": "এই পাতাটি {{PLURAL:$1|১টি লুকায়িত বিষয়শ্রেণীর|$1টি লুকায়িত বিষয়শ্রেণীর}} সদস্য:",
+       "edittools": "<!-- সম্পাদনা এবং আপলোড ফরমের নীচে এখানের লেখা দেখানো হবে। -->",
        "edittools-upload": "-",
        "nocreatetext": "{{SITENAME}}-এ নতুন পাতা সৃষ্টি করার ক্ষমতা সীমাবদ্ধ করা হয়েছে।\nআপনি ফিরে গিয়ে ইতিমধ্যে বিদ্যমান কোন পাতা সম্পাদনা করতে পারেন, অথবা [[Special:UserLogin|অ্যাকাউন্টে প্রবেশ কিংবা অ্যাকাউন্ট সৃষ্টি করতে পারেন]]।",
        "nocreate-loggedin": "নতুন পাতা তৈরিতে আপনাকে অনুমোতি দেওয়া হয়নি।",
        "sectioneditnotsupported-text": "এই সম্পাদনা পাতায় অনুচ্ছেদ সম্পাদনা সমর্থন করে না",
        "permissionserrors": "অনুমতি ত্রুটিসমূহ",
        "permissionserrorstext": "আপনার এটা করার অনুমতি নেই, নিচের {{PLURAL:$1|টি কারণের|টি কারণের}} জন্য:",
-       "permissionserrorstext-withaction": "à¦\86পনার $2 à¦\95রতà§\87 অনুমতি নেই, যার {{PLURAL:$1|কারণ|কারণসমূহ}}:",
+       "permissionserrorstext-withaction": "à¦\86পনার $2 à¦\95রার অনুমতি নেই, যার {{PLURAL:$1|কারণ|কারণসমূহ}}:",
        "recreate-moveddeleted-warn": "'''সতর্কীকরণ: আপনি এমন একটি পাতা পুনরায় তৈরি করছেন যা পূর্বে অপসারণ করা হয়েছিল।'''\n\nআপনি পাতাটি সম্পাদনা চালিয়ে যাওয়া ঠিক হবে কিনা, তা বিবেচনা করুন।\nআপনার সুবিধার্থে পাতাটির অপলুপ্তি লগ এখানে দেয়া হলো:",
        "moveddeleted-notice": "এই পাতাটি অপসারণ করা হয়েছে।\nসূত্র হিসেবে নিচে এ পাতার অবলুপ্তি লগ দেওয়া হলো।",
        "log-fulllog": "সম্পূর্ণ লগ দেখাও",
        "autoredircomment": "[[$1]]-এ পুনর্নির্দেশ করা হল",
        "autosumm-new": "\"$1\" দিয়ে পাতা তৈরি",
        "autosumm-newblank": "খালি পাতা তৈরি হয়েছে",
-       "size-bytes": "$1 বাইট",
+       "size-bytes": "$1 {{PLURAL:$1|বাইট}}",
        "size-kilobytes": "$1 কিলোবাইট",
        "size-megabytes": "$1 মেগাবাইট",
        "size-gigabytes": "$1 গিগাবাইট",
+       "size-pixel": "$1 {{PLURAL:$1|পিক্সেল}}",
        "bitrate-kilobits": "$1 কেবিপিএস",
        "bitrate-megabits": "$1 এমবিপিএস",
        "bitrate-gigabits": "$1 জিবিপিএস",
        "version-entrypoints": "শুরুর ইউআরএল",
        "version-entrypoints-header-entrypoint": "শুরু",
        "version-entrypoints-header-url": "ইউআরএল",
+       "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath নিবন্ধের পথ]",
        "version-libraries": "ইনস্টল লাইব্রেরি",
        "version-libraries-library": "লাইব্রেরী",
        "version-libraries-version": "সংস্করণ",
index 50a8f7f..c442873 100644 (file)
        "passwordreset-emailtitle": "Titouroù kont war {{SITENAME}}",
        "passwordreset-emailtext-ip": "Unan bennak (c'hwi moarvat gant ar chomlec'h IP $1) en deus goulennet ma vefe degaset soñj dezhañ eus titouroù e gont evit {{SITENAME}} ($4). Emañ liammet {{PLURAL:$3|ar gont implijer|ar c'hontoù implijer}} da-heul gant ar chomlec'h postel-mañ :\n\n$2\n\nMont a raio da get {{PLURAL:$3|ar ger-tremen da c'hortoz|ar gerioù-tremen da c'hortoz}} a-benn {{PLURAL:$5|un devezh|$5 deiz}}.\nMat e vefe deoc'h kevreañ ha dibab ur ger-tremen nevez bremañ. Mard eo bet goulennet kement-se gant unan bennak all pe m'hoc'h eus soñj eus ho ker-tremen orin ha mar ne fell ket deoc'h e cheñch ken, na daolit ket evezh ouzh ar gemennadenn-mañ ha dalc'hit d'ober gant ho ker-tremen kozh.",
        "passwordreset-emailtext-user": "Goulennet en deus an implijer $1 war  {{SITENAME}} e vefe degaset soñj dezhañ eus titouroù e gont evit {{SITENAME}} ($4). Emañ liammet {{PLURAL:$3|ar gont implijer|ar c'hontoù implijer}} da-heul gant ar chomlec'h postel-mañ :\n\n$2\n\nMont a raio da get {{PLURAL:$3|ar ger-tremen da c'hortoz|ar gerioù-tremen da c'hortoz}} a-benn {{PLURAL:$5|un devezh|$5 deiz}}.\nMat e vefe deoc'h kevreañ ha dibab ur ger-tremen nevez bremañ. Mard eo bet goulennet kement-se gant unan bennak all pe m'hoc'h eus soñj eus ho ker-tremen orin ha mar ne fell ket deoc'h e cheñch ken, na daolit ket evezh ouzh ar gemennadenn-mañ ha dalc'hit d'ober gant ho ker-tremen kozh.",
-       "passwordreset-emailelement": "Anv implijer :           $1\nGer-tremen da c'hortoz : $2",
+       "passwordreset-emailelement": "Anv implijer :           \n$1\n\nGer-tremen da c'hortoz : \n$2",
        "passwordreset-emailsent": "Kaset ez eus bet ur postel deoc'h da adderaouekaat ho ker-tremen.",
        "passwordreset-emailsent-capture": "Ur postel evit aderaouekaat ho ker-tremen, evel diskouezet amañ dindan, zo bet kaset.",
        "passwordreset-emailerror-capture": "Kaset ez eus bet ur postel degas da soñj evel m'emañ diskouezet amañ dindan met c'hwitet eo bet ar gasadenn d'an {{GENDER:$2|implijer|implijerez}} : $1",
        "emailuser": "Kas ur postel d'an implijer-mañ",
        "emailuser-title-target": "Kas ur postel d'an {{PLURAL:$1|an implijer-mañ|an implijerez-mañ}}",
        "emailuser-title-notarget": "Kas ur postel d'un implijer",
-       "emailpage": "Postel implijer",
        "emailpagetext": "Gallout a rit ober gant ar furmskrid a-is a-benn kas ur postel d'an {{GENDER:$1|implijer|implijerez}}-mañ.\nE maezienn \"Kaser\" ho postel e vo merket ar chomlec'h postel resisaet ganeoc'h-c'hwi en ho [[Special:Preferences|Penndibaboù]], d'ar resever da c'hallout respont deoc'h war-eeun ma kar.",
        "defemailsubject": "Postel kaset eus {{SITENAME}} gant an implijer \"$1\"",
        "usermaildisabled": "Diweredekaet eo ar c'has posteloù etre an implijerien.",
        "tooltip-pt-logout": "Digevreañ",
        "tooltip-pt-createaccount": "Erbedet eo deoc'h krouiñ ur gont ha kevreañ ; n'eo ket ret koulskoude.",
        "tooltip-ca-talk": "Kaozeadennoù diwar-benn ar pennad",
-       "tooltip-ca-edit": "Gallout a rit kemmañ ar bajenn-mañ. Implijit ar stokell Rakwelet a-raok enrollañ, mar plij.",
+       "tooltip-ca-edit": "Kemmañ ar bajenn-mañ.",
        "tooltip-ca-addsection": "Kregiñ gant ur rann nevez.",
        "tooltip-ca-viewsource": "Gwarezet eo ar bajenn-mañ. Gallout a rit gwelet an danvez anezhañ memes tra.",
        "tooltip-ca-history": "Stummoù kozh ar bajenn-mañ gant an aozerien anezhi.",
        "tooltip-ca-nstab-main": "Gwelet ar pennad",
        "tooltip-ca-nstab-user": "Gwelet ar bajenn implijer",
        "tooltip-ca-nstab-media": "Gwelet pajenn ar media",
-       "tooltip-ca-nstab-special": "Ur bajenn dibar eo homañ, n'oc'h ket evit kemmañ anezhi.",
+       "tooltip-ca-nstab-special": "Ur bajenn dibar eo homañ ha ne c'haller kemmañ anezhi.",
        "tooltip-ca-nstab-project": "Gwelet pajenn ar raktres",
        "tooltip-ca-nstab-image": "Gwelet pajenn deskrivañ ar bajenn-mañ",
        "tooltip-ca-nstab-mediawiki": "Gwelet kemenn ar reizhiad",
        "spam_reverting": "Distreiñ d'ar stumm diwezhañ hep liamm davet $1",
        "spam_blanking": "Diverkañ an holl stummoù enno liammoù davet $1",
        "spam_deleting": "An holl stummoù enno liammoù war-zu $1, o tiverkañ",
-       "simpleantispam-label": "Taol gwiriañ eneb-strob.\n'''Arabat''' merkañ tra pe dra amañ !",
+       "simpleantispam-label": "Taol gwiriañ eneb-strob.\n<trong>Arabat<strong> merkañ tra pe dra amañ !",
        "pageinfo-title": "Titouroù evit \"$1\"",
        "pageinfo-not-current": "Hon digarezit, ne c'haller ket reiñ an titouroù-mañ evit an adweloù kozh.",
        "pageinfo-header-basic": "Titouroù diazez",
index 9fd5248..ec73427 100644 (file)
        "passwordreset-emailtitle": "Detalji računa na {{SITENAME}}",
        "passwordreset-emailtext-ip": "Neko (vjerovatno Vi, s IP adrese $1) je zatražio podsjetnik Vaših detalja računa za {{SITENAME}} ($4). Sljedeći {{PLURAL:$3|račun korisnika je|računi korisnika su}} povezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena šifra|Ove privremene šifre}} će isteći za {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu šifru. Ako je neko drugi napravio ovaj zahtjev, ili ako ste se sjetili Vaše početne šifre, a ne želite je promijeniti, možete zanemariti ovu poruku i nastaviti koristiti staru šifru.",
        "passwordreset-emailtext-user": "Korisnik $1 na {{SITENAME}} je zatražio podsjetnik o detaljima Vašeg računa za {{SITENAME}} ($4). Sljedeći {{PLURAL:$3|korisnički račun je|korisnički računi su}} povezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena šifra|Ove privremene šifre}} će isteći za {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu šifru. Ako je neko drugi napravio ovaj zahtjev, ili ako ste se sjetili Vaše originalne šifre, a ne želite je više promijeniti, možete zanemariti ovu poruku i nastaviti koristiti staru šifru.",
-       "passwordreset-emailelement": "Korisničko ime: $1\nPrivremena šifra: $2",
+       "passwordreset-emailelement": "Korisničko ime: \n$1\n\nPrivremena šifra: \n$2",
        "passwordreset-emailsent": "Podsjetnik na lozinku poslan je na Vašu e-mail adresu.",
        "passwordreset-emailsent-capture": "Poslan je podsjetnik preko e-pošte (prikazano ispod).",
        "passwordreset-emailerror-capture": "E-poruka za resetiranje lozinke, prikazano ispod, poslana je, ali slanje {{GENDER:$2|korisniku|korisnici}} nije uspjelo: $1",
        "parser-unstrip-loop-warning": "Pronađena petlja",
        "parser-unstrip-recursion-limit": "Prekoračeno ograničenje rekurzije ($1)",
        "converter-manual-rule-error": "Pronađena je greška u pravilu za ručno pretvaranje jezika",
-       "undo-success": "Izmjena se može vratiti.\nMolimo da provjerite usporedbu ispod da budete sigurni da ovo želite uraditi, a zatim sačuvajte promjene da bi ste završili vraćanje izmjene.",
-       "undo-failure": "Izmjena se ne može vratiti zbog sukoba izmjena.",
-       "undo-norev": "Izmjena se ne može vratiti jer ne postoji ranija ili je obrisana.",
+       "undo-success": "Izmjenu je moguće poništiti.\nMolimo da ispod uporedite razlike u verzijama kako biste bili sigurni da ovo zaista želite uraditi, te sačuvajte stranicu i izmjene će biti poništene.",
+       "undo-failure": "Ova izmjena se ne može poništiti jer se međuverzije sukobe.",
+       "undo-norev": "Izmjena se ne može poništiti jer ne postoji ili je obrisana.",
        "undo-nochange": "Izgleda da je izmjena već vraćena.",
-       "undo-summary": "Vraćena izmjena $1 {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]])",
+       "undo-summary": "Poništena izmjena $1 {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]])",
        "undo-summary-username-hidden": "Poništi izmjenu $1 od skrivenog korisnika",
        "cantcreateaccounttitle": "Nije moguće napraviti korisnički račun",
        "cantcreateaccount-text": "Pravljenje korisničkog računa sa ove IP adrese ('''$1''') je blokirano od strane [[User:$3|$3]].\n\nRazlog koji je naveo $3 je ''$2''",
        "revdelete-concurrent-change": "Greška pri mijenjanju stavke od $2, $1: njen status je izmijenjen od strane nekog drugog dok ste je pokušavali mijenjati.\nMolimo provjerite zapise.",
        "revdelete-only-restricted": "Greška pri sakrivanju stavke od dana $2, $1: ne možete ukloniti stavke od pregledavanja administratora bez da odaberete neku od drugih opcija za uklanjanje.",
        "revdelete-reason-dropdown": "*Uobičajeni razlozi brisanja\n** Kršenje autorskih prava\n** Neprikladan komentar ili lični podac\n** Neprikladno korisničko ime\n** Uvredljivi podaci",
-       "revdelete-otherreason": "Ostali/dodatni razlog:",
+       "revdelete-otherreason": "Drugi/dodatni razlog:",
        "revdelete-reasonotherlist": "Ostali razlozi",
        "revdelete-edit-reasonlist": "Uredi razloge brisanja",
        "revdelete-offender": "Autor revizije:",
        "mergelog": "Zapisnik spajanja",
        "revertmerge": "Vrati spajanje",
        "mergelogpagetext": "Ispod je spisak nedavnih spajanja historija stranica.",
-       "history-title": "Historija izmjena stranice \"$1\"",
+       "history-title": "$1: Historija izmjena",
        "difference-title": "Razlike između verzija stranice \"$1\"",
        "difference-title-multipage": "Razlika između stranica \"$1\" i \"$2\"",
        "difference-multipage": "(Razlika između stranica)",
        "lineno": "Red $1:",
-       "compareselectedversions": "Uporedite označene verzije",
+       "compareselectedversions": "Uporedi označene verzije",
        "showhideselectedversions": "Pokaži/sakrij odabrane verzije",
-       "editundo": "vrati",
+       "editundo": "poništi",
        "diff-empty": "(Nema razlike)",
        "diff-multi-sameuser": "({{PLURAL:$1|Nije prikazana jedna međurevizija|Nisu prikazane $1 međurevizije}} istog korisnika)",
        "diff-multi-otherusers": "(Nije prikazana {{PLURAL:$1|jedna međuverzija|$1 međuverzija}} {{PLURAL:$2|drugog korisnika|$2 korisnika}})",
        "datedefault": "Nije bitno",
        "prefs-labs": "Eksperimentalne mogućnosti",
        "prefs-user-pages": "Korisničke stranice",
-       "prefs-personal": "Korisnički profil",
+       "prefs-personal": "Profil",
        "prefs-rc": "Nedavne izmjene",
-       "prefs-watchlist": "Praćeni članci",
-       "prefs-editwatchlist": "Uredi spisak praćenja",
-       "prefs-editwatchlist-label": "Uredi unose na spisku praćenja:",
-       "prefs-editwatchlist-edit": "Pregledaj i ukloni članke sa spiska praćenja",
-       "prefs-editwatchlist-raw": "Napredno uređivanje spiska praćenja",
-       "prefs-editwatchlist-clear": "Očisti spisak praćenja",
+       "prefs-watchlist": "Spisak praćenja",
+       "prefs-editwatchlist": "Uređivanje spiska praćenja",
+       "prefs-editwatchlist-label": "Uređivanje spiska:",
+       "prefs-editwatchlist-edit": "Uredi spisak",
+       "prefs-editwatchlist-raw": "Napredno uredi spisak",
+       "prefs-editwatchlist-clear": "Isprazni spisak",
        "prefs-watchlist-days": "Broj dana za prikaz u spisku praćenja:",
        "prefs-watchlist-days-max": "Najviše $1 {{PLURAL:$1|dan|dana}}",
        "prefs-watchlist-edits": "Najveći broj izmjena za prikaz u proširenom spisku praćenja:",
        "filedelete-success-old": "Verzija datoteke '''[[Media:$1|$1]]''' od $3, $2 je obrisana.",
        "filedelete-nofile": "'''$1''' ne postoji.",
        "filedelete-nofile-old": "Ne postoji arhivirana verzija '''$1''' sa navedenim atributima.",
-       "filedelete-otherreason": "Ostali/dodatni razlozi:",
+       "filedelete-otherreason": "Drugi/dodatni razlog:",
        "filedelete-reason-otherlist": "Ostali razlozi",
        "filedelete-reason-dropdown": "*Uobičajeni razlozi brisanja\n** Kršenje autorskih prava\n** Datoteka dvojnik",
        "filedelete-edit-reasonlist": "Uredi razloge brisanja",
        "deletionlog": "zapisnik brisanja",
        "reverted": "Vraćeno na raniju verziju",
        "deletecomment": "Razlog:",
-       "deleteotherreason": "Ostali/dodatni razlozi:",
+       "deleteotherreason": "Drugi/dodatni razlog:",
        "deletereasonotherlist": "Ostali razlozi",
        "deletereason-dropdown": "*Uobičajeni razlozi brisanja\n** Spam\n** Vandalizam\n** Kršenje autorskih prava\n** Zahtjev autora\n** Pokvareno preusmjerenje",
        "delete-edit-reasonlist": "Uredi razloge brisanja",
        "deleteprotected": "Ne možete obrisati ovu stranicu jer je zaštićena.",
        "deleting-backlinks-warning": "'''Upozorenje:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druge stranice]] sadrže link ili vode na stranicu koju brišete.",
        "rollback": "Vrati izmjene",
-       "rollbacklink": "ukloni",
+       "rollbacklink": "vrati",
        "rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}",
        "rollbacklinkcount-morethan": "vrati više od $1 {{PLURAL:$1|izmjene|izmjene|izmjena}}",
        "rollbackfailed": "Neuspešno vraćanje",
        "cantrollback": "Ne mogu vratiti izmjenu;\nposljednji autor je ujedno i jedini.",
        "alreadyrolled": "Ne može se vratiti posljednja izmjena [[:$1]] od korisnika [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); neko je već izmijenio ili vratio članak na prethodnu provjerenu verziju.\n\nPosljednju izmjenu napravio je korisnik [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Sažetak izmjene je bio: \"''$1''\".",
-       "revertpage": "Vraćene izmjene korisnika [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na posljednju izmjenu koju je napravio [[User:$1|$1]]",
+       "revertpage": "Vraćene izmjene {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na posljednju izmjenu {{GENDER:$1|korisnika|korisnice}} [[User:$1|$1]]",
        "revertpage-nouser": "Vraćene izmjene skrivenog korisnika na posljednju reviziju, koju je {{GENDER:$1|napravio|napravila}} [[User:$1|$1]]",
-       "rollback-success": "Poništene izmjene korisnika $1;\nvraćeno na posljednju verziju koju je sačuvao $2.",
+       "rollback-success": "Vraćene izmjene {{GENDER:$2|korisnika|korisnice}} $1 na posljednju verziju {{GENDER:$2|korisnika|korisnice}} $2.",
        "sessionfailure-title": "Greška u sesiji",
        "sessionfailure": "Izgleda da postoji problem sa vašom sesijom; ova akcija je otkazana kao prevencija protiv napadanja sesija. Kliknite \"back\" (''nazad'') i osvježite stranicu sa koje ste došli, i opet pokušajte.",
        "changecontentmodel": "Promijeni model sadržaja stranice",
        "modifiedarticleprotection": "{{GENDER:|promijenio|promijenila}} je stepen zaštite stranice \"[[$1]]\"",
        "unprotectedarticle": "uklonjena zaštita sa stranice \"[[$1]]\"",
        "movedarticleprotection": "podešavanja zaštite premještena sa \"[[$2]]\" na \"[[$1]]\"",
-       "protect-title": "Zaštićuje se \"$1\"",
+       "protect-title": "Mijenjate nivo zašite za \"$1\"",
        "protect-title-notallowed": "Pregled stepena zaštite za \"$1\"",
        "prot_1movedto2": "članak [[$1]] premješten na [[$2]]",
        "protect-badnamespace-title": "Nezaštitljiv imenski prostor",
        "protect-badnamespace-text": "Stranice u ovom imenskom prostoru ne mogu se zaštititi.",
        "protect-norestrictiontypes-text": "Ova stranica se ne može zaštititi jer nema dostupnih oblika ograničenja.",
        "protect-norestrictiontypes-title": "Nezaštitljiva strana",
-       "protect-legend": "Potvrdite zaštitu",
+       "protect-legend": "Potvrda zaštite",
        "protectcomment": "Razlog:",
        "protectexpiry": "Ističe:",
        "protect_expiry_invalid": "Upisani vremenski rok nije valjan.",
        "protect_expiry_old": "Upisani vremenski rok je u prošlosti.",
        "protect-unchain-permissions": "Otključaj daljnje opcije zaštite",
-       "protect-text": "Ovdje možete gledati i izmjeniti level zaštite za stranicu '''$1'''.",
+       "protect-text": "Ovdje možete pregledati i promijeniti nivo zaštite za stranicu <strong>$1</strong>.",
        "protect-locked-blocked": "Ne možete promijeniti nivo zaštite dok ste blokirani.\nOvo su trenutne postavke za stranicu '''$1''':",
        "protect-locked-dblock": "Nivoi zaštite ne mogu se mijenjati jer je aktivna baza podataka zaključana.\nTrenutna postavka za stranicu '''$1''' jest:",
        "protect-locked-access": "Nemate ovlasti za mijenjanje stepena zaštite.\nSlijede trenutne postavke stranice '''$1''':",
        "protect-expiring": "ističe $1 (UTC)",
        "protect-expiring-local": "ističe $1",
        "protect-expiry-indefinite": "neograničeno",
-       "protect-cascade": "Prenosiva zaštita - zaštiti sve stranice koje su uključene u ovu.",
+       "protect-cascade": "Zaštiti sve stranice koje su uključene u ovu (prenosiva zaštita)",
        "protect-cantedit": "Ne možete mijenjati nivo zaštite ove stranice, jer nemate prava da je uređujete.",
-       "protect-othertime": "Ostali period:",
-       "protect-othertime-op": "ostali period",
+       "protect-othertime": "Drugo vrijeme:",
+       "protect-othertime-op": "drugo vrijeme",
        "protect-existing-expiry": "Postojeće vrijeme isticanja: $3, $2",
        "protect-existing-expiry-infinity": "Postojeće vrijeme isteka: trajno",
-       "protect-otherreason": "Ostali/dodatni razlozi:",
+       "protect-otherreason": "Drugi/dodatni razlog:",
        "protect-otherreason-op": "Ostali razlozi",
        "protect-dropdown": "*Uobičajeni razlozi zaštite\n** Prekomjerni vandalizam\n** Prekomjerno spamovanje\n** Ne produktivni rat izmjena\n** Stranica velikog prometa",
-       "protect-edit-reasonlist": "Uredi razloge zaštićavanja",
+       "protect-edit-reasonlist": "Uredi razloge zaštićivanja",
        "protect-expiry-options": "1 sat:1 hour,1 dan:1 day,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,beskonačno:infinite",
        "restriction-type": "Dopuštenje:",
        "restriction-level": "Stepen ograničenja:",
        "ipbcreateaccount": "Spriječi pravljenje računa",
        "ipbemailban": "Onemogući korisnika da šalje e-mail",
        "ipbenableautoblock": "Automatski blokiraj posljednju IP-adresu koju je koristio ovaj korisnik i sve druge IP-adrese s kojih je pokušao uređivati",
-       "ipbsubmit": "Blokirajte ovog korisnika",
-       "ipbother": "Ostali period:",
+       "ipbsubmit": "Blokiraj ovog korisnika",
+       "ipbother": "Drugo vrijeme:",
        "ipboptions": "2 sata:2 hours,1 dan:1 day,3 dana:3 days,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,beskonačno:infinite",
        "ipbhidename": "Sakrij korisničko ime iz uređivanja i spiskova",
        "ipbwatchuser": "Prati korisničku stranicu i stranicu za razgovor ovog korisnika",
        "blocklist-nousertalk": "ne može uređivati vlastitu stranicu za razgovor",
        "ipblocklist-empty": "Spisak blokiranja je prazan.",
        "ipblocklist-no-results": "Tražena IP adresa ili korisničko ime nisu blokirani.",
-       "blocklink": "blokirajte",
+       "blocklink": "blokiraj",
        "unblocklink": "deblokiraj",
        "change-blocklink": "promijeni blokadu",
        "contribslink": "doprinosi",
        "tooltip-watchlistedit-raw-submit": "Ažuriraj spisak praćenja",
        "tooltip-recreate": "Ponovno pravljenje stranice iako je već brisana",
        "tooltip-upload": "Započni postavljanje",
-       "tooltip-rollback": "Brzo vraćanje izmjene(izmjena) ove stranice posljednjeg uređivača jednim klikom.",
-       "tooltip-undo": "Vraća posljednju izmjenu i otvara formu za uređivanje u modu pregleda.\nDopušta unos razloga u sažetak.",
+       "tooltip-rollback": "\"Vrati\" vraća izmjene posljednjeg uređivača jednim klikom",
+       "tooltip-undo": "Dugme \"poništi\" poništava ovu izmjenu, te otvara stranicu u režimu za uređivanje s pregledom izmjena koje će biti poništene. Također omogućava unošenje razloga poništenja u sažetak.",
        "tooltip-preferences-save": "Sačuvaj podešavanja",
        "tooltip-summary": "Unesite kratki sažetak",
        "common.css": "/* CSS umetnut ovdje primijenit će se na sve skinove */",
        "watchlistedit-raw-done": "Vaš spisak praćenja je ažuriran.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 naslov je dodan|$1 naslova su dodana|$1 naslova je dodano}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova je uklonjeno}}:",
-       "watchlistedit-clear-title": "Očišćen spisak nadgledanja",
-       "watchlistedit-clear-legend": "Očisti spisak nadgledanja",
-       "watchlistedit-clear-explain": "Svi naslovi će biti uklonjeni iz vašeg spiska nadgledanja",
+       "watchlistedit-clear-title": "Pražnjenje spiska praćenja",
+       "watchlistedit-clear-legend": "Isprazni spisak praćenja",
+       "watchlistedit-clear-explain": "Sve stranice će biti uklonjene iz Vašeg spiska praćenja",
        "watchlistedit-clear-titles": "Naslovi:",
-       "watchlistedit-clear-submit": "Isprazni spisak nadgledanja (Ovo je trajno!)",
+       "watchlistedit-clear-submit": "Isprazni spisak praćenja (Ovo je nepovratno!)",
        "watchlistedit-clear-done": "Vaš spisak praćenja je očišćen.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova su uklonjena|$1 naslova je uklonjeno}}:",
        "watchlistedit-too-many": "Ima previše stranica za prikaz ovdje.",
        "htmlform-int-toohigh": "Vrijednost koju ste naveli je iznad maksimuma od $1",
        "htmlform-required": "Ova vrijednost je obavezna",
        "htmlform-submit": "Pošalji",
-       "htmlform-reset": "Vrati izmjene",
+       "htmlform-reset": "Poništi izmjene",
        "htmlform-selectorother-other": "Ostalo",
        "htmlform-no": "Ne",
        "htmlform-yes": "Da",
index 375af4d..189d882 100644 (file)
        "actionthrottled": "Acció limitada",
        "actionthrottledtext": "Com a mesura per a prevenir la propaganda indiscriminada (spam), no podeu fer aquesta acció tantes vegades en un període de temps tan curt. Torneu-ho a intentar d'ací uns minuts.",
        "protectedpagetext": "S'ha protegit la pàgina per evitar-hi modificacions.",
-       "viewsourcetext": "Podeu visualitzar i copiar el codi font d’aquesta pàgina:",
+       "viewsourcetext": "Podeu veure i copiar el codi font d’aquesta pàgina.",
        "viewyourtext": "Vostè pot veure i copiar la font de <strong>les teves modificacions</strong> d'aquesta pàgina.",
        "protectedinterface": "Aquesta pàgina proporciona el text de la interfície del software d'aquest wiki i està protegida per evitar els abusos.\nPer afegir o canviar les traduccions per a tots els wikis, feu servir [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
        "editinginterface": "'''Avís:''' esteu editant una pàgina que s'utilitza per proporcionar text d'interfície per al programari. Els canvis que es facin a la pàgina afectaran l'aparença de la interfície d'altres usuaris del wiki.",
        "createacct-benefit-body2": "{{PLURAL:$1|pàgina|pàgines}}",
        "createacct-benefit-body3": "{{PLURAL:$1|col·laborador recent|col·laboradors recents}}",
        "badretype": "Les contrasenyes que heu introduït no coincideixen.",
+       "usernameinprogress": "La creació d'un compte per a aquest usuari ja està en curs. Espereu.",
        "userexists": "El nom que heu entrat ja és en ús.\nEscolliu-ne un de diferent.",
        "loginerror": "Error d'inici de sessió",
        "createacct-error": "Error de creació de compte",
        "passwordreset-emailtitle": "Detalls del compte a {{SITENAME}}",
        "passwordreset-emailtext-ip": "Algú (vós mateix segurament, des de l'adreça IP $1) ha demanat una reinicialització de la vostra contrasenya al projecte {{SITENAME}} ($4). {{PLURAL:$3|El següent compte d'usuari està associat|Els següents comptes d'usuari estan associats}} amb aquesta adreça de correu electrònic:\n\n$2\n\n{{PLURAL:$3|Aquesta contrasenya temporal caducarà|Aquestes contrasenyes temporals caducaran}} en {{PLURAL:$5|un dia|$5 dies}}.\nHauríeu d'entrar al compte per a fixar-hi una nova contrasenya al més aviat possible. Si algú que no sou vós és qui ha fet aquesta petició o si heu recordat la contrasenya original i ja no la voleu canviar, podeu ignorar aquest missatge i seguir utilitzant la vostra antiga contrasenya.",
        "passwordreset-emailtext-user": "L'usuari $1 de {{SITENAME}} ha demanat una reinicialització de la vostra contrasenya per al projecte {{SITENAME}} ($4). {{PLURAL:$3|El següent compte d'usuari està associat|Els següents comptes d'usuari estan associats}} amb aquesta adreça de correu electrònic:\n\n$2\n\n{{PLURAL:$3|Aquesta contrasenya temporal caducarà|Aquestes contrasenyes temporals caducaran}} en {{PLURAL:$5|un dia|$5 dies}}.\nHauríeu d'entrar ara per fixar una nova contrasenya. Si algú que no sou vós és qui ha fet aquesta petició o si heu recordat la contrasenya original i ja no la voleu canviar, podeu ignorar aquest missatge i seguir utilitzant la vostra antiga contrasenya.",
-       "passwordreset-emailelement": "Nom d'usuari: $1\nContrasenya temporal: $2",
+       "passwordreset-emailelement": "Nom d'usuari: \n$1\n\nContrasenya temporal: \n$2",
        "passwordreset-emailsent": "S'ha enviat un correu de reinicialització de contrasenya.",
        "passwordreset-emailsent-capture": "S'ha enviat un correu electrònic de reinicialització de contrasenya, tal com es mostra a continuació.",
        "passwordreset-emailerror-capture": "S'ha generat un correu electrònic de renovació de contrasenya, que es mostra a continuació, però ha fallat l'enviament a {{GENDER:$2:l'usuari|la usuària}}: $1",
        "columns": "Columnes",
        "searchresultshead": "Preferències de la cerca",
        "stub-threshold": "Límit per a formatar l'enllaç com <a href=\"#\" class=\"stub\">esborrany</a> (en octets):",
+       "stub-threshold-sample-link": "mostra",
        "stub-threshold-disabled": "Inhabilitat",
        "recentchangesdays": "Dies a mostrar en els canvis recents:",
        "recentchangesdays-max": "(màxim $1 {{PLURAL:$1|dia|dies}})",
        "changecontentmodel-nodirectediting": "El model de contingut $1 no permet l'edició directa",
        "log-name-contentmodel": "Registre de canvis del model de contingut",
        "log-description-contentmodel": "Esdeveniments relacionats amb els models de contingut d'una pàgina",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|ha canviat}} el model de contingut de la pàgina $3 de «$4» a «$5»",
        "logentry-contentmodel-change-revertlink": "reverteix",
        "logentry-contentmodel-change-revert": "reverteix",
        "protectlogpage": "Registre de protecció",
        "undeletepage": "Mostra i restaura pàgines esborrades",
        "undeletepagetitle": "'''A continuació teniu revisions eliminades de [[:$1]]'''.",
        "viewdeletedpage": "Visualitza les pàgines eliminades",
-       "undeletepagetext": "S'ha eliminat {{PLURAL:|la pàgina $1, però encara és a l'arxiu i pot ser restaurada|les pàgines $1, però encara són a l'arxiu i poden ser restaurades}}. Es Pot netejar l'arxiu periòdicament.",
+       "undeletepagetext": "{{PLURAL:|S'ha eliminat la pàgina següent, però encara és a l'arxiu i pot ser restaurada|S'han eliminat les $1 pàgines següents, però encara són a l'arxiu i poden ser restaurades}}.\nL'arxiu pot ser netejat periòdicament.",
        "undelete-fieldset-title": "Restaura revisions",
        "undeleteextrahelp": "Per a restaurar l'historial sencer de la pàgina, deixeu totes les caselles sense seleccionar i feu clic a '''''{{int:undeletebtn}}'''''.\nPer a realitzar una restauració selectiva, marqueu les caselles que corresponguin a les revisions que voleu recuperar, i feu clic a '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "{{PLURAL:$1|Una revisió arxivada|$1 revisions arxivades}}",
+       "undeleterevisions": "{{PLURAL:$1|Una revisió suprimida|$1 revisions suprimides}}",
        "undeletehistory": "Si restaureu la pàgina, totes les revisions seran restaurades a l'historial.\n\nSi s'hagués creat una nova pàgina amb el mateix nom d'ençà que la vàreu esborrar, les versions restaurades apareixeran abans a l'historial.",
        "undeleterevdel": "No es revertirà l'eliminació si això provoca la supressió parcial de la pàgina superior.\n\nEn aqueixos casos, heu de desmarcar o mostrar les revisions eliminades més noves.",
        "undeletehistorynoadmin": "S'ha eliminat la pàgina. El motiu es mostra\nal resum a continuació, juntament amb detalls dels usuaris que l'havien editat abans de la seua eliminació. El text de les revisions eliminades només és accessible als administradors.",
        "sp-contributions-blocked-notice-anon": "En aquests moments, aquesta adreça IP es troba blocada.\nPer més detalls, la última entrada del registre es mostra a continuació:",
        "sp-contributions-search": "Cerca les contribucions",
        "sp-contributions-username": "Adreça IP o nom d'usuari:",
-       "sp-contributions-toponly": "Mostra només revisions superiors",
+       "sp-contributions-toponly": "Mostra només les darreres revisions",
        "sp-contributions-newonly": "Mostra només modificacions que són creacions de pàgina",
        "sp-contributions-submit": "Cerca",
        "whatlinkshere": "Què hi enllaça",
        "tooltip-ca-nstab-main": "Vegeu el contingut de la pàgina",
        "tooltip-ca-nstab-user": "Vegeu la pàgina d'usuari",
        "tooltip-ca-nstab-media": "Vegeu la pàgina de l'element multimèdia",
-       "tooltip-ca-nstab-special": "Aquesta és una pàgina especial, no podeu modificar-la",
+       "tooltip-ca-nstab-special": "Aquesta és una pàgina especial i no pot modificar-se",
        "tooltip-ca-nstab-project": "Vegeu la pàgina del projecte",
        "tooltip-ca-nstab-image": "Visualitza la pàgina del fitxer",
        "tooltip-ca-nstab-mediawiki": "Vegeu el missatge de sistema",
index 217863f..8350f12 100644 (file)
        "unprotect": "ГӀароллех къаста",
        "unprotectthispage": "ГӀароллех къаста",
        "newpage": "Керла агӀонаш",
-       "talkpage": "Дийцаре йила хӀара агӀо",
+       "talkpage": "Ð\94ийÑ\86аÑ\80е Ð¹Ð¸Ð»Ð»Ð° Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о",
        "talkpagelinktext": "Дийцаре",
        "specialpage": "Белхан агӀо",
        "personaltools": "Долахь болу гӀирсаш",
        "youhavenewmessagesfromusers": "Хьуна кхачанна $1 {{PLURAL:$3|1=$3 декъашхочунгара|$3 декъашхошкара}} ($2).",
        "youhavenewmessagesmanyusers": "Хьона еъна $1 дукху декъашхошкар ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|керла хаам|999=керла хаамаш}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|Ñ\82Ó\80аÑ\8cÑ\85Ñ\8cаÑ\80а Ð±Ð¸Ð½Ð° Ñ\85ийÑ\86ам|999=Ñ\82Ó\80аÑ\8cхьара бина хийцамаш}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|Ñ\82Ó\80аÑ\8cÑ\85Ñ\85Ñ\8cаÑ\80а Ð±Ð¸Ð½Ð° Ñ\85ийÑ\86ам|999=Ñ\82Ó\80аÑ\8cÑ\85хьара бина хийцамаш}}",
        "youhavenewmessagesmulti": "Хьуна кхаьчна керла хаам оцу $1",
        "editsection": "нисъе",
        "editold": "нисъе",
        "viewsource-title": "Агӏона $1 дуьххьарлера йозане хьажар",
        "actionthrottled": "Сиххалин доза тохар",
        "actionthrottledtext": "Спам цахилийта хӀара дешдерг кӀезиг хенахь дукху ца дайта дихкина ду. Дехар до массийта минот яьлча гӀорта.",
-       "protectedpagetext": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð´Ó\80акÑ\8aоÑ\8cвлина Ñ\8e Ñ\82адаÑ\80Ñ\88 Ñ\86а Ð´айта.",
+       "protectedpagetext": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð»Ð°Ñ\80йина Ñ\8e Ñ\85ийÑ\86амаÑ\88 Ñ\86а Ð±айта.",
        "viewsourcetext": "Хьоьга далундерг хьажар а дезахь хlокху агlон чура йоза хьаэцар:",
        "viewyourtext": "Хьан йиш ю '''хьой нисдинчу''' дӀадолалун йозе хьажа а, цуна копи ян а:",
        "protectedinterface": "ХӀокху агӀона чохь интерфейсан программа латторан хаам бу. Зулам ца дайта цуна хийцам бан куьйгалхошна бен цало.\nХӀокху хааман гоч тӀетоха я хийца лелае локализацин сайт MediaWiki [//translatewiki.net/ translatewiki.net]",
        "passwordreset-emailtitle": "{{SITENAME}}: декъашхочун дӀаяздарх лаьцна хаам",
        "passwordreset-emailtext-ip": "{{SITENAME}} ($4) проектехь цхьам я ахьа хӀокху IP-адрес $1 тӀера хьа декъашхочун пароль кхоссар дехна,\nоьцу электронан адресца дихкина ду {{PLURAL:$3|1хӀара декъашхочун дӀаяздар|хӀара декъашхочун дӀаяздар}}:\n\n$2\n\n{{PLURAL:$3|ХӀара хана пароль|ХӀара хана паролаш}} лелар ю {{PLURAL:$5|$5 дийнахь}}.\nСистемин чугӀой харжа керла пароль. \nХьой пароль кхоссар дехна дацахь я хьалхалера пароль дага еънехь хӀума цадеш Ӏад битта хӀара хаам хьа йиш ю шира пароль лелаян.",
        "passwordreset-emailtext-user": "{{SITENAME}} ($4) проектера декъашхочо $1 хьа декъашхочун пароль кхоссар дехна,\nоьцу электронан адресца дихкина ду {{PLURAL:$3|1хӀара декъашхочун дӀаяздар|хӀара декъашхочун дӀаяздар}}:\n\n$2\n\n{{PLURAL:$3|ХӀара хана пароль|ХӀара хана паролаш}} лелар ю {{PLURAL:$5|$5 дийнахь}}.\nСистемин чугӀой харжа керла пароль. \nХьой пароль кхоссар дехна дацахь я хьалхалера пароль дага еънехь хӀума цадеш Ӏад битта хӀара хаам хьа йиш ю шира пароль лелаян.",
-       "passwordreset-emailelement": "Декъашхочун цӀе: $1\nХанна йолу пароль: $2",
+       "passwordreset-emailelement": "Декъашхочун цӀе: \n$1\n\nХанна йолу пароль: \n$2",
        "passwordreset-emailsent": "Электронан хаам баийтина кхоьссинчу паролах лаьцна хаам чохь болуш.",
        "passwordreset-emailsent-capture": "Электронан хаам баийтина кхоьссинчу паролах лаьцна хаам чохь болуш. \nцуна йозане хьажа йиш ю лахахь.",
        "passwordreset-emailerror-capture": "Пароль кхоссаран хаам чохь болуш электронан кехат кхоьллина, цуна йоза хьажа йиш ю лахахь, амма иза {{GENDER:$2|декъашхочунга}} дӀадахьийта тар цаделира бахьнехь: $1",
        "permissionserrorstext": "Хьан бакъо яц кхочуш хилийта хийцам оцу {{PLURAL:$1|1=шолгlа бахьанца|шолгlа бахьанашца}}:",
        "permissionserrorstext-withaction": "Хьан бакъо яц хlумда «'''$2'''» оцу {{PLURAL:$1|1=шолгlа бахьанца|шолгlа бахьанашца}}:",
        "recreate-moveddeleted-warn": "'''Тидам бе. Ахьа кхуллуш ю, хьалхо дӀаяьккхина йолу агӀо.'''\n\nХьажа, билгалла оьши хьуна хӀара агӀо юха кхолла.\nЛахахь далина ду дӀаяхарш тӀяхь долу тептарш а хӀокх агӀона цӀе хийцарш а.",
-       "moveddeleted-notice": "Ð\98за Ð°Ð³Ó\80о Ð´Ó\80аÑ\8fÑ\8cккÑ\85ина Ñ\8fÑ\80а.\nХаийÑ\82аÑ\80на Ð»Ð°Ñ\85аÑ\85Ñ\8cа Ð³Ð¾Ð¹Ñ\82Ñ\83, Ñ\86Ñ\83Ñ\8cнÑ\86а Ð´Ð¾Ð»Ñ\83 Ð´Ó\80аÑ\8fздаÑ\80Ñ\88 ÐºÑ\85Ñ\83 Ñ\82епÑ\82аÑ\80 Ñ\87Ñ\83Ñ\80а Ð´Ó\80аÑ\8fÑ\85аÑ\80Ñ\88 Ð° цӀе хийцарш а.",
+       "moveddeleted-notice": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð´Ó\80аÑ\8fÑ\8cккÑ\85ина Ñ\8fÑ\80а.\nÐ\9bаÑ\85аÑ\85Ñ\8cа Ð³Ð¾Ð¹Ñ\82Ñ\83 Ñ\85Ó\80аÑ\80а Ð´Ó\80аккÑ\85аÑ\80Ñ\88 Ð°, цӀе хийцарш а.",
        "log-fulllog": "Хьажа деригге тептаре",
        "edit-hook-aborted": "Нисдар юхадаьккхина тӀехьожучо.\nХӀу бахьана ду билгал дина дац.",
        "edit-gone-missing": "АгӀо карлаяккха цатарло.\nИза дӀаяьккхина хила мега.",
        "enhancedrc-history": "истори",
        "recentchanges": "Керла нисдарш",
        "recentchanges-legend": "Керлачу хийцамийн нисдарш",
-       "recentchanges-summary": "Лахахь гайтина хене хьаьжжина Википедин агӀонашкахь тӀаьхьара бина хийцамаш",
+       "recentchanges-summary": "Ð\9bаÑ\85аÑ\85Ñ\8c Ð³Ð°Ð¹Ñ\82ина Ñ\85ене Ñ\85Ñ\8cаÑ\8cжжина Ð\92икипедин Ð°Ð³Ó\80онаÑ\88каÑ\85Ñ\8c Ñ\82Ó\80аÑ\8cÑ\85Ñ\85Ñ\8cаÑ\80а Ð±Ð¸Ð½Ð° Ñ\85ийÑ\86амаÑ\88",
        "recentchanges-noresult": "Билгал йинчу хенахь цхьа хийцамаш бина бац.",
        "recentchanges-feed-description": "Тергам бе тӀаьххьара вики хийцаман хӀокху ларца.",
        "recentchanges-label-newpage": "Оцу нисдарца кхоьллина керла агӀо.",
        "protectlogpage": "Ларяран тептар",
        "protectlogtext": "Лахахь гойту агӀо лаъръяран хийцамаш чохь болу тептар.\nХьа кхин йиш ю [[Special:ProtectedPages|хӀинца ларйина йолу агӀонийн могӀаме хьажа]].",
        "protectedarticle": "Ларйина агӀо «[[$1]]»",
-       "modifiedarticleprotection": "агӀонан ларяран локхалла хийцина «[[$1]]»",
-       "unprotectedarticle": "ГӀоролла дӀадаьстина «[[$1]]»",
+       "modifiedarticleprotection": "«[[$1]]» агӀонан ларяран локхалла хийцина",
+       "unprotectedarticle": "«[[$1]]» ларъяр дӀадаьстина",
        "movedarticleprotection": "«[[$2]]» агӀона тӀера ларъяр «[[$1]]» агӀона тӀе даьккхина",
        "protect-title": "Ларъяр: «$1»",
        "protect-title-notallowed": "ГӀораллин бараме хьажар «$1»",
        "logentry-merge-merge": "$1 {{GENDER:$2|вовшахтоьхна}} $3 $4 чохь ($5 кхаччалц версеш)",
        "logentry-move-move": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4 дӀасахьажорг цаюьтуш",
-       "logentry-move-move_redir": "$1 {{GENDER:$2|Ñ\86Ó\80е Ñ\85ийÑ\86ина}} $3 â\86\92 $4 Ð´Ó\80аÑ\81аÑ\85Ñ\8cажоÑ\80ан Ñ\82Ó\80охул",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|Ñ\86Ó\80е Ñ\85ийÑ\86ина}} $3 â\86\92 $4 Ð´Ó\80аÑ\81аÑ\85Ñ\8cажоÑ\80ан Ñ\82Ó\80ехул",
        "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",
index 2fba2bd..48c7193 100644 (file)
        "disclaimers": "نابەرپرسییەکان",
        "disclaimerpage": "Project:بەرپرسنەبوون",
        "edithelp": "ڕێنوێنیی دەستکاریکردن",
+       "helppage-top-gethelp": "یارمەتی",
        "mainpage": "دەستپێک",
        "mainpage-description": "دەستپێک",
        "policy-url": "Project: سیاسەت",
        "passwordreset-emailtitle": "وردەکارییەکانی ھەژمار لە {{SITENAME}}",
        "passwordreset-emailtext-ip": "‫کەسێک (لەوانەیە خۆت، بە ناونیشانی ئایپیی $1) داوای ڕیسێتکردنەوەی تێپەڕوشەکەت لە {{SITENAME}}دا ($4) کردووە. {{PLURAL:$3|ھەژماری بەکارھێنەریی ژێرەوە پەیوەندیی ھەیە|ھەژمارە بەکارھێنەرییەکانی ژێرەوە پەیوەندییان ھەیە}} بەم ناونیشانەی ئیمەیلەوە:\n\n$2\n\n{{PLURAL:$3|ئەم تێپەڕوشە کاتییە|ئەم تێپەڕوشە کاتییانە}} لە {{PLURAL:$5|ڕۆژێک|$5 ڕۆژ}}دا بەسەردەچێت.\nدەبێ بچیتە ژوورەوە و ھەر ئێستا تێپەڕوشەیەکی نوێ ھەڵبژێریت. ئەگەر کەسێکی تر ئەم داواکارییەی کردووە،\nیان ئەگەر تێپەڕوشە سەرەتاییەکەت ھاتووەتەوە بیرت و ئیتر ناتەوێ بیگۆڕی، دەتوانی گوێ بەم پەیامە نەدەیت و ھەر لە تێپەڕوشە کۆنەکەت کەڵک وەربگریت.",
        "passwordreset-emailtext-user": "‫بەکارھێنەر $1 لە {{SITENAME}} ڕیسێتکردنەوەی تێپەڕوشەکەت لە {{SITENAME}}دا ($4) کردووە. {{PLURAL:$3|ھەژماری بەکارھێنەریی ژێرەوە پەیوەندیی ھەیە|ھەژمارە بەکارھێنەرییەکانی ژێرەوە پەیوەندییان ھەیە}} بەم ناونیشانەی ئیمەیلەوە:\n\n$2\n\n{{PLURAL:$3|ئەم تێپەڕوشە کاتییە|ئەم تێپەڕوشە کاتییانە}} لە {{PLURAL:$5|ڕۆژێک|$5 ڕۆژ}}دا بەسەردەچێت.\nدەبێ بچیتە ژوورەوە و ھەر ئێستا تێپەڕوشەیەکی نوێ ھەڵبژێریت. ئەگەر کەسێکی تر ئەم داواکارییەی کردووە، یان ئەگەر تێپەڕوشە سەرەتاییەکەت ھاتووەتەوە بیرت و ئیتر ناتەوێ بیگۆڕی، \nدەتوانی گوێ بەم پەیامە نەدەیت و ھەر لە تێپەڕوشە کۆنەکەت کەڵک وەربگریت.",
-       "passwordreset-emailelement": "ناوی بەکارھێنەری: $1\nتێپەڕوشەی کاتی: $2",
+       "passwordreset-emailelement": "ناوی بەکارھێنەری: \n$1\n\nتێپەڕوشەی کاتی: \n$2",
        "passwordreset-emailsent": "ئیمەیلێکی ڕیسێتکردنەوەی تێپەڕوشە نێردرا.",
        "passwordreset-emailsent-capture": "ئیمەیلێکی ڕیسێتکردنەوەی تێپەڕوشە نێردرا، کە لە ژێرەوە نیشان دراوە.",
        "passwordreset-emailerror-capture": "ئیمەیلێکی ڕیسێتکردنەوەی تێپەڕوشە نێردرا، کە لە ژێرەوە نیشان دراوە، بەڵام ناردنەکەی بۆ {{GENDER:$2|بەکارھێنەر}} سەرکەوتوو نەبوو: $1",
        "search-section": "(بەشی $1)",
        "search-category": "(پۆلی $1)",
        "search-suggest": "ئایا مەبەستت ئەمە بوو: $1",
+       "search-rewritten": "نیشاندانی ئاکامەکان بۆ $1. لە جیات ئەو لە $2 بگەڕێ.",
        "search-interwiki-caption": "پرۆژە خوشکەکان",
        "search-interwiki-default": "ئاکام لە $1:",
        "search-interwiki-more": "(زیاتر)",
        "hide": "بشارەوە",
        "show": "نیشان بدە",
        "minoreditletter": "ب",
-       "newpageletter": "نوێ",
+       "newpageletter": "ن",
        "boteditletter": "بۆت",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|بەکارھێنەر}}ی چاودێر]",
        "rc_categories": "بەرتەسک‌کردنەوە بە هاوپۆلەکان (به «|» جیای بکەوە‌)",
        "sp-contributions-toponly": "تەنیا ئەو دەستکارییانە نیشان بدە کە دوایین پێداچوونەوەن",
        "sp-contributions-newonly": "تەنیا ئەو دەستکارییانە نیشان بدە کە دروستکردنی پەڕەن",
        "sp-contributions-submit": "بگەڕێ",
-       "whatlinkshere": "پەیوەندیدار بە ئێرەوە",
+       "whatlinkshere": "بەستەرەکان بە ئێرەوە",
        "whatlinkshere-title": "ئەو پەڕانەی بەستەریان ھەیە بۆ «$1»",
        "whatlinkshere-page": "پەڕە:",
        "linkshere": "پەڕەکانی ژێرەوە بەستەر دراون بۆ <strong>[[:$1]]</strong>:",
        "import-interwiki-history": "هەموو مێژووی پێداچوونەوەکانی ئەم پەڕەیە کۆپی بکە",
        "import-interwiki-templates": "ھەموو داڕێژەکان لەخۆبگرێتەوە",
        "import-interwiki-submit": "هاوردە بکە",
+       "import-mapping-default": "ھەر لە شوێنی خۆی ھاوردە بکە",
+       "import-mapping-namespace": "لەم بۆشایی ناوەدا ھاوردە بکە:",
+       "import-mapping-subpage": "وەک ژێرپەڕەی ئەم پەڕەیە ھاوردە بکە:",
        "import-upload-filename": "ناوی پەڕگە‌:",
        "import-comment": "بۆچوون:",
        "importtext": "تکایە پەڕگەکە لە ویکی سەرچاوەوە بە کەڵک وەرگرتن لە [[Special:Export|ئامێری ھەناردن]] ھەناردە بکە.\nلەسەر کۆمپیۆتەرەکەت پاشەکەوتی بکە و لێرە باری بكە.",
index 51c0571..aee7150 100644 (file)
        "passwordreset-emailtitle": "Informace k účtu na {{grammar:6sg|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Někdo (patrně vy, z IP adresy $1) zažádal na {{grammar:6sg|{{SITENAME}}}} ($4) o nastavení nového hesla k vašemu účtu. K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:\n\n$2\n\n{{PLURAL:$3|Toto dočasné heslo|Tato dočasná hesla}} vyprší za {{PLURAL:$5|jeden den|$5 dny|$5 dnů}}.\nNyní byste se měli přihlásit a zvolit si nové heslo. Pokud tento požadavek poslal někdo jiný nebo jste si na své staré heslo vzpomněli, a nechcete ho tedy změnit, můžete tuto zprávu ignorovat a nadále používat původní heslo.",
        "passwordreset-emailtext-user": "{{gender:$1|Uživatel|Uživatelka}} $1 na {{grammar:6sg|{{SITENAME}}}} {{gender:$1|zažádal|zažádala}} na {{grammar:6sg|{{SITENAME}}}} ($4) o nastavení nového hesla k vašemu\núčtu. K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:\n\n$2\n\n{{PLURAL:$3|Toto dočasné heslo|Tato dočasná hesla}} vyprší {{PLURAL:$5|za jeden den|za $5 dny|za $5 dnů}}.\nNyní byste se měl(a) přihlásit a zvolit si nové heslo. Pokud tento požadavek\nposlal někdo jiný nebo jste si na své staré heslo vzpomněl(a), a nechcete ho\ntedy změnit, můžete tuto zprávu ignorovat a nadále používat původní heslo.",
-       "passwordreset-emailelement": "Uživatelské jméno: $1\nDočasné heslo: $2",
+       "passwordreset-emailelement": "Uživatelské jméno: \n$1\n\nDočasné heslo: \n$2",
        "passwordreset-emailsent": "E-mail pro získání nového hesla byl odeslán.",
        "passwordreset-emailsent-capture": "Byl odeslán e-mail pro získání nového hesla, který je zobrazen níže.",
        "passwordreset-emailerror-capture": "Byl vygenerován e-mail pro získání nového hesla, který je zobrazen níže, ale {{GENDER:$2|uživateli|uživatelce}} se ho nepodařilo odeslat: $1",
        "rows": "Řádky",
        "columns": "Sloupce",
        "searchresultshead": "Vyhledávání",
-       "stub-threshold": "Limit pro formátování odkazu jako <a href=\"#\" class=\"stub\">pahýl</a> (v bajtech):",
+       "stub-threshold": "Limit pro formátování odkazu jako pahýl ($1):",
+       "stub-threshold-sample-link": "příklad",
        "stub-threshold-disabled": "Vypnuto",
        "recentchangesdays": "Počet dní zobrazených v posledních změnách:",
        "recentchangesdays-max": "Maximálně $1 {{PLURAL:$1|den|dny|dní}}",
        "upload-copy-upload-invalid-domain": "Načítání kopírováním není dostupné z této domény.",
        "upload-dialog-title": "Načtení souboru",
        "upload-dialog-error": "Došlo k chybě",
+       "upload-dialog-warning": "Objevilo se upozornění",
        "upload-dialog-button-cancel": "Storno",
        "upload-dialog-button-done": "Hotovo",
        "upload-dialog-button-save": "Uložit",
        "upload-dialog-button-upload": "Načíst",
+       "upload-dialog-label-select-file": "Výběr souboru",
+       "upload-dialog-label-infoform-title": "Podrobnosti",
+       "upload-dialog-label-infoform-name": "Název",
+       "upload-dialog-label-infoform-description": "Popis",
+       "upload-dialog-label-usage-title": "Použití",
        "upload-dialog-label-usage-filename": "Jméno souboru",
        "backend-fail-stream": "Soubor $1 nelze streamovat.",
        "backend-fail-backup": "Soubor $1 nelze zazálohovat.",
        "booksources-text": "Níže je seznam odkazů na servery prodávající knihy, nebo které mohou mít další informace o knihách, které hledáte.",
        "booksources-invalid-isbn": "Zadané ISBN se zdá být neplatné. Zkontrolujte jej s originálním zdrojem.",
        "specialloguserlabel": "Původce:",
-       "speciallogtitlelabel": "Cíl (název nebo uživatel):",
+       "speciallogtitlelabel": "Cíl (název nebo {{ns:user}}:Jméno pro uživatele):",
        "log": "Protokolovací záznamy",
        "all-logs-page": "Všechny veřejné záznamy",
        "alllogstext": "Společné zobrazení všech dostupných protokolovacích záznamů pro {{grammar:4sg|{{SITENAME}}}}.\nZobrazení můžete zúžit výběrem typu záznamu, uživatelského jména (záleží na velikosti písmen) nebo dotčené stránky (také záleží na velikosti písmen).",
index 47bd2c8..dba2662 100644 (file)
        "table_pager_limit": "Страница çинче $1 кăтарт",
        "table_pager_limit_submit": "Ту",
        "table_pager_empty": "Тупăнмарĕ",
-       "autosumm-blank": "Статьяна тĕппипех кăларса пăрахнă",
+       "autosumm-blank": "Статьяна йăлтах пушатрĕ",
        "autosumm-replace": "Страницăн ăшлăхне «$1» çине улăштарнă",
        "autoredircomment": "[[$1]] çине куçарни",
        "autosumm-new": "Çĕнĕ страница \"$1\"",
index 20b5624..e162552 100644 (file)
        "passwordreset-emailtitle": "Manylion eich cyfrif ar {{SITENAME}}",
        "passwordreset-emailtext-ip": "Mae rhywun (chi yn ôl pob tebyg, o'r cyfeiriad IP $1) wedi gofyn am ailosod eich cyfrinair ar {{SITENAME}} ($4). Mae'r {{PLURAL:$3|cyfrif|cyfrif|cyfrifon}} canlynol ynghlwm wrth y cyfeiriad e-bost hwn:\n\n$2\n\nBydd y {{PLURAL:$3||cyfrinair dros dro hwn|cyfrineiriau dros dro hyn}} yn dod i ben ymhen {{PLURAL:$5||diwrnod |deuddydd|tridiau|$5 diwrnod}}. Dylech fewngofnodi nawr a dewis cyfrinair newydd. Os mai rhywun arall a ofynodd am ailosod y cyfrinair, neu os ydych wedi cofio eich cyfrinair gwreiddiol, neu os nad ydych am ei newid bellach, gallwch anwybyddu'r neges hon a pharhau i ddefnyddio eich hen gyfrinair.",
        "passwordreset-emailtext-user": "Gofynodd y defnyddiwr $1 ar {{SITENAME}} am gael ailosod ei gyfrinair ar {{SITENAME}}\n($4). Mae'r {{PLURAL:$3||cyfrif|cyfrifon}} canlynol ynghlwm wrth y cyfeiriad e-bost hwn:\n\n$2\n\nBydd y {{PLURAL:$3||cyfrinair|cyfrineiriau}} dros dro hyn yn dod i ben ymhen {{PLURAL:$5||diwrnod|deuddydd|tridiau|$5 diwrnod}}.\nDylech fewngofnodi nawr a dewis cyfrinair newydd. Os mai rhywun arall a ofynodd am ailosod y cyfrinair, neu os ydych wedi cofio eich cyfrinair gwreiddiol, neu os nad ydych am ei newid bellach, gallwch anwybyddu'r neges hon a pharhau i ddefnyddio eich hen gyfrinair.",
-       "passwordreset-emailelement": "Enw'r defnyddiwr: $1\nY cyfrinair dros dro: $2",
+       "passwordreset-emailelement": "Enw'r defnyddiwr: \n$1\n\nY cyfrinair dros dro: \n$2",
        "passwordreset-emailsent": "Anfonwyd e-bost i ailosod eich cyfrinair atoch.",
        "passwordreset-emailsent-capture": "Anfonwyd e-bost i ailosod cyfrinair, ac fe'i ddangosir isod.",
        "passwordreset-emailerror-capture": "Lluniwyd e-bost i ailosod cyfrinair fel ag a welir isod, ond ni lwyddwyd i'w anfon at y {{GENDER:$2|defnyddiwr}}: $1",
        "emailuser": "Anfon e-bost at y defnyddiwr hwn",
        "emailuser-title-target": "Ebostio'r {{GENDER:$1|defnyddiwr hwn}}",
        "emailuser-title-notarget": "Anfon e-bost at ddefnyddiwr",
-       "emailpage": "Anfon e-bost at ddefnyddiwr",
        "emailpagetext": "Os yw'r cyfeiriad e-bost sydd yn newisiadau'r {{GENDER:$1|defnyddiwr}} hwn yn un dilys, gellir anfon neges ato o'i ysgrifennu ar y ffurflen isod.\nBydd y cyfeiriad e-bost a osodoch yn eich [[Special:Preferences|dewisiadau]] yn ymddangos ym maes \"Oddi wrth\" yr e-bost, fel bod y defnyddiwr arall yn gallu anfon ateb uniongyrchol atoch.",
        "defemailsubject": "{{SITENAME}} yn anfon e-bost oddi wrth y defnyddiwr \"$1\"",
        "usermaildisabled": "Dim modd anfon e-bost at ddefnyddwyr",
index ee33863..065e734 100644 (file)
        "passwordreset-emailtitle": "Kontooplysninger på {{SITENAME}}",
        "passwordreset-emailtext-ip": "Nogen (sandsynligvis dig, fra IP-adressen $1) har anmodet om at få nulstillet din adgangskode til {{SITENAME}} ($4). {{PLURAL:$3|Den følgende brugerkonto er associeret|De følgende brugerkonti er associerede}} med denne e-mailadresse:\n\n$2\n\n{{PLURAL:$3|Denne midlertidige adgangskode|Disse midlertidige adgangskoder}} vil udløbe om {{PLURAL:$5|en dag|$5 dage}}.\nDu bør logge på og vælge en ny adgangskode nu. Hvis en anden end dig har lavet denne anmodning, eller hvis du er kommet i tanke om din oprindelig adgangskode og ikke længere ønsker at ændre den, kan du ignorere denne meddelelse og fortsætte med at bruge din gamle adgangskode.",
        "passwordreset-emailtext-user": "Brugeren $1 på {{SITENAME}} har anmodet om at få nulstillet din adgangskode til {{SITENAME}} ($4). {{PLURAL:$3|Den følgende brugerkonto er associeret|De følgende brugerkonti er associerede}} med denne e-mailadresse:\n\n$2\n\n{{PLURAL:$3|Denne midlertidige adgangskode|Disse midlertidige adgangskoder}} vil udløbe om {{PLURAL:$5|en dag|$5 dage}}.\nDu bør logge på og vælge en ny adgangskode nu. Hvis en anden end dig har lavet denne anmodning, eller hvis du er kommet i tanke om din oprindelig adgangskode og ikke længere ønsker at ændre den, kan du ignorere denne meddelelse og fortsætte med at bruge din gamle adgangskode.",
-       "passwordreset-emailelement": "Brugernavn: $1\nMidlertidig adgangskode: $2",
+       "passwordreset-emailelement": "Brugernavn: \n$1\n\nMidlertidig adgangskode: \n$2",
        "passwordreset-emailsent": "En e-mail om nulstilling af adgangskode er blevet sendt.",
        "passwordreset-emailsent-capture": "En e-mail om nulstilling af adgangskode, som vist nedenfor, er blevet sendt.",
        "passwordreset-emailerror-capture": "En mail om nulstilling af adgangskode, som vist nedenfor, blev genereret, men det lykkedes ikke at sende den til {{GENDER:$2|bruger}}: $1",
index 6314a70..8dc362c 100644 (file)
        "prefs-help-watchlist-token2": "Dies ist der geheime Schlüssel zum Webfeed Ihrer Beobachtungsliste.\nJeder, der ihn kennt, kann Ihre Beobachtungsliste lesen. Teilen Sie ihn deshalb nicht Anderen mit.\nSofern notwendig, [[Special:ResetTokens|können Sie ihn zurücksetzen]].",
        "savedprefs": "Ihre Einstellungen wurden gespeichert.",
        "prefs-reset-intro": "Sie können diese Seite verwenden, um die Einstellungen auf die Standards zurückzusetzen.\nDies kann nicht mehr rückgängig gemacht werden.",
-       "yourgender": "Welches Geschlecht haben Sie?",
        "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um Sie anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich.",
        "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann Ihr bürgerlicher Name Ihren Beiträgen zugeordnet werden.",
        "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern Sie Ihr Passwort vergessen haben.",
index b5a4438..bf21b13 100644 (file)
@@ -80,7 +80,8 @@
                        "Andreasburmeister",
                        "Tiin",
                        "Freddy2001",
-                       "Luke081515"
+                       "Luke081515",
+                       "J. 'mach' wust"
                ]
        },
        "tog-underline": "Links unterstreichen:",
        "createacct-captcha": "Sicherheitsprüfung",
        "createacct-imgcaptcha-ph": "Gib den Text ein, den du oben siehst.",
        "createacct-submit": "Benutzerkonto erstellen",
-       "createacct-another-submit": "Anderes Benutzerkonto erstellen",
+       "createacct-another-submit": "Benutzerkonto erstellen",
        "createacct-benefit-heading": "{{SITENAME}} wird von Menschen wie dir geschaffen.",
        "createacct-benefit-body1": "{{PLURAL:$1|Bearbeitung|Bearbeitungen}}",
        "createacct-benefit-body2": "{{PLURAL:$1|Seite|Seiten}}",
        "nosuchuser": "Der Benutzername „$1“ existiert nicht.\nÜberprüfe die Schreibweise (Groß-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|lege ein neues Benutzerkonto an]].",
        "nosuchusershort": "Der Benutzername „$1“ ist nicht vorhanden. Bitte überprüfe die Schreibweise.",
        "nouserspecified": "Bitte gib einen Benutzernamen an.",
-       "login-userblocked": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist gesperrt. Die Anmeldung ist nicht erlaubt.",
+       "login-userblocked": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} ist gesperrt. Die Anmeldung ist nicht erlaubt.",
        "wrongpassword": "Das Passwort ist falsch. Bitte versuche es erneut.",
        "wrongpasswordempty": "Es wurde kein Passwort eingegeben. Bitte versuche es erneut.",
        "passwordtooshort": "Passwörter müssen mindestens {{PLURAL:$1|1 Zeichen|$1 Zeichen}} lang sein.",
        "mailmypassword": "Passwort zurücksetzen",
        "passwordremindertitle": "Neues temporäres Passwort für dein {{SITENAME}}-Benutzerkonto",
        "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer „$2“ lautet nun: $3\n\nFalls du dies wirklich gewünscht hast, solltest du dich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignoriere diese E-Mail, falls du sie nicht selbst angefordert hast. Das alte Passwort bleibt weiterhin gültig.",
-       "noemail": "{{GENDER:$1|Benutzer|Benutzerin|Benutzer}} „$1“ hat keine E-Mail-Adresse angegeben.",
+       "noemail": "{{GENDER:$1|Benutzer|Benutzerin}} „$1“ hat keine E-Mail-Adresse angegeben.",
        "noemailcreate": "Du musst eine gültige E-Mail-Adresse angeben.",
        "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer „$1“ gesandt.\nBitte melde dich damit an, sobald du es erhalten hast. Das alte Passwort bleibt weiterhin gültig.",
        "blocked-mailpassword": "Die von dir verwendete IP-Adresse ist für das Ändern von Seiten gesperrt. Um einen Missbrauch zu verhindern, wurde die Möglichkeit zur Anforderung eines neuen Passwortes ebenfalls gesperrt.",
        "passwordreset-emailtitle": "Benutzerkontoinformationen auf {{SITENAME}}",
        "passwordreset-emailtext-ip": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat eine Zurücksetzung deines Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.\nDu solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht länger ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes Passwort benutzen.",
        "passwordreset-emailtext-user": "Benutzer $1 bei {{SITENAME}} hat eine Zurücksetzung deines Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab. Du solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes Passwort benutzen.",
-       "passwordreset-emailelement": "Benutzername: $1\nTemporäres Passwort: $2",
+       "passwordreset-emailelement": "Benutzername: \n$1\n\nTemporäres Passwort: \n$2",
        "passwordreset-emailsent": "Eine Passwortzurücksetzungs-E-Mail wurde versandt.",
        "passwordreset-emailsent-capture": "Eine Passwortzurücksetzungs-E-Mail wurde versandt, die unten angezeigt wird.",
        "passwordreset-emailerror-capture": "Die unten angezeigte Passwortzurücksetzungs-E-Mail wurde generiert, allerdings ist der Versand an {{GENDER:$2|den Benutzer|die Benutzerin}} gescheitert: $1",
        "changeemail-password": "Dein {{SITENAME}}-Passwort:",
        "changeemail-submit": "E-Mail-Adresse ändern",
        "changeemail-throttled": "Du hast zu viele Anmeldeversuche unternommen.\nBitte warte $1, bevor du es erneut versuchst.",
+       "changeemail-nochange": "Bitte gib eine andere neue E-Mail-Adresse ein.",
        "resettokens": "Tokens zurücksetzen",
        "resettokens-text": "Du kannst Tokens zurücksetzen, welche dir den Zugriff auf bestimmte private Daten ermöglichen, die mit deinem Benutzerkonto hier verknüpft sind.\n\nDu solltest dies nur machen, wenn du die Tokens versehentlich mit jemandem geteilt hast oder dein Konto gefährdet ist.",
        "resettokens-no-tokens": "Es gibt keine Tokens zum Zurücksetzen.",
        "missing-revision": "Die Version $1 der Seite namens „{{FULLPAGENAME}}“ ist nicht vorhanden.\n\nDieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.\nEinzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch] einsehbar.",
        "userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.",
        "userpage-userdoesnotexist-view": "Das Benutzerkonto „$1“ ist nicht vorhanden.",
-       "blocked-notice-logextract": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist zurzeit gesperrt.\nZur Information folgt ein aktueller Auszug aus dem Benutzersperr-Logbuch:",
+       "blocked-notice-logextract": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} ist zurzeit gesperrt.\nZur Information folgt ein aktueller Auszug aus dem Benutzersperr-Logbuch:",
        "clearyourcache": "'''Hinweis:''' Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Strg+F5'' oder ''Strg+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Strg+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Strg+F5'' drücken oder ''Strg'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
        "usercssyoucanpreview": "'''Tipp:''' Benutze den „{{int:showpreview}}“-Button, um dein neues CSS vor dem Speichern zu testen.",
        "userjsyoucanpreview": "'''Tipp:''' Benutze den „{{int:showpreview}}“-Button, um dein neues JavaScript vor dem Speichern zu testen.",
        "rows": "Zeilen:",
        "columns": "Spalten:",
        "searchresultshead": "Suche",
-       "stub-threshold": "Linkformatierung <a href=\"#\" class=\"stub\">kleiner Seiten</a> (in Bytes):",
+       "stub-threshold": "Linkformatierung kleiner Seiten ($1):",
+       "stub-threshold-sample-link": "Beispiel",
        "stub-threshold-disabled": "Deaktiviert",
        "recentchangesdays": "Anzahl der standardmäßig einbezogenen Tage:",
        "recentchangesdays-max": "Maximal $1 {{PLURAL:$1|Tag|Tage}}",
        "prefs-help-signature": "Beiträge auf Diskussionsseiten sollten mit „<nowiki>~~~~</nowiki>“ signiert werden, was dann in die Signatur mit Zeitstempel umgewandelt wird.",
        "badsig": "Die Syntax der Signatur ist ungültig; bitte HTML überprüfen.",
        "badsiglength": "Die Signatur darf maximal $1 {{PLURAL:$1|Zeichen}} lang sein.",
-       "yourgender": "Welches Geschlecht hast du?",
-       "gender-unknown": "Ich möchte hierzu keine Angabe machen – geschlechtsneutrale Anrede.",
-       "gender-male": "Ich bin männlich",
-       "gender-female": "Ich bin weiblich",
-       "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um dich anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich zugänglich.",
+       "yourgender": "Form der Anrede",
+       "gender-unknown": "„Der Benutzer“, „seine Diskussion“, „er bearbeitet“ usw.",
+       "gender-male": "„Der Benutzer“, „seine Diskussion“, „er bearbeitet“ usw. (männlich)",
+       "gender-female": "„Die Benutzerin“, „ihre Diskussion“, „sie bearbeitet“ usw. (weiblich)",
+       "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um dich mit dem zutreffenden grammatikalischen Geschlecht anzureden oder gegenüber anderen zu erwähnen.\nDiese Information ist öffentlich zugänglich.",
        "email": "E-Mail",
        "prefs-help-realname": "Der bürgerliche Name ist optional.\nFalls angegeben, kann er verwendet werden, um dir eine Zuordnung für deine Beiträge zu geben.",
        "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern du dein Passwort vergessen hast.",
        "booksources-text": "Dies ist eine Liste mit Links zu Internetseiten, die neue und gebrauchte Bücher verkaufen. Dort kann es auch weitere Informationen über die Bücher geben. {{SITENAME}} ist mit keinem dieser Anbieter geschäftlich verbunden.",
        "booksources-invalid-isbn": "Vermutlich ist die ISBN ungültig.\nBitte prüfe, ob sie korrekt von der Quelle übertragen wurde.",
        "specialloguserlabel": "Ausführender Benutzer:",
-       "speciallogtitlelabel": "Ziel (Titel oder Benutzer):",
+       "speciallogtitlelabel": "Ziel (Titel oder {{ns:user}}:Benutzername für einen Benutzer):",
        "log": "Logbücher",
        "all-logs-page": "Alle öffentlichen Logbücher",
        "alllogstext": "Dies ist die kombinierte Anzeige aller in {{SITENAME}} geführten Logbücher.\nDie Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels eingeschränkt werden (Groß-/Kleinschreibung muss beachtet werden).",
        "listgrouprights-namespaceprotection-namespace": "Namensraum",
        "listgrouprights-namespaceprotection-restrictedto": "Rechte, die dem Benutzer die Bearbeitung erlauben",
        "trackingcategories": "Tracking-Kategorien",
-       "trackingcategories-summary": "Diese Seite listet Tracking-Kategorien auf, die von der MediaWiki-Software automatisch eingepflegt werden. Ihre Namen können durch Änderung der entsprechenden Systemnachrichten im {{ns:8}}-Namensraum angepasst werden.",
+       "trackingcategories-summary": "Diese Seite listet Tracking-Kategorien auf, die von der MediaWiki-Software automatisch gefüllt werden. Ihre Namen können durch Änderung der entsprechenden Systemnachrichten im {{ns:8}}-Namensraum angepasst werden.",
        "trackingcategories-msg": "Tracking-Kategorie",
        "trackingcategories-name": "Name der Nachricht",
        "trackingcategories-desc": "Kategorieeinbindungskriterien",
        "noindex-category-desc": "Die Seite wird nicht von Bots indexiert, da sie das magische Wort <code><nowiki>__NOINDEX__</nowiki></code> enthält und sich in einem Namensraum befindet, wo dieses Flag erlaubt ist.",
-       "index-category-desc": "Die Seite enthält ein <code><nowiki>__INDEX__</nowiki></code> und befindet sich in einem Namensraum, in dem dieses Flag nicht erlaubt ist und wird daher von Bots ausnahmsweise indexiert.",
+       "index-category-desc": "Die Seite enthält ein <code><nowiki>__INDEX__</nowiki></code> und befindet sich in einem Namensraum, in dem dieses Flag erlaubt ist. Daher wird sie ausnahmsweise von Bots indiziert.",
        "post-expand-template-inclusion-category-desc": "Die Seitengröße ist nach dem Expandieren aller Vorlagen größer als <code>$wgMaxArticleSize</code>, so dass einige Vorlagen nicht expandiert wurden.",
        "post-expand-template-argument-category-desc": "Die Seite ist nach dem Expandieren eines Vorlagenargumentes größer als <code>$wgMaxArticleSize</code> (etwas in dreifachen Klammern, wie <code>{{{Foo}}}</code>).",
        "expensive-parserfunction-category-desc": "Die Seite verwendet zu viele aufwändige Parserfunktionen (wie <code>#ifexist</code>). Siehe das [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Benutzerhandbuch].",
        "sp-contributions-logs": "Logbücher",
        "sp-contributions-talk": "Diskussion",
        "sp-contributions-userrights": "Benutzerrechte­verwaltung",
-       "sp-contributions-blocked-notice": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist derzeit gesperrt. Es folgt der aktuelle Eintrag aus dem Benutzersperr-Logbuch:",
+       "sp-contributions-blocked-notice": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} ist derzeit gesperrt. Es folgt der aktuelle Eintrag aus dem Benutzersperr-Logbuch:",
        "sp-contributions-blocked-notice-anon": "Diese IP-Adresse ist zurzeit gesperrt.\nZur Information folgt der aktuelle Auszug aus dem Sperr-Logbuch:",
        "sp-contributions-search": "Suche nach Benutzerbeiträgen",
        "sp-contributions-username": "IP-Adresse oder Benutzername:",
        "emaillink": "E-Mail senden",
        "autoblocker": "Automatische Sperre, da du eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzt.\nGrund der Benutzersperre: „$2“",
        "blocklogpage": "Benutzersperr-Logbuch",
-       "blocklog-showlog": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} wurde schon früher gesperrt. Es folgt der Eintrag aus dem Benutzersperr-Logbuch:",
-       "blocklog-showsuppresslog": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} wurde schon früher gesperrt und versteckt.\nEs folgt der Eintrag aus dem Unterdrückungs-Logbuch:",
+       "blocklog-showlog": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} wurde schon früher gesperrt. Es folgt der Eintrag aus dem Benutzersperr-Logbuch:",
+       "blocklog-showsuppresslog": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} wurde schon früher gesperrt und versteckt.\nEs folgt der Eintrag aus dem Unterdrückungs-Logbuch:",
        "blocklogentry": "sperrte „[[$1]]“ für den Zeitraum: $2 $3",
        "reblock-logentry": "änderte die Sperre von „[[$1]]“ für den Zeitraum: $2 $3",
        "blocklogtext": "Dies ist das Logbuch über Sperrungen und Entsperrungen von Benutzern und IP-Adressen.\nAutomatisch gesperrte IP-Adressen werden nicht erfasst.\nSiehe die [[Special:BlockList|Liste der gesperrten IP-Adressen und Benutzernamen]] für alle aktiven Sperren.",
        "tooltip-ca-nstab-main": "Seiteninhalt anzeigen",
        "tooltip-ca-nstab-user": "Benutzerseite anzeigen",
        "tooltip-ca-nstab-media": "Mediendateienseite anzeigen",
-       "tooltip-ca-nstab-special": "Dies ist eine Spezialseite. Sie kann nicht bearbeitet werden.",
+       "tooltip-ca-nstab-special": "Dies ist eine Spezialseite und kann nicht bearbeitet werden.",
        "tooltip-ca-nstab-project": "Portalseite anzeigen",
        "tooltip-ca-nstab-image": "Dateiseite anzeigen",
        "tooltip-ca-nstab-mediawiki": "MediaWiki-Systemtext anzeigen",
        "group-sysop.js": "/* Das folgende JavaScript wird nur für Administratoren geladen. */",
        "group-bureaucrat.js": "/* Das folgende JavaScript wird nur für Bürokraten geladen. */",
        "anonymous": "{{PLURAL:$1|Unangemeldeter Benutzer|Unangemeldete Benutzer}} auf {{SITENAME}}",
-       "siteuser": "{{SITENAME}}-{{GENDER:$2|Benutzer|Benutzerin|Benutzer}} $1",
+       "siteuser": "{{SITENAME}}-{{GENDER:$2|Benutzer|Benutzerin}} $1",
        "anonuser": "Anonymer {{SITENAME}}-Benutzer $1",
        "lastmodifiedatby": "Diese Seite wurde zuletzt am $1 um $2 Uhr von $3 geändert.",
        "othercontribs": "Basierend auf der Arbeit von $1.",
index 445e27c..f6fcaf1 100644 (file)
        "passwordreset-emailtitle": "Hesab timarê {{SITENAME}}",
        "passwordreset-emailtext-ip": "Jeweri, {{SITENAME}} ra (ma heta şımayê, $1 IP adresi ra) ($4) teferuatê hesabdê şıma  va wa biyaro xo viri. Karbero ke cêrdeyo {{PLURAL:$3|hesaba|eno hesaba}} ena e-posta adresiya aleqey cı esto:\n\n$2\n\n{{PLURAL:$3|ena parola idaretena|ena parola idareten}} {{PLURAL:$5|jew roc|$5  roca}}rêya.\nEna parolaya deqewe de u xorê ju parolaya newi bıweçine. Parolaya şıma emaya şıma viri se  yana  ena e-posta şıma nê weştase u şıma qayıl niye parolaya xo bıvurnese, ena mesacer peygoş bıkerê.",
        "passwordreset-emailtext-user": "$1 enê karberi, {{SITENAME}}  ra ($4) teferuatê hesab dê şıma  va wa biyaro xo viri. Karbero ke cêrdeyo {{PLURAL:$3|hesaba|eno hesaba}} ena e-posta adresiya aleqey cı esto:\n\n$2\n\n{{PLURAL:$3|ena parola idaretena|ena parola idareten}} {{PLURAL:$5|jew roc|$5  roca}}rêya.\nEna parolaya deqewe de u xorê ju parolaya newi bıweçine. Parolaya şıma emaya şıma viri se  yana  ena e-posta şıma nê weştase u şıma qayıl niye parolaya xo bıvurnese, ena mesacer peygoş bıkerê.",
-       "passwordreset-emailelement": "Nameyê karberi: $1\nParolaya vêrdiye: $2",
+       "passwordreset-emailelement": "Nameyê karberi: \n$1\n\nParolaya vêrdiye: \n$2",
        "passwordreset-emailsent": "Yew e-posteyê esterıtışê parola rışiya.",
        "passwordreset-emailsent-capture": "Yew e-posteyê esterıtışê parolayo ke rışiya, no cêr mocniyayo.",
        "passwordreset-emailerror-capture": "Yew e-posteyê esterıtışê parolayo ke rışiya, no cêr mocniyayo, ema {{GENDER:$2|karber}}i rê rıştış de mıwefeq nêbi: $1",
        "emailuser": "Ena karberi rê mesac bırse",
        "emailuser-title-target": "Na E-postaya {{GENDER:$1|karberi}}ya",
        "emailuser-title-notarget": "E-postaya karberi",
-       "emailpage": "karberi re e-posta bırışê",
        "emailpagetext": "Şıma şenê nê formê cêrêni nê {{GENDER:$1|karber}}i rê e-poste rıştış de bıgurenê.\n[[Special:Preferences|Tercihanê şımayê karberi]] de adresa e-posteya ke şıma daya, na adrese qısmê adresa e-postey de \"kami ra\" asena, no sebeb ra gırewtoğ şeno direkt cewab bıdero şıma.",
        "defemailsubject": "\"$1\" ra e-postay {{SITENAME}} amê",
        "usermaildisabled": "E-mailê karberani kafiliyeya",
index b7b1cb8..2dc526c 100644 (file)
        "passwordreset-emailtitle": "Kontowe drobnostki na {{GRAMMAR:lokatiw|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Něchten (nejskerjej ty, z IP-adresu $1) jo anulěrowanje gronidła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} pominał ($4).  {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane}}:\n\n$2\n\n{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.\nTy by měł se něnto pśizjawiś a nowe gronidło wustajiś. Jolic něchten drugi jo toś to napšašowanje pósłał, abo jolic sy se zasej na spócetne gronidło spomnjeł a wěcej njocoš jo změniś, móžoš toś to zdźělenje ignorěrowaś a swójo stare gronidło dalej wužywaś.",
        "passwordreset-emailtext-user": "Wužywaŕ $1 jo anulěrowanje gronidła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} pominał ($4).  {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane}}:\n\n$2\n\n{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.\nTy by měł se něnto pśizjawiś a nowe gronidło wustajiś. Jolic něchten drugi jo toś to napšašowanje pósłał, abo jolic sy se zasej na spócetne gronidło spomnjeł a wěcej njocoš jo změniś, móžoš toś to zdźělenje ignorěrowaś a swójo stare gronidło dalej wužywaś.",
-       "passwordreset-emailelement": "Wužywarske mě: $1\nNachylne gronidło: $2",
+       "passwordreset-emailelement": "Wužywarske mě: \n$1\n\nNachylne gronidło: \n$2",
        "passwordreset-emailsent": "E-mail za anulěrowanje gronidła jo se pósłała.",
        "passwordreset-emailsent-capture": "E-mail za anulěrowanje gronidła jo se pósłała, kótaraž pokazujo se dołojce.",
        "passwordreset-emailerror-capture": "E-mail za anulěrowanje gronidła jo se napórała, kótaraž se dołojce pokazujo, ale słanje {{GENDER:$2|wužywarjeju|wužywarce}} njejo se raźiło: $1",
        "emailuser": "Toś tomu wužywarjeju e-mail pósłaś",
        "emailuser-title-target": "E-mail na {{GENDER:$1|toś tomu wužywarjeju|toś tej wužywarce}} pósłaś",
        "emailuser-title-notarget": "E-mail wužywarjeju",
-       "emailpage": "E-mail wužywarjeju",
        "emailpagetext": "Móžoš slědujucy formular wužywaś, aby toś tomu {{GENDER:$1|wužywarjeju}} e-mail pósłał.\nE-mailowa adresa, kótaruž sy zapódał w [[Special:Preferences|swójich wužywarskich nastajenjach]], zjawi se ako adresa w pólu \"Wót\" e-maile, aby dostawaŕ móžo śi direktnje wótegroniś.",
        "defemailsubject": "{{SITENAME}} - e-mail wót wužywarja \"$1\"",
        "usermaildisabled": "Wužywarska e-mail znjemóžnjona",
index de7ba43..56af462 100644 (file)
        "resetpass-wrong-oldpass": "Nokosilap kaatalib daamot toi iy maso gunoon.\nNaalanannu noh kaatalib toi nokopokianu koh no do kaatalib daamot.",
        "resetpass-temp-password": "Kaatalib daamot:",
        "passwordreset": "Pudoliai kawagu kaatalib",
-       "passwordreset-legend": "Pudoliai kawagu kaatalib",
        "passwordreset-disabled": "Pomudolian kawagu do kaatalib kitaantob id wiki diti.",
        "passwordreset-username": "Ngarandait:",
        "passwordreset-domain": "Sumanganu:",
        "passwordreset-capture-help": "Nung goritannu id kutak diti, surat-i (ii ki-kaa-talib daamot) mangan pokitanai montok dia om nogi porikoton montok momomoguno diti.",
        "passwordreset-email": "Porikatan surat-i:",
        "passwordreset-emailtitle": "Kointalangan takaun id {{SITENAME}}",
-       "passwordreset-emailelement": "Ngaranmoguno: $1\nKaatalib daamot: $2",
+       "passwordreset-emailelement": "Ngaranmoguno: \n$1\n\nKaatalib daamot: \n$2",
        "passwordreset-emailsent": "Surat-i pononsorou nakaatod noh.",
        "passwordreset-emailsent-capture": "Surat-i pononsorou nakaatod noh, miagal id siriba diti.",
        "passwordreset-emailerror-capture": "Surat-i pononsorou nopudali noh, miagal id siriba diti, nga awu kaatod id momomoguno: $1",
index 6eedb8c..8da702b 100644 (file)
        "viewyourtext": "यै पानामी रह्याका '''तमरा सम्पादनहरू''' हेद्द या प्रतिलिपी गद्द सक्द्या हौ :",
        "editinginterface": "<strong>चेतावनी:</strong> तमी यै पानालाई सम्पादन गद्द लाग्याछौ, जनले सफ्टवेयरको लागि \nइन्टरफेस सामग्रीहरू प्रदान गरन्छ।\nयै पानामी गरियाको परिवर्तनले यै विकिमी अरु प्रयोगकर्तानको इन्टरफेसको प्रदर्शनमी प्रभाव पडन्छ ।",
        "namespaceprotected": "तमलाई '''$1'''  नेमस्पेसमी रह्याका पानाहरू सम्पादन गद्या अनुमति छैन ।",
+       "customcssprotected": "तमलाई यो  पानो सम्पादन गद्दे अनुमति छैन, किनकी यैमी कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरू संग्रहित छन् ।",
+       "customjsprotected": "तमलाई यो जाभास्कृप्ट पानो सम्पादन गद्दे अनुमति छैन, किनकी यैमी कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरू संग्रहित छन् ।",
+       "ns-specialprotected": "विशेष पृष्ठहरू सम्पादन अद्दु नाइँ सकिनो।",
+       "titleprotected": "[[User:$1|$1]]द्वारा ये शीर्षक निर्माणहुनबठे जोगाइया छ।\nकारण \"<em>$2</em>\" हो ।",
+       "filereadonlyerror": "फाइल \"$1\" लाई परिवर्तन अद्दु नाइँ सकिनो क्याईकि फाइल भण्डार  \"$2\" केवल पढ्ने स्थिति (read-only mode)मी छ।\n\nयेलाई सुरक्षित गर्ने प्रवन्धकले  यो कारण दियाकाछन् : ''$3''।",
        "exception-nologin": "प्रवेश (लग ईन) नगरिएको",
        "virus-scanfailed": "जँचाई असफल(कोड $1)",
        "virus-unknownscanner": "थानभया एन्टीभाइरस:",
        "passwordreset-capture": "निस्कने इमेलको नमुना हेर्ने ?",
        "passwordreset-email": "इमेल ठेगाना:",
        "passwordreset-emailtitle": "{{SITENAME}}मा खाता विवरण",
-       "passwordreset-emailelement": "प्रयोगकर्ताको नाम: $1\nअस्थाई पासवर्ड: $2",
+       "passwordreset-emailelement": "प्रयोगकर्ताको नाम: \n$1\n\nअस्थाई पासवर्ड: \n$2",
        "passwordreset-emailsent": "पासवर्ड परिवर्तनका लागि इमेल पठाइया छ।",
        "changeemail": "इमेल ठेगाना बदेल",
        "changeemail-text": "आफ्नो इमेल ठेगाना परिवर्तन गद्द यो फारम भर । यैलाई पुष्टि गद्द तमीले आफ्नो पासवर्ड हाल्नु पडन्छ।",
        "loginreqpagetext": "अरु पाना हेद्द तमले $1 गद्दु पडन्छ ।",
        "accmailtitle": "पासवर्ड पठाइयो",
        "newarticle": "(नयाँ)",
-       "newarticletext": "तमलà¥\87 à¤\90लसमà¥\8dम à¤¨à¤­à¤¯à¤¾à¤\95ा à¤ªà¤¾à¤¨à¤¾à¤\95à¥\8b à¤²à¤¿à¤\82à¤\99à¥\8dà¤\95 à¤ªà¤¹à¤¿à¤²à¥\8dयाà¤\89नà¥\81 à¤­à¤¯à¤¾à¤\95à¥\8b à¤\9b।\nयà¥\8b à¤ªà¤¾à¤¨à¥\8b à¤¬à¤¨à¥\8cनाà¤\96à¥\80 à¤¤à¤²à¥\8dतिरà¤\95à¥\8b à¤\95à¥\8bषà¥\8dठमा à¤\9fाà¤\87प à¤\97रिदिय à¥¤(à¤\94र à¤\9cाणà¥\8dणाà¤\96à¥\80लà¥\87à¤\96ा [$1 help page] à¤¹à¥\87रिदिय )।\nताखाइ सुधिसार आइपुग्या हौ भण्या, ब्राउजरको  '''back''' बटन थिचिहाल ।",
+       "newarticletext": "तमलà¥\87 à¤\85हिलसमà¥\8dम à¤¨à¤­à¤¯à¤¾à¤\95ा à¤ªà¤¾à¤¨à¤¾à¤\95à¥\8b à¤²à¤¿à¤\82à¤\99à¥\8dà¤\95 à¤ªà¤¹à¤¿à¤²à¥\8dयायाà¤\95ा à¤\9bà¥\8c à¥¤\nयà¥\8b à¤ªà¤¾à¤¨à¥\8b à¤¬à¤¨à¥\8cनाà¤\96à¥\80 à¤¤à¤²à¥\8dतिरà¤\95à¥\8b à¤\95à¥\8bषà¥\8dठमà¥\80 à¤\9fाà¤\87प à¤\97रि à¥¤ (à¤\94र à¤\9cाणà¥\8dणाà¤\96à¥\80लà¥\87à¤\96ा [$1 help page] à¤¹à¥\87र )।\nताखाइ सुधिसार आइपुग्या हौ भण्या, ब्राउजरको  '''back''' बटन थिचिहाल ।",
        "anontalkpagetext": "----''यो कुरडी पानो अज्ञात प्रयोगकर्ताको हो जनले अहिलसम्म खाता बनायाकै छैन, अथवा जनले यै पानाको उपयोग गर्दैन।\nयस कारण हामीले उनलाई उनरो आइ पी (IP) ठेगानाले चिन्न सकन्छौ। \nयस्तो आइ पी (IP) ठेगाना धेरै प्रयोगकर्तानको साझा हुनसकन्छ ।\nयदि तमी अज्ञात प्रयोगकर्ता हौ र तमलाई अचाहिँदो टिप्पणी भयाको अनुभव गद्दा छौ भण्या भविष्यमी अन्य अज्ञात प्रयोगकर्तासँगको भ्रमबाट बाँच्न कृपया [[Special:UserLogin/signup|खाता खोल]] अथवा [[Special:UserLogin|प्रवेश गर]] ''",
        "noarticletext": "यै लेखमी अहिल क्यै पन पाठ नाइथी  ।\nतमले और पृष्ठमी\n[[Special:Search/{{PAGENAME}}|यस पृष्ठको शीर्षककी लेखा खोज]] गद्द सकन्छौ ।\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} पाना सम्बन्धित ढड्डामी खोज],\nवा [{{fullurl:{{FULLPAGENAME}}|action=edit}}  यै पानालाई सम्पादन गद्या]</span>.",
        "noarticletext-nopermission": "यै लेखमी अहिल केइ पन पाठ नाइथी  ।\nतमले और पानामी\n[[Special:Search/{{PAGENAME}}|यै पानाको शीर्षककी लेखा खोज]] गद्द सकन्छौ ।\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} पाना सम्बन्धित ढड्डामी खोज्न],\nवा [{{fullurl:{{FULLPAGENAME}}|action=edit}}  यै पानालाई सम्पादन गद्द] सकन्छौ</span>.",
        "powersearch-togglelabel": "जाँच्ने :",
        "powersearch-toggleall": "सबै",
        "powersearch-togglenone": "कोइ लै होइनन",
+       "powersearch-remember": "चयन गर्याकोलाई भविष्यमी गरिन्या खोजहरूमी सम्झन्या",
        "search-external": "भाइरका खोज",
        "searchdisabled": "{{SITENAME}} खोज निस्क्रिय पारियाको छ ।\nअहिल तमी गूगलद्वारा खोज्न सकन्छौ ।\nयाद गर्या उनीहरूको {{SITENAME}}को सूची सामग्री पुरानो भयाको हुनसकन्छ ।",
        "preferences": "मेरी रोजाई",
        "timezoneregion-australia": "अष्ट्रेलिया",
        "timezoneregion-indian": "हिन्द महासागर",
        "prefs-files": "फाइलहरू",
+       "prefs-help-signature": "कुरडी पानाका टिप्पणीहरू \"<nowiki>~~~~</nowiki>\" द्वारा दस्तखत गरिनुपडन्छ ,त्यो पछि तमरो दस्तखत र समयरेखामी रुपान्तरित हुनेछ ।",
        "badsiglength": "तमरो दस्तखत मैथै लामो छ।\nयो $1 {{PLURAL:$1|अक्षर|अक्षरहरू}} भन्दा लामो हुनु हुँदैन ।",
        "prefs-help-realname": "वास्तविक नाम ऐच्छिक हो ।\nतमीले खुलायौ भण्या तमरो कामको श्रेय दिनको लेखा यैको प्रयोग गरिन्या छ ।",
        "prefs-help-prefershttps": "यो रोजाई तमरो अर्को  लग इन बठे लागु हुन्याछ ।",
        "movenologintext": "पानाको नाम बदल्नको लागि तमी दर्ता गरियाको र [[Special:UserLogin|लगइन गर्याको]] प्रयोगकर्ता हुनुपडन्छ ।",
        "cant-move-user-page": "तमसँग प्रयोगकर्ता पानाहरू साद्या अनुमती नाइथिन् (सहपानाहरू बाहेक)",
        "cant-move-to-user-page": "तमसँग पानाहरूलाई प्रयोगकर्ता पानामी साद्या अनुमती नाइथिन् (प्रयोगकर्ता सहपृष्ठहरूमी बाहेक)",
+       "cant-move-category-page": "तमलाईं श्रेणीको पानाहरू साद्य अनुमति छैन ।",
+       "cant-move-to-category-page": "कुनै श्रेणी पानामी साद्दको लागी तमलाई अनुमति छैन ।",
        "cantmove-titleprotected": "तमी यै ठौरमी पानो साद्द सक्दाइनौ, किनकी यो नौलो शिर्षकलाई सिर्जना हुनबठे जगाइयाको छ",
        "move-subpages": "उप पानाहरू सार्न्या($1 सम्मको)",
        "move-talk-subpages": "कुरडी पानाको सह-पानाहरू साद्य($1 सम्मको )",
        "thumbnail-more": "ठूलो बनौन्या",
        "import-interwiki-history": "यै पामैकोलागि सबै इतिहास संशोधनहरू प्रतिलिपि गद्या",
        "import-noarticle": "आयात गद्दाकी लाई पानाहरू नाइथिन्",
+       "import-error-edit": "तमलाई सम्पादन गद्या अनुमति नभयाको पानो \"$1\" आयात गरिएन ।",
+       "import-error-create": "तमलाई नयाँ बनाउने अनुमति नभयाको पानो \"$1\" आयात गरिएन ।",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनहरू}} आयात भयो",
        "tooltip-pt-userpage": "तमरो प्रयोगकर्ता पानो",
        "tooltip-pt-anonuserpage": "तमी जो IP ठेगानाको रुपमी सम्पादन गद्दै छौ , त्यैको प्रयोगकर्ता पानो निम्न छ :",
        "tooltip-t-permalink": "पृष्ठको यो पुनरावलोकनकि लेखा स्थाई लिङ्क",
        "tooltip-ca-nstab-main": "सामाग्री पानो हेरिदिय",
        "tooltip-ca-nstab-user": "प्रयोगकर्ता पानो हेरिदिय",
-       "tooltip-ca-nstab-special": "यो खास पानो हो , तमलाईँ आफै सम्पादन गद्द सकन्छौ",
+       "tooltip-ca-nstab-special": "यो खास पानो हो ,तमी यैलाई आफै सम्पादन गद्द सक्दाइन",
        "tooltip-ca-nstab-project": "आयोजना पानो हेरिदिय",
        "tooltip-ca-nstab-image": "चित्र पानो हेर",
        "tooltip-ca-nstab-template": "टेम्प्लेट(नमूना) हेरिदिय",
        "watchlistedit-clear-explain": "तमरा ध्यान सूचीबठे सम्पूर्ण पाना हटाइया",
        "watchlistedit-clear-done": "तमरो ध्यान सूची खाली गरीयाको छ।",
        "watchlisttools-view": "आधारित फेरबदलीहरू हेर",
-       "signature": "[[{{ns:प्रयोगकर्ता}}:$1|$2]][[{{ns:प्रयोगकर्ता_कुरडी}}:$1|कुरडी]]",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|कुरडी]])",
        "specialpages": "खास पानो",
        "specialpages-note": "* साधारण खास पानाहरू।\n* <span class=\"mw-specialpagerestricted\">निषेधित खास पानाहरू।</span>",
        "specialpages-group-changes": "अल्लैका परिवर्तन लगहरू",
index 9b109f5..e79ad80 100644 (file)
        "actionthrottledtext": "Cme mişûra 'd sicurèsa cûnt'r al spam soquânti operasiòun a vînen limitêdi a 'n nómer mâsim ed vôlti in un precîş peréiod ed tèimp, in cól chêş ché a s'é bèle andê d'ed là 'd cól lémit. A se dmânda ed turnêr a pruvêr tra soquânt minût.",
        "protectedpagetext": "Cla pàgina ché l'é stêda prutèta per impidîr la mudéfica o êtri operasiòun.",
        "viewsourcetext": "L'é pusébil vèder e cupiêr al côdis surzéia ed cla pàgina ché.",
-       "viewyourtext": "L'é pusébil vèder e cupiêr al côdis surzéia dal \"tō mudéfichi\" ed cla pàgina ché:",
+       "viewyourtext": "L'é pusébil vèder e cupiêr al côdis surzéia dal <strong>tō mudéfichi</strong> ed cla pàgina ché.",
        "protectedinterface": "Cla pàgina ché la gh'à 'n elemèint ch' al fa pêrt dal colegamèint tra utèint e al progrâma 'd cól sît ché e l'é prutèta per schivşêr pusébil abûş. Per zuntêr o mudufichêr tradusiòun per tót i sistēma wiki druvêr [//translatewiki.net/ translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
        "editinginterface": "<strong>Atèinti:</strong> Al tèst ed cla pàgina ché 'l fa pêrt dal colegamèint tra utèint e 'l prugrâma dal sît.  Tót' al modéfichi fâti a cla pàgina ché a se spècen in sém a i mesâg vést per tót j utèint ed cól wiki ché.",
        "translateinterface": "Per zuntêr o mudifichêr al tradusiòun vâlidi in sém a tót i wiki, drōva [//translatewiki.net/ translatewiki.net], al prugèt Media Wiki p'r al léngui di divêrs pôst.",
        "passwordreset-emailtitle": "Particulêr ed l'utèint só {{SITENAME}}",
        "passwordreset-emailtext-ip": "Quelchidûn (prubabilmèint té, cun l'indirés IP $1) l'à dmandê de spidîregh 'na nōva cêva 'd ingrès per andêr dèinter a {{SITENAME}} ($4). {{PLURAL:$3|L'utèint inscrét| J utèint inscrét}} a sté indirés ed pôsta eletrônica în:\n \n$2 \n\n{{PLURAL:$3|Cla cêva 'd ingrès pruvişôria la scadrà| St' al cêvi 'd ingrès pruvişôri ché scadrân}} dôp {{PLURAL:$5|ûn dé|$5 dé}}. Ét duvrés andêr dèinter e sernîr 'na cêva 'd ingrès nōva adès. \n\nSe t'é mìa stê té a fêr la dmânda, o s' ét t'é ricurdê la cêva 'd ingrès uriginêla e an 't vō mia pió cambiêrla, ét pō scanşlêr cól mesâg ché e cuntinvêr a druvêr la tó cêva 'd ingrès vècia.",
        "passwordreset-emailtext-user": "L'utèint $1 ed {{SITENAME}} l'à dmandê de spidîregh 'na nōva cêva 'd ingrès per andêr dèinter a {{SITENAME}} ($4). {{PLURAL:$3|L'utèint inscrét| J utèint inscrét}} a sté indirés ed pôsta eletrônica în:\n\n$2 \n\n{{PLURAL:$3|Cla cêva 'd ingrès pruvişôria ché la scadrà| St' al cêvi 'd ingrès pruvişôri ché scadrân}} dôp {{PLURAL:$5|ûn dé|$5 dé}}. Ét duvrés andêr dèinter e sernîr 'na cêva 'd ingrès nōva adès. \n\nSe t'é mìa stê té a fêr la dmânda, o s' ét t'é ricurdê la cêva 'd ingrès uriginêla e an 't vō mia pió cambiêrla, ét pō scanşlêr cól mesâg ché e cuntinvêr a druvêr la tó cêva 'd ingrès vècia",
-       "passwordreset-emailelement": "Nòm utèint: $1.\nCêva 'd ingrès pruvişôria: $2",
+       "passwordreset-emailelement": "Nòm utèint: \n$1\n.\nCêva 'd ingrès pruvişôria: \n$2",
        "passwordreset-emailsent": "É stê spidî un mesâg ed pôsta eletrônica per turnêr a impustêr la cêva 'd ingrès.",
        "passwordreset-emailsent-capture": "É stê spidî un mesâg ed pôsta eletrônica per turnêr a impustêr la cêva 'd ingrès, ché sòta a gh'é al tèst che gh'é scrét.",
        "passwordreset-emailerror-capture": "É stê fât un mesâg ed pôsta eletrônica per turnêr a impustêr la cêva 'd ingrès, scréta ché 'd sègvit. La spedisiòun {{GENDER:$2|a l'utèint}} an n'é mia 'riusîda:$1",
index f4fdf48..03e3cbb 100644 (file)
        "privacypage": "Project:Πολιτική ιδιωτικού απορρήτου",
        "badaccess": "Σφάλμα άδειας",
        "badaccess-group0": "Δεν επιτρέπεται να εκτελέσετε την ενέργεια που ζητήσατε.",
-       "badaccess-groups": "Η ενέργεια που ζητήσατε είναι περιορισμένη σε χρήστες που ανήκουν {{PLURAL:$2|στην ομάδα|σε μία από τις ομάδες}}: $1.",
+       "badaccess-groups": "Η ενέργεια που ζητήσατε περιορίζεται σε χρήστες που ανήκουν {{PLURAL:$2|στην ομάδα|σε μία από τις ομάδες}}: $1.",
        "versionrequired": "Απαιτείται η έκδοση $1 του MediaWiki.",
        "versionrequiredtext": "Για να χρησιμοποιήσετε αυτή τη σελίδα απαιτείται η έκδοση $1 του MediaWiki. Βλ. [[Special:Version|σελίδα έκδοσης]]",
        "ok": "Εντάξει",
        "passwordreset-emailtitle": "Λεπτομέρειες λογαριασμού για {{SITENAME}}",
        "passwordreset-emailtext-ip": "Κάποιος (πιθανώς εσείς, από την διεύθυνση IP $1) ζήτησε την επαναφορά του κωδικού σας σε {{SITENAME}} ($4).  {{PLURAL:$3|Ο ακόλουθος λογαριασμός|Οι ακόλουθοι λογαριασμοί}} χρήστη συνδέονται με αυτή τη διεύθυνση e-mail:\n\n$2\n\n{{PLURAL:$3|Αυτός ο προσωρινός κωδικός πρόσβασης θα λήξει|Αυτοί οι προσωρινοί κωδικοί πρόσβασης θα λήξουν}} σε {{PLURAL:$5|μία ημέρα|$5 ημέρες}}.\nΘα πρέπει να συνδεθείτε τώρα και να επιλέξετε ένα νέο κωδικό. Αν κάποιος άλλος έκανε αυτό το αίτημα ή αν έχετε θυμηθεί τον αρχικό κωδικό πρόσβασής σας, και δεν επιθυμείτε πια να τον αλλάξετε, μπορείτε να αγνοήσετε αυτό το μήνυμα και να συνεχίσετε να χρησιμοποιείτε τον παλιό σας κωδικό πρόσβασης.",
        "passwordreset-emailtext-user": "Ο χρήστης $1 στη {{SITENAME}} ζήτησε μια επαναφορά του κωδικού πρόσβασης σας σε {{SITENAME}} ($4). {{PLURAL:$3|Ο ακόλουθος λογαριασμός|Οι ακόλουθοι λογαριασμοί}} χρήστη συνδέονται με αυτή τη διεύθυνση e-mail:\n\n$2\n\n{{PLURAL:$3|Αυτός ο προσωρινός κωδικός πρόσβασης θα λήξει| Αυτοί οι προσωρινοί κωδικοί πρόσβασης θα λήξουν}} σε {{PLURAL:$5| μία ημέρα| $5 ημέρες}}.\nΘα πρέπει να συνδεθείτε τώρα και να επιλέξετε ένα νέο κωδικό. Αν κάποιος άλλος έκανε αυτό το αίτημα ή αν έχετε θυμηθεί τον αρχικό κωδικό πρόσβασής σας, και δεν επιθυμείτε πια να τον αλλάξετε, μπορείτε να αγνοήσετε αυτό το μήνυμα και να συνεχίσετε να χρησιμοποιείτε τον παλιό σας κωδικό πρόσβασης.",
-       "passwordreset-emailelement": "Όνομα χρήστη: $1\nΠροσωρινός κωδικός πρόσβασης:$2",
+       "passwordreset-emailelement": "Όνομα χρήστη: \n$1\n\nΠροσωρινός κωδικός πρόσβασης:\n$2",
        "passwordreset-emailsent": "Έχει αποσταλεί email επαναφοράς κωδικού.",
        "passwordreset-emailsent-capture": "Έχει αποσταλεί email επαναφοράς κωδικού, το οποίο φαίνεται πιο κάτω.",
        "passwordreset-emailerror-capture": "Ένα email επαναφοράς κωδικού έχει δημιουργηθεί, το οποίο φαίνεται πιο κάτω, αλλά απέτυχε η αποστολή του στο  {{GENDER:$2|χρήστη}}: $1",
        "sectioneditnotsupported-text": "Δεν υποστηρίζετε η επεξεργασία τομέα σε αυτήν τη σελίδα.",
        "permissionserrors": "Σφάλμα  άδειας",
        "permissionserrorstext": "Δεν έχετε άδεια να το κάνετε αυτό, για {{PLURAL:$1|τον εξής λόγο|τους εξής λόγους}}:",
-       "permissionserrorstext-withaction": "Δεν έχετε άδεια να $2, για {{PLURAL:$1|τον ακόλουθο λόγο|τους ακόλουθους λόγους}}:",
+       "permissionserrorstext-withaction": "Δεν έχετε την άδεια να $2, για {{PLURAL:$1|τον ακόλουθο λόγο|τους ακόλουθους λόγους}}:",
        "recreate-moveddeleted-warn": "'''Προειδοποίηση: Ξαναδημιουργείτε μια σελίδα που είχε προηγουμένως διαγραφεί.'''\n\nΘα πρέπει να σκεφτείτε σοβαρά αν είναι σωστό να συνεχίσετε να επεξεργάζεστε αυτή τη σελίδα.\nΟι καταγραφές διαγραφών και μετακινήσεων παρέχονται εδώ για διευκόλυνση:",
        "moveddeleted-notice": "Αυτή η σελίδα έχει διαγραφεί.\nΤο αρχείο καταγραφών διαγραφών και μετακινήσεων της σελίδας παρέχεται παρακάτω για αναφορά.",
        "log-fulllog": "Εμφάνιση πλήρους αρχείου",
        "rows": "Σειρές",
        "columns": "Στήλες",
        "searchresultshead": "Αποτελέσματα αναζήτησης/Ρυθμίσεις",
-       "stub-threshold": "Κατώφλι για μορφοποίηση <span class=\"mw-stub-example\">συνδέσμου επεκτάσιμου</span>:",
+       "stub-threshold": "Κατώφλι για μορφοποίηση ως επεκτάσιμου ($1):",
+       "stub-threshold-sample-link": "δείγμα",
        "stub-threshold-disabled": "Απενεργοποιημένο",
        "recentchangesdays": "Ημέρες προς εμφάνιση στις πρόσφατες αλλαγές:",
        "recentchangesdays-max": "($1 {{PLURAL:$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 ελέγχους.",
        "zip-wrong-format": "Το καθορισμένο αρχείο δεν ήταν  αρχείο ZIP.",
        "zip-bad": "Το αρχείο είναι κατεστραμμένο ή με άλλο τρόπο μη αναγνώσιμο αρχείο ZIP.! N! Δεν μπορεί να ελεγχθεί  δεόντως ως προς την ασφάλεια.",
        "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]] έχει μετακινηθεί.\nΕνημερώθηκε αυτόματα και τώρα είναι ανακατεύθυνση στην [[$2]].",
        "booksources-text": "Παρακάτω είναι μια λίστα συνδέσμων σε άλλους ιστοτόπους οι οποίοι πωλούν νέα και μεταχειρισμένα βιβλία, και μπορεί επίσης να έχουν περισσότερες πληροφορίες για βιβλία για τα οποία ψάχνετε:",
        "booksources-invalid-isbn": "Το δοσμένο ISBN δεν φαίνεται να είναι έγκυρο· ελέγξτε για λάθη κατά την αντιγραφή από την αρχική πηγή.",
        "specialloguserlabel": "",
-       "speciallogtitlelabel": "Στόχος (τίτλος ή χρήστης):",
+       "speciallogtitlelabel": "Στόχος (τίτλος ή {{ns:user}}:χρήστης για χρήστη):",
        "log": "Αρχεία καταγραφών",
        "all-logs-page": "Όλες οι δημόσιες καταγραφές γεγονότων",
        "alllogstext": "Εποπτική εμφάνιση όλων των ενεργειών φόρτωσης αρχείων, διαγραφής, προστασίας, φραγής και όλων των καταγραφών των διαχειριστών στο αρχείο γεγονότων του {{SITENAME}}. Μπορείτε να περιορίσετε τα αποτελέσματα που εμφανίζονται επιλέγοντας συγκεκριμένο είδος γεγονότων, όνομα χρήστη ή τη σελίδα που επηρεάστηκε.",
        "rollback-success": "Ανεστραμμένες εκδόσεις από $1, αλλάχθηκαν στην προηγούμενη έκδοση από $2.",
        "sessionfailure-title": "Η συνεδρία απέτυχε",
        "sessionfailure": "Υπάρχει πρόβλημα με τη σύνδεσή σας -η ενέργεια αυτή ακυρώθηκε προληπτικά για την αντιμετώπιση τυχόν πειρατείας συνόδου (session hijacking). Παρακαλoύμε πατήστε \"Επιστροφή\", ξαναφορτώστε τη σελίδα από την οποία φθάσατε εδώ και προσπαθήστε ξανά.",
+       "changecontentmodel": "Αλλαγή μοντέλου περιεχομένου της σελίδας",
+       "changecontentmodel-legend": "Μοντέλο περιεχομένου σελίδας",
        "changecontentmodel-title-label": "Τίτλος σελίδας",
+       "changecontentmodel-model-label": "Νέο μοντέλο περιεχομένου",
        "changecontentmodel-reason-label": "Αιτία:",
        "logentry-contentmodel-change": "{{GENDER:$2|Ο|Η}} $1 άλλαξε το πρότυπο περιεχομένου της σελίδας $3 από «$4» σε «$5»",
+       "logentry-contentmodel-change-revertlink": "αναστροφή",
+       "logentry-contentmodel-change-revert": "αναστροφή",
        "protectlogpage": "Αρχείο καταγραφών προστασίας",
        "protectlogtext": "Παρακάτω είναι μια λίστα αλλαγών που έγιναν στις ρυθμίσεις προστασίας.\nΡίξτε μια ματιά στη [[Special:ProtectedPages|λίστα προστατευμένων σελίδων]] για ένα κατάλογο των τρεχουσών ρυθμίσεων προστασίας σελίδων.",
        "protectedarticle": "προστάτευσε τη σελίδα «[[$1]]»",
        "undeletepagetext": "{{PLURAL:$1|Η σελίδα που ακολουθεί έχει|$1 Οι σελίδες που ακολουθούν έχουν}} διαγραφεί αλλά {{PLURAL:βρίσκεται|βρίσκονται}} ακόμα {{PLURAL:αποθηκευμένη|αποθηκευμένες}} στο αρχείο και {{PLURAL:μπορεί να αποκατασταθεί|μπορούν να αποκατασταθούν}}. Κατά καιρούς γίνεται εκκαθάριση του αρχείου.",
        "undelete-fieldset-title": "Αποκατάσταση αναθεωρήσεων",
        "undeleteextrahelp": "Για να επαναφέρετε ολόκληρο το ιστορικό της σελίδας, μην επιλέγετε κανένα πλαίσιο ελέγχου και κάντε κλικ στο '''''{{int:undeletebtn}}'''''.\nΓια να κάνετε μια προσαρμοσμένη επαναφορά, επιλέξτε τα πλαίσια που αντιστοιχούν στις αναθεωρήσεις που πρόκειται να επαναφερθούν και κάντε κλικ στο '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|τροποποίηση|τροποποιήσεις}} αρχειοθετήθηκαν.",
+       "undeleterevisions": "$1 {{PLURAL:$1|τροποποίηση αρχειοθετήθηκε|τροποποιήσεις αρχειοθετήθηκαν}}.",
        "undeletehistory": "Αν επαναφέρετε την σελίδα, όλες οι εκδόσεις θα επαναφερθούν στο ιστορικό.\n\nΑν μια νέα σελίδα με το ίδιο όνομα δημιουργήθηκε μετά την διαγραφή, οι επαναφερμένες εκδόσεις θα εμφανιστούν στο πρότερο ιστορικό.",
        "undeleterevdel": "Η επαναφορά δεν θα εκτελεστεί αν θα έχει ως αποτέλεσμα η πιο πρόσφατη έκδοση της σελίδας ή αρχείου να είναι διαγεγραμμένη μερικώς. Σε τέτοιες περιπτώσεις, πρέπει να αποεπιλέξετε ή να εμφανίσετε την νεότερη διαγεγραμμένη έκδοση.",
        "undeletehistorynoadmin": "Αυτό το άρθρο έχει διαγραφεί. Ο λόγος για τη διαγραφή φαίνεται\nστη σύνοψη παρακάτω, μαζί με λεπτομέρειες των χρηστών που επεξεργάστηκαν τη σελίδα\nπριν τη διαγραφή. Το αρχικό κείμενο αυτών των διεγραμμένων αναθεωρήσεων είναι διαθέσιμο μόνο στους διαχειριστές.",
        "proxyblockreason": "Η διεύθυνση IP σας έχει υποστεί φραγή γιατί είναι open proxy. Παρακαλούμε επικοινωνείστε με τον παροχέα υπηρεσιών Διαδικτύου που χρησιμοποιείτε ή με την τεχνική υποστήριξη, για να θέσετε υπ΄ όψη τους αυτό το σοβαρό θέμα ασφάλειας.",
        "sorbsreason": "Η διεύθυνση IP σας έχει χαρακτηρισθεί ως open proxy στο DNSBL.",
        "sorbs_create_account_reason": "Η διεύθυνση IP σας έχει χαρακτηρισθεί open proxy στο DNSBL. Δεν μπορείτε να δημιουργήσετε λογαριασμό χρήστη.",
+       "xffblockreason": "Μια διεύθυνση IP που υπάρχει στο X-Forwarded-For header, είτε τη δική σας ή του διακομιστή μεσολάβησης που χρησιμοποιείτε, έχει φραγεί. Ο αρχικός λόγος φραγής ήταν: $1",
        "cant-see-hidden-user": "Ο χρήστης που προσπαθείτε να αποκλείσετε έχει ήδη αποκλειστεί και αποκρυφτεί.\nΔεδομένου ότι δεν έχετε το δικαίωμα hideuser, δεν μπορείτε να δείτε ή να επεξεργαστείτε την φραγή του χρήστη.",
        "ipbblocked": "Δεν μπορείτε να βάλετε ή να αναιρέσετε φραγή σε άλλους χρήστες, επειδή είστε εσείς υπό φραγή",
        "ipbnounblockself": "Δεν έχετε το δικαίωμα να βγάλετε την φραγή από τον εαυτό σας",
        "tooltip-ca-nstab-main": "Προβολή σελίδας περιεχομένου",
        "tooltip-ca-nstab-user": "Προβολή της σελίδας χρήστη",
        "tooltip-ca-nstab-media": "Δείτε τη σελίδα πολυμέσων",
-       "tooltip-ca-nstab-special": "Î\91Ï\85Ï\84ή ÎµÎ¯Î½Î±Î¹ ÎµÎ¹Î´Î¹ÎºÎ® Ï\83ελίδα, Î´ÎµÎ½ Î¼Ï\80οÏ\81είÏ\84ε Î½Î± ÎµÏ\80εξεÏ\81γαÏ\83Ï\84είÏ\84ε Ï\84ην Î¯Î´Î¹Î± Ï\84η Ï\83ελίδα",
+       "tooltip-ca-nstab-special": "Î\91Ï\85Ï\84ή ÎµÎ¯Î½Î±Î¹ Î¼Î¹Î± ÎµÎ¹Î´Î¹ÎºÎ® Ï\83ελίδα, ÎºÎ±Î¹ Î´ÎµÎ½ Î¼Ï\80οÏ\81εί Î½Î± ÎµÏ\80εξεÏ\81γαÏ\83Ï\84εί",
        "tooltip-ca-nstab-project": "Προβολή της σελίδας εγχειρήματος",
        "tooltip-ca-nstab-image": "Προβολή της σελίδας αρχείου",
        "tooltip-ca-nstab-mediawiki": "Δείτε το μήνυμα του συστήματος",
        "spam_blanking": "Όλες οι αναθεωρήσεις περιείχαν συνδέσμους προς το $1, εξάλειψη",
        "spam_deleting": "Διαγραφή όλων των αναθεωρήσεων που περιείχαν συνδέσμους προς το $1",
        "simpleantispam-label": "Έλεγχος για spam.\n<strong>Μην</strong> το συμπληρώσετε αυτό!",
-       "pageinfo-title": "Πληροφορίες για \"$1\"",
+       "pageinfo-title": "Πληροφορίες για «$1»",
        "pageinfo-not-current": "Μας συγχωρείτε, είναι αδύνατο να παράσχουμε αυτή την πληροφορία για παλιές αναθεωρήσεις.",
        "pageinfo-header-basic": "Βασικές πληροφορίες",
        "pageinfo-header-edits": "Ιστορικό επεξεργασίας",
        "pageinfo-robot-index": "Επιτρεπτό",
        "pageinfo-robot-noindex": "Μη επιτρεπτό",
        "pageinfo-watchers": "Αριθμός παρατηρητών σελίδας",
+       "pageinfo-visiting-watchers": "Αριθμός παρατηρητών σελίδας που επισκέφθηκαν τις πρόσφατες αλλαγές",
        "pageinfo-few-watchers": "Λιγότεροι από $1 {{PLURAL:$1| ακόλουθος|ακόλουθοι}}",
+       "pageinfo-few-visiting-watchers": "Μπορεί να υπάρχουν ή να μην υπάρχει χρήστης που παρακολουθεί και επισκέπτεται τις πρόσφατες αλλαγές",
        "pageinfo-redirects-name": "Αριθμός ανακατευθύνσεων σε αυτήν τη σελίδα",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Υποσελίδες αυτής της σελίδας",
        "pageinfo-recent-authors": "Πρόσφατος αριθμός μοναδικών συντακτών",
        "pageinfo-magic-words": "{{PLURAL:$1|Μαγική λέξη|Μαγικές λέξεις}} ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Κρυφή κατηγορία|Κρυφές κατηγορίες}} ($1)",
-       "pageinfo-templates": "Ενσωματωμένα {{PLURAL:$1|πρότυπο|πρότυπα}} ($1)",
-       "pageinfo-transclusions": "{{PLURAL:$1|Î\97 Ï\83ελίδα ÎµÎ½Ï\83Ï\89μαÏ\84Ï\8eνεÏ\84αι|Î\9fι Ï\83ελίδεÏ\82 ÎµÎ½Ï\83Ï\89μαÏ\84Ï\8eνονÏ\84αι}} Ï\83ε ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|Ενσωματωμένο πρότυπο|Ενσωματωμένα πρότυπα}} ($1)",
+       "pageinfo-transclusions": "{{PLURAL:$1|Σελίδα Ï\83Ï\84ην Î¿Ï\80οία|ΣελίδεÏ\82 Ï\83Ï\84ιÏ\82 Î¿Ï\80οίεÏ\82}} ÎµÎ½Ï\83Ï\89μαÏ\84Ï\8eνεÏ\84αι ($1)",
        "pageinfo-toolboxlink": "Πληροφορίες σελίδας",
-       "pageinfo-redirectsto": "Ανακατευθύνσεις σε",
+       "pageinfo-redirectsto": "Ανακατευθύνει σε",
        "pageinfo-redirectsto-info": "πληροφορίες",
-       "pageinfo-contentpage": "Î¥Ï\80ολογίζονÏ\84αι Ï\89Ï\82 Ï\83ελίδεÏ\82 περιεχομένου",
+       "pageinfo-contentpage": "Î\9aαÏ\84αμεÏ\84Ï\81άÏ\84αι Ï\89Ï\82 Ï\83ελίδα περιεχομένου",
        "pageinfo-contentpage-yes": "Ναι",
        "pageinfo-protect-cascading": "Οι προστασίες ξεκινούν τη διαδοχή τους από εδώ",
        "pageinfo-protect-cascading-yes": "Ναι",
        "patrol-log-page": "Αρχείο καταγραφής περιπολιών",
        "patrol-log-header": "Αυτός είναι ένας κατάλογος περιπολούμενων αναθεωρήσεων.",
        "log-show-hide-patrol": "$1 καταγραφή επιτήρησης",
+       "log-show-hide-tag": "$1 ετικέττα καταγραφής",
        "deletedrevision": "Η παλιά έκδοση της $1 διαγράφτηκε",
        "filedeleteerror-short": "Σφάλμα κατά τη διαγραφή του αρχείου: $1",
        "filedeleteerror-long": "Αντιμετωπίστηκαν προβλήματα κατά τη διαγραφή του αρχείου:\n\n$1",
        "version-libraries-version": "Έκδοση",
        "version-libraries-license": "Άδεια χρήσης",
        "version-libraries-description": "Περιγραφή",
+       "version-libraries-authors": "Δημιουργοί",
        "redirect": "Ανακατεύθυνση κατά αρχείο, χρήστη, σελίδα ή αναγνωριστικό αναθεώρησης",
        "redirect-legend": "Ανακατεύθυνση σε ένα αρχείο ή μια σελίδα",
        "redirect-submit": "Μετάβαση",
        "feedback-termsofuse": "Συμφωνώ να παρέχω παρατηρήσεις σύμφωνα με τους Όρους Χρήσης.",
        "feedback-thanks": "Ευχαριστούμε! Τα σχόλιά σας έχουν καταχωρηθεί στη σελίδα \"[$2 $1]\".",
        "feedback-thanks-title": "Σας ευχαριστούμε!",
+       "feedback-useragent": "User agent:",
        "searchsuggest-search": "Αναζήτηση",
        "searchsuggest-containing": "περιέχει...",
        "api-error-badaccess-groups": "Δεν επιτρέπεται να ανεβάσετε αρχεία σε αυτό το wiki.",
        "special-characters-title-endash": "παύλα",
        "special-characters-title-emdash": "διπλή παύλα",
        "special-characters-title-minus": "σύμβολο πλην",
+       "mw-widgets-dateinput-no-date": "Καμία ημερομηνία δεν επιλέχθηκε",
        "mw-widgets-dateinput-placeholder-day": "ΕΕΕΕ-ΜΜ-ΗΗ",
        "mw-widgets-dateinput-placeholder-month": "ΕΕΕΕ-ΜΜ",
+       "mw-widgets-titleinput-description-new-page": "η σελίδα που δεν υπάρχει ακόμα",
        "mw-widgets-titleinput-description-redirect": "ανακατεύθυνση στο $1"
 }
index 6c9c8af..6a93fac 100644 (file)
        "passwordreset-emailtitle": "Account details on {{SITENAME}}",
        "passwordreset-emailtext-ip": "Someone (probably you, from IP address $1) requested a reset of your\npassword for {{SITENAME}} ($4). The following user {{PLURAL:$3|account is|accounts are}}\nassociated with this email address:\n\n$2\n\n{{PLURAL:$3|This temporary password|These temporary passwords}} will expire in {{PLURAL:$5|one day|$5 days}}.\nYou should log in and choose a new password now. If someone else made this\nrequest, or if you have remembered your original password, and you no longer\nwish to change it, you may ignore this message and continue using your old\npassword.",
        "passwordreset-emailtext-user": "User $1 on {{SITENAME}} requested a reset of your password for {{SITENAME}}\n($4). The following user {{PLURAL:$3|account is|accounts are}} associated with this email address:\n\n$2\n\n{{PLURAL:$3|This temporary password|These temporary passwords}} will expire in {{PLURAL:$5|one day|$5 days}}.\nYou should log in and choose a new password now. If someone else made this\nrequest, or if you have remembered your original password, and you no longer\nwish to change it, you may ignore this message and continue using your old\npassword.",
-       "passwordreset-emailelement": "Username: $1\nTemporary password: $2",
+       "passwordreset-emailelement": "Username:\n$1\n\nTemporary password:\n$2",
        "passwordreset-emailsent": "A password reset email has been sent.",
        "passwordreset-emailsent-capture": "A password reset email has been sent, which is shown below.",
        "passwordreset-emailerror-capture": "A password reset email was generated, which is shown below, but sending it to the {{GENDER:$2|user}} failed: $1",
        "changeemail-password": "Your {{SITENAME}} password:",
        "changeemail-submit": "Change email",
        "changeemail-throttled": "You have made too many login attempts.\nPlease wait $1 before trying again.",
+       "changeemail-nochange": "Please enter a different new email address.",
        "resettokens": "Reset tokens",
        "resettokens-summary": "",
        "resettokens-text": "You can reset tokens which allow access to certain private data associated with your account here.\n\nYou should do it if you accidentally shared them with someone or if your account has been compromised.",
        "permissionserrorstext-withaction": "You do not have permission to $2, for the following {{PLURAL:$1|reason|reasons}}:",
        "recreate-moveddeleted-warn": "<strong>Warning: You are recreating a page that was previously deleted.</strong>\n\nYou should consider whether it is appropriate to continue editing this page.\nThe deletion and move log for this page are provided here for convenience:",
        "moveddeleted-notice": "This page has been deleted.\nThe deletion and move log for the page are provided below for reference.",
+       "moveddeleted-notice-recent": "Sorry, this page was recently deleted (within the last 24 hours).\nThe deletion and move log for the page are provided below for reference.",
        "log-fulllog": "View full log",
        "edit-hook-aborted": "Edit aborted by hook.\nIt gave no explanation.",
        "edit-gone-missing": "Could not update the page.\nIt appears to have been deleted.",
        "rows": "Rows:",
        "columns": "Columns:",
        "searchresultshead": "Search",
-       "stub-threshold": "Threshold for <a href=\"#\" class=\"stub\">stub link</a> formatting (bytes):",
+       "stub-threshold": "Threshold for stub link formatting ($1):",
+       "stub-threshold-sample-link": "sample",
        "stub-threshold-disabled": "Disabled",
        "recentchangesdays": "Days to show in recent changes:",
        "recentchangesdays-max": "Maximum $1 {{PLURAL:$1|day|days}}",
        "rfcurl": "//tools.ietf.org/html/rfc$1",
        "pubmedurl": "//www.ncbi.nlm.nih.gov/pubmed/$1?dopt=Abstract",
        "specialloguserlabel": "Performer:",
-       "speciallogtitlelabel": "Target (title or user):",
+       "speciallogtitlelabel": "Target (title or {{ns:user}}:username for user):",
        "log": "Logs",
        "all-logs-page": "All public logs",
        "alllogstext": "Combined display of all available logs of {{SITENAME}}.\nYou can narrow down the view by selecting a log type, the username (case-sensitive), or the affected page (also case-sensitive).",
        "tooltip-ca-nstab-main": "View the content page",
        "tooltip-ca-nstab-user": "View the user page",
        "tooltip-ca-nstab-media": "View the media page",
-       "tooltip-ca-nstab-special": "This is a special page, you cannot edit the page itself",
+       "tooltip-ca-nstab-special": "This is a special page, and it cannot be edited",
        "tooltip-ca-nstab-project": "View the project page",
        "tooltip-ca-nstab-image": "View the file page",
        "tooltip-ca-nstab-mediawiki": "View the system message",
index 6cd6f66..0ff7744 100644 (file)
        "passwordreset-emailtitle": "Kontaj detaloj en {{SITENAME}}",
        "passwordreset-emailtext-ip": "Iu (verŝajne vi, de IP-adreso $1) petis restarigon de via pasvorto por {{SITENAME}} ($4). La {{PLURAL:$3|jena uzanto-konto estas asociita|jenaj uzanto-kontoj estas asociitaj}} kun ĉi tiu retpoŝtadreso:\n\n$2\n\nĈi {{PLURAL:$3|tiu provizora pasvorto|tiuj provizoraj pasvortoj}} findatiĝos {{PLURAL:$5|unu tagon|$5 tagojn}}.\nVi ensalutu kaj elektu novan pasvorton nun. Se iu alia petis ĉi tion,\naŭ se vi memoris vian originalan pasvorton, kaj vi ne plu volas\nŝanĝi ĝin, vi povas ignori ĉi tiun mesaĝon kaj plu uzi vian \nmalnovan pasvorton.",
        "passwordreset-emailtext-user": "Uzanto $1 de {{SITENAME}} petis restarigo de via pasvorto por {{SITENAME}}\n($4). La {{PLURAL:$3|jena uzanto-konto estas asociita|jenaj uzanto-kontoj estas asociitaj}} kun ĉi tiu retpoŝtadreso:\n\n$2\n\nĈi {{PLURAL:$3|tiu provizora pasvorto|tiuj provizoraj pasvortoj}} findatiĝos {{PLURAL:$5|unu tagon|$5 tagojn}}.\nVi devas ensaluti kaj elekti novan pasvorton nun. Se iu alia petis ĉi tion,\naŭ se vi memoris vian originalan pasvorton, kaj vi ne plu volas ŝanĝi\nĝin, vi povas ignori ĉi tiun mesaĝon kaj uzi vian malnovan pasvorton.",
-       "passwordreset-emailelement": "Salutnomo: $1\nProvizora pasvorto: $2",
+       "passwordreset-emailelement": "Salutnomo: \n$1\n\nProvizora pasvorto: \n$2",
        "passwordreset-emailsent": "Renovigita pasvorto estis retpoŝte sendita.",
        "passwordreset-emailsent-capture": "Retpoŝto kun renovigita pasvorto estis sendita, kiu estas montrata malsupre.",
        "passwordreset-emailerror-capture": "Retpoŝto kun renovigita pasvorto estis generita, montrata sube, sed sendado al la {{GENDER:$2|uzanto}} malsukcesis: $1",
        "changeemail-oldemail": "Aktuala retpoŝtadreso:",
        "changeemail-newemail": "Nova retpoŝtadreso:",
        "changeemail-none": "(nenio)",
-       "changeemail-password": "Via {{SITENAME}}-ensalutado:",
+       "changeemail-password": "Via pasvorto por {{SITENAME}}:",
        "changeemail-submit": "Ŝanĝi retpoŝtadreson",
        "changeemail-throttled": "Vi tro ofte provis alsaluti.\nBonvolu atendi $1, antaŭ ol vi provos denove.",
        "resettokens": "Renovigi ŝlosilojn",
        "userrights-reason": "Kialo:",
        "userrights-no-interwiki": "Vi ne rajtas redakti uzanto-rajtojn en aliaj vikioj.",
        "userrights-nodatabase": "Datumbazo $1 ne ekzistas aŭ ne estas loka.",
-       "userrights-nologin": "Vi nepre [[Special:UserLogin|ensalutu]] kun administranto-konto doni uzanto-rajtojn.",
+       "userrights-nologin": "Vi devas [[Special:UserLogin|ensaluti]] per administranto-konto por doni uzanto-rajtojn.",
        "userrights-notallowed": "Via konto ne rajtas doni aŭ forigi uzanto-rajtojn.",
        "userrights-changeable-col": "Grupoj kiujn vi povas ŝanĝi",
        "userrights-unchangeable-col": "Grupoj kiujn vi ne povas ŝanĝi",
        "tooltip-ca-nstab-main": "Vidi la artikolon",
        "tooltip-ca-nstab-user": "Vidi la personan paĝon de la uzanto",
        "tooltip-ca-nstab-media": "Vidi la paĝon de la dosiero",
-       "tooltip-ca-nstab-special": "Estas speciala paĝo, vi ne rajtas redakti ĝin.",
+       "tooltip-ca-nstab-special": "Tio ĉi estas speciala paĝo kaj ĝi ne povas esti redaktita",
        "tooltip-ca-nstab-project": "Rigardi la paĝon de la projekto",
        "tooltip-ca-nstab-image": "Rigardi la dosierpaĝon",
        "tooltip-ca-nstab-mediawiki": "Rigardi la sisteman mesaĝon",
index 5456bc5..280c8c6 100644 (file)
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
-       "tog-hideminor": "Ocultar las ediciones menores en los cambios recientes",
-       "tog-hidepatrolled": "Ocultar las ediciones patrulladas en los cambios recientes",
-       "tog-newpageshidepatrolled": "Ocultar las páginas patrulladas en la lista de páginas nuevas",
+       "tog-hideminor": "Ocultar las ediciones menores de los cambios recientes",
+       "tog-hidepatrolled": "Ocultar las ediciones verificadas de los cambios recientes",
+       "tog-newpageshidepatrolled": "Ocultar las páginas verificadas de la lista de páginas nuevas",
        "tog-extendwatchlist": "Mostrar todos los cambios en la lista de seguimiento, no solo los más recientes",
        "tog-usenewrc": "Agrupar los cambios por página en los cambios recientes y en la lista de seguimiento",
        "tog-numberheadings": "Numerar automáticamente los encabezados",
        "tog-fancysig": "Tratar la firma como wikitexto (sin un enlace automático)",
        "tog-uselivepreview": "Usar previsualización dinámica",
        "tog-forceeditsummary": "Avisarme cuando grabe la página sin escribir un resumen de edición",
-       "tog-watchlisthideown": "Ocultar mis ediciones en la lista de seguimiento",
-       "tog-watchlisthidebots": "Ocultar las ediciones de bots en la lista de seguimiento",
-       "tog-watchlisthideminor": "Ocultar las ediciones menores en la lista de seguimiento",
-       "tog-watchlisthideliu": "Ocultar las ediciones de los usuarios registrados en la lista de seguimiento",
-       "tog-watchlisthideanons": "Ocultar las ediciones de los usuarios anónimos en la lista de seguimiento",
-       "tog-watchlisthidepatrolled": "Ocultar las ediciones patrulladas en la lista de seguimiento",
+       "tog-watchlisthideown": "Ocultar mis ediciones de la lista de seguimiento",
+       "tog-watchlisthidebots": "Ocultar las ediciones de bots de la lista de seguimiento",
+       "tog-watchlisthideminor": "Ocultar las ediciones menores de la lista de seguimiento",
+       "tog-watchlisthideliu": "Ocultar las ediciones de los usuarios registrados de la lista de seguimiento",
+       "tog-watchlisthideanons": "Ocultar las ediciones de los usuarios anónimos de la lista de seguimiento",
+       "tog-watchlisthidepatrolled": "Ocultar las ediciones verificadas de la lista de seguimiento",
        "tog-ccmeonemails": "Recibir copias de los correos electrónicos que envíe a otros usuarios",
        "tog-diffonly": "No mostrar el contenido de la página debajo de la lista de diferencias",
        "tog-showhiddencats": "Mostrar categorías ocultas",
        "badaccess": "Error de permisos",
        "badaccess-group0": "No estás autorizado a ejecutar la acción solicitada.",
        "badaccess-groups": "La acción que has solicitado está restringida a los usuarios {{PLURAL:$2|del grupo|de uno de estos $2 grupos}}: $1.",
-       "versionrequired": "Se requiere la versión $1 de MediaWiki.",
+       "versionrequired": "Se requiere la versión $1 de MediaWiki",
        "versionrequiredtext": "Se necesita la versión $1 de MediaWiki para utilizar esta página. Para más información, consulta [[Special:Version|la página de versión]].",
        "ok": "Aceptar",
        "retrievedfrom": "Obtenido de «$1»",
        "userlogin-resetlink": "¿Olvidaste tus datos de acceso?",
        "userlogin-resetpassword-link": "¿Has olvidado tu contraseña?",
        "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-loggedin": "Ya estás {{GENDER:$1|conectado|conectada}} como $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",
        "createacct-emailoptional": "Dirección de correo electrónico (opcional)",
        "passwordreset-emailtitle": "Detalles de la cuenta en {{SITENAME}}",
        "passwordreset-emailtext-ip": "Alguien (probablemente tú, desde la dirección IP $1) ha solicitado el restablecimiento de tu contraseña en {{SITENAME}} ($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}}\na 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}}.\nAhora puedes iniciar sesión y establecer una nueva contraseña. Si fue otra persona la que realizó esta solicitud, o si ya recuerdas tu contraseña original y, por tanto, no deseas cambiarla, puedes ignorar este mensaje y continuar usando tu contraseña anterior.",
        "passwordreset-emailtext-user": "El usuario $1 de {{SITENAME}} solicitó el restablecimiento de tu contraseña en {{SITENAME}}\n($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}} a 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}}.\nAhora puedes iniciar sesión y establecer una nueva contraseña. Si fue otra persona la que realizó esta solicitud, o si ya recuerdas tu contraseña original y, por tanto, no deseas cambiarla, puedes ignorar este mensaje y continuar usando tu contraseña anterior.",
-       "passwordreset-emailelement": "Nombre de {{GENDER:$1|usuario|usuaria}}: $1\nContraseña temporal: $2",
+       "passwordreset-emailelement": "Nombre de {{GENDER:$1|usuario|usuaria}}: \n$1\n\nContraseña temporal: \n$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 ha generado un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero ha fallado el envío {{GENDER:$2|al usuario|a la usuaria}}: $1",
        "changeemail-password": "Tu contraseña en {{SITENAME}}:",
        "changeemail-submit": "Cambiar correo electrónico",
        "changeemail-throttled": "Has intentado acceder demasiadas veces.\nEspera $1 antes de intentarlo de nuevo.",
+       "changeemail-nochange": "Escribe una dirección de correo electrónico nueva diferente.",
        "resettokens": "Restablecer claves",
        "resettokens-text": "Aquí puedes restablecer las claves que permiten el acceso a ciertos datos privados asociados a tu cuenta.\n\nDeberías hacerlo si los has compartido por accidente, o si ha habido intrusiones en tu cuenta.",
        "resettokens-no-tokens": "No hay claves para restablecer.",
        "revdelete-legend": "Establecer restricciones de visibilidad",
        "revdelete-hide-text": "Texto de la revisión",
        "revdelete-hide-image": "Ocultar el contenido del archivo",
-       "revdelete-hide-name": "Ocultar la selección y sus parámetros.",
+       "revdelete-hide-name": "Ocultar la selección y sus parámetros",
        "revdelete-hide-comment": "Resumen de edición",
        "revdelete-hide-user": "Nombre/IP del editor",
        "revdelete-hide-restricted": "Suprimir para todos los usuarios, incluidos administradores",
        "rows": "Filas:",
        "columns": "Columnas:",
        "searchresultshead": "Búsquedas",
-       "stub-threshold": "Límite para cambiar a formato de <a href=\"#\" class=\"stub\">enlace a esbozo</a> (en bytes):",
+       "stub-threshold": "Límite para cambiar a formato de enlace a esbozo ($1):",
+       "stub-threshold-sample-link": "muestra",
        "stub-threshold-disabled": "Desactivado",
        "recentchangesdays": "Días que mostrar en los cambios recientes:",
        "recentchangesdays-max": "Máximo {{PLURAL:$1|un día|$1 días}}",
        "right-import": "Importar páginas desde otras wikis",
        "right-importupload": "Importar páginas desde un archivo",
        "right-patrol": "Marcar ediciones de otros como verificadas",
-       "right-autopatrol": "Tener automáticamente marcadas como verificadas las ediciones propias",
+       "right-autopatrol": "Marcar sus ediciones automáticamente como verificadas",
        "right-patrolmarks": "Ver las marcas de verificación de cambios recientes",
        "right-unwatchedpages": "Ver una lista de páginas no vigiladas",
        "right-mergehistory": "Fusionar historiales de páginas",
        "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",
+       "recentchanges-label-unpatrolled": "Esta edición aún no ha sido verificada",
        "recentchanges-label-plusminus": "El tamaño de la página cambió esta cantidad de bytes",
        "recentchanges-legend-heading": "'''Leyenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (véase también la [[Special:NewPages|lista de páginas nuevas]])",
        "rcshowhideanons": "$1 usuarios anónimos",
        "rcshowhideanons-show": "Mostrar",
        "rcshowhideanons-hide": "Ocultar",
-       "rcshowhidepatr": "$1 ediciones patrulladas",
+       "rcshowhidepatr": "$1 ediciones verificadas",
        "rcshowhidepatr-show": "Mostrar",
        "rcshowhidepatr-hide": "Ocultar",
        "rcshowhidemine": "$1 mis ediciones",
        "pageswithprop-prophidden-binary": "valor de la propiedad binaria oculta ($1)",
        "doubleredirects": "Redirecciones dobles",
        "doubleredirectstext": "Esta página contiene una lista de páginas que redirigen a otras páginas de redirección.\nCada fila contiene enlaces a la segunda y tercera redirección, así como la primera línea de la segunda redirección, en la que usualmente se encontrará el artículo «real» al que la primera redirección debería apuntar.\nLas entradas <del>tachadas</del> han sido resueltas.",
-       "double-redirect-fixed-move": "[[$1]] ha sido movido.\nEste fue automáticamente actualizado y ahora es una redirección a [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] se ha trasladado.\nSe actualizó automáticamente y ahora redirecciona a [[$2]].",
        "double-redirect-fixed-maintenance": "Corrigiendo automáticamente la doble redirección desde [[$1]] a [[$2]] en un trabajo de mantenimiento.",
        "double-redirect-fixer": "Corrector de redirecciones",
        "brokenredirects": "Redirecciones incorrectas",
        "booksources-text": "Abajo hay una lista de enlaces a otros sitios que venden libros nuevos y usados, puede que contengan más información sobre los libros que estás buscando.",
        "booksources-invalid-isbn": "El número de ISBN no parece ser válido; comprueba los errores copiándolo de la fuente original.",
        "specialloguserlabel": "Usuario:",
-       "speciallogtitlelabel": "Objetivo (título o usuario):",
+       "speciallogtitlelabel": "Objetivo (título o {{ns:user}}:nombre de usuario):",
        "log": "Registros",
        "all-logs-page": "Todos los registros públicos",
        "alllogstext": "Vista combinada de todos los registros de {{SITENAME}}.\nPuedes filtrar la vista seleccionando un tipo de registro, el nombre del usuario o la página afectada. Se distinguen mayúsculas de minúsculas.",
        "deletecomment": "Motivo:",
        "deleteotherreason": "Otro motivo:",
        "deletereasonotherlist": "Otro motivo",
-       "deletereason-dropdown": "*Razones comunes de borrado\n** Spam\n** Vandalismo\n** Violación de copyright\n** A petición del mismo autor\n** Redirección incorrecta",
+       "deletereason-dropdown": "* Razones comunes de borrado\n** Spam\n** Vandalismo\n** Violación de derechos de autor\n** Petición del autor\n** Redirección incorrecta",
        "delete-edit-reasonlist": "Editar razones de borrado",
        "delete-toobig": "Esta página tiene un historial muy grande, con más de $1 {{PLURAL:$1|revisión|revisiones}}. Borrar este tipo de páginas ha sido restringido para prevenir posibles problemas en {{SITENAME}}.",
        "delete-warning-toobig": "Esta página tiene un historial de más de $1 {{PLURAL:$1|revisión|revisiones}}.\nEliminarla puede perturbar las operaciones de la base de datos de {{SITENAME}}.\nProcede con cautela.",
        "alreadyrolled": "No se puede revertir la última edición de [[:$1]] hecha por [[User:$2|$2]] ([[User talk:$2|discusión]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nalguien más ya ha editado o revertido esa página.\n\nLa última edición fue hecha por [[User:$3|$3]] ([[User talk:$3|discusión]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "El resumen de la edición fue: ''«$1»''.",
        "revertpage": "Revertidos los cambios de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc.]]) a la última edición de [[User:$1|$1]]",
-       "revertpage-nouser": "Revertidas las ediciones hechas por un usuario oculto a la última revisión hecha por [[User:$1|$1]]",
+       "revertpage-nouser": "Revertidas las ediciones hechas por un usuario oculto a la última revisión hecha por {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Revertidas las ediciones de $1; recuperada la última versión de $2.",
        "sessionfailure-title": "Error de sesión",
        "sessionfailure": "Parece que hay un problema con tu sesión;\nesta acción ha sido cancelada como medida de precaución contra secuestros de sesión.\nPor favor, pulsa «Atrás», recarga la página de la que viniste e inténtalo de nuevo.",
        "unlockconfirm": "Sí, realmente quiero desbloquear la base de datos.",
        "lockbtn": "Bloquear la base de datos",
        "unlockbtn": "Desbloquear la base de datos",
-       "locknoconfirm": "No ha confirmado lo que desea hacer.",
+       "locknoconfirm": "No has confirmado lo que quieres hacer.",
        "lockdbsuccesssub": "El bloqueo se ha realizado con éxito",
        "unlockdbsuccesssub": "El desbloqueo se ha realizado con éxito",
        "lockdbsuccesstext": "La base de datos de {{SITENAME}} ha sido bloqueada.\n<br />Recuerde retirar el bloqueo después de completar las tareas de mantenimiento.",
        "move-page-legend": "Renombrar página",
        "movepagetext": "Mediante el siguiente formulario puedes renombrar una página, moviendo todo su historial al nombre nuevo.\nEl título anterior redirigirá al nuevo.\nPuedes actualizar automáticamente las redirecciones que apuntan al título original.\nSi eliges no hacerlo, asegúrate de revisar posibles redirecciones [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|rotas]].\nTú eres responsable de asegurar que los enlaces continúen funcionando correctamente.\n\nNota que la página <strong>no</strong> se moverá si ya hay una página con el título nuevo, a menos de que ésta sea una redirección y no tenga historial de ediciones pasadas.\nEsto significa que puedes deshacer el renombrado en caso de un error, y que no puedes sobreescribir una página existente.\n\n<strong>Aviso</strong>\nEsto puede representar un cambio drástico e inesperado para una página popular;\nasegúrate de entender las consecuencias de esta acción antes de proceder.",
        "movepagetext-noredirectfixer": "Usando el siguiente formulario se renombrará una página, trasladando todo su historial al nuevo nombre.\nEl título anterior se convertirá en una redirección al nuevo título.\nAsegúrate de no dejar [[Special:DoubleRedirects|redirecciones dobles]] o [[Special:BrokenRedirects|rotas]].\nTú eres responsable de hacer que los enlaces sigan apuntando adonde se supone que deberían hacerlo.\n\nRecuerda que la página '''no''' será renombrada si ya existe una página con el nuevo título, a no ser que sea una página vacía o una redirección sin historial.\nEsto significa que podrás renombrar una página a su título original si has cometido un error, pero que no podrás sobrescribir una página existente.\n\n'''¡Aviso!'''\nEste puede ser un cambio drástico e inesperado para una página popular;\npor favor, asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.",
-       "movepagetalktext": "La página de discusión asociada, si existe, será renombrada automáticamente '''a menos que:'''\n*Estés trasladando la página entre espacios de nombres diferentes,\n*Una página de discusión no vacía ya exista con el nombre nuevo, o\n*No marques el recuadro «Renombrar la página de discusión asociada».\n\nEn estos casos, deberás trasladar manualmente el contenido de la página de discusión.",
+       "movepagetalktext": "La página de discusión asociada se trasladará automáticamente con ella <strong>a menos que:</strong>\n*Una página de discusión no vacía ya exista con el nombre nuevo, o\n*Desmarques la casilla debajo.\n\nEn esos casos, deberás trasladar o fusionar manualmente la página si así lo quieres.",
        "movearticle": "Renombrar página",
        "moveuserpage-warning": "<strong>Advertencia:</strong> estás a punto de trasladar una página de usuario. Ten en cuenta que solo se trasladará la página; el usuario <em>no</em> se renombrará.",
        "movecategorypage-warning": "<strong>Advertencia:</strong> estás a punto de trasladar una página de categoría. Ten en cuenta que se trasladará sólo la página, y las páginas en la antigua categoría <em>no</em> se recategorizarán en la nueva.",
        "thumbnail-more": "Aumentar",
        "filemissing": "Falta archivo",
        "thumbnail_error": "Error al crear miniatura: $1",
-       "thumbnail_error_remote": "Mensaje de error de  $1 :\n$2",
+       "thumbnail_error_remote": "Mensaje de error de $1:\n$2",
        "djvu_page_error": "Página DjVu fuera de rango",
        "djvu_no_xml": "Imposible obtener XML para el archivo DjVu",
        "thumbnail-temp-create": "No se ha podido crear el archivo temporal de la miniatura",
        "tooltip-ca-nstab-main": "Ver la página de contenido",
        "tooltip-ca-nstab-user": "Ver la página del usuario",
        "tooltip-ca-nstab-media": "Ver la página de multimedia",
-       "tooltip-ca-nstab-special": "Esta es una página especial, no se puede editar la página en sí",
+       "tooltip-ca-nstab-special": "Esta es una página especial, y no puede editarse",
        "tooltip-ca-nstab-project": "Ver la página del proyecto",
        "tooltip-ca-nstab-image": "Ver la página del archivo",
        "tooltip-ca-nstab-mediawiki": "Ver el mensaje de sistema",
        "pageinfo-category-pages": "Número de páginas",
        "pageinfo-category-subcats": "Número de subcategorías",
        "pageinfo-category-files": "Número de archivos",
-       "markaspatrolleddiff": "Marcar como revisado",
-       "markaspatrolledtext": "Marcar este artículo como revisado",
+       "markaspatrolleddiff": "Marcar como verificada",
+       "markaspatrolledtext": "Marcar esta página como verificada",
        "markedaspatrolled": "Marcado como revisado",
-       "markedaspatrolledtext": "La revisión seleccionada de [[:$1|$1]] ha sido marcada como revisada.",
+       "markedaspatrolledtext": "La revisión seleccionada de [[:$1|$1]] ha sido marcada como verificada.",
        "rcpatroldisabled": "Se ha desactivado la supervisión de cambios recientes",
-       "rcpatroldisabledtext": "La capacidad de revisar los Cambios Recientes está deshabilitada en este momento.",
-       "markedaspatrollederror": "No se puede marcar como patrullada",
-       "markedaspatrollederrortext": "Debes especificar una revisión para marcarla como patrullada.",
-       "markedaspatrollederror-noautopatrol": "No tienes permisos para marcar tus propios cambios como revisados.",
-       "markedaspatrollednotify": "Este cambio realizado en $1 se ha marcado como revisado.",
-       "markedaspatrollederrornotify": "Error al marcar como revisado.",
+       "rcpatroldisabledtext": "La capacidad de verificar los cambios recientes está deshabilitada en este momento.",
+       "markedaspatrollederror": "No se puede marcar como verificada",
+       "markedaspatrollederrortext": "Debes especificar una revisión para marcarla como verificada.",
+       "markedaspatrollederror-noautopatrol": "No tienes permisos para marcar tus propios cambios como verificados.",
+       "markedaspatrollednotify": "Este cambio realizado en $1 se ha marcado como verificado.",
+       "markedaspatrollederrornotify": "Error al marcar como verificado.",
        "patrol-log-page": "Registro de revisiones",
-       "patrol-log-header": "Este es un registro de revisiones patrulladas.",
+       "patrol-log-header": "Este es un registro de revisiones verificadas.",
        "log-show-hide-patrol": "$1 registro de patrullaje",
        "log-show-hide-tag": "$1 registro de etiquetas",
        "deletedrevision": "Borrada revisión antigua $1",
        "confirmemail_sent": "Confirmación de correo enviada.",
        "confirmemail_oncreate": "Se ha enviado un código de confirmación a tu dirección de correo electrónico.\nEste código no es necesario para iniciar sesión, pero necesitarás proporcionarlo antes de activar cualquier función basada en correo electrónico en el wiki.",
        "confirmemail_sendfailed": "No fue posible enviar el correo de confirmación. Por favor, comprueba la validez de la dirección de correo.\n\nEl servidor indicó el error: $1",
-       "confirmemail_invalid": "Código de confirmación incorrecto. El código debe haber expirado.",
+       "confirmemail_invalid": "Código de confirmación incorrecto.\nEl código debe haber expirado.",
        "confirmemail_needlogin": "Necesitas $1 para confirmar tu dirección electrónica.",
        "confirmemail_success": "Su dirección de correo ha sido confirmada\nAhora puedes [[Special:UserLogin|identificarte]] y colaborar en el wiki.",
        "confirmemail_loggedin": "Tu dirección de correo electrónico ha sido confirmada.",
        "watchlistedit-raw-done": "Tu lista de seguimiento se ha actualizado.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Se ha añadido una página|Se han añadido $1 páginas}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Una página ha sido borrada|$1 páginas han sido borradas}}:",
-       "watchlistedit-clear-title": "Lista de seguimiento limpiada",
-       "watchlistedit-clear-legend": "Limpiar lista de seguimiento",
+       "watchlistedit-clear-title": "Lista de seguimiento vaciada",
+       "watchlistedit-clear-legend": "Vaciar la lista de seguimiento",
        "watchlistedit-clear-explain": "Todos los títulos serán eliminados de tu lista de seguimiento",
        "watchlistedit-clear-titles": "Títulos:",
        "watchlistedit-clear-submit": "Vaciar la lista de seguimiento (¡permanente!)",
        "watchlistedit-clear-done": "Se ha vaciado tu lista de seguimiento.",
-       "watchlistedit-clear-removed": "{{PLURAL:$1|un título fue removido|Los títulos $1 fueron removidos}}:",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|un título fue eliminado|$1 títulos fueron eliminados}}:",
        "watchlistedit-too-many": "Hay demasiadas páginas para mostrar aquí.",
-       "watchlisttools-clear": "Limpiar la lista de seguimiento",
+       "watchlisttools-clear": "Vaciar la lista de seguimiento",
        "watchlisttools-view": "Ver cambios relevantes",
        "watchlisttools-edit": "Ver y editar tu lista de seguimiento",
        "watchlisttools-raw": "Editar lista de seguimiento en crudo",
        "tags-create-warnings-below": "¿Continuar con la creación de la etiqueta?",
        "tags-delete-title": "Eliminar etiqueta",
        "tags-delete-explanation-initial": "Estás a punto de eliminar la etiqueta «$1» de la base de datos.",
-       "tags-delete-explanation-in-use": "Se removerá de {{PLURAL:$2|$2 revisión o entrada ingresada|todas las $2 revisiones y/o entradas ingresadas}} a la que actualmente es aplicada.",
+       "tags-delete-explanation-in-use": "Se eliminará de {{PLURAL:$2|$2 revisión o entrada de registro|todas las $2 revisiones y/o entradas de registro}} donde actualmente se aplica.",
        "tags-delete-explanation-warning": "Esta acción es <strong>irreversible</strong> y ni siquiera los administradores de la base de datos podrán deshacerla. Confirma que esta es la etiqueta que se eliminará.",
        "tags-delete-explanation-active": "<strong>La etiqueta \"$1\" aún está activa y se seguirá utilizándo en el futuro.</strong> Para que esto no ocurra, deshabilítala desde el lugar donde se configuró para ser utilizada.",
        "tags-delete-reason": "Motivo:",
        "logentry-delete-restore": "$1 restauró la página «$3»",
        "logentry-delete-event": "$1 {{GENDER:$2|modificó}} la visibilidad de {{PLURAL:$5|un evento|$5 eventos}} del registro en $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|modificó}} la visibilidad de {{PLURAL:$5|una revisión |$5 revisiones}} en la página  $3: $4",
-       "logentry-delete-event-legacy": "$1 ha {{GENDER:$2|cambiado}} la visibilidad de registro de eventos en $3",
+       "logentry-delete-event-legacy": "$1 ha {{GENDER:$2|cambiado}} la visibilidad de eventos del registro en $3",
        "logentry-delete-revision-legacy": "$1 ha {{GENDER:$2|cambiado}} la visibilidad de las revisiones en la página $3",
        "logentry-suppress-delete": "$1 {{GENDER:$2|borró}} la página $3",
-       "logentry-suppress-event": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de {{PLURAL:$5|una edición|$5 ediciones}} en la página $3: $4",
+       "logentry-suppress-event": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de {{PLURAL:$5|un evento|$5 eventos}} del registro en $3: $4",
        "logentry-suppress-revision": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de {{PLURAL:$5|una edición|$5 ediciones}} en la página $3: $4",
        "logentry-suppress-event-legacy": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de los eventos del registro en $3",
-       "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de varias ediciones en la página $3",
+       "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de las revisiones en la página $3",
        "revdelete-content-hid": "contenido ocultado",
        "revdelete-summary-hid": "resumen de edición oculto",
        "revdelete-uname-hid": "nombre de usuario ocultado",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|trasladó}} la página $3 a $4 sin dejar una redirección",
        "logentry-move-move_redir": "$1 {{GENDER:$2|trasladó}} la página $3 a $4 sobre una redirección",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|trasladó}} la página $3 a $4 sobre una redirección y sin dejar una redirección",
-       "logentry-patrol-patrol": "$1 {{GENDER:$2|marcó}} como patrullada la edición $4 de la página $3",
-       "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|marcó}} automáticamente la edición $4 de la página $3 como patrullada",
+       "logentry-patrol-patrol": "$1 {{GENDER:$2|marcó}} la revisión $4 de la página $3 como verificada",
+       "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|marcó}} automáticamente la revisión $4 de la página $3 como verificada",
        "logentry-newusers-newusers": "La cuenta de usuario $1 ha sido {{GENDER:$2|creada}}",
        "logentry-newusers-create": "Se ha {{GENDER:$2|creado}} la cuenta de usuario $1",
        "logentry-newusers-create2": "La cuenta de usuario $3 ha sido {{GENDER:$2|creada}} por $1",
        "limitreport-templateargumentsize": "Argumento del tamaño de la plantilla",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
        "limitreport-expansiondepth": "Profundidad máxima de expansión",
-       "limitreport-expensivefunctioncount": "Cuenta de la funcion expansiva del analizador",
+       "limitreport-expensivefunctioncount": "Cuenta de la función expansiva del analizador",
        "expandtemplates": "Expandir plantillas",
        "expand_templates_intro": "Esta página especial toma un texto wiki y expande todas sus plantillas recursivamente.\nTambién expande las funciones sintácticas como <code><nowiki>{{</nowiki>#language:…}}</code>, y variables como\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. De hecho, expande casi cualquier cosa que esté entre llaves dobles.",
        "expand_templates_title": "Título de la página, útil para expandir {{FULLPAGENAME}} o similares:",
index e8cb188..a2bf8e7 100644 (file)
        "passwordreset-emailtitle": "{{GRAMMAR:genitive|{{SITENAME}}}} konto andmed",
        "passwordreset-emailtext-ip": "Keegi, arvatavasti sina ise, IP-aadressilt $1 palus lähtestada sinu {{GRAMMAR:genitive|{{SITENAME}}}} ($4) parooli. Selle e-posti aadressiga on seotud {{PLURAL:$3|järgmine konto|järgmised kontod}}:\n\n$2\n\n{{PLURAL:$3|See ajutine parool aegub|Need ajutised paroolid aeguvad}} {{PLURAL:$5|ühe|$5}} päeva pärast.\nPeaksid nüüd sisse logima ja uue parooli valima. Kui selle palve esitas keegi teine või kui sulle meenus su parool ja sa ei soovi seda enam muuta, võid teadet eirata ja jätkata vana parooli kasutamist.",
        "passwordreset-emailtext-user": "{{GRAMMAR:genitive|{{SITENAME}}}} kasutaja $1 palus lähtestada sinu {{GRAMMAR:genitive|{{SITENAME}}}} ($4) parooli. Selle e-posti aadressiga on seotud {{PLURAL:$3|järgmine konto|järgmised kontod}}:\n\n$2\n\n{{PLURAL:$3|See ajutine parool aegub|Need ajutised paroolid aeguvad}} {{PLURAL:$5|ühe|$5}} päeva pärast.\nPeaksid nüüd sisse logima ja uue parooli valima. Kui selle palve esitas keegi teine või kui sulle meenus su parool ja sa ei soovi seda enam muuta, võid teadet eirata ja jätkata vana parooli kasutamist.",
-       "passwordreset-emailelement": "Kasutajanimi: $1\nAjutine parool: $2",
+       "passwordreset-emailelement": "Kasutajanimi: \n$1\n\nAjutine parool: \n$2",
        "passwordreset-emailsent": "Parooli lähtestamise e-kiri on saadetud.",
        "passwordreset-emailsent-capture": "E-kirjatsi on saadetud allpool näidatav parooli lähtestuskiri.",
        "passwordreset-emailerror-capture": "Koostati allpool näidatav parooli lähtestuskiri, aga selle e-kirjatsi {{GENDER:$2|kasutajale}} saatmine ebaõnnestus: $1",
        "rows": "Ridu:",
        "columns": "Veerge:",
        "searchresultshead": "Otsingutulemite sätted",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">Nii</a> lingitud lehekülje suuruse ülempiir (baitides):",
+       "stub-threshold": "Nupukese suurus lingivormistusel ($1):",
+       "stub-threshold-sample-link": "näide",
        "stub-threshold-disabled": "Välja lülitatud",
        "recentchangesdays": "Mitu päeva näidata viimastes muudatustes:",
        "recentchangesdays-max": "Ülemmäär $1 {{PLURAL:$1|päev|päeva}}",
        "booksources-text": "Allpool on linke teistele lehekülgedele, kus müüakse uusi ja kasutatud raamatuid. Lehekülgedel võib olla ka lisainfot raamatute kohta:",
        "booksources-invalid-isbn": "Antud ISBN-number ei ole korrektne; kontrolli algallikast kopeerides vigu.",
        "specialloguserlabel": "Täitja:",
-       "speciallogtitlelabel": "Objekt (pealkiri või kasutaja):",
+       "speciallogtitlelabel": "Objekt (pealkiri või {{ns:user}}:kasutajanimi):",
        "log": "Logid",
        "all-logs-page": "Kõik avalikud logid",
        "alllogstext": "See on {{GRAMMAR:genitive|{{SITENAME}}}} kõigi olemasolevate logide ühendkuva.\nValiku kitsendamiseks vali logitüüp, sisesta kasutajanimi (tõstutundlik) või huvipakkuva lehekülje pealkiri (samuti tõstutundlik).",
        "allpagesbadtitle": "Lehekülje pealkiri oli vigane või sisaldas teise viki või keele eesliidet.\nSee võib sisaldada üht või enamat märki, mida ei saa pealkirjades kasutada.",
        "allpages-bad-ns": "{{GRAMMAR:inessive|{{SITENAME}}}} ei ole nimeruumi \"$1\".",
        "allpages-hide-redirects": "Peida ümbersuunamised",
-       "cachedspecial-viewing-cached-ttl": "Vaata vahemälus olevat lehekülje versiooni, mis võib olla kuni $1 vanune.",
+       "cachedspecial-viewing-cached-ttl": "Vaata vahemälus olevat lehekülje versiooni, mis võib olla kuni $1 vana.",
        "cachedspecial-viewing-cached-ts": "Vaatad vahemälus olevat lehekülje versiooni, mis ei pruugi olla täiesti ajakohane.",
        "cachedspecial-refresh-now": "Vaata uusimat versiooni.",
        "categories": "Kategooriad",
        "allmessages-prefix": "Eesliitefilter:",
        "allmessages-language": "Keel:",
        "allmessages-filter-submit": "Mine",
-       "allmessages-filter-translate": "Tõlgi",
+       "allmessages-filter-translate": "tõlgi",
        "thumbnail-more": "Suurenda",
        "filemissing": "Fail puudub",
        "thumbnail_error": "Viga pisipildi loomisel: $1",
        "tooltip-ca-nstab-main": "Vaata sisulehekülge",
        "tooltip-ca-nstab-user": "Näita kasutaja lehte",
        "tooltip-ca-nstab-media": "Näita pildi lehte",
-       "tooltip-ca-nstab-special": "See on erilehekülg, sa ei saa seda lehekülge ennast redigeerida.",
+       "tooltip-ca-nstab-special": "See on erilehekülg ja seda ei saa redigeerida.",
        "tooltip-ca-nstab-project": "Näita projekti lehte",
        "tooltip-ca-nstab-image": "Näita pildi lehte",
        "tooltip-ca-nstab-mediawiki": "Näita süsteemi sõnumit",
        "sp-newimages-showfrom": "Näita uusi faile alates kuupäevast $2, kell $1",
        "hours-abbrev": "$1 t",
        "days-abbrev": "$1 p",
-       "seconds": "{{PLURAL:$1|üks sekund|$1 sekundit}}",
-       "minutes": "{{PLURAL:$1|üks minut|$1 minutit}}",
-       "hours": "{{PLURAL:$1|üks tund|$1 tundi}}",
-       "days": "{{PLURAL:$1|üks päev|$1 päeva}}",
+       "seconds": "{{PLURAL:$1|$1 sekund|$1 sekundit}}",
+       "minutes": "{{PLURAL:$1|$1 minut|$1 minutit}}",
+       "hours": "{{PLURAL:$1|$1 tund|$1 tundi}}",
+       "days": "{{PLURAL:$1|$1 päev|$1 päeva}}",
        "weeks": "{{PLURAL:$1|$1 nädal|$1 nädalat}}",
-       "months": "{{PLURAL:$1|Üks kuu|$1 kuud}}",
-       "years": "{{PLURAL:$1|Üks aasta|$1 aastat}}",
+       "months": "{{PLURAL:$1|1 kuu|$1 kuud}}",
+       "years": "{{PLURAL:$1|1 aasta|$1 aastat}}",
        "ago": "$1 tagasi",
        "just-now": "just nüüd",
        "hours-ago": "$1 {{PLURAL:$1|tund|tundi}} tagasi",
index e0b0ee9..4d582fb 100644 (file)
        "passwordreset-capture-help": "Kutxa hau hautatzen baduzu behin-behineko pasahitza duen e-posta erakutsiko zatzaizu, eta erabiltzaileari bidaliko zaio.",
        "passwordreset-email": "E-mail helbidea:",
        "passwordreset-emailtitle": "{{SITENAME}}-rako kontuaren xehetasunak",
-       "passwordreset-emailelement": "Erabiltzaile izena: $1\nBehin-behineko pasahitza: $2",
+       "passwordreset-emailelement": "Erabiltzaile izena: \n$1\n\nBehin-behineko pasahitza: \n$2",
        "passwordreset-emailsent": "Pasahitza berrezartzeko e-posta bidali da.",
        "passwordreset-emailsent-capture": "Pasahitza berrezartzeko e-posta bat bidali dizugu, behean erakusten dena.",
        "changeemail": "Aldatu e-mail helbidea",
        "largefileserver": "Fitxategi hau zerbitzariak baimentzen duena baino handiagoa da.",
        "emptyfile": "Badirudi igotzen ari zaren fitxategia hutsik dagoela. Mesedez, egiaztatu fitxategi hori dela igo nahi duzuna.",
        "windows-nonascii-filename": "Wiki honek ez du baimentzen letra bereziak dituzten fitxategi izenak.",
-       "fileexists": "Badago izen hori daukan fitxategi bat; mesedez, ikusi existitzen den <strong>[[:$1]]</strong> fitxategia aldatu nahi duzun egiaztatzeko.\n[[$1|thumb]]",
+       "fileexists": "Badago izen hori daukan fitxategi bat; mesedez, ikusi existitzen den <strong>[[:$1]]</strong> ziur {{GENDER:|ez bazaude}} eta fitxategia aldatu nahi duzun egiaztatzeko.\n[[$1|thumb]]",
        "filepageexists": "Fitxategi honen deskribapen orria dagoeneko sortuta dago <strong>[[:$1]]</strong>-en, baina, ez da existitzen izen hori duen fitxategirik.\nIdazten duzun laburpena ez da deskribapen orrian agertuko.\nZure laburpena agertzeko, eskuz aldatu beharko duzu.\n[[$1|thumb]]",
-       "fileexists-extension": "Badago antzeko izena duen fitxategi bat: [[$2|thumb]]\n* Igotako fitxategiaren izena: <strong>[[:$1]]</strong>\n* Aurretik dagoen fitxategiaren izena: <strong>[[:$2]]</strong>\nHautatu beste izen bat.",
+       "fileexists-extension": "Badago antzeko izena duen fitxategi bat: [[$2|thumb]]\n* Igotako fitxategiaren izena: <strong>[[:$1]]</strong>\n* Aurretik dagoen fitxategiaren izena: <strong>[[:$2]]</strong>\nAgian izen esanguratsuago bat erabili nahi duzu?",
        "fileexists-thumbnail-yes": "Badirudi neurri txikiko irudia dela ''(irudi txikia)''. [[$1|thumb]]\nEgiaztatu <strong>[[:$1]]</strong> fitxategia.\nEgiaztatutako fitxategia eta jatorrizkoa berdinak badira ez dago irudi txikia igo beharrik.",
        "file-thumbnail-no": "Fitxategiaren izena <strong>$1</strong>-(r)ekin hasten da.\nBadirudi tamaina txikiko irudia ''(thumbnail)'' dela.\nIrudi hau bereizmen handiagoan izango bazenu igo ezazu, bestela, fitxategiaren izena aldatu mesedez.",
        "fileexists-forbidden": "Badago izen hori daukan fitxategia, eta ezin da gainidatzi.\nOraindik fitxategia igo nahi baduzu, mesedez atzera itzuli eta igo fitxategia izen ezberdin batekin. [[File:$1|thumb|center|$1]]",
        "duplicate-defaultsort": "Adi: Berezko \"$2\" antolatzeak aurreko berezko \"$1\" antolatzea gainditzen du.",
        "version": "Bertsioa",
        "version-extensions": "Instalatutako luzapenak",
-       "version-skins": "Itxurak",
+       "version-skins": "Instalatutako itxurak",
        "version-specialpages": "Aparteko orrialdeak",
        "version-parserhooks": "Parser estentsioak",
        "version-variables": "Aldagaiak",
        "tags-activate-submit": "Aktibatu",
        "tags-deactivate-reason": "Arrazoia:",
        "tags-deactivate-submit": "Desaktibatu",
+       "tags-edit-existing-tags": "Existitzen diren etiketak:",
        "tags-edit-new-tags": "Etiketa berriak:",
        "tags-edit-add": "Gehitu etiketa hauek:",
        "tags-edit-remove": "Kendu etiketa hauek:",
        "htmlform-chosen-placeholder": "Aukeratu",
        "htmlform-cloner-create": "Gehitu gehiago",
        "htmlform-cloner-delete": "Kendu",
+       "htmlform-title-not-exists": "[[:$1]] ez da existitzen.",
        "sqlite-has-fts": "$1 testu osoan bilatzeko laguntzarekin",
        "sqlite-no-fts": "$1 testu osoan bilatzeko laguntzarik gabe",
        "logentry-delete-delete": "$1 {{GENDER:$2|wikilariak}} «$3» orria ezabatu du",
index c498ae3..3529566 100644 (file)
@@ -8,7 +8,8 @@
                        "Xuacu",
                        "아라",
                        "Babanwalia",
-                       "Henares"
+                       "Henares",
+                       "MarcoAurelio"
                ]
        },
        "tog-underline": "Surrayal atihus:",
        "prefs-custom-css": "CSS pressonalizau",
        "prefs-custom-js": "JS pressonalizau",
        "youremail": "Email:",
-       "username": "Nombri d'usuáriu:",
+       "username": "{{GENDER:$1|Nombri d'usuáriu|Nombri d'usuária}}:",
        "prefs-memberingroups": "Miembru de {{PLURAL:$1|grupu|groupus}}:",
        "yourrealname": "Nombri verdaeru:",
        "yourlanguage": "Palra:",
        "nlinks": "$1 {{PLURAL:$1|atihu|atihus}}",
        "nmembers": "$1 {{PLURAL:$1|miembru|miembrus}}",
        "nrevisions": "$1 {{PLURAL:$1|revisión|revisionis}}",
-       "nviews": "$1 {{PLURAL:$1|vesita|vesitas}}",
        "specialpage-empty": "Esta páhina está vacia.",
        "lonelypages": "Páhinas güérfanas",
        "lonelypagestext": "Las siguientis páginas nu están atijás (dendi otras páginas) ena {{SITENAME}}.",
        "mailnologin": "Nu envial direción",
        "mailnologintext": "Ebis estal [[Special:UserLogin|rutrau]]\ni tenel una direción d´email correta enas tus [[Special:Preferences|preferéncias]]\npa envial correus a otrus usuárius.",
        "emailuser": "Envial un email a esti usuáriu",
-       "emailpage": "E-mail el usuáriu",
        "emailpagetext": "Si esti usuáriu á escrebiu una direción email enas sus preferéncias, con el hormulariu d'embahu se l'enviará un mensahi.\nLa direción email qu'aigas escrebiu enas tus preferéncias apaicirá cumu remitenti el mensahi, d'esta horma, el destinatariu pudrá contestalti.",
        "defemailsubject": "E-mail de {{SITENAME}}",
        "noemailtitle": "Nu ai direción d´e-mail",
index 8c5c936..095f7e6 100644 (file)
        "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-emailelement": "نام کاربری: \n$1\n\nگذرواژهٔ موقت: \n$2",
        "passwordreset-emailsent": "یک نامهٔ بازنشانی گذرواژه فرستاده شده‌است.",
        "passwordreset-emailsent-capture": "یک ایمیل بازنشانی که در پایین نمایش داده شده، فرستاده شده است.",
        "passwordreset-emailerror-capture": "ایمیل بازنشانی، که در زیر نمایش داده شده، ایجاد شد، ولی ارسال آن به {{GENDER:$2|کاربر}} موفقیت‌آمیز نبود: $1",
        "rows": "تعداد سطرها:",
        "columns": "تعداد ستون‌ها:",
        "searchresultshead": "جستجو",
-       "stub-threshold": "آستانهٔ ویرایش پیوندهای <a href=\"#\" class=\"stub\">ناقص</a> (بایت):",
+       "stub-threshold": "آستانهٔ ویرایش پیوندهای ناقص ($1):",
+       "stub-threshold-sample-link": "نمونه",
        "stub-threshold-disabled": "غیرفعال",
        "recentchangesdays": "تعداد روزهای نمایش داده‌شده در تغییرات اخیر:",
        "recentchangesdays-max": "حداکثر $1 {{PLURAL:$1|روز}}",
        "booksources-text": "در زیر فهرستی از پیوندها به وبگاه‌های دیگر آمده‌است که کتاب‌های نو و دست دوم می‌فروشند، و همچنین ممکن است اطلاعات بیشتری راجع به کتاب مورد نظر شما داشته باشند:",
        "booksources-invalid-isbn": "شابک داده شده مجاز به نظر نمی‌رسد؛ از جهت اشکالات هنگام کپی کردن از منبع اصلی بررسی کنید.",
        "specialloguserlabel": "مجری:",
-       "speciallogtitlelabel": "هدف (عنوان یا کاربر):",
+       "speciallogtitlelabel": "هدف (عنوان یا {{ns:user}}:نام کاربر برای کاربر):",
        "log": "سیاهه‌ها",
        "all-logs-page": "تمام سیاهه‌های عمومی",
        "alllogstext": "نمایش یک‌جای تمام سیاهه‌های موجود در {{SITENAME}}.\nمی‌توانید با انتخاب نوع سیاهه، نام کاربری (حساس به کوچکی و بزرگی حروف) و صفحه‌های تغییریافته (حساس به بزرگی و کوچکی حروف)، نمایش را محدودتر سازید.",
        "tooltip-ca-nstab-main": "دیدن صفحهٔ محتویات",
        "tooltip-ca-nstab-user": "نمایش صفحهٔ کاربر",
        "tooltip-ca-nstab-media": "دیدن صفحهٔ مدیا",
-       "tooltip-ca-nstab-special": "این یک صفحهٔ ویژه است، نمی‌توانید خود صفحه را ویرایش کنید",
+       "tooltip-ca-nstab-special": "این یک صفحهٔ ویژه است و قابل ویرایش نیست",
        "tooltip-ca-nstab-project": "نمایش صفحهٔ پروژه",
        "tooltip-ca-nstab-image": "دیدن صفحهٔ پرونده",
        "tooltip-ca-nstab-mediawiki": "نمایش پیغام سامانه",
index 6b81891..fd8d5d5 100644 (file)
        "createacct-benefit-body2": "{{PLURAL:$1|sivu|sivua}}",
        "createacct-benefit-body3": "{{PLURAL:$1|viimeikainen muokkaaja|viimeaikaista muokkaajaa}}",
        "badretype": "Syöttämäsi salasanat ovat keskenään erilaiset.",
+       "usernameinprogress": "Tunnuksen luominen tälle käyttäjänimelle on parhaillaan käynnissä.\nOle hyvä ja odota.",
        "userexists": "Pyytämäsi käyttäjänimi on jo käytössä. Valitse toinen käyttäjänimi.",
        "loginerror": "Sisäänkirjautumisvirhe",
        "createacct-error": "Virhe tunnuksen luomisessa",
        "passwordreset-emailtitle": "Tunnuksen tiedot {{GRAMMAR:inessive|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Joku (todennäköisesti sinä, IP-osoitteesta $1) pyysi salasanasi\nvaihtamista sivustolla {{SITENAME}} ($4). {{PLURAL:$3|Seuraava käyttäjätunnus on|Seuraavat käyttäjätunnukset ovat}}\nyhdistettynä tähän sähköpostiosoitteeseen:\n\n$2\n\n{{PLURAL:$3|Tämä väliaikainen salasana vanhentuu|Nämä väliaikaiset salasanat vanhentuvat}} {{PLURAL:$5|yhden päivän|$5 päivän}} kuluttua.\nKirjaudu sisään nyt ja valitse uusi salasana heti. Jos joku toinen teki tämän pyynnön \ntai jos muistitkin vanhan salasanasi etkä halua enää muuttaa sitä,\nvoit jättää tämän viestin huomiotta ja jatkaa vanhan salasanasi käyttämistä.",
        "passwordreset-emailtext-user": "Käyttäjä $1 pyysi muistutusta tunnuksesi tiedoista sivustolla {{SITENAME}} ($4).\n{{PLURAL:$3|Seuraava käyttäjätunnus on|Seuraavat käyttäjätunnukset ovat}} liitetty tähän sähköpostiosoitteeseen:\n\n$2\n\n{{PLURAL:$3|Tämä väliaikainen salasana vanhentuu|Nämä väliaikaiset salasanat vanhentuvat}} {{PLURAL:$5|yhden päivän|$5 päivän}} kuluttua.\nSinun kannattaa kirjautua sisään ja valita uusi salasana. Jos joku toinen teki tämän\npyynnön, tai muistat sittenkin vanhan salasanasi, etkä halua muuttaa sitä,\nvoit jättää tämän viestin huomiotta ja jatkaa vanhan salasanan käyttöä.",
-       "passwordreset-emailelement": "Käyttäjätunnus: $1\nVäliaikainen salasana: $2",
+       "passwordreset-emailelement": "Käyttäjätunnus: \n$1\n\nVäliaikainen salasana: \n$2",
        "passwordreset-emailsent": "Salasanan uudistamisesta kertova viesti on lähetetty sähköpostitse.",
        "passwordreset-emailsent-capture": "Salasanan uudistamisesta kertova sähköpostiviesti on lähetetty, ja se näkyy myös alla.",
        "passwordreset-emailerror-capture": "Allaoleva sähköpostiviesti luotiin, mutta sen lähettäminen {{GENDER:$2|käyttäjälle}} epäonnistui: $1",
        "rows": "Rivejä",
        "columns": "Sarakkeita",
        "searchresultshead": "Haku",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">Tynkäsivun</a> osoituskynnys",
+       "stub-threshold": "Tynkälinkkien muotoilun kynnysarvo ($1):",
+       "stub-threshold-sample-link": "näyte",
        "stub-threshold-disabled": "Ei käytössä",
        "recentchangesdays": "Näytettävien päivien määrä tuoreissa&nbsp;muutoksissa",
        "recentchangesdays-max": "Enintään $1 {{PLURAL:$1|päivä|päivää}}",
        "upload-dialog-button-cancel": "Peru",
        "upload-dialog-button-done": "Valmis",
        "upload-dialog-button-save": "Tallenna",
+       "upload-dialog-button-upload": "Tallenna",
        "upload-dialog-label-select-file": "Valitse tiedosto",
        "upload-dialog-label-infoform-title": "Yksityiskohdat",
        "upload-dialog-label-infoform-name": "Nimi",
        "upload-dialog-label-infoform-description": "Kuvaus",
+       "upload-dialog-label-usage-title": "Käyttö",
        "upload-dialog-label-usage-filename": "Tiedostonimi",
        "backend-fail-stream": "Tiedoston $1 virtauttaminen epäonnistui.",
        "backend-fail-backup": "Tiedostoa $1 ei voitu varmuuskopioida.",
        "booksources-text": "Alla linkkejä ulkopuolisiin sivustoihin, joilla myydään uusia ja käytettyjä kirjoja. Sivuilla voi myös olla lisätietoa kirjoista.",
        "booksources-invalid-isbn": "Annettu ISBN-numero ei ole kelvollinen. Tarkista alkuperäisestä lähteestä kirjoitusvirheiden varalta.",
        "specialloguserlabel": "Suorittaja:",
-       "speciallogtitlelabel": "Kohde (sivu tai käyttäjä):",
+       "speciallogtitlelabel": "Kohde (sivu tai {{ns:user}}:käyttäjänimi):",
        "log": "Lokit",
        "all-logs-page": "Kaikki julkiset lokit",
        "alllogstext": "Tämä on yhdistetty lokien näyttö.\nVoit rajoittaa listaa valitsemalla lokityypin, käyttäjän tai sivun johon muutos on kohdistunut. Jälkimmäiset ovat kirjainkokoherkkiä.",
        "tooltip-ca-nstab-main": "Näytä sisältösivu",
        "tooltip-ca-nstab-user": "Näytä käyttäjäsivu",
        "tooltip-ca-nstab-media": "Näytä mediasivu",
-       "tooltip-ca-nstab-special": "Tämä on toimintosivu",
+       "tooltip-ca-nstab-special": "Tämä on toimintosivu, eikä sitä voi muokata",
        "tooltip-ca-nstab-project": "Näytä projektisivu",
        "tooltip-ca-nstab-image": "Näytä tiedostosivu",
        "tooltip-ca-nstab-mediawiki": "Näytä järjestelmäviesti",
        "spam_reverting": "Palautettu viimeisimpään versioon, joka ei sisällä linkkejä kohteeseen $1.",
        "spam_blanking": "Kaikki versiot sisälsivät linkkejä kohteeseen $1. Sivu tyhjennetty.",
        "spam_deleting": "Kaikki versiot sisälsivät linkkejä kohteeseen $1, poistetaan",
-       "simpleantispam-label": "Mainostenvastainen varmistus.\n'''ÄLÄ''' täytä tätä!",
+       "simpleantispam-label": "Mainosroskan tarkastus.\n<strong>Älä</strong> täytä tätä!",
        "pageinfo-title": "Tietoja sivusta $1",
        "pageinfo-not-current": "Valitettavasti ei ole mahdollista antaa tätä tietoa, joka liittyy vanhoihin versioihin.",
        "pageinfo-header-basic": "Perustiedot",
        "logentry-newusers-create2": "$1 {{GENDER:$2|loi}} käyttäjätunnuksen $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|loi}} käyttäjätunnuksen $3 ja salasana lähetettiin sähköpostitse",
        "logentry-newusers-autocreate": "Käyttäjätunnus $1 {{GENDER:$2|luotiin}} automaattisesti",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|siirsi}} suojauksen asetukset sivulta $4 sivulle $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|muutti}} käyttäjän $3 oikeudet ryhmistä $4 ryhmiin $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|muutti}} käyttäjän $3 jäsenyyttä ryhmässä",
        "logentry-rights-autopromote": "Käyttäjän $1 oikeudet {{GENDER:$2|muuttuivat}} automaattisesti ryhmistä $4 ryhmiin $5",
index 058248d..7ef64c9 100644 (file)
        "passwordreset-emailtitle": "konto upplýsingar á {{SITENAME}}",
        "passwordreset-emailtext-ip": "Onkur (óiva tú, frá IP adressu $1) hevur biðið um nullstillan av tínum loyniorði til {{SITENAME}} ($4). Fylgjandi brúkara {{PLURAL:$3|konta er|kontur eru}}\nsettar í samband við hesa t-post adressu:\n\n$2\n\n{{PLURAL:$3|Hetta fyribils loyniorðið|Hesi fyribils loyniorðini}} ganga út um {{PLURAL:$5|ein dag|$5 dagar}}.\nTú eigur at rita inn og velja eitt nýtt loyniorð nú. Um onkur annar hevur gjørt hesa umbønina, ella um tú ert komin í tankar um títt uppruna loyniorð, og tú ikki longur ynskir at broyta tað, so kanst tú síggja burtur frá hesum boðum og halda fram at brúka títt gamla loyniorð.",
        "passwordreset-emailtext-user": "Brúkari $1 á {{SITENAME}} hevur biðið um eina nullstillan av tínum loyniorði til {{SITENAME}} \n($4). Fylgjandi brúkara {{PLURAL:$3|konta er|kontur eru}} settar í samband við hesa t-post adressuna:\n\n$2\n\n{{PLURAL:$3|Hetta fyribils loyniorðið|Hesi fyribils loyniorðini}} ganga út um {{PLURAL:$5|ein dag|$5 dagar}}.\nTú eigur at rita inn og velja eitt nýtt loyniorð nú. Um onkur annar hevur gjørt hesa umbøn, ella um tú ert komin í tankar um títt uppruna loyniorð, og tú ikki longur ynskir at broyta tað, so kanst tú síggja burtur frá hesum boðum og halda fram at brúka títt gamla loyniorð.",
-       "passwordreset-emailelement": "Brúkaranavn: $1\nFyribils loyniorð: $2",
+       "passwordreset-emailelement": "Brúkaranavn: \n$1\n\nFyribils loyniorð: \n$2",
        "passwordreset-emailsent": "Ein teldupostur har tú kanst nullstillað loyniorðið er blivin sendur.",
        "passwordreset-emailsent-capture": "Ein teldupostur, har ið tú kanst nullstilla loyniorðið, er blivin sendur, sum víst niðanfyri.",
        "passwordreset-emailerror-capture": "Ein teldupostur við nullstillaðum loyniorði var gjørdur, sum víst niðanfyri, men tað miseydnaðist at senda til {{GENDER:$2|brúkaran}}: $1",
        "emailuser": "Send t-post til brúkara",
        "emailuser-title-target": "Send teldupost til henda {{GENDER:$1|brúkaran}}",
        "emailuser-title-notarget": "Send t-post til brúkara",
-       "emailpage": "Send t-post til brúkara",
        "emailpagetext": "Tú kanst brúka skjalið niðanfyri til at senda ein teldupost til henda {{GENDER:$1|brúkara}}.\nTeldupost adressan sum tú skrivaði í [[Special:Preferences|tíni brúkara ynskir]] kemur síðan fram sum \"Frá\" adressan í teldupostinum, soleiðis at móttakarin kann svara beinleiðis til tín.",
        "defemailsubject": "{{SITENAME}} t-postur frá brúkara $1",
        "usermaildisabled": "Brúkara t-postur er óvirkin",
index 9dbbee4..010340d 100644 (file)
        "hidden-category-category": "Catégories cachées",
        "category-subcat-count": "Cette catégorie comprend {{PLURAL:$2|la sous-catégorie|$2 sous-catégories, dont {{PLURAL:$1|celle|les $1}}}} ci-dessous.",
        "category-subcat-count-limited": "Cette catégorie comprend {{PLURAL:$1|la sous-catégorie|les $1 sous-catégories}} ci-dessous.",
-       "category-article-count": "Cette catégorie contient {{PLURAL:$2|la page suivante|$2 pages, dont {{PLURAL:$1|celle|les $1}} ci-dessous}}.",
+       "category-article-count": "Cette catégorie contient {{PLURAL:$2|seulement la page suivante|$2 pages, dont {{PLURAL:$1|celle|les $1}} ci-dessous}}.",
        "category-article-count-limited": "{{PLURAL:$1|La page suivante figure|Les $1 pages suivantes figurent}} dans la présente catégorie.",
        "category-file-count": "Cette catégorie contient {{PLURAL:$2|le fichier suivant|$2 fichiers, dont {{PLURAL:$1|celui|les $1}} ci-dessous}}.",
        "category-file-count-limited": "{{PLURAL:$1|Le fichier suivant figure|Les $1 fichiers suivants figurent}} dans la présente catégorie.",
        "passwordreset-emailtitle": "Détails du compte sur {{SITENAME}}",
        "passwordreset-emailtext-ip": "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
        "passwordreset-emailtext-user": "L'utilisateur $1 sur {{SITENAME}} a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
-       "passwordreset-emailelement": "Nom d'utilisateur : $1\nMot de passe temporaire : $2",
+       "passwordreset-emailelement": "Nom d'utilisateur : \n$1\n\nMot de passe temporaire : \n$2",
        "passwordreset-emailsent": "Un courriel de réinitialisation de mot de passe a été envoyé.",
        "passwordreset-emailsent-capture": "Un courriel de réinitialisation de mot de passe a été envoyé, qui est affiché ci-dessous.",
        "passwordreset-emailerror-capture": "Un courriel de réinitialisation de mot de passe a été généré, qui est affiché ci-dessous, mais l'envoi à l'{{GENDER:$2|utilisateur|utilisatrice}} a échoué : $1",
        "changeemail-password": "Votre mot de passe sur {{SITENAME}} :",
        "changeemail-submit": "Changer l’adresse de courriel",
        "changeemail-throttled": "Vous avez fait trop de tentatives de connexion.\nVeuillez attendre $1 avant de réessayer.",
+       "changeemail-nochange": "Veuillez saisir une nouvelle adresse de courriel différente de la précédente.",
        "resettokens": "Réinitialiser les jetons",
        "resettokens-text": "Ici, vous pouvez réinitialiser les jetons qui permettent d’accéder à certaines données privées associées à votre compte.\n\nVous devriez le faire si vous les avez partagés accidentellement avec quelqu'un ou si votre compte a été compromis.",
        "resettokens-no-tokens": "Il n’y a aucun jeton à réinitialiser.",
        "rows": "Rangées :",
        "columns": "Colonnes :",
        "searchresultshead": "Filtrer avec cette valeur",
-       "stub-threshold": "Limite supérieure pour les <a href=\"#\" class=\"stub\">liens vers les ébauches</a> (octets) :",
+       "stub-threshold": "Seuil pour le formatage des liens bouchons ($1) :",
+       "stub-threshold-sample-link": "exemple",
        "stub-threshold-disabled": "Désactivé",
        "recentchangesdays": "Nombre de jours à afficher dans les modifications récentes :",
        "recentchangesdays-max": "(maximum $1 jour{{PLURAL:$1||s}})",
        "booksources-text": "Voici une liste indicative de liens vers d’autres sites vendant des livres neufs et d’occasion et sur lesquels vous trouverez peut-être des informations sur les ouvrages que vous cherchez :",
        "booksources-invalid-isbn": "L’ISBN donné ne semble pas être correct ; vérifiez si vous avez fait une erreur en copiant la source originale.",
        "specialloguserlabel": "Auteur :",
-       "speciallogtitlelabel": "Cible (titre ou utilisateur):",
+       "speciallogtitlelabel": "Cible (titre ou {{ns:user}}:nom d'utilisateur) :",
        "log": "Journaux d’opérations",
        "all-logs-page": "Tous les journaux publics",
        "alllogstext": "Affichage combiné de tous les journaux disponibles sur {{SITENAME}}.<br />\nVous pouvez personnaliser l'affichage en sélectionnant le type de journal, le nom d'utilisateur ou la page concernée (ces deux derniers étant sensibles à la casse).",
        "tooltip-ca-nstab-main": "Voir la page de contenu",
        "tooltip-ca-nstab-user": "Voir la page utilisateur",
        "tooltip-ca-nstab-media": "Voir la page du média",
-       "tooltip-ca-nstab-special": "Ceci est une page spéciale, vous ne pouvez pas la modifier.",
+       "tooltip-ca-nstab-special": "Ceci est une page spéciale, et elle ne peut pas être modifiée.",
        "tooltip-ca-nstab-project": "Voir la page du projet",
        "tooltip-ca-nstab-image": "Voir la page du fichier",
        "tooltip-ca-nstab-mediawiki": "Voir le message système",
index 7f61067..4812b02 100644 (file)
        "passwordreset-emailtitle": "Dètalys du compto dessus {{SITENAME}}",
        "passwordreset-emailtext-ip": "Yon (probâblament vos, dês l’adrèce IP $1) at demandâ na remês’a zérô de voutron\ncontresegno por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}\na cel’adrèce èlèctronica :\n\n$2\n\n{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.\nOra vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos\nou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souhètâd pas més lo changiér,\nvos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.",
        "passwordreset-emailtext-user": "L’utilisator $1 dessus {{SITENAME}} at demandâ na remês’a zérô de voutron contresegno por {{SITENAME}}\n($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}\na cel’adrèce èlèctronica :\n\n$2\n\n{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.\nOra vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos\nou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souhètâd pas més lo changiér,\nvos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.",
-       "passwordreset-emailelement": "Nom d’utilisator : $1\nContresegno temporèro : $2",
+       "passwordreset-emailelement": "Nom d’utilisator : \n$1\n\nContresegno temporèro : \n$2",
        "passwordreset-emailsent": "Un mèssâjo de remês’a zérô de contresegno est étâ mandâ.",
        "passwordreset-emailsent-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ mandâ, qu’est montrâ ce-desot.",
        "passwordreset-emailerror-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ fêt, qu’est montrâ ce-desot, mas l’èxpèdicion a l’utilisat{{GENDER:$2|or|rice}} at pas reussi : $1",
        "emailuser": "Lui mandar un mèssâjo",
        "emailuser-title-target": "Mandar un mèssâjo a cet’utilisat{{GENDER:$1|or|rice}}",
        "emailuser-title-notarget": "Mandar un mèssâjo a l’utilisator",
-       "emailpage": "Mandar un mèssâjo a l’utilisator",
        "emailpagetext": "Vos pouede empleyér lo formulèro ce-desot por mandar un mèssâjo a cet’utilisat{{GENDER:$1|or|rice}}.\nL’adrèce èlèctronica que vos éd buchiêe dens voutres [[Special:Preferences|prèferences]] aparêtrat dedens lo champ « Èxpèdior » de voutron mèssâjo ; d’ense, lo dèstinatèro vos porrat rèpondre tot drêt.",
        "defemailsubject": "Mèssâjo de {{SITENAME}} de l’utilisator « $1 »",
        "usermaildisabled": "L’èxpèdicion de mèssâjos entre utilisators est dèsactivâye",
index d367e8a..087e202 100644 (file)
        "passwordreset-emailtitle": "Brükerkonto aw {{SITENAME}}",
        "passwordreset-emailtext-ip": "Hoker mä det IP-Adres $1, woorskiinelk dü salew, wul hal brükerinformatsjuunen för {{SITENAME}} tusjüürd fu ($4). {{PLURAL:$3|Detdiar brükerkonto as|Jodiar brükerkontos san}} mä detdiar E-Mail-adres ferbünjen:\n\n$2\n\n{{PLURAL:$3|Detheer tidjwiis paaswurd lääpt|Joheer tidjwiis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf. \nDü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer uunfraag steld hää an dü din ual paaswurd käänst, do säärst dü niks widjer onernem. Melde di ianfach widjerhen mä din ual paaswurd uun.",
        "passwordreset-emailtext-user": "Di brüker $1 üüb {{SITENAME}} hää am brükerinformatsjuunen för {{SITENAME}} uunfraaget ($4). {{PLURAL:$3|Detdiar brükerkonto as|Jodiar brükerkontos san}} mä detdiar E-Mail-Adres ferbünjen:\n\n$2\n\n{{PLURAL:$3|Detheer tidjwiis paaswurd lääpt|Joheer tidjwiis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf. Dü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer uunfraag steld hää of dü din ual paaswurd käänst, säärst dü niks widjer onernem. Melde di ianfach mä din ual paaswurd uun.",
-       "passwordreset-emailelement": "Brükernööm: $1\nTidjwiis paaswurd: $2",
+       "passwordreset-emailelement": "Brükernööm: \n$1\n\nTidjwiis paaswurd: \n$2",
        "passwordreset-emailsent": "Diar as en E-Mail tu di onerwais.",
        "passwordreset-emailsent-capture": "Detdiar E-Mail, wat oner uunwiset woort, as tu di onerwais.",
        "passwordreset-emailerror-capture": "Detdiar E-Mail, wat oner uunwiset woort, wiar tu di onerwais, oober küd ei tu di {{GENDER:$2|brüker}} ufsjüürd wurd: $1",
index be4fc89..cbe879b 100644 (file)
        "passwordreset-domain": "Domein:",
        "passwordreset-email": "E-mailadres:",
        "passwordreset-emailtitle": "Akkountdetails op {{SITENAME}}",
-       "passwordreset-emailelement": "Brûkersnamme: $1\nTydlik wachtwurd: $2",
+       "passwordreset-emailelement": "Brûkersnamme: \n$1\n\nTydlik wachtwurd: \n$2",
        "changeemail": "Feroarje e-mailadres",
        "changeemail-newemail": "Nij e-mailadres:",
        "changeemail-none": "(gjin)",
index fe95271..c9cb743 100644 (file)
        "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|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-emailelement": "Ainm-cleachdaiche: \n$1\n\nFacal-faire sealach: \n$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: $1",
        "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.",
index 87b9415..736f351 100644 (file)
        "passwordreset-emailtitle": "Detalles da conta de {{SITENAME}}",
        "passwordreset-emailtext-ip": "Alguén (probablemente vostede, desde o enderezo IP $1) solicitou o restablecemento do seu\ncontrasinal de {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de usuario está asociada|As seguintes contas de usuarios están asociadas}}\na este enderezo de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Este contrasinal temporal caducará|Estes contrasinais temporais caducarán}} {{PLURAL:$5|nun día|en $5 días}}.\nDebería acceder ao sistema e elixir un novo contrasinal agora. Se outra persoa fixo esta\nsolicitude ou se lembrou o seu contrasinal orixinal e xa non o quere cambiar,\nignore esta mensaxe e continúe empregando o seu contrasinal vello.",
        "passwordreset-emailtext-user": "O usuario $1 solicitou o restablecemento do contrasinal de {{SITENAME}}\n($4). {{PLURAL:$3|A seguinte conta de usuario está asociada|As seguintes contas de usuarios están asociadas}}\na este enderezo de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Este contrasinal temporal caducará|Estes contrasinais temporais caducarán}} {{PLURAL:$5|nun día|en $5 días}}.\nDebería acceder ao sistema e elixir un novo contrasinal agora. Se outra persoa fixo esta\nsolicitude ou se lembrou o seu contrasinal orixinal e xa non o quere cambiar,\nignore esta mensaxe e continúe empregando o seu contrasinal vello.",
-       "passwordreset-emailelement": "Nome de usuario: $1\nContrasinal temporal: $2",
+       "passwordreset-emailelement": "Nome de usuario: \n$1\n\nContrasinal temporal: \n$2",
        "passwordreset-emailsent": "Enviouse o correo electrónico de restablecemento do contrasinal.",
        "passwordreset-emailsent-capture": "Enviouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación.",
        "passwordreset-emailerror-capture": "Xerouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación, pero o envío {{GENDER:$2|ao usuario|á usuaria}} fallou: $1",
        "rows": "Filas:",
        "columns": "Columnas:",
        "searchresultshead": "Procurar",
-       "stub-threshold": "Límite superior para o formato de <a href=\"#\" class=\"stub\">ligazóns de bosquexo</a> (bytes):",
+       "stub-threshold": "Límite superior para o formato de ligazóns de bosquexo($1):",
+       "stub-threshold-sample-link": "exemplo",
        "stub-threshold-disabled": "Desactivado",
        "recentchangesdays": "Número de días a mostrar nos cambios recentes:",
        "recentchangesdays-max": "Máximo: $1 {{PLURAL:$1|día|días}}",
        "booksources-text": "A continuación aparece unha lista de ligazóns cara a outros sitios web que venden libros novos e usados, neles tamén pode obter máis información sobre as obras que está a buscar:",
        "booksources-invalid-isbn": "O ISBN inserido parece non ser válido; comprobe que non haxa erros ao copialo da fonte orixinal.",
        "specialloguserlabel": "Executante:",
-       "speciallogtitlelabel": "Obxectivo (título ou usuario):",
+       "speciallogtitlelabel": "Obxectivo (título ou {{ns:user}}:nome de usuario):",
        "log": "Rexistros",
        "all-logs-page": "Todos os rexistros públicos",
        "alllogstext": "Vista combinada de todos os rexistros dipoñibles en {{SITENAME}}.\nPode precisar máis a vista seleccionando o tipo de rexistro, o nome do usuario ou o título da páxina afectada.",
        "tooltip-ca-nstab-main": "Ver o contido da páxina",
        "tooltip-ca-nstab-user": "Ver a páxina {{GENDER:{{BASEPAGENAME}}|do usuario|da usuaria}}",
        "tooltip-ca-nstab-media": "Ver a páxina con contido multimedia",
-       "tooltip-ca-nstab-special": "Esta é unha páxina especial, polo que non a pode editar",
+       "tooltip-ca-nstab-special": "Esta é unha páxina especial, e non pode editarse",
        "tooltip-ca-nstab-project": "Ver a páxina do proxecto",
        "tooltip-ca-nstab-image": "Ver a páxina do ficheiro",
        "tooltip-ca-nstab-mediawiki": "Ver a mensaxe do sistema",
index 279fab5..15b9156 100644 (file)
        "login-abort-generic": "तुमचें लॉग इन अपेशी थारलां - निश्फलीत",
        "login-migrated-generic": "तुमचें खातें स्थलांतरीत जालां आनी तुजें वापरप्याचें नांव ह्या विकीचेर उपस्थीत ना.",
        "loginlanguagelabel": "भास:$1",
-       "pt-login": "सत्रारंभ करात",
+       "pt-login": "सत्रारंभ",
        "pt-login-button": "सत्रारंभ करात",
        "pt-createaccount": "खातें रोचात",
        "pt-userlogout": "सत्र शेवट",
        "passwordreset-username": "वापरप्याचे नांव",
        "passwordreset-domain": "डोमेन:",
        "passwordreset-email": "ईमेल नामो:",
-       "passwordreset-emailelement": "वापरप्याचें नांव: $1\nतात्पुरतें गुपीत उतर: $2",
+       "passwordreset-emailelement": "वापरप्याचें नांव: \n$1\n\nतात्पुरतें गुपीत उतर: \n$2",
        "passwordreset-emailsent": "गुपीत उतर परतून तयार करपाचो ईमेल धाडला",
        "changeemail": "ईमेल संदेश बदल्ला",
        "changeemail-oldemail": "सद्याचो ईमेल नामो:",
        "preview": "पूर्वनियाळ",
        "showpreview": "पूर्वनियाळ दाखय",
        "showdiff": "बदल दाखयात",
-       "anoneditwarning": "'''शिà¤\9fà¤\95ावणà¥\80:''' à¤¤à¥\82à¤\82वें सत्रारंभ करूंक ना.\nतुजो IP पत्तो ह्या पानाच्या संपादन इतिहासांत नोंद जातलो.जर तुमी <strong>[$1 सत्रारंभ]</strong> करता वा <strong>[$2 खातें उगडटा]</strong> जाल्यार हेर सुविधांसयत तुमच्या संपादनाचें श्रेय तुमच्या सदस्य नांवाचेर दितलें.",
+       "anoneditwarning": "'''शिà¤\9fà¤\95ावणà¥\80:''' à¤¤à¥\81वें सत्रारंभ करूंक ना.\nतुजो IP पत्तो ह्या पानाच्या संपादन इतिहासांत नोंद जातलो.जर तुमी <strong>[$1 सत्रारंभ]</strong> करता वा <strong>[$2 खातें उगडटा]</strong> जाल्यार हेर सुविधांसयत तुमच्या संपादनाचें श्रेय तुमच्या सदस्य नांवाचेर दितलें.",
        "missingcommenttext": "उपकार करून तुमच्यो शिरो सकयल घाल.",
        "blockedtitle": "वापरप्याक बंद केला",
        "blockednoreason": "कांयच कारण दिवंक ना",
        "tooltip-pt-mycontris": "तुमच्या योगदानांची वळेरी",
        "tooltip-pt-login": "सत्रारंभ करप बरें, पूण तशी सक्ती ना.",
        "tooltip-pt-logout": "सत्र शेवट",
-       "tooltip-pt-createaccount": "तुमी खातें उगडून सत्रारंभ करचें अशें सुचयतात, पूण तें सक्तीचे ना.",
+       "tooltip-pt-createaccount": "तुमी खातें उगडून सत्रारंभ करचें अशें सुचयतात, पूण तें सक्तीचे ना.",
        "tooltip-ca-talk": "मजकूराच्या पाना संबंदान भासाभास",
        "tooltip-ca-edit": "हें पान बदल",
        "tooltip-ca-addsection": "नवीं विभाग सुरु करात",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|कुरवेचीट|कुरवेचीटी}}]]: $2)",
        "htmlform-title-not-exists": "[[:$1]] अस्तित्वांत ना.",
        "logentry-delete-delete": "$1 {{GENDER:$2|काडून उडयल्ले पान}} $3",
-       "logentry-move-move": "$1 à¤¨ $3 à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87र $4 {{GENDER:$2|हालयला}}",
+       "logentry-move-move": "$1 à¤¹à¤¾à¤£à¥\87à¤\82 $3 à¤ªà¤¾à¤¨à¤¾à¤\95 $4 {{GENDER:$2|हालयला}}",
        "logentry-newusers-create": "उपयोगकत्याचें $1 {{GENDER:$2|तयार केलें}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|अपलोड केला}} $3",
        "searchsuggest-search": "सोद",
index 3857a53..b38176e 100644 (file)
        "login-abort-generic": "Tujem sotrorombh opexi tharlam - Nixfolit",
        "login-migrated-generic": "Tujem khatem stholontrit zalam ani vapurpeachem nanv hea wikicher anink upostit na.",
        "loginlanguagelabel": "Bhas: $1",
-       "pt-login": "Sotrorombh kor",
+       "pt-login": "Sotrorombh",
        "pt-login-button": "Sotrorombh kor",
        "pt-createaccount": "Khatem roch",
        "pt-userlogout": "Sotr xevott",
        "passwordreset-username": "Vapurpeache nanv:",
        "passwordreset-domain": "Domain:",
        "passwordreset-email": "Email potto:",
-       "passwordreset-emailelement": "Vapurpeachem nanv: $1\nTatpurtem gupitutor: $2",
+       "passwordreset-emailelement": "Vapurpeachem nanv: \n$1\n\nTatpurtem gupitutor: \n$2",
        "passwordreset-emailsent": "Gupitutor portun tharaipacho email dhadla.",
        "changeemail": "Email potto bodol",
        "changeemail-oldemail": "Sodhyacho email potto:",
        "tooltip-namespace_association": "Vinchlele nanvthollache sombondhit bhasabhas vo vixoiacho nanvthollakui gheupak hem boks khunnai",
        "blanknamespace": "(Mukhel)",
        "contributions": "{{GENDER:$1|Vapuddpi}} yogdanam",
-       "contributions-title": "$1 hea vapuddpean kelelim borovpam",
-       "mycontris": "Borovpam",
+       "contributions-title": "$1 hea vapuddpean kelelim yogdanam",
+       "mycontris": "Yogdanam",
        "contribsub2": "{{GENDER:$3|$1}} hacheo ($2)",
        "uctop": "(atachem)",
        "month": "Mhoinea savn (ani adichem):",
        "year": "Hea vorsa savn (ani adichem):",
-       "sp-contributions-newbies": "Fokot novea khateachim borovpam dakhoi",
+       "sp-contributions-newbies": "Fokot novea khateachim yogdanam dakhoi",
        "sp-contributions-blocklog": "addavnniache sotr",
        "sp-contributions-uploads": "upload",
        "sp-contributions-logs": "sotr",
        "sp-contributions-talk": "bhasabhas",
-       "sp-contributions-search": "Borovpam sod",
+       "sp-contributions-search": "Yogdanam sod",
        "sp-contributions-username": "Antorzall namo vo vapuddpeachem nanv:",
        "sp-contributions-toponly": "Fokot halincheo uzollnneo dakhoi",
        "sp-contributions-submit": "Sod",
        "tooltip-t-whatlinkshere": "Hanga zoddlelea sogllea wiki pananchi volleri",
        "tooltip-t-recentchangeslinked": "Hea panak-sun zoddlelea panachim halinche bodol",
        "tooltip-feed-atom": "Hea panak Atom purovnni",
-       "tooltip-t-contributions": "Hea vapuddpeachea borovpanchi suchi",
+       "tooltip-t-contributions": "Hea vapuddpeachea yogdanachi suchi",
        "tooltip-t-emailuser": "Hea vapuddpeak email patthoi",
        "tooltip-t-upload": "Faili upload kor",
        "tooltip-t-specialpages": "Sogllea khaxelim pananchi volleri",
        "tooltip-t-permalink": "Hea panache hea uzollnnek togpi zoddni",
        "tooltip-ca-nstab-main": "Mozkur pan polloi",
        "tooltip-ca-nstab-user": "Vapuddpeachem pan polloi",
-       "tooltip-ca-nstab-special": "Hem ek kherit pan, tujeam hem pan bodlunk zaina",
+       "tooltip-ca-nstab-special": "Hem ek kherit pan, ani hem bodlunk zaina",
        "tooltip-ca-nstab-project": "Prokolpachem pan polloi",
        "tooltip-ca-nstab-image": "Failichem pan polloi",
        "tooltip-ca-nstab-template": "Saacho polloi",
        "tooltip-diff": "Tumi hea mozkurant kelelo bodol dakhoiat",
        "tooltip-compareselectedversions": "Hea panacheo don nivoddleleo uzollneo modem forok polloi",
        "tooltip-watch": "Hem pan tujea xadurvollerint zodd",
-       "tooltip-rollback": "\"Kovllop\" hea panachea xevttachea borovpa kodde kea kollant portota.",
+       "tooltip-rollback": "\"Kovllop\" hea panak nimannea yogdan korpean kello (kelle) bodol eka kollant portota.",
        "tooltip-undo": "\"Rodd' kor\" sudharop portita ani sudharopak Zholok ritin ukodta. Tem saran karon zoddunk dita.",
        "tooltip-summary": "Mottvo sar ghal",
        "simpleantispam-label": "Spam-virudh topasni.\nHem bhori <strong>nakai</strong>!",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Kurvechit|Kurvechiti}}]]: $2)",
        "htmlform-title-not-exists": "[[:$1]] ostitvant na.",
        "logentry-delete-delete": "$1-an {{GENDER:$2|kadun udoile}} pan $3",
-       "logentry-move-move": "$1{{GENDER:$2|-an}} $3 panak $4 haloilea",
+       "logentry-move-move": "$1-an $3 panak $4 {{GENDER:$2|haloilea}}",
        "logentry-newusers-create": "Vapurpeacho kont $1 {{GENDER:$2|rochlam}}",
        "logentry-upload-upload": "$1-an $3 {{GENDER:$2|upload kela}}",
        "searchsuggest-search": "Sod",
index 9fd07d3..94c5a0b 100644 (file)
                        "아라"
                ]
        },
-       "tog-underline": "Links unterstryche",
+       "tog-underline": "Links unterstryche:",
        "tog-hideminor": "Keini «chlyni Änderige» aazeige",
-       "tog-hidepatrolled": "Vum Fäldhieter aagluegti Änderige in dr „Letschte Änderige“ usblände",
-       "tog-newpageshidepatrolled": "Aagluegti Syten uf dr Lischt „Neiji Syte“ verstecke",
+       "tog-hidepatrolled": "Vu Fäldhieter/inne aagluegti Änderige in dr „Letschte Änderige“ usblände",
+       "tog-newpageshidepatrolled": "Vu Fäldhieter/inne aagluegti Änderige in dr Lischt „Neiji Syte“ usblände",
        "tog-extendwatchlist": "Beobachtungslischte erwytere go alli Änderige aazeige, nit numme di letschte",
        "tog-usenewrc": "Änderigen uf „Letschte Änderige“ un dr Beobachtigslischt no Syte gruppiere",
        "tog-numberheadings": "Überschrifte outomatisch numeriere",
        "tog-watchdeletion": "Sälber gleschti Sytene un Dateie automatisch beobachte",
        "tog-watchrollback": "Syte, wun i zruckgsetzt haa, automatisch beobachte",
        "tog-minordefault": "Alli dyni Änderigen als «chlyni Änderige» markiere",
-       "tog-previewontop": "Vorschou vor em Editierfänschter aazeige",
-       "tog-previewonfirst": "Vorschou aazeige bim erschten Editiere",
+       "tog-previewontop": "Vorschou oberhalb vom Editierfänschter aazeige",
+       "tog-previewonfirst": "Vorschou scho bim ersten Editieren azeige",
        "tog-enotifwatchlistpages": "Schick mer e Mail, wänn e Syte oder e Datei gänderet wird, wun i beobachte due",
-       "tog-enotifusertalkpages": "Benachrichtigungsmails bi Änderigen a dyne Benutzersyte",
+       "tog-enotifusertalkpages": "Schick mer es Mail, we öpper myni Benutzerdiskussionssyte het g’änderet",
        "tog-enotifminoredits": "Au bi chlaine Änderige an Syte oder Dateie ne Mail schicke",
        "tog-enotifrevealaddr": "Dyni E-Mail-Adrässe wird i Benachrichtigungsmails zeigt",
        "tog-shownumberswatching": "Aazahl Benutzer aazeige, wo ne Syten am Aaluege sy (i den Artikelsyte, i de «letschten Änderigen» und i der Beobachtigslischte)",
-       "tog-oldsig": "Vorschau vu dr Unterschrift:",
-       "tog-fancysig": "Signatur as Wikitext behandle (ohni automatischi Vergleichig)",
+       "tog-oldsig": "Aktuelli Unterschrift:",
+       "tog-fancysig": "Unterschrift as Wikitext behandle (ohni automatischi Verlinkig)",
        "tog-uselivepreview": "Vorschau sofort aazeige",
        "tog-forceeditsummary": "Sag mer s, wänn i s Zämmefassigsfeld läär loss",
        "tog-watchlisthideown": "Eigeni Änderige uf d Beobachtigslischt usblände",
        "passwordreset-emailtitle": "Benutzerkontoinformationen uf {{SITENAME}}",
        "passwordreset-emailtext-ip": "Eber mit dr IP-Adresse $1, wahrschyns Du sälber, het e Erinnerig an Dyyni Benutzerkonteninformatione fir {{SITENAME}} aagforderet ($4). \n\n{{PLURAL:$3|Des Benutzerkonto isch|Die Benutzerkonte sin}} mit däre E-Mail-Adräss verchnipft: \n\n$2 \n\n{{PLURAL:$3|Des temporär Passwort lauft|Die temporäre Passwerter laufe}} in {{PLURAL:$5|eim Tag|$5 Täg}} ab.\nDu sottsch di aamälden un e nej Passwort vergee. Wänn eber ander die Aafrog gstellt het oder Du di wider an Dyy alt Passwort chasch erinnere un s nimi wettsch ändere, chasch die Nochricht ignorieren un alsfurt Dyy alt Passwort bruche.",
        "passwordreset-emailtext-user": "Dr Benutzer $1 bi {{SITENAME}} het e Zrucksetzig vu Dym Passwort bi {{SITENAME}} aagforderet ($4). \n\n{{PLURAL:$3|Des Benutzerkonto isch|Die Benutzerkonte sin}} mit däre E-Mail-Adräss verchnipft: \n\n$2 \n\n{{PLURAL:$3|Des temporär Passwort lauft|Die temporäre Passwerter laufe}} in {{PLURAL:$5|eim Tag|$5 Täg}} ab.\nDu sottsch di aamälden un e nej Passwort vergee. Wänn eber ander die Aafrog gstellt het oder Du di wider an Dyy alt Passwort chasch erinnere un s nimi wettsch ändere, chasch die Nochricht ignorieren un alsfurt Dyy alt Passwort bruche.",
-       "passwordreset-emailelement": "Benutzername: $1\nTemporär Passwort: $2",
+       "passwordreset-emailelement": "Benutzername: \n$1\n\nTemporär Passwort: \n$2",
        "passwordreset-emailsent": "E Passwort-Zrucksetzig isch per E-Mail verschickt wore.",
        "passwordreset-emailsent-capture": "E Passwort-Zrucksetzigs-Mail isch vergschickt worde, un isch unte aazeigt.",
        "passwordreset-emailerror-capture": "Die unten angezeigte Passwortzrucksetzigsmail, wu unten aazeigt wird, isch generiert wore, aber dr Versand an {{GENDER:$2|dr Benutzer|d Benutzeri}} het nit funktioniert: $1",
        "page_last": "Ändi",
        "histlegend": "Du chasch zwei Versionen uswähle und verglyche.<br />\nErklärig: (aktuell) = Underschid zu jetz,\n(vorane) = Underschid zur alte Version, <strong>K</strong> = chlyni Änderig",
        "history-fieldset-title": "Suech in dr Versionsgschicht",
-       "history-show-deleted": "nume gleschti Versione",
+       "history-show-deleted": "Nume gleschti Versione",
        "histfirst": "eltischti",
        "histlast": "neischti",
        "historysize": "({{PLURAL:$1|1 Byte|$1 Bytes}})",
        "rows": "Zylene",
        "columns": "Spaltene",
        "searchresultshead": "Suech-Ergäbnis",
-       "stub-threshold": "Gleichformatierig <a href=\"#\" class=\"stub\">vu chleine Syte</a> (in Byte):",
+       "stub-threshold": "Spezielli Darstellig ($1) für Links uf chlyni Syte bis zu’re bestimmte Gröössi (i Bytes):",
+       "stub-threshold-sample-link": "Byspil",
        "stub-threshold-disabled": "Deaktiviert",
        "recentchangesdays": "Aazahl vu dr Täg, wu d Lischt vu dr  „Letschte Änderige“ standardmässig soll umfasse:",
        "recentchangesdays-max": "(Maximal $1 {{PLURAL:$1|Tag|Täg}})",
        "badsig": "Dr Syntax vu dr Signatur isch nid giltig; bitte d HTML iberpriefe.",
        "badsiglength": "Dyyni Unterschrift isch z lang. Si derf hegschtens $1 {{PLURAL:$1|Zeiche|Zeiche}} lang syy.",
        "yourgender": "Wie sölle Systemmäldigen über di brichte?",
-       "gender-unknown": "I’re müglechst gschlächstneutrale Form. – Byspil: «'''∅''' ''Musterperson'' het d Syte bearbeitet», «Bearbeitig (vo ''Musterperson'')», «'''si/är''' het gschribe», «öpper».",
-       "gender-male": "Im Maskulinum – Byspil: «'''Der''' ''Max Musterma'' het d Syte bearbeitet», «'''syni''' Bearbeitig», «'''är''' het gschribe», «Benutz'''er'''».",
-       "gender-female": "Im Femininum – Byspil: «'''D''' ''Frida Musterfrou'' het d Syte bearbeitet», «'''iri''' Bearbeitig», «'''si''' het gschribe», «Benutzer'''in'''».",
-       "prefs-help-gender": "Optional: bruucht fir gschlächtsspezifischi Adrässierig dur d Software. Die Information isch effentlig.\n\nDes isch e frejwilligi Aagab. D Software brucht si go Di aarede un as Hiiwys fir anderi dur d Verwändig vum grammatische Gschlächt. Die Information isch effetli.",
+       "gender-unknown": "«Der Benutzer», «der {dy Name}», «syni Bearbeitig», «är schrybt» etc.",
+       "gender-male": "«Der Benutzer», «der {dy Name}», «syni Bearbeitig», «är schrybt» etc.",
+       "gender-female": "«D Benutzerin», «d {dy Name}», «iri Bearbeitig», «si schrybt» etc.",
+       "prefs-help-gender": "* Die Agab isch freiwillig. D Software bruucht se, für di mit em korräkte grammatische Genus azrede oder gägenüber anderne z erwähne. Die Information isch öffetlech z gseh.\n\n* By der ersten Option wird ds generische Maskulinum azeigt. Es chunt also uf ds Glychen use, wi we me di dritti Option wählt.",
        "email": "E-Mail",
        "prefs-help-realname": "Der ächt Namen isch optional.\nWe d’nen agisch, de lö sech dyni Byträg uf di la zrüggfüere.",
        "prefs-help-email": "D Aagab vun ere E-Mail isch optional, macht aber s Zueschicke vun eme Ersatzpasswort meglig, wänn Du dyy Passwort vergässe hesch.",
-       "prefs-help-email-others": "Mit andere Benutzer chasch au iber d Benutzerdiskussionssyte Kontakt ufneh, ohne dass Du dyy Identitet muesch uffelege.",
+       "prefs-help-email-others": "Ussertdäm chasch es zuela, das anderi dir über’ne Link uf dym Wikipedia-Konto (Benutzersyte) es E-Mail chöü schicke.\nDyni E-Mail-Adrässen überchöme si derby nid z gseh.",
        "prefs-help-email-required": "S brucht e giltigi E-Mail-Adräss.",
        "prefs-info": "Basisinformatione",
        "prefs-i18n": "Internationalisierig",
        "right-editusercss": "Bearbeite vu CSS-Dateie vu andere Benutzer",
        "right-edituserjs": "Bearbeite vu JS-Dateie vu andere Benutzer",
        "right-editmyusercss": "Dyni eigete CSS-Dateien ändere",
+       "right-editmyuserjs": "Eigeti JavaScript-Dateie bearbeite",
+       "right-viewmywatchlist": "Eigeti Beobachtigslisten aluege",
+       "right-editmywatchlist": "Eigeti Beobachtigslisten ändere. Ou ohni das Rächt chöme dür’nes paar Aktione Syten uf d Beobachtigsliste.",
+       "right-viewmyprivateinfo": "Eigeti privati Daten aluege (byspilswys E-Mail-Adrässe, ächte Name)",
+       "right-editmyprivateinfo": "Eigeti privati Daten ändere (byspilswys E-Mail-Adrässe, ächte Name)",
+       "right-editmyoptions": "Eigeti Ystelligen ändere",
        "right-rollback": "D Bearbeitige vum letschte Benutzer, wu ne einzelni Syte bearbeitet het, schnell zrucksetze",
        "right-markbotedits": "Schnell zruckgsetzti Bearbeitige as Bot-Bearbeitig markiere",
        "right-noratelimit": "Kei Bschränkig dur Limit",
        "right-override-export-depth": "Exportier Syte mitsamt dr vergleichte Syte bis zuen ere Tiefi vu 5",
        "right-sendemail": "E-Mail an anderi Benutzer schicke",
        "right-passwordreset": "Passwort vun eme Benutzer zruggsetze",
+       "right-managechangetags": "[[Special:Tags|Markierigen]] ir Datebank schaffen oder lösche",
+       "right-applychangetags": "Zäme mit den eigeten Änderige [[Special:Tags|Markierigen]] abringe",
+       "right-changetags": "Beliebigi [[Special:Tags|Markierige]] by einzelne Versionen oder Logbuechyträg derzuetue oder lösche",
        "newuserlogpage": "Nejaamäldigs-Logbuech",
        "newuserlogpagetext": "Des isch e Logbuech fir nej aagleiti Benutzerchonte.",
        "rightslog": "Benutzerrächt-Logbuech",
        "action-createpage": "Syten aazlege",
        "action-createtalk": "Diskussionssyten aazlege",
        "action-createaccount": "e Benutzerkonto aazlege",
+       "action-history": "d Versionegschicht vo dere Syten azluege",
        "action-minoredit": "die Bearbeitig as chlei z markiere",
        "action-move": "die Syte z verschiebe",
        "action-move-subpages": "die Syte un di zuegherige Untersyte z verschiebe",
        "action-move-rootuserpages": "Haupt-Benutzersyte z verschiebe",
+       "action-move-categorypages": "Kategoriesyte z verschiebe",
        "action-movefile": "Die Datei verschiebe",
        "action-upload": "Dateie uffezlade",
        "action-reupload": "die vorhandene Datei z iberschryybe",
        "action-userrights-interwiki": "d Rächt vu Benutzer in andere Wiki z ändere",
        "action-siteadmin": "d Datebank z sperre oder frejzgee",
        "action-sendemail": "E-Mail z schicke",
+       "action-editmywatchlist": "dyni Beobachtigsliste z ändere",
+       "action-viewmywatchlist": "dyni Beobachtigslisten azluege",
+       "action-viewmyprivateinfo": "dyni privati Information azluege",
+       "action-editmyprivateinfo": "dyni privati Information z ändere",
+       "action-editcontentmodel": "ds Inhaltsmodäll vo dere Syte z ändere",
+       "action-managechangetags": "Marierigen ir Databank z schaffen oder z lösche",
+       "action-applychangetags": "zäme mit dynen Änderige Markierigen azbringe",
+       "action-changetags": "beliebigi Markierige by einzelne Versionen oder Logbuechyträg derzueztue oder z lösche",
        "nchanges": "$1 {{PLURAL:$1|Änderig|Änderige}}",
+       "enhancedrc-since-last-visit": "{{PLURAL:$1|$1}} syt em letste Bsuech",
        "enhancedrc-history": "Versionsgschicht",
        "recentchanges": "Letschti Änderige",
        "recentchanges-legend": "Optione vu dr Aazeig",
        "recentchanges-summary": "Uf däre Syte chasch di letschte Änderige in däm Wiki aaluege.",
+       "recentchanges-noresult": "Im usgwählte Zytruum het’s kener Änderige ’gä.",
        "recentchanges-feed-description": "Di letschten Änderige vo {{SITENAME}} i däm Feed abonniere.",
        "recentchanges-label-newpage": "Mit däre Bearbeitig isch e neji Syte aagleit wore",
        "recentchanges-label-minor": "Des isch e chleini Änderig",
        "recentchanges-label-plusminus": "Di gänderet Sytegreßi (Aazahl in Byte)",
        "recentchanges-legend-heading": "'''Legänd:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lueg au d [[Special:NewPages|Lischt vu neie Syte]])",
-       "rcnotefrom": "Des sin d Ändrige syter <b>$2</b> (bis zem <b>$1</b> zeigt).",
+       "rcnotefrom": "Azeigt {{PLURAL:$5|isch d Änderig|sy maximal <strong>$1</strong> Änderige}} syt <strong>$3, $4</strong>.",
        "rclistfrom": "Nume Änderige syt $3, $2 Uhr zeige.",
        "rcshowhideminor": "Chlynigkeite $1",
        "rcshowhideminor-show": "aazeige",
        "newpageletter": "N",
        "boteditletter": "B",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|Benutzer, wu beobachtet|Benutzer, wu beobachte}}]",
-       "rc_categories": "Nume Syten us dr Kategorie (trennt mit „|“):",
-       "rc_categories_any": "Alli",
+       "rc_categories": "Nume Syten us bestimmte Kategorie (mit «|» trenne):",
+       "rc_categories_any": "Beliebigi vo den usgwählte",
        "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Byte}} no dr Änderig",
        "newsectionsummary": "Neje Abschnitt /* $1 */",
        "rc-enhanced-expand": "Detail aazeige",
        "reuploaddesc": "Abbrächen un zrugg zue dr Syte \"Uffelade\"",
        "upload-tryagain": "Gändereti Dateibschryybig abschicke",
        "uploadnologin": "Nit aagmäldet",
-       "uploadnologintext": "Si mien [[Special:UserLogin|aagmäldet syy]], zum Dateie uffelade z chenne.",
+       "uploadnologintext": "Für Dateien ufezlade, muesch di $1.",
        "upload_directory_missing": "S Upload-Verzeichnis ($1) fählt un het au dur dr Netzserver nit chenne aagleit wäre.",
        "upload_directory_read_only": "Dr Netzserver het kei Schryybrächt fir s Upload-Verzeichnis ($1).",
        "uploaderror": "Fähler bim Uffelade",
        "upload-recreate-warning": "'''Warnig: E Datei mit däm Name isch scho mol glescht oder verschobe wore.'''\n\nDo het s e Uuszug us em Lesch- un eme Verschiebigslogbuech:",
        "uploadtext": "Verwänd des Formular unte zum Dateie uffelade.\nZum friejer uffegladeni Dateie aazluege oder z sueche lueg uf dr [[Special:FileList|Lischt vu uffegladene Dateie]],\nWeli Dateie uffeglade sin, sihsch im [[Special:Log/upload|Logbuech vu dr uffegladene Dateie]], weli glescht sin im [[Special:Log/delete|Lesch-Logbuech]]\n\nZum e Datei oder e Bild in ere Syte yyzböue, schryybsch eifach:\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:file.jpg]]</nowiki>''' fir di voll Version vu dr Datei\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:file.png|al text]]</nowiki>''' fir e 200 Pixel grossi Version im e Chaschte mit 'alt text' as Bschrybig\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' fir e diräkt Link zuer dr Datei ohni ass si aazeigt wird",
-       "upload-permitted": "Dateitype, wu erlaubt sin: $1.",
-       "upload-preferred": "Dateitype, wu bevorzugt sin: $1.",
-       "upload-prohibited": "Dateitype, wu nit erlaubt sin: $1.",
+       "upload-permitted": "{{PLURAL:$2|Dateityp, wu erlaubt isch|Dateitype, wu erlaubt sin}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Dateityp, wu bevorzugt isch|Dateitype, wu bevorzugt sin}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Dateityp, wu nit erlaubt isch|Dateitype, wu nit erlaubt sin}}: $1.",
        "uploadlogpage": "Dateie-Logbuech",
        "uploadlogpagetext": "Des isch s Logbuech vu dr uffegladene Dateie.\nLueg au d [[Special:NewFiles|Galerii vu neije Dateie]] fir e visuälle Iberblick.",
        "filename": "Dateiname",
        "largefileserver": "Die Datei isch gresser wie die vum Server yygstellti Maximalgressi.",
        "emptyfile": "Di uffeglade Datei isch schyyns läär. Dr Grund cha ne Tippfähler im Dateiname syy. Bitte iberprief, eb du die Datei wirkli wit uffelade.",
        "windows-nonascii-filename": "Des Wiki unterstitzt kei Dateinäme mit Sonderzeiche.",
-       "fileexists": "S git scho ne Datei mit däm Name.\nWänn Du uf \"Datei spichere\" drucksch, no wird die Datei iberschribe.\nBitte prief <strong>[[:$1]]</strong>, wänn Der nit sicher bisch.\n[[$1|thumb]]",
+       "fileexists": "Es git scho’ne Datei mit däm Name. Bitte prüeff <strong>[[:$1]]</strong>, we d’ nid sicher bisch, öb {{GENDER:|d’}} se wosch ändere.\n[[$1|thumb]]",
        "filepageexists": "E Bschryybigssyte isch scho as <strong>[[:$1]]</strong> aagleit wore, s git aber kei Datei mit däm Name.\nDie Zämmefassig, wu Du yygee hesch, wird nit uf d Bschryybigssyte ibernuh.\nDu muesch d Bschryybigssyte noch em Uffelade vu dr Datei no manuäll bearbeite.\n[[$1|thumb]]",
-       "fileexists-extension": "S git scho ne Datei mit eme ähnlige Name: [[$2|thumb]]\n* Name vu Datei, wu soll uffeglade were: <strong>[[:$1]]</strong>\n* Name vu dr Datei, wu s scho git: <strong>[[:$2]]</strong>\nBitte wehl e andre Name.",
+       "fileexists-extension": "S git scho ne Datei mit eme ähnlige Name: [[$2|thumb]]\n* Name vu Datei, wu soll uffeglade were: <strong>[[:$1]]</strong>\n* Name vu dr Datei, wu s scho git: <strong>[[:$2]]</strong>\nVilech wosch en eidütigere Name bruuche?",
        "fileexists-thumbnail-yes": "Die Datei isch schyyns e Bild mit ere verringerte Gressi ''(thumbnail)''. [[$1|thumb]]\nBitte prief d Datei <strong>[[:$1]]</strong>.\nWänn s Bild in dr Originalgressi isch, no isch s nit netig, ass e extra Vorschaubild uffeglade wird.",
        "file-thumbnail-no": "Dr Dateiname fangt mit <strong>$1</strong> aa. Des wyyst uf e Bild mit ere verringerte Gressi ''(thumbnail)'' hi.\nBitte prief, eb D s Bild in voller Uflesig vorlige hesch un lad derno des unter em Originalname uffe.",
        "fileexists-forbidden": "S git scho ne Datei mit däm Name. Si cha nit iberschribe wäre. Bitte gang zruck un lad die Datei unter eme andere Name uffe. [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "S git scho ne Datei mit däm Name im Zentrale Mediearchiv.\nWänn Du die Datei einewäg wit uffelade, gang bitte zruck un ändere dr Name.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Die Datei isch e Duplikat vu {{PLURAL:$1|däre Datei|däne $1 Dateie}}:",
        "file-deleted-duplicate": "E identischi Version vu däre Datei ([[:$1]]) isch friejer scho mol glescht wore. Iberprief s Leschlogbuech, voreb Du si uffeladesch.",
+       "file-deleted-duplicate-notitle": "En idäntischi Datei isch chürzlech glöscht u der Titel underdrückt worde.\nFür d Situation vor em Wider-Ufelade z prüeffe, söttsch öpper frage, wo di underdrückte Dateidate cha aluege.",
        "uploadwarning": "Warnig",
        "uploadwarning-text": "Bitte tue unte d Dateibsschryybig ändere un versuech s nomol.",
        "savefile": "Datei spychere",
        "uploaddisabledtext": "S Uffelade vu Dateie isch deaktiviert.",
        "php-uploaddisabledtext": "S Uffelade vu PHP-Dateie isch deaktiviert wore. Bitte iberprief d file_uploads-Yystellig.",
        "uploadscripted": "In däre Datei git s HTML- oder Scriptcode, wu fälschligerwyys vun eme Webbrowser usgfiert chennt were.",
+       "upload-scripted-pi-callback": "E Datei mit Verarbeitigsbefählen imnen XML-Stylesheet cha me nid ufelade.",
+       "uploaded-script-svg": "Ir ufegladnigen SVG-Datei het’s ds Skript-Elemänt «$1».",
+       "uploaded-hostile-svg": "Im Style-Elemänt vor ufegladnigen SVG-Datei het’s unsichers CSS.",
+       "uploaded-event-handler-on-svg": "I SVG-Dateien isch ds Event-Handler-Attribut <code>$1=\"$2\"</code> nid erloubt.",
+       "uploaded-href-attribute-svg": "I SVG-Dateien isch ds href-Attribut <code>&lt;$1 $2=\"$3\"&gt;</code> mit emne nid-lokale Zil (byspilswys http://, javascript: etc.) nid erloubt.",
+       "uploaded-href-unsafe-target-svg": "Ir ufegladnige SVG-Datei het’s es href uf ds unsichere Zil <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-animate-svg": "Ir ufegladnigen SVG-Datei het’s en «animate»-Tag, wo über ds «from»-Attribut <code>&lt;$1 $2=\"$3\"&gt;</code> chönnt href ändere.",
+       "uploaded-setting-event-handler-svg": "Ir ufegladnigen SVG-Datei het’s ds Event-Handler-Attribut <code>&lt;$1 $2=\"$3\"&gt;</code>. Event-Handler-Attribut sy nid erloubt.",
+       "uploaded-setting-href-svg": "Es isch nid erloubt, mit emne «set»-Tag es «href»-Attribut zumenen übergordneten Elemänt derzue z tue.",
+       "uploaded-wrong-setting-svg": "Ir ufegladnigen SVG-Datei git e «set»-Tag emnen Attribut es externs Zil oder es Daten- oder Script-Zil: <code>&lt;set to=\"$1\"&gt;</code>. Das isch nid erloubt.",
+       "uploaded-setting-handler-svg": "Ir ufegladnigen SVG-Datei het’s es «handler»-Attribut mit Externem/Date/Script: <code>$1=\"$2\"</code>. Das isch nid erloubt.",
+       "uploaded-remote-url-svg": "Ir ufegladnigen SVG-Datei het’s es Style-Attribut mit emnen externen URL: <code>$1=\"$2\"</code>. Das isch nid erloubt.",
+       "uploaded-image-filter-svg": "Ir ufegladnigen SVG-Datei het’s e Bildfilter mit emnen URL: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploadscriptednamespace": "I deren SVG-Datei het’s der illegal Namensruum «$1».",
        "uploadinvalidxml": "S XML in dr uffegladene Datei het nit chenne parst wäre.",
        "uploadvirus": "In däre Datei het s e Virus! Detail: $1",
        "uploadjava": "Des isch e ZIP-Datei, wu s e CLASS-Datei vu Java din het.\nS Uffelade vu Java-Dateien isch nit gstattet, wel si s Umgoh vu Sicherheitsyyschränkige chennte megli mache.",
        "upload-too-many-redirects": "In dr URL het s zvyl Wyterleitige",
        "upload-http-error": "E HTTP-Fähler isch ufträtte: $1",
        "upload-copy-upload-invalid-domain": "As Kopi uffeladbari Dateie sin iber die Domain nit verfiegbar.",
+       "upload-dialog-title": "Datei ufelade",
+       "upload-dialog-error": "Es het e Fähler ’gä",
+       "upload-dialog-warning": "Es het e Warnig ’gä",
+       "upload-dialog-button-cancel": "Abbräche",
+       "upload-dialog-button-done": "Fertig",
+       "upload-dialog-button-save": "Spychere",
+       "upload-dialog-button-upload": "Ufelade",
+       "upload-dialog-label-select-file": "Datei ussueche",
+       "upload-dialog-label-infoform-title": "Details",
+       "upload-dialog-label-infoform-name": "Name",
+       "upload-dialog-label-infoform-description": "Beschrybig",
+       "upload-dialog-label-usage-title": "Verwändig",
+       "upload-dialog-label-usage-filename": "Dateiname",
        "backend-fail-stream": "D Datei $1 het nit chenne ibertrait wäre.",
        "backend-fail-backup": "D Datei $1 het nit chenne gsicheret wäre.",
        "backend-fail-notexists": "D Datei $1 git s nit.",
        "license": "Lizänz:",
        "license-header": "Lizänzierig",
        "nolicense": "kei Voruswahl",
+       "licenses-edit": "Linzänzoptionen ändere",
        "license-nopreview": "(s isch kei Vorschau verfiegbar)",
-       "upload_source_url": " (giltige, effentli zuegänglig URL)",
-       "upload_source_file": " (e Datei uf Dyynem Computer)",
+       "upload_source_url": " (usgsuechti Datei vomne gültige, öffetlech zuegänglechen URL)",
+       "upload_source_file": "(dyni usgsuechti Datei vo dym Computer)",
+       "listfiles-delete": "lösche",
        "listfiles-summary": "Die Spezialsyte lischtet alli uffegladene Dateie uf.",
        "listfiles_search_for": "Suech noch Datei:",
+       "listfiles-userdoesnotexist": "Ds Konto «$1» isch nid registriert.",
        "imgfile": "Datei",
        "listfiles": "Lischte vo Bilder",
        "listfiles_thumb": "Vorschaubilder",
        "listfiles_size": "Gressi",
        "listfiles_description": "Bschryybig",
        "listfiles_count": "Versione",
+       "listfiles-show-all": "Alti Versione vom Bild yschliesse",
+       "listfiles-latestversion": "Aktuelli Version",
+       "listfiles-latestversion-yes": "Ja",
+       "listfiles-latestversion-no": "Nei",
        "file-anchor-link": "Bildli",
        "filehist": "Dateiversione",
        "filehist-help": "Klick uf e Zytpunkt zu aazeige, wie s dert usgsäh het.",
        "filedelete-maintenance": "S Leschen un Widerhärstelle vu Dateie isch wäge Wartigsarbete e Zytlang deaktiviert.",
        "filedelete-maintenance-title": "D Datei cha nit glescht wäre.",
        "mimesearch": "MIME-Suechi",
-       "mimesearch-summary": "Uf däre Spezialsyte chenne d Dateie noch em MIME-Typ gfilteret wäre. In dr Yygob muess es alliwyl dr Medie- un Subtyp din haa: <code>image/jpeg</code> (lueg Bildbschryybigssyte).",
+       "mimesearch-summary": "Uf däre Spezialsyte chenne d Dateie noch em MIME-Typ gfilteret wäre. In dr Yygob muess es alliwyl dr Medie- un Subtyp din haa, byspilswys <code>image/jpeg</code> oder <code>image/*</code> (lueg Bildbschryybigssyte).",
        "mimetype": "MIME-Typ:",
        "download": "Abelade",
        "unwatchedpages": "Unbeobachteti Sytene",
        "listredirects": "Lischte vo Wyterleitige (Redirects)",
+       "listduplicatedfiles": "Liste vo Dateie mit Duplikat",
+       "listduplicatedfiles-summary": "Das isch e Liste vo Dateie, wo di aktuelli Version idäntisch isch mit der aktuelle Version von eren andere Datei. Nume lokali Dateie sy berücksichtiget.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] het [[$3|{{PLURAL:$2|eis|$2}} Duplikat]]",
        "unusedtemplates": "Nid bruuchti Vorlage",
        "unusedtemplatestext": "Die Syte lischtet alli Syten im {{ns:template}}-Namensruum uf, wu nit in andere Syte yybunden sin.\nIberprief anderi Link zue dr Vorlage, voreb Du die leschesch.",
        "unusedtemplateswlh": "Anderi Link",
        "randompage": "Zuefalls-Artikel",
        "randompage-nopages": "S het kei Syte in {{PLURAL:$2|däm Namensruum|däne Namensryym}}:  $1.",
+       "randomincategory": "Zuefälligi Syten us ere Kategorie",
+       "randomincategory-invalidcategory": "«$1» isch ke gültigi Kategoriename.",
+       "randomincategory-nopages": "Ir Kategorie [[:Category:$1|$1]] het’s kener Syte.",
+       "randomincategory-category": "Kategorie:",
+       "randomincategory-legend": "Zuefälligi Syten us ere Kategorie",
        "randomincategory-submit": "Gang",
        "randomredirect": "Zuefälligi Wyterleitig",
        "randomredirect-nopages": "Im Namensruum „$1“ sin kei Wyterleitige vorhande.",
        "pageswithprop-text": "Die Spezialsyte lischet Syten auf, wu ne bstimmti Syteneigeschaft bruche.",
        "pageswithprop-prop": "Eigeschaftsname:",
        "pageswithprop-submit": "Gang ane",
+       "pageswithprop-prophidden-long": "Syteneigeschaften über $1 kB sy nid azeigt",
+       "pageswithprop-prophidden-binary": "Eigeschaftswärte mit Binärdate sy versteckt ($1)",
        "doubleredirects": "Doppleti Wyterleitige (Redirects)",
        "doubleredirectstext": "Die Lischt zeigt Wyterleitige, wu uf anderi Wyterleitige verwyyse.\nIn jedere Zyylete het s Link zue dr erschte un dr zwote Wyterleitig un s Ziil vu dr zwote Wyterleitig, wu normalerwys di gwinscht Ziilsyten isch. Do sott eigetli scho di erscht Wyterleitig druf zeige.\n<del>Durgstricheni</del> Yytreg sin scho erledigt wore.",
-       "double-redirect-fixed-move": "doppleti Wyterleitig ufglest: [[$1]] → [[$2]]",
-       "double-redirect-fixed-maintenance": "Di dopplet Wyterleitig vu [[$1]] no [[$2]] isch ufglest wore.",
+       "double-redirect-fixed-move": "D Syte [[$1]] isch verschobe.\nUnder irem Namen isch automatisch e Wyterleitig uf [[$2]] agleit worde.",
+       "double-redirect-fixed-maintenance": "Doppleti Wyterleitig vo [[$1]] uf [[$2]] automatisch in ere Wartigsarbeit gflickt.",
        "double-redirect-fixer": "DoubleRedirectBot",
        "brokenredirects": "Kaputti Wyterleitige",
        "brokenredirectstext": "Die Spezialsyte lischtet Wyterleitige uf, wu zue Artikel fiere, wu s gar nid git:",
        "ninterwikis": "{{PLURAL:$1|Ei Interwikilink|$1 Interwikilink}}",
        "nlinks": "$1 {{PLURAL:$1|Link|Links}}",
        "nmembers": "$1 {{PLURAL:$1|Syte|Sytene}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|Syte}}",
        "nrevisions": "$1 {{PLURAL:$1|Revision|Revisione}}",
        "nimagelinks": "Brucht uf $1 {{PLURAL:$1|Syte|Syte}}",
        "ntransclusions": "brucht uf $1 {{PLURAL:$1|Syte|Syte}}",
        "unusedimages": "Verwaiste Bilder",
        "wantedcategories": "Bruuchti Kategorie, wo s no nid git",
        "wantedpages": "Artikel, wo fähle",
+       "wantedpages-summary": "Liste vo de meist-verlinkte Syte, wo’s nid git. Nid derby sy Syte, wo nume Wyterleitige druf verlinke. Syte, wo’s nid git u wo Wyterleitige druf verlinke, sy i der [[{{#special:BrokenRedirects}}|Liste vo kabutte Wyterleitige]] z finde.",
        "wantedpages-badtitle": "Nit giltige Titel im Ergebnis: $1",
        "wantedfiles": "Dateie, wu fähle",
        "wantedfiletext-cat": "Die Dateie wäre brucht, s git si aber nit. Dateie us främde Repositorie chenne einewäg do ufglischtet syy un wäre <del>durgstriche</del> dargstellt. Zuesätzli wäre Syte, wu s die nit vorhande Datei dinne het, in d [[:$1]] yygordnet.",
-       "wantedfiletext-nocat": "Die Dateie wäre brucht, s git si aber nit. Vorhandeni Dateie us främde Repositorie chenne dp einewäg ufglischtet syy un wäre <del>durgstriche</del> dargstellt.",
+       "wantedfiletext-cat-noforeign": "Die Dateie sy y’bunde, aber es git se nid. Syte, wo nid vorhandnigi Dateien ybinde, sy under [[:$1]] z finde.",
+       "wantedfiletext-nocat": "Die Dateie wäre brucht, s git si aber nit. Vorhandeni Dateie us främde Repositorie chenne do einewäg ufglischtet syy un wäre <del>durgstriche</del> dargstellt.",
+       "wantedfiletext-nocat-noforeign": "Die Dateie sy y’bunde, aber es git se nid.",
        "wantedtemplates": "Vorlage, wu fähle",
        "mostlinked": "Syte, wo am meischte druff verwyyse wird",
        "mostlinkedcategories": "Am meischte verlinkti Kategorië",
-       "mostlinkedtemplates": "Am meischten yybouti Vorlage",
+       "mostlinkedtemplates": "Meist-y’bundnigi Syte",
        "mostcategories": "Sytene mit de meischte Kategorië",
        "mostimages": "Am meischte verlinkti Dateie",
        "mostinterwikis": "Syte mit de meischte Interwikilink",
        "mostrevisions": "Syte mit de meischte Bearbeitige",
        "prefixindex": "Alli Syte (mit Präfix)",
        "prefixindex-namespace": "Alli Syte mit Präfix (Nameruum $1)",
+       "prefixindex-strip": "Präfix ir Listen abschnyde",
        "shortpages": "Churzi Artikel",
        "longpages": "Langi Artikel",
        "deadendpages": "Artikel ohni Links («Sackgasse»)",
        "deadendpagestext": "Die Syte verwyyse nit zue anderi Syte in {{SITENAME}}.",
        "protectedpages": "Gschützti Sytene",
        "protectedpages-indef": "Nume uubschränkt gschitzti Syte zeige",
+       "protectedpages-summary": "Die Liste zeigt Syte, wo momentan gschützt sy. Under «[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]» isch e Liste vo Title, wo’s nid erloubt isch, e Syte dermit azlege.",
        "protectedpages-cascade": "Nume Syte mit Kaskadeschutz",
+       "protectedpages-noredirect": "Wyterleitigen usblände",
        "protectedpagesempty": "Aktuäll sin kei Syte mit däne Parameter gschitzt.",
+       "protectedpages-timestamp": "Zytstämpel",
+       "protectedpages-page": "Syte",
+       "protectedpages-expiry": "Gschützt bis",
+       "protectedpages-performer": "Gschützt vo",
+       "protectedpages-params": "Schutzparameter",
+       "protectedpages-reason": "Grund",
+       "protectedpages-unknown-timestamp": "Unbekannt",
+       "protectedpages-unknown-performer": "Unbekannt",
        "protectedtitles": "Gsperrti Titel",
+       "protectedtitles-summary": "Die Liste zeigt Title, wo’s momentan nid erloubt isch, e Syte dermit azlege. Under «[[{{#special:ProtectedPages}}|{{int:protectedpages}}]]» isch e Liste vo gschützte Syte z finde.",
        "protectedtitlesempty": "Im Momänt sin kei Syte fir s Nejaalege gsperrt mit däne Parameter.",
        "listusers": "Lischte vo Benutzer",
        "listusers-editsonly": "Zeig nume Benutzer mit Byytreg",
        "listusers-creationsort": "Sortiert noch em Datum",
+       "listusers-desc": "Reihefolg umchehre",
        "usereditcount": "$1 {{PLURAL:$1|Bearbeitig|Bearbeitige}}",
        "usercreated": "{{GENDER:$3|Aagleit}} uf $1 am $2",
        "newpages": "Nöji Artikel",
        "pager-older-n": "{{PLURAL:$1|vorige|vorige $1}}",
        "suppress": "Oversight",
        "querypage-disabled": "Die Spezialsyte isch deaktiviert wore us Leischtigserhaltigs-Grind.",
+       "apihelp": "API-Hilff",
+       "apihelp-no-such-module": "Ds Modul «$1» lat sech nid la finde.",
        "booksources": "ISBN-Suech",
        "booksources-search-legend": "Suech no Bezugsquälle fir Biecher",
        "booksources-search": "Sueche",
        "booksources-text": "Des isch e Lischt mit Link zue Netzsyte, wu neiji un bruchti Biecher verchaufe. S cha syy, ass es dert au meh Informatione zue dr Biecher git. {{SITENAME}} isch mit keinem vu däne Aabieter gschäftli verbunde.",
        "booksources-invalid-isbn": "D ISBN isch schyyns falsch. Lueg no Fähler in dr Kopii.",
        "specialloguserlabel": "Benutzer, wu des gmacht het:",
-       "speciallogtitlelabel": "Ziil (Titel oder Benutzer):",
+       "speciallogtitlelabel": "Zil (Titel oder «{{ns:user}}:Name» für Benutzer/inne):",
        "log": "Logbiecher",
        "all-logs-page": "Alli effetligi Logbüecher",
        "alllogstext": "Kombinierti Aasicht vu alle in {{SITENAME}} gfierte Protokoll.\nD Aazeig cha dur d Uuswahl vun eme Protokoll, eme Benutzername oder eme Sytename yygschränkt wäre (Acht gee uf d Gross- un Chleischrybig).",
        "logempty": "Kei Yyträg gfunde, wu passe.",
        "log-title-wildcard": "Titel fangt aa mit",
        "showhideselectedlogentries": "Uusgwehlti Logbuechyytreg aazeige/verstecke",
+       "log-edit-tags": "Markierige vo den usgwählte Logbuechyträg ändere",
        "allpages": "alli Sytene",
        "nextpage": "Nächscht Syte ($1)",
        "prevpage": "Vorderi Syte ($1)",
        "listgrouprights-removegroup-self": "Cha {{PLURAL:$2|e Gruppe|Gruppe}} us em eigene Benutzerkonto useneh: $1",
        "listgrouprights-addgroup-self-all": "Cha alli Gruppe zum eigene Benutzerkonto zuefiege",
        "listgrouprights-removegroup-self-all": "Cha alli Gruppe us em eigene Benutzerkonto useneh",
+       "listgrouprights-namespaceprotection-header": "Yschränkige nach Namensruum",
+       "listgrouprights-namespaceprotection-namespace": "Namensruum",
+       "listgrouprights-namespaceprotection-restrictedto": "Rächt zum Bearbeite",
+       "trackingcategories": "Tracking-Kategorië",
+       "trackingcategories-summary": "Das isch e Liste vo Tracking-Kategorië, wo d MediaWiki-Software automatisch füllt. Iri Näme cha men ändere, we me di entsprächende Systemmäldigen im {{ns:8}}-Namensruum apasst.",
+       "trackingcategories-msg": "Tracking-Kategorië",
+       "trackingcategories-name": "Name vor Nachricht",
+       "trackingcategories-desc": "Kriterje für d Ybindig vo Kategorië",
+       "noindex-category-desc": "Die Syte wird nid vo Bots indiziert, wil ds magische Wort <code><nowiki>__NOINDEX__</nowiki></code> uf ere steit und wil si zumene Namensruum ghört, wo die Flag erloubt isch.",
+       "index-category-desc": "Uf dere Syte steit <code><nowiki>__INDEX__</nowiki></code> (u si ghört zumene Namensruum wo die Flag erloubt isch). Drum wird si usnahmswys vo Bots indiziert.",
+       "post-expand-template-inclusion-category-desc": "Nach em Expandiere vo allne Vorlagen übertrifft d Sytegröössi <code>$wgMaxArticleSize</code>. Drum sy es paar Vorlage nid expandiert.",
+       "post-expand-template-argument-category-desc": "Nach em Expandiere vomene Vorlagenargumänt (öppis i dreifache gschweiffte Chlammere wie <code>{{{Foo}}}</code>) isch d Syte gröser als <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Uf dere Syte het’s z vil ufwändigi Parserfunktione (wi <code>#ifexist</code>), vgl. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Uf der Syte het’s e defäkte Dateilink (e Link zu’neren y’bundnige Datei, wo’s nid git).",
+       "hidden-category-category-desc": "Im Syteninhalt vor Kategorie steit <code><nowiki>__HIDDENCAT__</nowiki></code>. Das verhinderet, das si standardmäässig im Chaste mit de Kategorielinks azeigt wird.",
+       "trackingcategories-nodesc": "Kei Beschrybig verfüegbar.",
+       "trackingcategories-disabled": "Kategorie isch deaktiviert",
        "mailnologin": "Du bisch nid aagmäldet oder hesch keis Mail aaggä",
        "mailnologintext": "Du muesch [[Special:UserLogin|aagmäldet syy]] un e bstätigti E-Mail-Adräss in Dyyne [[Special:Preferences|Yystellige]] aagee ha, fir dass epper anderem es E-Mail chasch schicke.",
        "emailuser": "Es Mail schrybe",
        "emailccsubject": "Kopii vu Dyynere Nochricht an $1: $2",
        "emailsent": "E-Mail furtgschickt",
        "emailsenttext": "Dys E-Mail isch verschickt worde.",
-       "emailuserfooter": "Die E-Mail isch vum {{SITENAME}}-Benutzer „$1“ an „$2“ gschickt wore.",
+       "emailuserfooter": "$1 het das E-mail a $2 gschickt über d Funktion «{{int:emailuser}}» uf {{SITENAME}}.",
        "usermessage-summary": "Systemnochricht gspycheret.",
        "usermessage-editor": "System-Messenger",
        "watchlist": "Beobachtigslischte",
        "mywatchlist": "Beobachtigslischte",
        "watchlistfor2": "Fir $1 $2",
        "nowatchlist": "Du hesch ke Yträg uf dyre Beobachtigslischte.",
-       "watchlistanontext": "Du muesch Di $1 go Dyyni Beobachtungslischt z säh oder go Yytreg uf ere bearbeite.",
+       "watchlistanontext": "Du muesch di amälde, für dyni Beobachtigslisten azluegen oder z bearbeite.",
        "watchnologin": "Du bisch nit aagmäldet",
        "addwatch": "zue de Beobachtigslischte derzue tue",
-       "addedwatchtext": "D Syte \"[[:$1]]\" stoht jetz uf Dyyre [[Special:Watchlist|Beobachtigslischt]].\nNeji Änderige an dr Syte oder dr Diskussionssyte drvo chasch jetz dert säh.",
+       "addedwatchtext": "«[[:$1]]» steit itz mitsamt Diskussionssyten uf dyre [[Special:Watchlist|Beobachtigsliste]].",
+       "addedwatchtext-short": "D Syte «$1» steit itz uf dyre Beobachtigsliste.",
        "removewatch": "Us der Beobachtigsliste usegnuu",
-       "removedwatchtext": "D Syte «[[:$1]]» isch us dyre [[Special:Watchlist|Beobachtigsliste]] glösche worde.",
+       "removedwatchtext": "«[[:$1]]» isch mitsamt Diskussionssyte us dyre [[Special:Watchlist|Beobachtigsliste]] gstriche.",
+       "removedwatchtext-short": "D Syte «$1» isch us dyre Beobachtigsliste gstriche.",
        "watch": "Beobachte",
        "watchthispage": "Die Syte beobachte",
        "unwatch": "nümm beobachte",
        "unwatchthispage": "Nimmi beobachte",
        "notanarticle": "Kei Syte",
        "notvisiblerev": "Version isch glescht wore",
-       "watchlist-details": "{{PLURAL:$1|1 Syte wird|$1 Sytene wärde}} beobachtet (Diskussionssyte nid zelt, aber ou beobachtet).",
-       "wlheader-enotif": "Dr E-Mail-Benochrichtigungsdienscht isch aktiviert.",
-       "wlheader-showupdated": "Syte mit Anderige, wu no nit aagluegt sin, sin '''fett''' dargstellt.",
-       "wlnote": "Do {{PLURAL:$1|chunnt di letscht Änderig|chemme di letschte '''$1''' Änderige}} vu dr letschte {{PLURAL:$2|Stund|'''$2''' Stunde}}. Stand: $3, $4 Uhr.",
-       "wlshowlast": "Zeig di letschte $1 Stunde $2 Tage",
+       "watchlist-details": "{{PLURAL:$1|1 Syte wird|$1 Syte wärde}} beobachtet (Diskussionssyte nid zelt, aber ou beobachtet).",
+       "wlheader-enotif": "E-Mail-Benachrichtigung isch aktiviert.",
+       "wlheader-showupdated": "Syte, wo syt em letste Bsuech hei g’änderet, sy <strong>fett</strong> dargstellt.",
+       "wlnote": "Unde {{PLURAL:$1|steit di letsti Änderig|stöh di letste <strong>$1</strong> Änderigen}} us {{PLURAL:$2|der letste Stund|de letste <strong>$2</strong> Stunde}}. Stand: $3, $4 Uhr.",
+       "wlshowlast": "Zeig di letste $1 Stunden und $2 Täg",
        "watchlist-options": "Aazeigoptione",
        "watching": "Am beobachte …",
        "unwatching": "Nümm am beobachten …",
        "exbeforeblank": "Inhalt voreb d Syte gläärt woren isch: '$1'",
        "delete-confirm": "„$1“ lesche",
        "delete-legend": "Lesche",
-       "historywarning": "'''Warnig:'''  Die Syte, wu Du wit lesche, het e Versionsgschicht mit schetzigswyys $1 {{PLURAL:$1|Version|Versione}}:",
+       "historywarning": "<strong>Warnig:</strong> Die Syte, wu Du wit lesche, het e Versionsgschicht mit $1 {{PLURAL:$1|Version|Versione}}:",
        "confirmdeletetext": "Du bisch dra, e Artikel oder e Bild mitsamt dr Versionsgschicht fir immer us der Datebank z lesche.\nBitte bi Dir iber d Konsequänze bewusst, un bi sicher, dass Du Di an unsri [[{{MediaWiki:Policy-url}}|Leitlinie]] haltsch.",
        "actioncomplete": "Uftrag usgfiert.",
        "actionfailed": "Aktion fählgschlaa",
        "delete-edit-reasonlist": "Leschgrind bearbeite",
        "delete-toobig": "Die Syte het e arg langi Versionsgschicht mit meh as $1 {{PLURAL:$1|Version|Versione}}. S Lesche vu sonige Syte isch yygschränkt wore go verhindere, ass dr Server vu {{SITENAME}} us Versäh zytwys iberlaschtet wird.",
        "delete-warning-toobig": "Die Syte het e arg langi Versionsgschicht mit meh as $1 {{PLURAL:$1|Version|Versione}}. S Lesche cha dr Datebankbetriib vu {{SITENAME}} stere.",
+       "deleteprotected": "Du chasch die Syte nid lösche, wil si isch gschützt worde.",
+       "deleting-backlinks-warning": "'''Obacht:''' D Syte, wo du wosch lösche, isch uf [[Special:WhatLinksHere/{{FULLPAGENAME}}|anderne Syte]] verlinkt oder y’bunde.",
        "rollback": "Zrucksetze vu dr Änderige",
        "rollbacklink": "Zrüggsetze",
        "rollbacklinkcount": "{{PLURAL:$1|Ei Version|$1 Versione}} zrucksetze",
        "rollback-success": "D Änderige vu $1 sin ruckgängig gmacht wore un di letscht Version vu $2 isch widerhärgstellt wore.",
        "sessionfailure-title": "Sitzigsfähler",
        "sessionfailure": "S het e Probläm mit em Ibertrage vu Dyyne Benutzerdate gee.\nDie Aktion isch wäge däm us Sicherheitsgrind abbroche wore go ne falschi Zueornig vu Dyyne Änderige zuen eme andere Benutzer verhindere.\nBitte gang zruck, tue d Syte nej lade un versuech s nomol.",
+       "changecontentmodel": "Inhaltsmodäll von ere Syten ändere",
+       "changecontentmodel-legend": "Inhaltsmodäll ändere",
+       "changecontentmodel-title-label": "Sytetitel",
+       "changecontentmodel-model-label": "Nöüs Inhaltsmodäll",
+       "changecontentmodel-reason-label": "Grund:",
+       "changecontentmodel-success-title": "Ds Inhaltsmodäll het g’änderet",
+       "changecontentmodel-success-text": "Der Inhaltstyp vo [[:$1]] het g’änderet.",
+       "changecontentmodel-cannot-convert": "Der Inhalt vo [[:$1]] lat sech nid zum Typ $2 la konvertiere.",
+       "changecontentmodel-nodirectediting": "Ds Inhaltsmodäll «$1» lat ds diräkte Bearbeite nid zue",
+       "log-name-contentmodel": "Protokoll vo Inhaltsmodälländerige",
+       "log-description-contentmodel": "Ereignis, wo mit em Inhaltsmodäll von ere Syte z tüe hei",
+       "logentry-contentmodel-change": "{{GENDER:$2|Der $1|D $1|$1}} het ds Inhaltsmodäll vor Syte $3 g’änderet vo «$4» uf «$5»",
+       "logentry-contentmodel-change-revertlink": "zrüggsetze",
+       "logentry-contentmodel-change-revert": "zrüggsetze",
        "protectlogpage": "Syteschutz-Logbuech",
        "protectlogtext": "Des isch s Syteschutz-Logbuech.\nLueg d [[Special:ProtectedPages|Lischt vu dr gschitzte Syte]] fir alli zurzyt gschitzte Syte.",
        "protectedarticle": "het „[[$1]]“ gschitzt",
        "protect-locked-blocked": "Du chasch dr Syteschutz nit ändere, wel Dyy Benutzerkonto gsperrt isch. Do sin di aktuälle Syteschutz-Yystellige fir d Syte '''„$1“:'''",
        "protect-locked-dblock": "D Datebank isch gsperrt, dr Syteschutz cha wäge däm nit gänderet wäre. Doo sin di aktuälle Syteschutz-Yystellige fir d Syte '''„$1“:'''",
        "protect-locked-access": "Dys Konto het nid di nötige Rächt, für der Schutzstatus z ändere.\nHie sy di aktuelle Schutzystellige vor Syte '''$1''':",
-       "protect-cascadeon": "Die Syten isch gschützt, wil si {{PLURAL:$1|zur folgende Syte|zu de folgende Syte}} ghört, wo derfür e Kaskadesperrig gilt.\nDer Schutzstatus vo dere Syte lat sech la ändere, aber das het kei Yfluss uf d Kaskadesperrig.",
+       "protect-cascadeon": "Die Syten isch gschützt, wil si i {{PLURAL:$1|der|de}} folgende Syten y’bunden isch, wo derfür e Kaskadesperrig gilt.\nÄnderigen am Schutzstatus vo dere Syte hei kei Yfluss uf d Kaskadesperrig.",
        "protect-default": "Alle Benutzer",
        "protect-fallback": "Nume Benutzer mit dr „$1“-Berächtigung erlaube.",
        "protect-level-autoconfirmed": "Nume automatisch bstetigte Benutzer erlaube",
        "protect-othertime": "Anderi Sperrduur:",
        "protect-othertime-op": "anderi Sperrduur",
        "protect-existing-expiry": "Aktuälls Syteschutzänd: $2, $3 Uhr",
+       "protect-existing-expiry-infinity": "Momentani Ablouffzyt: unbeschränkt",
        "protect-otherreason": "Andere/zuesätzlige Grund:",
        "protect-otherreason-op": "Andere Grund",
-       "protect-dropdown": "*Allgmeini Schutzgrind\n** Netzgleich-Spam\n** Editwar\n** Vylmol yybundeni Vorlag\n** Syte mit ere hoche Bsuecherzahl",
+       "protect-dropdown": "*Allgmeini Schutzgrind\n** Link-Spam\n** Editwar\n** Vylmol yybundeni Vorlag\n** Syte mit ere hoche Bsuecherzahl",
        "protect-edit-reasonlist": "Schutzgrind bearbeite",
        "protect-expiry-options": "1 Stund:1 hour,1 Tag:1 day,1 Wuche:1 week,2 Wuche:2 weeks,1 Monet:1 month,3 Monet:3 months,6 Monet:6 months,1 Johr:1 year,Fir immer:infinite",
        "restriction-type": "Schutzstatus",
        "undeletepagetext": "Die {{PLURAL:$1|Syte isch glescht wore un cha|$1 Syte sin glescht wore un chenne}} vu Ammanne widerhärgstellt wäre:",
        "undelete-fieldset-title": "Widerhärstelle",
        "undeleteextrahelp": "* Go d Syte ganz mit allene Versione widerhärzstelle, wehl kei Version us, gib e Begrindig aa un druck uf „{{int:undeletebtn}}“.\n* Mechtsch nume bstimmti Versione widerhärstelle, no wehl die bitte einzeln no dr Markierige us, gib e Begrindig aa un druck derno uf „{{int:undeletebtn}}“..",
-       "undeleterevisions": "{{PLURAL:$1|1 Version|$1 Versione}} archiviert",
+       "undeleterevisions": "$1 {{PLURAL:$1|Version|Versione}} glöscht",
        "undeletehistory": "Wänn Du die Syte widerhärstellsch, wäre au alli alte Versione widerhärgstellt.\nWänn syt dr Leschig e neiji Syte mit em glyche Name aagleit woren isch, no wäre di widerhärgstellte Versione chronologisch in d Versionsgschicht yygordnet.",
        "undeleterevdel": "D Widerhärstellig wird nit durgfiert, wänn di neijscht Version versteckt isch oder s versteckti Teil dinne het.\nIn däm Fall darf di neijscht Version nit markiert wäre oder ihre Status muess uf normali Version gänderet wäre.",
        "undeletehistorynoadmin": "Dä Artikel isch glescht wore. Dr Grund fir d Leschig isch in dr Zämmefassig aagee, derzue au Aagaabe zum letschte Benutzer, wu dä Artikel bearbeitet het vor dr Leschig. Dr aktuäll Täxt vum gleschte Artikel isch nume zuegängli fir Ammanne.",
        "namespace": "Namensruum:",
        "invert": "Uswahl umkehre",
        "tooltip-invert": "Des Chäschtli aaklicke go Änderige im gwehlte Namensruum un, wänn uusgwehlt, im zuegherige Namensruum uusblände",
+       "tooltip-whatlinkshere-invert": "Tue das Chästli abhääggle, für kener Links vo Syten us em usgwählte Namensruum z zeige.",
        "namespace_association": "Zuegordnete Namensruum",
        "tooltip-namespace_association": "Des Chäschtli aaklicke go dr Diskussionsnamensruum oder dr Namesnruum zuesätzlig mityybezie, wu zue Dyre Uuswahl derzue ghert.",
        "blanknamespace": "(Haupt-)",
        "contributions-title": "Benutzerbyytreg vu „$1“",
        "mycontris": "Myyni Byyträg",
        "contribsub2": "Vu {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Ds Benutzerkonto «$1» isch nid registriert.",
        "nocontribs": "S sin keini Benutzerbyytreg mit däne Kriterie gfunde wore.",
        "uctop": "(aktuell)",
        "month": "u Monet:",
        "sp-contributions-newbies-sub": "vo nöji Benützer",
        "sp-contributions-newbies-title": "Benutzerbyytreg vu neije Benutzer",
        "sp-contributions-blocklog": "Sperrlogbuech",
+       "sp-contributions-suppresslog": "underdrückti Benutzerbyträg",
        "sp-contributions-deleted": "gleschti Bytreg",
        "sp-contributions-uploads": "Uffegladeni Dateie",
        "sp-contributions-logs": "Logbiecher",
        "sp-contributions-blocked-notice-anon": "Die IP-Adräss isch zur Zyt gsperrt.\nDo chunnt dr aktuäll Yytrag us em Benutzersperr-Logbuech:",
        "sp-contributions-search": "Suech no Benutzerbiträg",
        "sp-contributions-username": "IP-Adress oder Benutzername:",
-       "sp-contributions-toponly": "Nume aktuälli Versione zeige",
+       "sp-contributions-toponly": "Nume Byträg zeige, won en aktuelli Version sy",
+       "sp-contributions-newonly": "Nume Byträg zeige, wo e nöüi Syte hei agleit",
        "sp-contributions-submit": "Sueche",
        "whatlinkshere": "Was verwyst do druff?",
        "whatlinkshere-title": "Sytene, wo uf „$1“ verlinke",
        "autoblockid": "Automatischi Sperrig #$1",
        "block": "Benutzer sperre",
        "unblock": "Benutzer frejgee",
-       "blockip": "Däm Binutzer d Bearbeitigsrächt furtnee",
+       "blockip": "{{GENDER:$1|Benutzer|Benutzerin}} sperre",
        "blockip-legend": "IP-Adräss/Benutzer sperre",
        "blockiptext": "Nimm des Formular go ne Benutzer oder e IP-Adräss sperre.\nDes sott numme erfolge go Vandalismus verhindere un in Ibereinstimmig mit in dr [[{{MediaWiki:Policy-url}}|Leitlinie]]. Bitte gib au ne Grund fi d Sperri aa (z. B. indäm du einzel ni Syte zitiersch, wu vandaliert wore sin).",
        "ipaddressorusername": "IP-Adräss oder Benutzername:",
        "ipbexpiry": "Sperrduur:",
        "ipbreason": "Grund:",
-       "ipbreason-dropdown": "* Allgmeini Sperrgrind\n** Lesche vu Syte\n** Aalege vu bledsinnige Syte\n** Vylfachi Verstess gege d Richtlinie fir Netzgleicher\n** Verstoss gege dr Grundsatz „Kei persenligi Aagriff“\n* Benutzerspezifischi Sperrgrind\n** Uugeignete Benutzername\n** Neijaamäldig vun eme uubschränkt gsperrte Benutzer\n* IP-spezifischi Sperrgrind\n** Proxy, wäge Vandalismus vu einzelne Benutzer lengerfrischtig gsperrt",
+       "ipbreason-dropdown": "* Allgmeini Sperrgrind\n** Lesche vu Syte\n** Aalege vu bledsinnige Syte\n** Vylfachi Verstess gege d Richtlinie fir Weblink\n** Verstoss gege dr Grundsatz „Kei persenligi Aagriff“\n* Benutzerspezifischi Sperrgrind\n** Uugeignete Benutzername\n** Neijaamäldig vun eme uubschränkt gsperrte Benutzer\n* IP-spezifischi Sperrgrind\n** Proxy, wäge Vandalismus vu einzelne Benutzer lengerfrischtig gsperrt",
        "ipb-hardblock": "Aagmäldeti Benutzer dra hindere, Bearbeitige unter däre IP-Adräss vorzneh",
        "ipbcreateaccount": "Aalege vu Benutzerchonte verhindere",
        "ipbemailban": "E-Mail-Versand sperre",
        "blockipsuccesstext": "Dr Benutzer/d IP-Adräss [[Special:Contributions/$1|$1]] isch gsperrt wore.<br />\nGo d Sperri ufhebe lueg d [[Special:BlockList|Lisch vu allene aktive Sperrine]].",
        "ipb-blockingself": "Du bist grad am Sperre vu Dir sälber! Wettsch des wirkli mache?",
        "ipb-confirmhideuser": "Du bist grad am Sperre vun eme Benutzer im Modus „Benutzer verstecke“. Des fiert derzue, ass dr Benutzername in allne Lischten un Logbiecher unterdruckt wird. Wettsch des wirkli mache?",
+       "ipb-confirmaction": "We du dir sicher bisch, das d’s würklech wosch mache, de tue bitte unde ds Fäld «{{int:ipb-confirm}}» achrüzle.",
        "ipb-edit-dropdown": "Sperrgrind bearbeite",
        "ipb-unblock-addr": "„$1“ frejgee",
        "ipb-unblock": "IP-Adräss/Benutzer frejgee",
        "ipb-blocklist": "Alli aktuälle Sperrine aazeige",
-       "ipb-blocklist-contribs": "Benutzerbyytreg fir „$1“",
+       "ipb-blocklist-contribs": "Benutzerbyträg {{GENDER:$1|vom|vor|vo}} $1",
        "unblockip": "IP-Adräss frejgee",
        "unblockiptext": "Mit däm Formular chasch e IP-Adräss oder e Benutzer frejgee.",
        "ipusubmit": "Die Sperri useneh",
        "unblocked": "[[User:$1|$1]] isch frejgee wore",
        "unblocked-range": "D Sperri fir $1 isch ufghobe",
        "unblocked-id": "Sperr-ID $1 isch freijgee wore",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] isch nümm gsperrt.",
        "blocklist": "Gsperrti Benutzer",
        "ipblocklist": "Gsperrti Benutzer",
        "ipblocklist-legend": "Suech no eme gsperrte Benutzer",
        "change-blocklink": "Sperri ändere",
        "contribslink": "Byträg",
        "emaillink": "E-Mail abschicke",
-       "autoblocker": "Automatischi Sperri, wel Du e gmeinsami IP-Adräss mit [[User:$1|Benutzer:$1]] bruchsch. Grund: „$2“.",
+       "autoblocker": "Automatischi Sperrig, wil dyni IP-Adrässe chürzlech vo [[User:$1|Benutzer:$1]] isch ’bruucht worde. Grund für d Sperrig vo $1: «$2».",
        "blocklogpage": "Sperrigs-Protokoll",
        "blocklog-showlog": "Dää Benutzer isch schon emol gsperrt wore. S Sperrine-Logbuech git s do as Referänz:",
        "blocklog-showsuppresslog": "Dää Benutzer isch schon emol gsperrt wore un syyni Bearbeitige sin uusblädet wore. S Uusbländigs-Logbuech git s do as Referänz:",
        "proxyblockreason": "Dyni IP-Adrässe isch gsperrt wore, wel si ne ufige Proxy isch. Bitte kontaktier Dyyn Internet-Provider oder Dyni Systemadministratore un informier si iber des Sicherheitsproblem.",
        "sorbsreason": "D IP-Adräss isch in dr DNSBL vu {{SITENAME}} as uffige PROXY glischtet.",
        "sorbs_create_account_reason": "D IP-Adräss isch in dr DNSBL vu {{SITENAME}} as uffige PROXY glischtet. S Aalege vu neije Benutzer isch nit megli.",
+       "xffblockreason": "En IP-Adrässen im Header «X-Forwarded-For» isch gsperrt worde, entweder dyni oder die vomene Proxy-Server, wo du bruuchsch. Der ursprünglechi Grund für d Sperrig isch: $1",
        "cant-see-hidden-user": "Dr Benutzer, wu Du versuechsch z sperre, isch scho gsperrt un versteckt wore. Du chasch d Sperri vu däm Benutzer nit säh oder bearbeite, wel du s „hideuser“-Rächt nit hesch.",
        "ipbblocked": "Du chasch keini andere Benutzer sperre oder entsperre, wel Du sälber gsperrt bisch",
        "ipbnounblockself": "Du derfsch di nit sälber entsperre",
        "movepagetalktext": "D Diskussionssyte wird mitverschobe, '''ussert:'''\n*Du verschiebsch d Syten i nen andere Namensruum, oder\n*es git scho ne Diskussionssyte mit däm Namen oder\n*du wählsch unte d Option, se nid z verschiebe.\n\nI söttigne Fäll müessti d Diskussionssyten allefalls vo Hand kopiert wärde.",
        "movearticle": "Artikel verschiebe",
        "moveuserpage-warning": "'''Warnig:''' Du bis am Verschiebe vun ere Benutzersyte. Bitte gib Achtig, ass doderdur nume die Syte verschobe wird, aber dr Benutzer '''nit''' umgnännt wird.",
+       "movecategorypage-warning": "<strong>Obacht:</strong> Du bisch e Kategoriesyten am Verschiebe. Bitte dänk dra, das nume die Syte verschobe wird. D Syte, wo zur alte Kategorie ghöre, wärde <strong>nid</strong> i di nöüi Kategorie verschobe.",
        "movenologintext": "Du muesch e regischtrierte Benutzer syy un Di [[Special:UserLogin|aamälde]] go die Syte verschiebe.",
        "movenotallowed": "Du derfsch kei Syte verschiebe.",
        "movenotallowedfile": "Du derfsch kei Dateie verschiebe.",
        "cant-move-user-page": "Du derfsch kei Benutzersyte verschiebe (mit Usnaam vo Untersyte).",
        "cant-move-to-user-page": "Du derfsch kei Syte uf e Benutzersyte verschiebe (mit Usnaam vo Untersyte).",
+       "cant-move-category-page": "Du hesch nid ds Rächt, Kategoriesyte z verschiebe.",
+       "cant-move-to-category-page": "Du hesch nid ds Rächt, e Syte zunere Kategoriesyte z verschiebe.",
        "newtitle": "Zum nöie Titel",
        "move-watch": "Die Syte beobachte",
        "movepagebtn": "Artikel verschiebe",
        "allmessages-prefix": "Präfixfilter:",
        "allmessages-language": "Sproch:",
        "allmessages-filter-submit": "Gang",
+       "allmessages-filter-translate": "Übersetze",
        "thumbnail-more": "Vergreßere",
        "filemissing": "D Datei fäält",
        "thumbnail_error": "Fähler bir Härstellig vo re Vorschou: $1",
+       "thumbnail_error_remote": "Fälermäldig vo $1:\n$2",
        "djvu_page_error": "DjVu-Syte isch uusserhalb vum Sytebereich",
        "djvu_no_xml": "XML-Date chönne für d DjVu-Datei nüt abgruefe werde",
        "thumbnail-temp-create": "D Datei fir di temporär Miniaturaasicht het nit chenne aagleit wäre.",
        "thumbnail-dest-create": "D Miniaturaasicht het nit chenne an däm Ort gspycheret wäre.",
        "thumbnail_invalid_params": "Ungültigs Thumbnail-Parameter",
+       "thumbnail_toobigimagearea": "Dateiabmässig überschrytet $1",
        "thumbnail_dest_directory": "S Ziilverzeichnis cha nüt erstellt werde",
        "thumbnail_image-type": "Bildtyp wird nit unterstitzt",
        "thumbnail_gd-library": "Uuvollständigi GD-Library-Konfiguration: Funktion $1 fählt",
        "thumbnail_image-missing": "Datei fählt schyns: $1",
+       "thumbnail_image-failure-limit": "Ir letsti het’s z vil misslungnigi Versüech ’gä (mindistens $1), das Vorschoubild z rendere. Bitte versuech’s später wider.",
        "import": "Sytene importiere",
-       "importinterwiki": "Transwiki-Import",
-       "import-interwiki-text": "Wääl e Wiki un e Syte zum Importiere us.\nS Datum vo dr Bearbeitig un dr Benutzername blybe erhalte.\nAlli Transwiki-Import-Aktione werde im [[Special:Log/import|Import-Logbuech]] protokolliert.",
+       "importinterwiki": "Us emnen andere Wiki importiere",
+       "import-interwiki-text": "Wääl e Wiki un e Syte zum Importiere us.\nS Datum vo de Bearbeitige un d Benutzernäme blybe erhalte.\nAlli Import-Aktione us anderne Wiki werde im [[Special:Log/import|Import-Logbuech]] protokolliert.",
+       "import-interwiki-sourcewiki": "Ursprünglechs Wiki:",
+       "import-interwiki-sourcepage": "Ursprünglechi Syte:",
        "import-interwiki-history": "Alli früeneri Versione vo dere Syte importiere",
        "import-interwiki-templates": "Mit allene Vorlage",
        "import-interwiki-submit": "Import",
+       "import-mapping-default": "Zu de Standard-Orten importiere",
+       "import-mapping-namespace": "In e Namensruum importiere:",
+       "import-mapping-subpage": "Als Undersyte vor folgende Syten importiere:",
        "import-upload-filename": "Dateiname:",
        "import-comment": "Grund:",
        "importtext": "Datei iber d Spezialsyte [[Special:Export|Exportfunktion]] us em Quellwiki exportiere.\nDie uf em lokale Rächner spychere un derno do uffelade.",
        "importcantopen": "D Importdatei het nit chenne ufgmacht wäre.",
        "importbadinterwiki": "Falscher Interwiki-Link",
        "importsuccess": "Dr Import isch abgschlosse.",
-       "importnosources": "Für de Transwiki-Import sin kei Quelle definiert worde. Wege dem isch s direkte Ufelade vo Gschichtsversione gsperrt.",
+       "importnosources": "Es isch kes Wiki a’gä worde, wo druus söll importiert wärde, u ds diräkten Ufelade vo Versionsgschichten isch deaktiviert.",
        "importnofile": "Es isch kei Importdatei ufeglade worde.",
        "importuploaderrorsize": "S Ufelade vo dr Importdatei isch misslunge. D Datei isch grösser als erlaubt isch.",
        "importuploaderrorpartial": "S Ufelade vo dr Importdatei isch misslunge. D Datei het numme zum Deil chönne ufeglade werde.",
        "importuploaderrortemp": "S Ufelade vo dr Importdatei isch misslunge. E temporärs Verzeichnis fäält.",
        "import-parse-failure": "Fääler bim XML-Import:",
        "import-noarticle": "Du hesch kei Syte zum importiere aagää!",
-       "import-nonewrevisions": "Es sin scho alli früeneri Versione importiert worde.",
+       "import-nonewrevisions": "Es sy kener Versionen importiert worde (entweder sy si scho alli da gsy oder es het e Fähler ’gä).",
        "xml-error-string": "$1 Zeile $2, Spalte $3, (Byte $4): $5",
        "import-upload": "XML-Date ufelade",
        "import-token-mismatch": "D Sitzigsdate sin verlore gange. Bitte versuech es noo emool.",
        "import-error-create": "Die Syte „$1“ isch nit importiert worde, wyl du nit dezue berächtigt bisch, si z erstelle.",
        "import-error-interwiki": "D Syte „$1“ isch nit importiert wore, wel dr Name vun ere fir externi Link (Interwiki) reserviert isch.",
        "import-error-special": "D Syte „$1“ isch nit importiert wore, wel si zuen eme bsundere Namensruum ghert, wu kei Syte megli sin.",
-       "import-error-invalid": "Syte „$1“ isch nit importiert wore, wel dr Name vun ere nit giltig isch.",
+       "import-error-invalid": "D Syte «$1» isch nid importiert worde, wil der Name, wo si hätt söllen übercho, i däm Wiki nid gültig isch.",
        "import-error-unserialize": "D Version $2 vu dr Syte „$1“ het nit chenne deserialisiert wäre. D Version isch fir d Verwändig vum Inhaltsmodäll $3 gmäldet wore, wu as $4 serialisiert isch.",
+       "import-error-bad-location": "D Version $2 mit em Inhaltsmodäll $3 lat sech i däm Wiki nid under «$1» la spychere, wil das Inhaltsmodäll uf dere Syte nid understützt isch.",
        "import-options-wrong": "Falschi {{PLURAL:$2|Option|Optione}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Dää Stammsytename isch nit giltig.",
        "import-rootpage-nosubpage": "Im Namensruum „$1“ vu dr Stammsyte sin kei Untersyte erlaubt.",
        "importlogpage": "Import-Logbuech",
        "importlogpagetext": "Adminischtrativer Import vo Sytene mit Versionsgschichte us anderi Wikis.",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|Vérsion|Vérsiona}}",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} vo $2",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versionen}} importiert",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} us $2 importiert",
        "javascripttest": "JavaScript-Tescht",
        "javascripttest-pagetext-noframework": "Die Syte isch reserviert fir JavaSkript-Tescht.",
        "javascripttest-pagetext-unknownframework": "Nit bekannt Framework „$1“.",
+       "javascripttest-pagetext-unknownaction": "Unbekannti Aktion «$1».",
        "javascripttest-pagetext-frameworks": "Bitte eis vu däne Framework uuswehle: $1",
        "javascripttest-pagetext-skins": "Wehl e Benutzeroberflechi uus fir d Durfierig vu dr Tescht:",
        "javascripttest-qunit-intro": "Lueg d [$1 Dokumentation zue Tescht] uf mediawiki.org",
        "tooltip-feed-atom": "Atom-Feed für selli Syte",
        "tooltip-t-contributions": "Lischte vo de Byträg vo däm Benutzer",
        "tooltip-t-emailuser": "Schick däm Benutzer e E-Bost",
+       "tooltip-t-info": "Meh Informationen über die Syte",
        "tooltip-t-upload": "Dateien ufelade",
        "tooltip-t-specialpages": "Lischte vo allne Spezialsyte",
        "tooltip-t-print": "E Version vo dere Syte zum Usdrugge.",
        "pageinfo-length": "Sytelengi (in Byte)",
        "pageinfo-article-id": "Syten-ID",
        "pageinfo-language": "Syteninhaltssproch",
+       "pageinfo-content-model": "Syteninhaltsmodäll",
        "pageinfo-robot-policy": "Indexierig dur Suechmaschine",
        "pageinfo-robot-index": "Erlaubt",
        "pageinfo-robot-noindex": "Nit erlaubt",
        "pageinfo-watchers": "Aazahl vu Beobachter",
+       "pageinfo-visiting-watchers": "Azahl vo dene, wo d Syte beobachten und di letste Bearbeitige hei agluegt",
        "pageinfo-few-watchers": "Weniger wie {{PLURAL:$1|ei|$1}} Beobachter",
+       "pageinfo-few-visiting-watchers": "Es chönnt öpper gä oder ou nid, wo beobachtet und di letste Bearbeitigen am aluegen isch",
        "pageinfo-redirects-name": "Zahl vu dr Wyterleitige zue däre Syte",
        "pageinfo-subpages-name": "Untersyte vu däre Syte",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|Wyterleitig|Wyterleitige}}; $3 {{PLURAL:$3|anderi Syte}})",
        "pageinfo-protect-cascading-yes": "Jo",
        "pageinfo-protect-cascading-from": "Syte mit Kaskadeschutz vu",
        "pageinfo-category-info": "Kategoriinformatione",
+       "pageinfo-category-total": "Gsamti Azahl Mitglider",
        "pageinfo-category-pages": "Aazahl vu dr Syte",
        "pageinfo-category-subcats": "Aazahl vu dr Unterkategorie",
        "pageinfo-category-files": "Aazahl vu dr Dateie",
        "markedaspatrollederrortext": "Du muesch e Syteänderig uswehle.",
        "markedaspatrollederror-noautopatrol": "S isch nit erlaubt, eigeni Bearbeitige as kontrolliert z markiere.",
        "markedaspatrollednotify": "Die Änderig an $1 isch as kontrolliert markiert wore.",
+       "markedaspatrollederrornotify": "D Markierig als kontrolliert isch nid glunge.",
        "patrol-log-page": "Kontroll-Logbuech",
        "patrol-log-header": "Des isch s Kontroll-Logbuech.",
        "log-show-hide-patrol": "Kontroll-Logbuech $1",
+       "log-show-hide-tag": "Markierigs-Logbuech $1",
        "deletedrevision": "alti Version: $1",
        "filedeleteerror-short": "Fähler bi dr Datei-Leschig: $1",
        "filedeleteerror-long": "Bi dr Datei-Leschig sin Fähler feschtgstellt wore:\n\n$1",
        "file-nohires": "Kei höcheri Uflösig verfüegbar.",
        "svg-long-desc": "SVG-Datei, Basisgrößi: $1 × $2 Pixel, Dateigrößi: $3",
        "svg-long-desc-animated": "Animierti SVG-Datei, Basisgreßi $1 × $2 Pixel, Dateigreßi: $3",
+       "svg-long-error": "Ungültigi SVG-Datei: $1",
        "show-big-image": "Originaldatei",
        "show-big-image-preview": "Greßi vu däre Vorschau: $1.",
        "show-big-image-other": "Wyteri {{PLURAL:$2|Ufflösig|Ufflösige}}: $1.",
        "newimages-summary": "Die Spezialsyte zeigt di zletscht uffegladene Dateie aa.",
        "newimages-legend": "Filter",
        "newimages-label": "Dateiname (oder e Teil devu):",
+       "newimages-showbots": "Ufelade vo Bots azeige",
        "noimages": "Kei Dateie gfunde.",
        "ilsubmit": "Suech",
        "bydate": "noch Datum",
        "minutes": "{{PLURAL:$1|1 Minut|$1 Minute}}",
        "hours": "{{PLURAL:$1|1 Stund|$1 Stunde}}",
        "days": "{{PLURAL:$1|1 Tag|$1 Täg}}",
+       "weeks": "{{PLURAL:$1|$1 Wuche}}",
+       "months": "{{PLURAL:$1|$1 Monet|$1 Mönet}}",
+       "years": "{{PLURAL:$1|$1 Jahr}}",
        "ago": "vor $1",
+       "just-now": "grad ersch",
+       "hours-ago": "vor {{PLURAL:$1|eire Stund|$1 Stund}}",
+       "minutes-ago": "vor {{PLURAL:$1|eire Minute|$1 Minute}}",
+       "seconds-ago": "vor {{PLURAL:$1|eire Sekunde|$1 Sekunde}}",
+       "monday-at": "Mäntig um $1",
+       "tuesday-at": "Zystig um $1",
+       "wednesday-at": "Midwuch um $1",
+       "thursday-at": "Donnstig um $1",
+       "friday-at": "Frytig um $1",
+       "saturday-at": "Samstig um $1",
        "sunday-at": "Sunntig am $1",
        "yesterday-at": "Geschtert am $1",
        "bad_image_list": "Format:\n\nNume Zylene, wo mit emne * afö, wärde berücksichtigt.\nNach em * mues zersch e Link zuren Unerwünschte Datei cho.\nWyteri Links uf der glyche Zyle wärden als Usnahme behandlet, wo die Datei trotzdäm darff vorcho.",
        "confirm-watch-top": "Tue die Syten uf dyni Beobachtigslischte.",
        "confirm-unwatch-button": "In Ornig",
        "confirm-unwatch-top": "Nim die Syte us dyre Beobachtungslischte furt.",
+       "quotation-marks": "«$1»",
        "imgmultipageprev": "← vorderi Syte",
        "imgmultipagenext": "nächschti Syte →",
        "imgmultigo": "Gang!",
        "autosumm-replace": "Dr Inhalt vo dr Syte isch ersetzt worde: '$1'",
        "autoredircomment": "E Wyterleitig uf [[$1]] isch erstellt worde",
        "autosumm-new": "Het Syte aagleit mit '$1'",
+       "autosumm-newblank": "Lääri Syten agleit",
        "lag-warn-normal": "Bearbeitige in dr letschte {{PLURAL:$1|Sekund|$1 Sekunde}} wäre in däre Lischt nonig aazeigt.",
        "lag-warn-high": "Wäg ere hoche Datebank-Uslaschtig wäre d Bearbeitige in dr letschte {{PLURAL:$1|Sekund|$1 Sekunde}} in däre Lischt nonig aazeigt.",
        "watchlistedit-normal-title": "D Beobachtigslischt bearbeite",
        "watchlistedit-raw-done": "Dyni Beobachtigslischt isch aktualisiert worde.",
        "watchlistedit-raw-added": "{{PLURAL:$1|ei Ytrag isch|$1 Yträg sin}} dezuedüü worde:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|ei Ytrag isch|$1 Yträg sin}} usegnoo worde:",
+       "watchlistedit-clear-title": "Beobachtigsliste lääre",
+       "watchlistedit-clear-legend": "Beobachtigsliste lääre",
+       "watchlistedit-clear-explain": "Jeden einzel Ytrag wird us der Beobachtigsliste gstriche",
+       "watchlistedit-clear-titles": "Sytenäme:",
+       "watchlistedit-clear-submit": "Beobachtigsliste lääre (Das lat sech nid la rückgängig mache!)",
+       "watchlistedit-clear-done": "Dyni Beobachtigslisten isch gläärt.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|$1 Syten isch|$1 Syte sy}} nümm uf der Beobachtigsliste:",
+       "watchlistedit-too-many": "Es het z vil Syte, für se hie azzeige.",
        "watchlisttools-clear": "Beobachtigsliste lääre",
        "watchlisttools-view": "Beobachtigsliste: Änderige",
        "watchlisttools-edit": "normal bearbeite",
        "watchlisttools-raw": "imene große Textfäld bearbeite",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussion]])",
        "duplicate-defaultsort": "Obacht: Dr Sortierigsschlüssel „$2“ iberschrybt dr vorig brucht Schlüssel „$1“.",
+       "duplicate-displaytitle": "<strong>Obacht:</strong> Der Azeigtitel «$2» überschrybt der früecher Azeigtitel «$1».",
+       "invalid-indicator-name": "<strong>Fähler:</strong> Ds Attribut <code>name</code> vom Sytestatusindikator darf nid läär sy.",
        "version": "Version",
        "version-extensions": "Installierti Erwyterige",
-       "version-skins": "Benutzeroberflechine",
+       "version-skins": "Installierti Benutzeroberflechine",
        "version-specialpages": "Spezialsyte",
        "version-parserhooks": "Parser-Schnittstelle",
        "version-variables": "Variable",
        "version-hook-name": "Schnittstellename",
        "version-hook-subscribedby": "Ufruef vu",
        "version-version": "($1)",
+       "version-no-ext-name": "[kei Name]",
        "version-license": "Lizänz",
        "version-ext-license": "Lizänz",
        "version-ext-colheader-name": "Erwyterig",
+       "version-skin-colheader-name": "Name",
+       "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Lizänz",
        "version-ext-colheader-description": "Bschryybig",
        "version-ext-colheader-credits": "Autore",
        "version-entrypoints": "Yygangspunkt-URL",
        "version-entrypoints-header-entrypoint": "Yygangspunkt",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Installierti Bibliotheke",
+       "version-libraries-library": "Bibliothek",
+       "version-libraries-version": "Version",
+       "version-libraries-license": "Lizänz",
+       "version-libraries-description": "Beschrybig",
+       "version-libraries-authors": "Autor/inne",
        "redirect": "Wyterleitig uf Benutzersyte, Syte, Syteversion oder Datei",
        "redirect-legend": "Wyterleitig uf e Datei oder e Syte",
        "redirect-summary": "Die Spezialsyte leitet wyter uf e Benutzersyte (numerischi Benutzerkännig aagee), Syte (Sytekännig aagee), Syteversion (Versionskännig aagee) oder Datei (Dateiname aagee). Benutzig: [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] oder [[{{#Special:Redirect}}/file/Example.jpg]].",
        "tags-tag": "Markierigsname",
        "tags-display-header": "Benännig uf dr Änderigslischte",
        "tags-description-header": "Vollständigi Bschryybig",
+       "tags-source-header": "Ursprung",
+       "tags-active-header": "Aktiv?",
        "tags-hitcount-header": "Markierti Änderige",
+       "tags-actions-header": "Aktione",
        "tags-active-yes": "Jo",
        "tags-active-no": "Nei",
+       "tags-source-extension": "Von eren Erwyterig definiert",
+       "tags-source-manual": "Manuell vo Benutzer/innen oder Bots ygsetzt",
+       "tags-source-none": "Nümm ’bruucht",
        "tags-edit": "bearbeite",
+       "tags-delete": "lösche",
+       "tags-activate": "aktiviere",
+       "tags-deactivate": "deaktiviere",
        "tags-hitcount": "$1 {{PLURAL:$1|Änderig|Änderige}}",
+       "tags-manage-no-permission": "Du hesch nid ds Rächt, Änderigsmarkierige z verwalte.",
+       "tags-create-heading": "Nöüi Markierig alege",
+       "tags-create-explanation": "Standardmäässig wärde nöüi Markierige zur Verfüegig gstellt, so das se Benutzer/innen und Bots chöü bruuche.",
+       "tags-create-tag-name": "Markierigsname:",
+       "tags-create-reason": "Grund:",
+       "tags-create-submit": "Alege",
+       "tags-create-no-name": "Du muesch e Markierigsnamen agä.",
+       "tags-create-invalid-chars": "Markierigsnäme dörffe kei Kommas (<code>,</code>) oder Schregstriche (<code>/</code>) ha.",
+       "tags-create-invalid-title-chars": "Markierigsnäme dörffe kei Zeiche ha, wo me nid i Sytenäme cha bruuche.",
+       "tags-create-already-exists": "D Markierig «$1» git’s scho.",
+       "tags-create-warnings-above": "Bim Versuech, d Markierig «$1» azlege, het’s di {{PLURAL:$2|folgendi Warnig|folgende Warnige}} ’gä:",
+       "tags-create-warnings-below": "Möchtsch mit em Alege vor Markierig wytermache?",
+       "tags-delete-title": "Markierig lösche",
+       "tags-delete-explanation-initial": "Du bisch drann, d Markierig «$1» us der Datebank z lösche.",
+       "tags-delete-explanation-in-use": "Si wird vo {{PLURAL:$2|eire Version oder eim Logbuechytrag|allne $2 Versionen oder Logbuechyträg}} furtgnoh, wo momentan dermit markiert sy.",
+       "tags-delete-explanation-warning": "Die Aktion isch <strong>für immer</strong> und <strong>lat sech nid la rückgängig mache</strong>, nid emal vo Datebank-Administrator/inne. Bis dir ganz sicher, das es die Markierig isch, wo du wosch lösche.",
+       "tags-delete-explanation-active": "<strong>D Markierig «$1» isch immer no aktiv und blybt ou zuekünftig im Ysatz.</strong> We du das wosch verhindere, de gang die Markierig dört ga deaktiviere, wo si ygsetzt isch.",
+       "tags-delete-reason": "Grund:",
+       "tags-delete-submit": "Markierig für immer lösche",
+       "tags-delete-not-allowed": "Von eren Erwyterig definierti Markierige lö sech nid la lösche, ussert d Erwyterig erloubt’s usdrücklech.",
+       "tags-delete-not-found": "D Markierig «$1» git’s nid.",
+       "tags-delete-too-many-uses": "D Markierig «$1» isch by meh als {{PLURAL:$2|eire Version|$2 Versionen}} ygsetzt. Drum lat si sech nid la lösche.",
+       "tags-delete-warnings-after-delete": "D Markierig «$1» isch erfolgrych glöscht, aber es het di {{PLURAL:$2|folgendi Warnig|folgende Warnige}} ’gä:",
+       "tags-activate-title": "Markierig aktiviere",
+       "tags-activate-question": "Du bisch drann, d Markierig «$1» z aktiviere.",
+       "tags-activate-reason": "Grund:",
+       "tags-activate-not-allowed": "D Markierig «$1» lat sech nid la aktiviere.",
+       "tags-activate-not-found": "D Markierig «$1» git’s nid.",
+       "tags-activate-submit": "Aktiviere",
+       "tags-deactivate-title": "Markierig deaktiviere",
+       "tags-deactivate-question": "Du bisch drann, d Markierig «$1» z deaktiviere.",
+       "tags-deactivate-reason": "Grund:",
+       "tags-deactivate-not-allowed": "D Markierig «$1» lat sech nid la deaktiviere.",
+       "tags-deactivate-submit": "Deaktiviere",
+       "tags-apply-no-permission": "Du hesch nid ds Rächt, Änderige mit Änderigsmarkierige z mache.",
+       "tags-apply-not-allowed-one": "D Markierig «$1» darf me nid vo Hand ysetze.",
+       "tags-apply-not-allowed-multi": "Di {{PLURAL:$2|folgendi Markierig|folgende Markierige}} darf me nid vo Hand ysetze: $1",
+       "tags-update-no-permission": "Du hesch nid ds Rächt, Änderigsmarkierige by einzelne Versionen oder Logbuechyträg yzsetzen oder furtznäh.",
+       "tags-update-add-not-allowed-one": "D Markierig «$1» darf me nid vo Hand ysetze.",
+       "tags-update-add-not-allowed-multi": "Di {{PLURAL:$2|folgendi Markierig|folgende Markierige}} darf me nid vo Hand derzuetue: $1",
+       "tags-update-remove-not-allowed-one": "D Markierig «$1» darf me nid furtnäh.",
+       "tags-update-remove-not-allowed-multi": "Di {{PLURAL:$2|folgendi Markierig|folgende Markierige}} darf me nid vo Hand furtnäh: $1",
+       "tags-edit-title": "Markierige bearbeite",
+       "tags-edit-manage-link": "Markierige verwalte",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Usgwählti Version|Usgwählti Versione}} vo [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Usgwählte Logbuechytrag|Usgwählti Logbuechyträg}}:",
+       "tags-edit-revision-legend": "Markierige by {{PLURAL:$1|dere Versione|allne $1 Versione}} derzuetue oder furtnäh.",
+       "tags-edit-logentry-legend": "Markierige by {{PLURAL:$1|däm Logbuechytrag|allne $1 Logbuechyträg}} derzuetue oder furtnäh.",
+       "tags-edit-existing-tags": "Ygsetzti Markierige:",
+       "tags-edit-existing-tags-none": "''Keini''",
+       "tags-edit-new-tags": "Nöüi Markierige:",
+       "tags-edit-add": "Die Markierige derzuetue:",
+       "tags-edit-remove": "Die Markierige furtnäh:",
+       "tags-edit-remove-all-tags": "(alli Markierige furtnäh)",
+       "tags-edit-chosen-placeholder": "Markierigen ussueche",
+       "tags-edit-chosen-no-results": "Es git ke Markierige, wo passe",
+       "tags-edit-reason": "Grund:",
+       "tags-edit-revision-submit": "Änderige by {{PLURAL:$1|dere Version|$1 Versionen}} usfüere",
+       "tags-edit-logentry-submit": "Änderige by {{PLURAL:$1|däm Logbuechytrag|$1 Logbuechyträg}} usfüere",
+       "tags-edit-success": "D Änderige sy erfolgrych usgfüert.",
+       "tags-edit-failure": "D Änderige hei sech nid la usfüere: $1",
+       "tags-edit-nooldid-title": "Ungültigi Zilversion",
+       "tags-edit-nooldid-text": "Entweder hesch du kei Zilversion a’gä, für die Funktion dermit uszfüere, oder es git di a’gänigi Zilversion nid.",
+       "tags-edit-none-selected": "Bitte suech mindistens ei Markierig uus zum Derzuetue oder Furtnäh.",
        "comparepages": "Syte verglyyche",
        "compare-page1": "Syte 1",
        "compare-page2": "Syte 2",
        "compare-revision-not-exists": "Die Version, wu Du aagee hesch, git s nit.",
        "dberr-problems": "Excusez! Die Seite het im Momänt tächnischi Schwirigkeite.",
        "dberr-again": "Wart e paar Minute un lad derno nej.",
-       "dberr-info": "(Cha kei Verbindig zum Datebank-Server härstelle: $1)",
-       "dberr-info-hidden": "(Cha kei Verbindig zum Datebank-Server härstelle)",
+       "dberr-info": "(Kei Zuegriff uf d Datebank: $1)",
+       "dberr-info-hidden": "(Kei Zuegriff uf d Datebank)",
        "dberr-usegoogle": "Du chenntsch in dr Zwischezyt mit Google sueche.",
        "dberr-outofdate": "Obacht: Dr Suechindex vu unsere Syte chennt veraltet syy.",
        "dberr-cachederror": "Des isch e Kopii vum Cache vu dr Syte, wu Du aagforderet hesch, un chennt veraltet syy.",
        "htmlform-no": "Nei",
        "htmlform-yes": "Jo",
        "htmlform-chosen-placeholder": "Wehl en Option",
+       "htmlform-cloner-create": "Wyteri derzuetue",
+       "htmlform-cloner-delete": "Furtnäh",
+       "htmlform-cloner-required": "Es bruucht mindistens ei Wärt.",
+       "htmlform-title-badnamespace": "[[:$1]] isch nid im Namensruum «{{ns:$2}}».",
+       "htmlform-title-not-creatable": "«$1» isch kei Sytename, wo sech lat la alege",
+       "htmlform-title-not-exists": "[[:$1]] git’s nid.",
+       "htmlform-user-not-exists": "<strong>$1</strong> git’s nid.",
+       "htmlform-user-not-valid": "<strong>$1</strong> isch ke gültige Name.",
        "sqlite-has-fts": "$1 mit Unterstitzig vu dr Volltextsuechi",
        "sqlite-no-fts": "$1 ohni Unterstitzig vu dr Volltextsuechi",
-       "logentry-delete-delete": "{{GENDER:$2|Dr|D|Dr}} $1 het d Syte $3 glöscht",
-       "logentry-delete-restore": "$1 het d Syte $3 wiiderhergstellt",
-       "logentry-delete-event": "$1 het die Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} uff $3: $4 gänderet",
-       "logentry-delete-revision": "$1 het die Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} uff $3: $4 gänderet",
-       "logentry-delete-event-legacy": "$1 het d Sichtbarkeit vo Logbuechyyträg uff $3 gänderet",
-       "logentry-delete-revision-legacy": "$1 het d Sichtbarkeit vo Versione uff $3 gänderet",
-       "logentry-suppress-delete": "$1 het d Syte $3 unterdrückt",
-       "logentry-suppress-event": "$1 het diskret d Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} uff $3: $4 gänderet",
-       "logentry-suppress-revision": "$1 het diskret d Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} uff $3: $4 gänderet",
-       "logentry-suppress-event-legacy": "$1 het d Sichtbarkeit vo Logbuechyyträg diskret uff $3 gänderet",
-       "logentry-suppress-revision-legacy": "$1 het diskret d Sichtbarkeit vo Versione uff $3 gänderet",
+       "logentry-delete-delete": "{{GENDER:$2|Dr|D|}} $1 het d Syte $3 glöscht",
+       "logentry-delete-restore": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 wider härgstellt",
+       "logentry-delete-event": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} gänderet uff $3: $4",
+       "logentry-delete-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} gänderet uff $3: $4",
+       "logentry-delete-event-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit vo Logbuechyyträg uff $3 gänderet",
+       "logentry-delete-revision-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit vo Versione uff $3 gänderet",
+       "logentry-suppress-delete": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 unterdrückt",
+       "logentry-suppress-event": "{{GENDER:$2|Der $1|D $1|$1}} het diskret d Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} gänderet uff $3: $4",
+       "logentry-suppress-revision": "{{GENDER:$2|Der $1|D $1|$1}} het diskret d Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} gänderet uff $3: $4",
+       "logentry-suppress-event-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit vo Logbuechyyträg diskret uff $3 gänderet",
+       "logentry-suppress-revision-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het diskret d Sichtbarkeit vo Versione uff $3 gänderet",
        "revdelete-content-hid": "Inhalt versteckt",
        "revdelete-summary-hid": "Bearbeitigszämmefassig versteckt",
        "revdelete-uname-hid": "Benutzername versteckt",
        "revdelete-uname-unhid": "Benutzername freigee",
        "revdelete-restricted": "Yyschränkige gälte au fir Ammanne",
        "revdelete-unrestricted": "Yyschränkige fir Ammanne ufghobe",
+       "logentry-block-block": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} bis $5 gsperrt $6",
+       "logentry-block-unblock": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} entsperrt",
+       "logentry-block-reblock": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} bis $5 gsperrt $6",
+       "logentry-suppress-block": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} bis $5 gsperrt $6",
+       "logentry-suppress-reblock": "{{GENDER:$2|Der $1|D $1|$1}} het d Sperrystellige {{GENDER:$4|füre $3|für d $3|für $3}} bis $5 g’änderet $6",
+       "logentry-import-upload": "{{GENDER:$2|Der $1|D $1|$1}} het $3 importiert per Datei-Ufelade",
+       "logentry-import-interwiki": "{{GENDER:$2|Der $1|D $1|$1}} het $3 vomenen andere Wiki importiert",
+       "logentry-merge-merge": "{{GENDER:$2|Der $1|D $1|$1}} het $3 i $4 zämegfüert (Versione bis $5)",
        "logentry-move-move": "{{GENDER:$2|Dr|D}} $1 het d Seite $3 uf $4 verschobe",
-       "logentry-move-move-noredirect": "$1 het d Syte $3 nooch $4 verschobe ohni e Wyterleitig aazlege",
-       "logentry-move-move_redir": "$1 het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe",
-       "logentry-move-move_redir-noredirect": "$1 het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe, ohni sälber eini aazlege",
-       "logentry-patrol-patrol": "$1 het Version $4 vo Syte $3 als kontrolliert markiert",
-       "logentry-patrol-patrol-auto": "$1 het Version $4 vo Syte $3 automatisch als kontrolliert markiert",
-       "logentry-newusers-newusers": "Benutzerkonto $1 isch aagleit wore.",
+       "logentry-move-move-noredirect": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe ohni e Wyterleitig aazlege",
+       "logentry-move-move_redir": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe",
+       "logentry-move-move_redir-noredirect": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe, ohni sälber eini aazlege",
+       "logentry-patrol-patrol": "{{GENDER:$2|Der $1|D $1|$1}} het Version $4 vo Syte $3 als kontrolliert markiert",
+       "logentry-patrol-patrol-auto": "{{GENDER:$2|Der $1|D $1|$1}} het Version $4 vor Syte $3 automatisch als kontrolliert markiert",
+       "logentry-newusers-newusers": "{{GENDER:$2|Benutzerkonto}} $1 isch aagleit wore.",
        "logentry-newusers-create": "Benutzerkonto $1 {{GENDER:$2|isch aagleit wore}}",
-       "logentry-newusers-create2": "Benutzerkonto $3 isch aalgeit wore vu $1",
-       "logentry-newusers-autocreate": "S Benutzerchonto $1 isch automatisch erstellt worde",
-       "logentry-rights-rights": "$1 het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet",
-       "logentry-rights-rights-legacy": "$1 het d Gruppezuegherigkeit fir $3 gänderet",
-       "logentry-rights-autopromote": "$1 isch automatisch vu $4 zue $5 zuegordnet wore",
+       "logentry-newusers-create2": "{{GENDER:$2|Der $1|D $1|$1}} het ds Benutzerkonto $3 agleit",
+       "logentry-newusers-byemail": "{{GENDER:$2|Der $1|D $1|$1}} het ds Benutzerkonto $3 agleit und ds Passwort isch per E-Mail verschickt worde",
+       "logentry-newusers-autocreate": "Ds {{GENDER:$2|Benutzerkonto}} $1 isch automatisch agleit worde",
+       "logentry-protect-move_prot": "{{GENDER:$2|Der $1|D $1|$1}} het d Schutzystellige vo $4 uf $3 verschobe",
+       "logentry-rights-rights": "{{GENDER:$2|Der $1|D $1|$1}} het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet",
+       "logentry-rights-rights-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Gruppezuegherigkeit fir $3 gänderet",
+       "logentry-rights-autopromote": "{{GENDER:$2|Der $1|D $1|$1}} isch automatisch vo $4 uf $5 beförderet worde",
        "logentry-upload-upload": "{{GENDER:$2|Dr|D}} $1 het $3 uffeglade",
+       "logentry-upload-overwrite": "{{GENDER:$2|Der $1|D $1|$1}} het e nöüi Version vo $3 ufeglade",
+       "logentry-upload-revert": "{{GENDER:$2|Der $1|D $1|$1}} het $3 ufeglade",
+       "log-name-managetags": "Markierigsverwaltigs-Logbuech",
+       "log-description-managetags": "Uf dere Syte het’s Verwaltigsufgabe für [[Special:Tags|Markierige]]. Ds Logbuech zeigt numen Aktione, wo manuell von ere/emen Administrator/in sy usgfüert worde. D Wiki-Software cha Markierigen alegen oder lösche, ohni das es i däm Logbuech verzeichnet wird.",
+       "logentry-managetags-create": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig «$4» agleit",
+       "logentry-managetags-delete": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig «$4» glöscht (us {{PLURAL:$5|eire Version oder eim Logbuechytrag|$5 Versionen oder Logbuechyträg}} furtgnoh)",
+       "logentry-managetags-activate": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig $4 zum Gebruuch vo Benutzer/innen oder Bots aktiviert",
+       "logentry-managetags-deactivate": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig $4 zum Gebruuch vo Benutzer/innen oder Bots deaktiviert",
+       "log-name-tag": "Markierigs-Logbuech",
+       "log-description-tag": "Die Syte zeigt [[Special:Tags|Markierige]], wo by einzelne Versionen oder Logbuechyträg äxtra sy derzueta oder furtgnoh worde. Markierige als Teil von ere Bearbeitig, Löschig oder ähnlechen Aktion sy nid ufgfüert.",
+       "logentry-tag-update-add-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$7|Markierig|Markierige}} $6 zur Version $4 vor Syte $3 derzueta.",
+       "logentry-tag-update-add-logentry": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$7|Markierig|Markierige}} $6 zum Logbuechytrag $5 vor Syte $3 derzueta.",
+       "logentry-tag-update-remove-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$9|Markierig|Markierige}} $8 vor Version $4 vor Syte $3 furtgnoh.",
+       "logentry-tag-update-remove-logentry": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$9|Markierig|Markierige}} $8 vom Logbuechytrag $5 vor Syte $3 furtgnoh.",
+       "logentry-tag-update-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierige bir Version $4 vor Syte $3 aktualisiert ({{PLURAL:$7|eini|$6}} derzueta, {{PLURAL:$9|eini|$8}} furtgnoh).",
+       "logentry-tag-update-logentry": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierige bim Logbuechytrag $5 vor Syte $3 aktualisiert ({{PLURAL:$7|eini|$6}} derzueta, {{PLURAL:$9|eini|$8}} furtgnoh).",
        "rightsnone": "(keini)",
        "revdelete-summary": "Zämmefassig",
        "feedback-adding": "Ruggmäldig wird zur Syte dezuegfiegt …",
+       "feedback-back": "Zrügg",
        "feedback-bugcheck": "Schen! Bitte iberprief no, eb s sich doderby nit um e scho [$1 bekannte Fähler] handlet.",
        "feedback-bugnew": "Ich haa s iberprieft. Dr nej Fähler mälde.",
        "feedback-bugornote": "Wän Du detailliert e tächnisch Probläm witt bschryybe, no mäld bitte [$1 ne Fähler].\nSunscht chasch au s eifach Formular unte nutze. Dyy Kommentar wird, zämme mit Dyym Benutzername un dr Version vu Dyym Webbrowser un em Betribssyschtem, uf dr Syte „[$3 $2]“ zuegfiegt.",
        "feedback-cancel": "Abbräche",
        "feedback-close": "Isch gmacht",
+       "feedback-external-bug-report-button": "E technischi Ufgab yreiche",
+       "feedback-dialog-title": "Rückmäldig gä",
+       "feedback-dialog-intro": "Du chasch ds eifache Formular unde bruuche, für’ne Rückmäldig z gä. Dy Kommentar chunt zäme mit dym Benutzernamen uf d Syte «$1».",
+       "feedback-error-title": "Fähler",
        "feedback-error1": "Fäälermäldig: Unbekannts Ergebniss vo de API",
        "feedback-error2": "Fääler: Bearbeitig fehlgschlo",
        "feedback-error3": "Fäälermäldig: Kei Antwort vo de API",
+       "feedback-error4": "Fähler: Der Fähler het sech nid under em a’gänige Titel la spychere",
        "feedback-message": "Noochricht:",
        "feedback-subject": "Beträff:",
        "feedback-submit": "Ruggmäldig abschigge",
+       "feedback-terms": "I bi mer bewusst, das my User Agent exakti Versionen über my Browser und mys Betribssystem enthaltet und zäme mit der Rückmäldig veröffentlecht wird.",
+       "feedback-termsofuse": "I stimme zue, Rückmäldig z liferen i Überystimmig mit de Nutzigsbedingige.",
        "feedback-thanks": "Dankschen. Dyy Ruckmäldig isch uf dr Syte „[$2 $1]“ gspycheret wore.",
+       "feedback-thanks-title": "Merci!",
+       "feedback-useragent": "User Agent:",
        "searchsuggest-search": "Suechi",
        "searchsuggest-containing": "din het s …",
        "api-error-badaccess-groups": "Du derfsch keini Dateie in des Wiki uffelade.",
        "api-error-ok-but-empty": "Intärne Fähler: Dr Server reagiert nit.",
        "api-error-overwrite": "S Iberschryybe vun ere Datei, wu s scho git, isch nit erlaubt.",
        "api-error-stashfailed": "Intärne Fähler: Dr Server het kei temporäri Datei chenne spychere.",
+       "api-error-publishfailed": "Interne Fähler: Der Server het di temporäri Datei nid chönne veröffentleche.",
+       "api-error-stasherror": "Bim Ufelade vor Datei het’s e Fähler ’gä.",
+       "api-error-stashedfilenotfound": "Di gspychereti Datei het sech nümm la finde bim Versuech, se vom Spycher ufezlade.",
+       "api-error-stashpathinvalid": "Der Pfad isch ungültig, wo di gspychereti Datei hätt sölle sy.",
+       "api-error-stashfilestorage": "Bim Spychere vor Datei het’s e Fähler ’gä.",
+       "api-error-stashzerolength": "Der Server het d Datei nid chönne spychere, wil si e Lengi vo Null het.",
+       "api-error-stashnotloggedin": "Du muesch di ylogge, für Dateie zum Ufelade chönne z spychere.",
+       "api-error-stashwrongowner": "D Datei ghört nid dir, wo du probiert hesch im Spycher druf zuezgryffe.",
+       "api-error-stashnosuchfilekey": "Der Dateischlüssel git’s nid, wo du probiert hesch im Spycher druf zuezgryffe.",
        "api-error-timeout": "Dr Server het kei antwort gee in dr erwartete Zyt.",
        "api-error-unclassified": "S het e nit bekannte Fähler gee.",
        "api-error-unknown-code": "Nit bekannte Fähler: „$1“",
        "duration-decades": "$1 {{PLURAL:$1|Johrzehnt|Johrzeht}}",
        "duration-centuries": "$1 {{PLURAL:$1|Johrhundert|Johrhundert}}",
        "duration-millennia": "$1 {{PLURAL:$1|Jahrtöusert|Jahrtöusert}}",
+       "rotate-comment": "Bild um $1 {{PLURAL:$1|Grad}} im Uhrzeigersinn ’drähjt.",
+       "limitreport-title": "Parser-Profilingdate:",
+       "limitreport-cputime": "Beaspruchti CPU-Zyt",
+       "limitreport-cputime-value": "{{PLURAL:$1|Ei|$1}} Sekunde",
+       "limitreport-walltime": "Beaspruchti Zyt",
+       "limitreport-walltime-value": "{{PLURAL:$1|Ei|$1}} Sekunde",
+       "limitreport-ppvisitednodes": "Azahl vom Präprozässer bsuechti Chnote",
+       "limitreport-ppgeneratednodes": "Azahl vom Präprozässer generierti Chnote",
+       "limitreport-postexpandincludesize": "Ybindigsgröössi nach em Expandiere",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|Byte}}",
+       "limitreport-templateargumentsize": "Vorlagenargumäntgröössi",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|Byte}}",
+       "limitreport-expansiondepth": "Grösti Expansionstieffi",
+       "limitreport-expensivefunctioncount": "Azahl ufwändigi Parserfunktione",
        "expandtemplates": "Vorlage expandiere",
-       "expand_templates_intro": "In däre Spezialsyte cha Täxt yygee wäre und alli Vorlage in ere wäre rekursiv expandiert. Au Parserfunkione wie <nowiki>{{</nowiki>#language:…}} un Variable wie <nowiki>{{</nowiki>CURRENTDAY}} wäre usgwärtet - faktisch alles was in dopplete gschweifte Chlammere din isch. Des gschiht dur dr Ufruef vu dr jewyylige Parser-Phase in MediaWiki.",
+       "expand_templates_intro": "Die Spezialsyte nimt Text und expandiert alli Vorlage rekursiv, wo drinn stöh.\nSi expandiert ou Parserfunkione wi <code><nowiki>{{</nowiki>#language:…}}</code> und Variable wi <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nEigetlech expandiert si praktisch alles, wo i dopplete gschweiffte Chlammere steit.",
        "expand_templates_title": "Kontexttitel, fir {{FULLPAGENAME}} etc.:",
        "expand_templates_input": "Yygabfäld:",
        "expand_templates_output": "Ergebnis",
        "expand_templates_xml_output": "XML-Usgab",
+       "expand_templates_html_output": "Usgab i rohem HTML",
        "expand_templates_ok": "Uusfiere",
        "expand_templates_remove_comments": "Kommentar useneh",
        "expand_templates_remove_nowiki": "<nowiki>-Befähl im Ergebnis unterdrucke",
        "expand_templates_generate_xml": "Zeig XML-Parser-Baum",
+       "expand_templates_generate_rawhtml": "Rohs HTML azeige",
        "expand_templates_preview": "Vorschou",
+       "expand_templates_preview_fail_html": "<em>Wil uf {{SITENAME}} rohs HTML aktiviert isch und wil Sitzigsdate sy verlore ’gange, isch d Vorschou zum Schutz vor JavaScript-Agriffe versteckt.</em>\n\n<strong>We das e legitime Versuech für’ne Vorschou isch, de versuech’s bitte nomal.</strong>\nWe’s immer no nid geit, probier di [[Special:UserLogout|abzmälden]] und wider azmälde.",
+       "expand_templates_preview_fail_html_anon": "<em>Wil uf {{SITENAME}} rohs HTML aktiviert isch und wil Sitzigsdate sy verlore ’gange, isch d Vorschou zum Schutz vor JavaScript-Agriffe versteckt.</em>\n\n<strong>We das e legitime Versuech für’ne Vorschou isch, de [[Special:UserLogin|mäld di bitte a]] und versuech’s nomal.</strong>",
+       "pagelanguage": "Uswahl vor Sytesprach",
+       "pagelang-name": "Syte",
+       "pagelang-language": "Sprach",
+       "pagelang-use-default": "Standardsprach bruuche",
+       "pagelang-select-lang": "Sprach ussueche",
+       "right-pagelang": "Sytesprach ändere",
+       "action-pagelang": "d Sytesprach z ändere",
+       "log-name-pagelang": "Sprachänderigs-Logbuech",
+       "log-description-pagelang": "Das isch es Logbuech für Änderige vo Sytesprache.",
+       "logentry-pagelang-pagelang": "{{GENDER:$2|Der $1|D $1|$1}} het d Sytesprach vo $3 vo $4 uf $5 g’änderet.",
+       "default-skin-not-found": "He nu so de! Di vorygstellti Benutzeroberflächi für dys Wiki – definiert under <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> – steit nid zur Verfüegig.\n\nI dyren Installation het’s schynt’s di {{PLURAL:$4|folgendi Benutzeroberflächi|folgende Benutzeroberflächine}}:\n\n$2\n\nLueg under [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] für Information drüber, wie d’se chasch {{PLURAL:$4|aktiviere|aktivieren und eini dervo chasch vorystelle}}.\n\n; Falls du MediaWiki grad installiert hesch:\n: Müglecherwys hesch es ab git installiert oder mit eren andere Methode diräkt ab em Quellcode. De isch es z erwarte. Probier [https://www.mediawiki.org/wiki/Category:All_skins Benutzeroberflächine us em Verzeichnis vo mediawiki.org] z installiere. Es git mehreri Müglechkeite derzue:\n:* Der [https://www.mediawiki.org/wiki/Download Installierer als tar.gz-Datei] abelade. Är het mehreri Benutzeroberflächinen und Erwyterige derby. Du chasch ds Benutzeroberflächine-Verzeichnis <code>skins/</code> druus use kopiere.\n:* tar.gz-Dateie für einzelni Benutzeroberflächine vo [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] abelade.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git zum Abelade vo MediaWiki-Benutzeroberflächine bruuche].\n: We du e MediaWiki-Entwickler/in bisch, söt’s derby nid zu Konflikte mit dym git repository cho.\n\n; Falls du MediaWiki grad ufe nöüst Stand hesch ’bracht:\n: MediaWiki ab 1.24 aktiviert di installierte Benutzeroberflächine nümm automatisch (lueg [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Für di {{PLURAL:$5|installierti Benutzeroberflächi|installierte Benutzeroberflächine}} z aktiviere, chasch di {{PLURAL:$5|folgendi Zyle|folgende Zyle}} i d Datei <code>LocalSettings.php</code> kopiere:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du grad d Datei <code>LocalSettings.php</code> hesch g’änderet:\n: Lueg genau nache, öb’s vilech Tippfähler het i de Näme vo de Benutzeroberflächine.",
+       "default-skin-not-found-no-skins": "He nu so de! Di vorygstellti Benutzeroberflächi für dys Wiki – definiert under <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> – steit nid zur Verfüegig.\n\nDu hesch kener Benutzeroberflächinen installiert.\n\n; Falls du MediaWiki grad installiert oder ufe nöüst Stand ’bracht hesch:\n: Müglecherwys hesch es ab git installiert oder mit eren andere Methode diräkt ab em Quellcode. De isch es z erwarte. MediaWiki ab 1.24 het kener Benutzeroberflächinen im Houpt-Repository derby. Probier [https://www.mediawiki.org/wiki/Category:All_skins Benutzeroberflächine us em Verzeichnis vo mediawiki.org] z installiere. Es git mehreri Müglechkeite derzue:\n:* Der [https://www.mediawiki.org/wiki/Download Installierer als tar.gz-Datei] abelade. Är het mehreri Benutzeroberflächinen und Erwyterige derby. Du chasch ds Benutzeroberflächine-Verzeichnis <code>skins/</code> druus use kopiere.\n:* tar.gz-Dateie für einzelni Benutzeroberflächine vo [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] abelade.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git zum Abelade vo MediaWiki-Benutzeroberflächine bruuche].\n: We du e MediaWiki-Entwickler/in bisch, söt’s derby nid zu Konflikte mit dym Git-Repository cho. Lueg under [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] für Information drüber, wie du Benutzeroberflächi chasch aktivieren und vorystelle.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiviert)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''deaktiviert''')",
+       "mediastatistics": "Statistike zu Dateitype",
+       "mediastatistics-summary": "Statistiken über di ufegladnige Dateitype. Berücksichtiget isch jewyle nume di nöüsti Version von ere Datei. Alti oder glöschti Versione sy nid berücksichtiget.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|Eis|$1}} Byte ($2; $3 %)",
+       "mediastatistics-table-mimetype": "MIME-Typ",
+       "mediastatistics-table-extensions": "Müglechi Erwyterige",
+       "mediastatistics-table-count": "Azahl Dateie",
+       "mediastatistics-table-totalbytes": "Gsamtgröössi",
+       "mediastatistics-header-unknown": "Unbekannt",
+       "mediastatistics-header-bitmap": "Bitmap-Bilder",
+       "mediastatistics-header-drawing": "Zeichnige (Vektorbilder)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-multimedia": "Rich Media",
+       "mediastatistics-header-office": "Office",
+       "mediastatistics-header-text": "Text",
+       "mediastatistics-header-executable": "Usfüerbari Dateie",
+       "mediastatistics-header-archive": "Komprimierti Dateie",
+       "json-warn-trailing-comma": "Us em JSON {{PLURAL:$1|isch eis aghänkts Komma|sy $1 aghänkti Komma}} furtgnoh worde.",
+       "json-error-unknown": "Es het es Problem mit em JSON ’gä. Fähler: $1",
+       "json-error-depth": "Di maximali Tieffi zum Bygelen isch überschritte",
+       "json-error-state-mismatch": "Ungültigs oder fählerhafts JSON",
+       "json-error-ctrl-char": "Stüürzeichefähler, müglecherwys falschi Kodierig",
+       "json-error-syntax": "Syntax-Fähler",
+       "json-error-utf8": "Ungültigi UTF-8-Zeiche, müglecherwys falschi Kodierig",
+       "json-error-recursion": "Eini oder meh rekursivi Referänzen im Wärt sy z kodiere",
+       "json-error-inf-or-nan": "Eine oder meh NAN- oder INF-Wärte sy z kodiere",
+       "json-error-unsupported-type": "Es isch e Wärt für’ne Typ a’gä worde, wo sech nid lat la kodiere",
+       "headline-anchor-title": "Link zu däm Abschnitt",
        "special-characters-group-latin": "Latynisch",
        "special-characters-group-latinextended": "Latin Extended",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "Halbgviertstrich",
+       "special-characters-title-emdash": "Gviertstrich",
+       "special-characters-title-minus": "Minus-Zeiche",
+       "mw-widgets-dateinput-no-date": "Keis Datum usgsuecht",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
-       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
+       "mw-widgets-titleinput-description-new-page": "d Syte git’s no nid",
+       "mw-widgets-titleinput-description-redirect": "Wyterleitig uf $1"
 }
index f8680a3..3dae27d 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} પર ખાતાની માહિતી",
        "passwordreset-emailtext-ip": "કોઈકે (કદાચ તમોએ , $1 IP એડ્રેસ થી) તમારી વેબસાઈટ {{SITENAME}}  ($4) નો પાસવર્ડ રિસેટ કરવાની રજૂઆત કરી છે. આ ઈમેઈલ એડ્રેસ સાથે {{PLURAL:$3|નું ખાતું|ના ખાતા}} જોડાયેલા છે.\n.\n.\n\n$2\n\n{{PLURAL:$3|આ કામચલાઉ પાસવર્ડ|આ બધા કામચલાઉ પાસવર્ડ}} {{PLURAL:$5|એક દિવસ|$5 દિવસો}} માં નષ્ટ થઇ જશે. તમારે અત્યારે જ ખાતું ખોલીને નવો પાસવર્ડ સેટ કરી લેવો જોઈએ .જો કોઈ બીજા એ આ રજૂઆત કરી હોય, અથવા જો તમને પોતાનો અસલ પાસવર્ડ યાદ હોય, અને તેને બદલવા નથી માગતા, તો આ સંદેશાને જતો કરીને પોતાના અસલ પાસવર્ડ ને વાપરી શકો છો.",
        "passwordreset-emailtext-user": "વેબસાઈટ  {{SITENAME}} ના વપરાશકર્તા $1 એ તમારા {{SITENAME}} ($4) નો પાસવર્ડ રિસેટ કરવાની રજૂઆત કરી છે. આ ઈમેઈલ એડ્રેસ સાથે {{PLURAL:$3|નું ખાતું|ના ખાતા}} જોડાયેલ છે.\n\n$2\n\n{{PLURAL:$3|આ કામચલાઉ પાસવર્ડ|આ બધા કામચલાઉ પાસવર્ડ}} {{PLURAL:$5|એક દિવસ|$5 દિવસ}} માં નષ્ટ થઇ જશે. તમારે અત્યારે જ ખાતું ખોલીને નવો પાસવર્ડ સેટ કરી લેવો જોઈએ .જો કોઈ બીજા એ આ રજૂઆત કરી હોય, અથવા જો તમને પોતાનો અસલ પાસવર્ડ યાદ હોય, અને તેને બદલવા નથી માગતા, તો આ સંદેશાને જતો કરીને પોતાના અસલ પાસવર્ડ ને વાપરી શકો છો..",
-       "passwordreset-emailelement": "વપરાશકર્તા નામ: $1\nકામચલાઉ પાસવર્ડ: $2",
+       "passwordreset-emailelement": "વપરાશકર્તા નામ: \n$1\n\nકામચલાઉ પાસવર્ડ: \n$2",
        "passwordreset-emailsent": "પાસવર્ડ બદલવાનો ઇમેલ મોકલવામાં આવ્યો છે.",
        "passwordreset-emailsent-capture": "પાસવર્ડ બદલવાનો ઇમેલ મોકલવામાં આવ્યો છે, જે નીચે પ્રમાણે છે.",
        "passwordreset-emailerror-capture": "પાસવર્ડ ફરી ગોઠવવા માટેનો ઇમેલ બનાવવામાં આવ્યો છે, જે નીચે પ્રમાણે છે, પરંતુ તે {{GENDER:$2|સભ્ય}}ને મોકલવામાં નિષ્ફળ થયો છે: $1",
        "movepagebtn": "પાનું ખસેડો",
        "pagemovedsub": "પાનું સફળતા પૂર્વક ખસેડવામાં આવ્યું છે",
        "movepage-moved": "'''\"$1\" નું નામ બદલીને \"$2\" કરવામાં આવ્યું છે'''",
-       "movepage-moved-redirect": "દિશાનિર્દેશના રચાયું",
+       "movepage-moved-redirect": "દિશાનિર્દેશ રચાયું",
        "movepage-moved-noredirect": "દિશાનિર્દેશન ટાળવામાં આવ્યું છે",
        "articleexists": "આ નામનું પાનું અસ્તિત્વમાં છે, અથવાતો તમે પસંદ કરેલું નામ અસ્વિકાર્ય છો.\nકૃપા કરી અન્ય નામ પસંદ કરો.",
        "cantmove-titleprotected": "આ સ્થાને તમે પાનું નહીં હટાવી શકો કેમ કે નવું શીર્ષક રચના કરવા પહેલેથી આરક્ષીત છે",
        "tooltip-ca-nstab-main": "સૂચિ વાળું પાનુ જુઓ",
        "tooltip-ca-nstab-user": "સભ્યનું પાનું જુઓ",
        "tooltip-ca-nstab-media": "મિડિયાનું પાનું જુઓ",
-       "tooltip-ca-nstab-special": "àª\86 àª\96ાસ àªªàª¾àª¨à«\81àª\82 àª\9bà«\87, àª¤àª®à«\87 àª¤à«\87માàª\82 àª«à«\87રફાર àª\95રà«\80 àª¶àª\95શà«\8b નહી",
+       "tooltip-ca-nstab-special": "àª\86 àª\96ાસ àªªàª¾àª¨à«\81àª\82 àª\9bà«\87, àª\85નà«\87 àª¤à«\87માàª\82 àª«à«\87રફાર àª\95રà«\80 àª¶àª\95ાશà«\87 નહી",
        "tooltip-ca-nstab-project": "પરિયોજનાનું પાનું જુવો",
        "tooltip-ca-nstab-image": "ફાઇલ વિષેનું પાનું જુઓ",
        "tooltip-ca-nstab-mediawiki": "તંત્ર સંદેશ જુઓ",
index 46b89e1..8c2d845 100644 (file)
        "resetpass-submit-loggedin": "Caghlaa fockle yn arrey",
        "passwordreset-username": "Dt'ennym ymmydeyr:",
        "passwordreset-email": "Enmys post-L:",
-       "passwordreset-emailelement": "Ennym ymmydeyr: $1\nFockle arrey shallidagh: $2",
+       "passwordreset-emailelement": "Ennym ymmydeyr: \n$1\n\nFockle arrey shallidagh: \n$2",
        "passwordreset-emailsent": "Ta post-l cur gys cooinaghtyn er ny chur dhyt.",
        "passwordreset-emailsent-capture": "Ta post-l cur gys cooinaghtyn er ny chur dhyt, as eshyn heese.",
        "passwordreset-emailerror-capture": "Ta post-l cur gys cooinaghtyn er ny chur dhyt, as eshyn heese, agh cha rosh eh yn ymmydeyr: $1",
index 01809a4..7625a16 100644 (file)
        "passwordreset-emailtitle": "פרטי חשבון ב{{grammar:תחילית|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש איפוס של\nהסיסמה שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}}\nלכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
        "passwordreset-emailtext-user": "{{GENDER:$1|המשתמש|המשתמשת}} $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} {{GENDER:$1|ביקש|ביקשה}} איפוס של הסיסמה שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}}\n($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}} לכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
-       "passwordreset-emailelement": "שם משתמש: $1\nסיסמה זמנית: $2",
+       "passwordreset-emailelement": "שם משתמש:\n$1\n\nסיסמה זמנית:\n$2",
        "passwordreset-emailsent": "נשלח דואר אלקטרוני לאיפוס הסיסמה.",
        "passwordreset-emailsent-capture": "נשלח דואר אלקטרוני לאיפוס הסיסמה, והוא מוצג להלן.",
        "passwordreset-emailerror-capture": "נוצר דואר אלקטרוני לאיפוס הסיסמה, והוא מוצג להלן, אך שליחתו ל{{GENDER:$2|משתמש|משתמשת}} נכשלה: $1",
        "changeemail-password": "סיסמה ב{{grammar:תחילית|{{SITENAME}}}}:",
        "changeemail-submit": "שינוי כתובת הדוא\"ל",
        "changeemail-throttled": "ביצעתם ניסיונות רבים מדי להיכנס לחשבון זה.\nאנא המתינו $1 לפני שתנסו שוב.",
+       "changeemail-nochange": "נא להזין כתובת דוא\"ל שונה.",
        "resettokens": "איפוס אסימונים",
        "resettokens-text": "בעמוד זה ניתן לאפס אסימונים שמאפשרים גישה לנתונים פרטיים של החשבון שלך.\n\nרצוי לעשות זאת אם שיתפת אותם בטעות עם אחרים או אם חשבונך נפרץ.",
        "resettokens-no-tokens": "אין אסימונים לאיפוס.",
        "rows": "שורות:",
        "columns": "עמודות:",
        "searchresultshead": "חיפוש",
-       "stub-threshold": "סף לעיצוב <a href=\"#\" class=\"stub\">קישורים</a> לקצרמרים (בתים):",
+       "stub-threshold": "סף לעיצוב קישורים לקצרמרים ($1):",
+       "stub-threshold-sample-link": "דוגמה",
        "stub-threshold-disabled": "מבוטל",
        "recentchangesdays": "מספר הימים שיוצגו בדף השינויים האחרונים:",
        "recentchangesdays-max": "לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}",
        "booksources-text": "להלן רשימת קישורים לאתרים אחרים המוכרים ספרים חדשים ויד־שנייה, ושבהם עשוי להיות מידע נוסף לגבי ספרים שאתם מחפשים:",
        "booksources-invalid-isbn": "המסת\"ב שניתן כנראה אינו תקין; אנא בדקו אם ביצעתם טעויות בהעתקה מהמידע המקורי.",
        "specialloguserlabel": "בוצעו על־ידי המשתמש:",
-       "speciallogtitlelabel": "יעד (כותרת או משתמש):",
+       "speciallogtitlelabel": "יעד (כותרת או {{ns:user}}:שם עבור משתמש):",
        "log": "יומנים",
        "all-logs-page": "כל היומנים הציבוריים",
        "alllogstext": "תצוגה משולבת של כל סוגי היומנים הזמינים ב{{grammar:תחילית|{{SITENAME}}}}.\nניתן לצמצם את התצוגה על־ידי בחירת סוג היומן, שם המשתמש (תלוי רישיות) או הדף המושפע (גם כן תלוי רישיות).",
        "tooltip-ca-nstab-main": "צפייה בדף התוכן",
        "tooltip-ca-nstab-user": "צפייה בדף המשתמש",
        "tooltip-ca-nstab-media": "צפייה בפריט המדיה",
-       "tooltip-ca-nstab-special": "זהו דף מיוחד, לא ניתן לערוך אותו",
+       "tooltip-ca-nstab-special": "×\96×\94×\95 ×\93×£ ×\9e×\99×\95×\97×\93, ×\95×\9c×\90 × ×\99ת×\9f ×\9cער×\95×\9a ×\90×\95ת×\95",
        "tooltip-ca-nstab-project": "צפייה בדף המיזם",
        "tooltip-ca-nstab-image": "צפייה בדף הקובץ",
        "tooltip-ca-nstab-mediawiki": "צפייה בהודעת המערכת",
index a007245..893070d 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} पर खाते का विवरण",
        "passwordreset-emailtext-ip": "किसी ने (शायद आपने ही, $1 आइ॰पी पते से) {{SITENAME}} ($4) पर अपने {{PLURAL:$3|कूटशब्द|कूटशब्दों}} को रीसेट करने का अनुरोध किया है। इस ई-मेल पते से निम्न {{PLURAL:$3|खाता जुड़ा है|खाते जुड़े हैं}}:\n\n$2\n\n{{PLURAL:$3|यह|ये}} अस्थायी कूटशब्द {{PLURAL:$5|एक दिन|$5 दिनों}} के बाद काम नहीं करेंगे। आपको लॉग इन करके एक नया कूटशब्द अभी चुन लेना चाहिए। यदि यह अनुरोध किसी और ने किया है, या फिर आपको अपना मूल कूटशब्द याद आ गया है, और आप {{PLURAL:$3|अपना|अपने}} कूटशब्द नहीं बदलना चाहते, आप इस संदेश को अनदेखा कर के अपने पुराने कूटशब्द का प्रयोग जारी रख सकते हैं।",
        "passwordreset-emailtext-user": "{{SITENAME}} ($4) पर सदस्य $1 ने आपके {{PLURAL:$3|खाते|खातों}} के कूटशब्द को रीसेट करने का अनुरोध किया है। इस ई-मेल पते से निम्न {{PLURAL:$3|खाता जुड़ा है|खाते जुड़े हैं}}:\n\n$2\n\n{{PLURAL:$3|यह|ये}} अस्थायी कूटशब्द {{PLURAL:$5|एक दिन|$5 दिनों}} के बाद काम नहीं करेंगे।\nआपको लॉग इन करके एक नया कूटशब्द अभी चुन लेना चाहिए। यदि यह अनुरोध किसी और ने किया है, या फिर आपको अपना मूल कूटशब्द याद आ गया है, और आप {{PLURAL:$3|अपना|अपने}} कूटशब्द नहीं बदलना चाहते, आप इस संदेश को अनदेखा कर के अपने पुराने कूटशब्द का प्रयोग जारी रख सकते हैं।",
-       "passwordreset-emailelement": "सदस्यनाम: $1\nअस्थायी कूटशब्द: $2",
+       "passwordreset-emailelement": "सदस्यनाम: \n$1\n\nअस्थायी कूटशब्द: \n$2",
        "passwordreset-emailsent": "एक कूटशब्द रीसेट ई-मेल भेज दिया गया है।",
        "passwordreset-emailsent-capture": "नीचे दिखाया गया कूटशब्द रीसेट ई-मेल भेज दिया गया है।",
        "passwordreset-emailerror-capture": "नीचे दृष्टित कूटशब्द रीसेट ई-मेल उत्पन्न किया गया था, परंतु उसे {{GENDER:$2|सदस्य}} को भेजना असफल रहा।\nत्रुटि: $1",
index 6291572..9c90dcc 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} me account ke jaankari",
        "passwordreset-emailtext-ip": "Koi (hoe sake aap, IP address $1 se) {{SITENAME}} ($4) pe aap ke account ke baare me jaankari maanga hae. Niche likha gias sadasya ii e-mail se associated hae.  {{PLURAL:$3|account hae|accounts hae}}\n\n$2\n\n{{PLURAL:$3|Ii temporary password|Ii sab temporary passwords}}  {{PLURAL:$5|ek din|$5 din}} me khalaas hoi.\nAap ke chaahi ki aap login kar ke ek nawaa password banao.  Agar aur koi ii request karis hae, nai to agae aap aapan purana paasword ke yaad kar liya hae, tab ii sandes ke baare me bhuul jaao aur purana password use karte raho.",
        "passwordreset-emailtext-user": "\nSadasya $1 {{SITENAME}} pe aap ke account details ke {{SITENAME}} $4 ke khaatir  reminder maagis hae\n NIche ke sadasya {{PLURAL:$3|account hae|accounts hae}} ii e-mail address: $2 se associatied hae\n\n{{PLURAL:$3|Ii temporary password|Ii sab temporary passwords}}  {{PLURAL:$5|ek din|$5 din}} me khalaas hoi.\nAap ke chaahi ki aap login kar ke ek nawaa password banao.  Agar aur koi ii request karis hae, nai to agae aap aapan purana paasword ke yaad kar liya hae, tab ii sandes ke baare me bhuul jaao aur purana password use karte raho.",
-       "passwordreset-emailelement": "Sadasya ke naam: $1\nKuchh din ke khatir password: $2",
+       "passwordreset-emailelement": "Sadasya ke naam: \n$1\n\nKuchh din ke khatir password: \n$2",
        "passwordreset-emailsent": "Aap ke password yaad karae ke khatir ek e-mail ke bhej dewa gais hae.",
        "passwordreset-emailsent-capture": "Ek password yaad karae waala e-mail, jiske niche dekhawa jaawe hae, ke bhej dewa gais hae.",
        "passwordreset-emailerror-capture": "Ek password yaad karae waala e-mail ke banawa gais hae, jiske niche dekhawa jaawe hae, lekin jiske {{GENDER:$2|user}} ke lage bheje nai jawa sake hae: $1",
        "emailuser": "Ii user ke E-mail karo",
        "emailuser-title-target": "Ii {{GENDER:$1|sadasya}} ke E-mail karo",
        "emailuser-title-notarget": "Sadasya ke E-mail karo",
-       "emailpage": "User ke e-mail karo",
        "emailpagetext": "Aap niche ke form ke kaam me laae ke ii {{GENDER:$1|sadasya}} ke e-mail bheje saktaa hae.\nJon e-mail address aap [[Special:Preferences|your user preferences]] me enter karaa rahaa, \"From\" ke e-mail rahii, jisse ki e-mail ke mile waala jan aap ke sidha jawaab de sake hae.",
        "defemailsubject": "{{SITENAME}} e-mail sadasya \"$1\" se",
        "usermaildisabled": "Sadasya ke e-mail ke rok dewa gais hae",
index ddb95b4..872f935 100644 (file)
        "passwordreset-emailtitle": "Ang mga detalye sang akawnt sa {{SITENAME}}",
        "passwordreset-emailtext-ip": "May tawo nga (mahimo ikaw, halin sa IP adres nga $1) nagpangabay sang pahanumdom sang mga detalye\nsang imo akawnt para sa {{SITENAME}} ($4). Ang masunod nga {{PLURAL:$3|akawnt|mga akawnt}} sang manuggamit\nmay kabahin sa sini nga adres sang e-mail:\n\n$2\n\n{{PLURAL:$3|Ang ini nga temporaryo nga pasword|Ang mga ini nga temporaryo nga pasword}} indi na magamit sa {{PLURAL:$5|isa ka adlaw|$5 ka adlaw}}.\nKinahanglan mo nga magsulod kag magpili sang bag-o nga pasword subong. Kon lain nga tawo ang nagbuhat sini\nnga pagpangabay, ukon nadumduman mo na ang imo pasword, kag indi mo na kinahanglan nga ini\npaga-ilisan, mahimo mo nga pabay-an ang ini nga pahanumdom kag magpadayon sa paggamit sang imo daan nga pasword.",
        "passwordreset-emailtext-user": "Ang manuggamit nga si $1 sa {{SITENAME}} nagpangabay sang pahanumdom sang mga detalye sang imo akawnt para sa {{SITENAME}} \n($4). Ang masunod nga {{PLURAL:$3|akawnt|mga akawnt}} sang manuggamit may kabahin sa sini nga adres sang e-mail:\n\n$2\n\n{{PLURAL:$3|Ang ini nga temporaryo nga pasword|Ang mga ini nga temporaryo nga pasword}} indi na magamit sa {{PLURAL:$5|isa ka adlaw|$5 ka adlaw}}.\nKinahanglan mo nga magsulod kag magpili sang bag-o nga pasword subong. Kon lain nga tawo ang nagbuhat sini\nnga pagpangabay, ukon nadumduman mo na ang imo pasword, kag indi mo na kinahanglan nga ini\npaga-ilisan, mahimo mo nga pabay-an ang ini nga pahanumdom kag magpadayon sa paggamit sang imo daan nga pasword.",
-       "passwordreset-emailelement": "Gamit-pangalan: $1\nTemporaryo nga pasword: $2",
+       "passwordreset-emailelement": "Gamit-pangalan: \n$1\n\nTemporaryo nga pasword: \n$2",
        "passwordreset-emailsent": "May pahanumdom nga e-mail nga ginpadala.",
        "passwordreset-emailsent-capture": "May e-mail nga nagapahanumdum, nga ginapakita sa idalom.",
        "passwordreset-emailerror-capture": "May e-mail nga nagapahanumdom nga ginbuhat, nga ginapakita sa idalom, apang ang pagpadala sa manuggamit indi madinalag-on: $1",
        "uploadnewversion-linktext": "Uplod sang bag-o nga bersiyon sang sini nga file",
        "filedelete-submit": "Panason",
        "randompage": "Bisan ano nga panid",
+       "randomincategory-submit": "Lakat",
        "statistics": "Mga Statistik",
        "brokenredirects-edit": "ilisan",
        "brokenredirects-delete": "panason",
index 104e2f2..fc9c649 100644 (file)
        "passwordreset-emailtitle": "Pojedinosti o računu na {{SITENAME}}",
        "passwordreset-emailtext-ip": "Netko (vjerojatno Vi, s IP adrese $1) zatražio je podsjetnik za Vaše detalje računa\nza {{SITENAME}} ($4). Sljedeći {{PLURAL:$3|račun suradnika je|računi suradnika su}}\npovezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena lozinka|Ove privremene lozinke}} će isteći u {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu lozinku. Ukoliko je netko drugi napravio ovaj\nzahtjev, ili ako ste sjeti Vaše izvorne lozinke, a vi je više ne želite promijeniti, \nmožete zanemariti ovu poruku i nastavite koristiti staru lozinku.",
        "passwordreset-emailtext-user": "Suradnik $1 na {{SITENAME}} zatražio podsjetnik o pojedinostima vašeg računa za {{SITENAME}}\n($4). Sljedeći {{PLURAL:$3|račun suradnika je|računi suradnika su}} povezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena lozinka|Ove privremene lozinke}} će isteći u {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu lozinku. Ukoliko je netko drugi napravio ovaj\nzahtjev, ili ako ste sjeti Vaše izvorne lozinke, a vi je više ne želite promijeniti, \nmožete zanemariti ovu poruku i nastavite koristiti staru lozinku.",
-       "passwordreset-emailelement": "Suradničko ime: $1\nPrivremena lozinka: $2",
+       "passwordreset-emailelement": "Suradničko ime: \n$1\n\nPrivremena lozinka: \n$2",
        "passwordreset-emailsent": "E-mail podsjetnik zaporke je poslan.",
        "passwordreset-emailsent-capture": "Poslan Vam je podsjetnik kao e-pošta (tekst je prikazan dolje).",
        "passwordreset-emailerror-capture": "Napravljena je e-poruka za ponovno postavljanje zaporke (prikazana ispod), ali njeno slanje suradniku nije uspjelo: $1",
        "rows": "Redova",
        "columns": "Stupaca",
        "searchresultshead": "Prikaz rezultata pretrage",
-       "stub-threshold": "Prag za formatiranje poput <a href=\"#\" class=\"stub\">poveznice mrve</a>:",
+       "stub-threshold": "Prag za formatiranje poveznice na mrve ($1):",
        "stub-threshold-disabled": "Onemogućeno",
        "recentchangesdays": "Broj dana prikazanih u nedavnim promjenama:",
        "recentchangesdays-max": "(maksimalno $1 {{PLURAL:$1|dan|dana}})",
        "emailuser": "Pošalji mu e-poruku",
        "emailuser-title-target": "Pošalji poruku {{GENDER:$1|suradniku|suradnici|suradniku}}",
        "emailuser-title-notarget": "Pošalji e-poštu suradniku",
-       "emailpage": "Pošalji e-poštu suradniku",
        "emailpagetext": "Možete koristiti ovaj obrazac za slanje elektroničke pošte {{GENDER:$1|suradniku|suradnici}}.\nE-mail adresa iz Vaših [[Special:Preferences|postavki]] nalazit će se u \"From\" polju poruke i primatelj će Vam moći izravno odgovoriti.",
        "defemailsubject": "{{SITENAME}} e-mail od suradnika \"$1\"",
        "usermaildisabled": "Suradnička e-pošta je onemogućena",
index 5a2d9f3..e0235d3 100644 (file)
        "passwordreset-emailtitle": "Benutzerkontoinformatione uff {{SITENAME}}",
        "passwordreset-emailtext-ip": "Jemand mit der IP-Adress $1, wahrscheinlich du sellebst, hot en Zurücksetzung von dein Passworts bei {{SITENAME}} oongefordert ($4). {{PLURAL:$3|Das follichend Benutzerkonto ist|Die follichende Benutzerkonte sind}}\nmit der E-Mail-Adress verknüpft:\n\n$2\n\n{{PLURAL:$3|Das temporär Passwort looft|Die temporäre Passwörter loofe}} innerhalb von {{PLURAL:$5|em Tooch|$5 Tooche}} ab.\nDu sollst dich oonmelde und en neies Passwort vergewe. Falls jemand annres die Oonfroch getätigt hot orrer du dich wieder an dein ursprüngliches Passwort erinnre kannst und das netmeh\nännre möchst, kannst du die Nachricht ignoriere und weiterhin dein altes\nPasswort benutze.",
        "passwordreset-emailtext-user": "Benutzer $1 bei {{SITENAME}} hot en Zurücksetzung von dein Passwort bei {{SITENAME}} oongefordert ($4). {{PLURAL:$3|Das follichend Benutzerkonto ist|Die follichend Benutzerkonte sind}} mit der E-Mail-Adress verknüpft:\n\n$2\n\n{{PLURAL:$3|Das temporär Passwort looft|Die temporäre Passwörter loofe}} innerhalb von {{PLURAL:$5|em Tooch|$5 Tooche}} ab. Du sollst dich oonmelde und en neies Passwort vergewe. Falls jemand annres die Oonfroch getäticht hot orrer du dich wieder an den ursprüngliches Passwort erinnre kannst und das net ännre möchst, kannst du die Nachricht ignoriere und weiterhin dein altes Passwort benutze.",
-       "passwordreset-emailelement": "Benutzernoome: $1\nTemporäres Passwort: $2",
+       "passwordreset-emailelement": "Benutzernoome: \n$1\n\nTemporäres Passwort: \n$2",
        "passwordreset-emailsent": "En Passwortzurücksetzung-E-Mail woard versandt.",
        "passwordreset-emailsent-capture": "En Passwortzurücksetzung-E-Mail woard versandt, die unne oongezeicht weard.",
        "passwordreset-emailerror-capture": "Die unne oongezeichte Passwortzurücksetzungs-E-Mail woard generiert, awer der Versand an {{GENDER:$2|den Benutzer|die Benutzrin}} ist gescheitert: $1",
        "emailuser": "E-Mail an den Benutzer",
        "emailuser-title-target": "E-Mail an {{GENDER:$1|den Benutzer|die Benutzrin}} schicke",
        "emailuser-title-notarget": "E-Mail an Benutzer",
-       "emailpage": "E-Mail an Benutzer",
        "emailpagetext": "Du kannst {{GENDER:$1|dem Benutzer|der Benutzrin}} mit dem do unne stehnde Formular en E-Mail schicke.\nAls Absender weard die E-Mail-Adress aus deine [[Special:Preferences|Einstellunge]] ingetrooht, damit {{GENDER:$1|der Benutzer|die Benutzrin}} dir direkt antworte kann.",
        "defemailsubject": "{{SITENAME}} – E-Mail von Benutzer \"$1\"",
        "usermaildisabled": "E-Mail-Empfang deaktiviert",
index fa9ce16..28625c2 100644 (file)
        "passwordreset-emailtitle": "Kontowe podrobnosće na {{GRAMMAR:lokatiw|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Něchtó (najskerje ty, z IP-adresu $1) je anulowanje hesła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} požadał ($4).  {{PLURAL:$3|Slědowace wužiwarske konto je|Slědowacej wužiwarskej konće stej|Slědowace wužiwarske konta su}} z tutej e-mejlowej adresu {{PLURAL:$3|zwjazane|zwjazanej|zwjazane}}:\n\n$2\n\n{{PLURAL:$3|Tute nachwilne hesło spadnje|Tutej nachwilnej hesle spadnjetej|Tute nachwilne hesła spadnu}} za {{PLURAL:$5|jedyn dźeń|$5 dnjej|$5 dny|$5 dnjow}}.\nTy měł so nětko přizjewić a nowe hesło wubrać. Jeli něchtó druhi je tute naprašowanje pósłał, abo jeli sy so zaso na prěnjotne hesło dopomnił a wjace nochceš jo změnić, móžeš tutu zdźělenku ignorować a swoje stare hesło dale wužiwać.",
        "passwordreset-emailtext-user": "Wužiwar $1 na {{GRAMMAR:lokatiw|{{SITENAME}}}} je anulowanje twojeho hesła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} požadał ($4).  {{PLURAL:$3|Slědowace wužiwarske konto je|Slědowacej wužiwarskej konće stej|Slědowace wužiwarske konta su}} z tutej e-mejlowej adresu {{PLURAL:$3|zwjazane|zwjazanej|zwjazane}}:\n\n$2\n\n{{PLURAL:$3|Tute nachwilne hesło spadnje|Tutej nachwilnej hesle spadnjetej|Tute nachwilne hesła spadnu}} za {{PLURAL:$5|jedyn dźeń|$5 dnjej|$5 dny|$5 dnjow}}.\nTy měł so nětko přizjewić a nowe hesło wubrać. Jeli něchtó druhi je tute naprašowanje pósłał, abo jeli sy so zaso na prěnjotne hesło dopomnił a wjace nochceš jo změnić, móžeš tutu zdźělenku ignorować a swoje stare hesło dale wužiwać.",
-       "passwordreset-emailelement": "Wužiwarske mjeno: $1\nNachwilne hesło: $2",
+       "passwordreset-emailelement": "Wužiwarske mjeno: \n$1\n\nNachwilne hesło: \n$2",
        "passwordreset-emailsent": "E-mejl za anulowanje hesło je so pósłała.",
        "passwordreset-emailsent-capture": "E-mejl za anulowanje hesła je so pósłała, kotraž so deleka pokazuje.",
        "passwordreset-emailerror-capture": "E-mejl za anulowanje hesła je so wutworiła, kotraž so deleka pokazuje, ale słanje {{GENDER:$2|wužiwarjej|wužiwarce}} je so njeporadźiło: $1",
index 0b9fd87..8ad74b9 100644 (file)
@@ -38,7 +38,8 @@
                        "ViDam",
                        "Adam78",
                        "Grin",
-                       "Macofe"
+                       "Macofe",
+                       "Nyuszika7H"
                ]
        },
        "tog-underline": "Hivatkozások aláhúzása:",
        "passwordreset-emailtitle": "A(z) {{SITENAME}}-fiók adatai",
        "passwordreset-emailtext-ip": "Valaki (vélhetően Te, a $1 IP-címről) a jelszavad visszaállítását kérte a {{SITENAME}} ($4) oldalon felvett {{PLURAL:$3|fiókban|fiókokban}}. A következő felhasználói {{PLURAL:$3|fiók van|fiókok vannak}} hozzárendelve ehhez az e-mail címhez:\n\n$2\n\n{{PLURAL:$3|Ez az ideiglenes jelszó|Ezek az ideiglenes jelszavak}} $5 nap múlva {{PLURAL:$3|jár|járnak}} le. Jelentkezz be, és cseréld le a jelszavadat. Ha valaki más kérte az emlékeztetőt, vagy eszedbe jutott a régi jelszó, és nem akarod lecserélni a jelszavadat, hagyd figyelmen kívül ezt az üzenetet, és használd a régi jelszavadat.",
        "passwordreset-emailtext-user": "$1 felhasználó jelszó-visszaállítást kért a {{SITENAME}} ($4) oldalon felvett {{PLURAL:$3|fiókban|fiókokban}}. A következő felhasználói {{PLURAL:$3|fiók van|fiókok vannak}} hozzárendelve ehhez az e-mail címhez:\n\n$2\n\n{{PLURAL:$3|Ez az ideiglenes jelszó|Ezek az ideiglenes jelszavak}} $5 nap múlva {{PLURAL:$3|jár|járnak}} le. Jelentkezz be, és cseréld le a jelszavadat. Ha valaki más kérte az emlékeztetőt, vagy eszedbe jutott a régi jelszó, és nem akarod lecserélni a jelszavadat, hagyd figyelmen kívül ezt az üzenetet, és használd a régi jelszavadat.",
-       "passwordreset-emailelement": "Felhasználónév: $1\nIdeiglenes jelszó: $2",
+       "passwordreset-emailelement": "Felhasználónév: \n$1\n\nIdeiglenes jelszó: \n$2",
        "passwordreset-emailsent": "Jelszó-visszaállító e-mail elküldve.",
        "passwordreset-emailsent-capture": "Az alább látható jelszó-visszaállító e-mail lett elküldve.",
        "passwordreset-emailerror-capture": "A jelszó-visszaállító e-mail generálása megtörtént, mint az alább látszik, de elküldése a {{GENDER:$2|szerkesztőnek}} nem sikerült: $1",
        "enotif_reset": "Az összes lap megjelölése felkeresettként",
        "enotif_impersonal_salutation": "{{SITENAME}} felhasználó",
        "enotif_subject_deleted": "$2 törölte a(z) $1 {{SITENAME}}-oldalt",
-       "enotif_subject_created": "$2 létrehozta a(z) $1 {{SITENAME}} oldalt",
-       "enotif_subject_moved": "$2 átmozgatta a $1 {{SITENAME}} oldalt.",
-       "enotif_subject_restored": "$2 visszaállította a $1 {{SITENAME}} oldalt.",
+       "enotif_subject_created": "$2 létrehozta a(z) $1 {{SITENAME}}-oldalt",
+       "enotif_subject_moved": "$2 átmozgatta a(z) $1 {{SITENAME}}-oldalt",
+       "enotif_subject_restored": "$2 visszaállította a(z) $1 {{SITENAME}}-oldalt",
        "enotif_subject_changed": "$2 megváltoztatta a(z) $1 {{SITENAME}}-oldalt",
-       "enotif_body_intro_deleted": "$2 törölte a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd $3.",
-       "enotif_body_intro_created": "$2 létrehozta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
-       "enotif_body_intro_moved": "$2 átmozgatta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
-       "enotif_body_intro_restored": "$2 visszaállította a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
-       "enotif_body_intro_changed": "$2 megváltoztatta a $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, az aktuális verziót lásd itt: $3.",
+       "enotif_body_intro_deleted": "$2 törölte a(z) $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, lásd $3.",
+       "enotif_body_intro_created": "$2 létrehozta a(z) $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, lásd az aktuális verziót itt: $3.",
+       "enotif_body_intro_moved": "$2 átmozgatta a(z) $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, lásd az aktuális verziót itt: $3.",
+       "enotif_body_intro_restored": "$2 visszaállította a(z) $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, lásd az aktuális verziót itt: $3.",
+       "enotif_body_intro_changed": "$2 megváltoztatta a(z) $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, az aktuális verziót lásd itt: $3.",
        "enotif_lastvisited": "Lásd a $1 lapot az utolsó látogatásod óta történt változtatásokért.",
        "enotif_lastdiff": "Lásd a $1 lapot ezen változtatás megtekintéséhez.",
        "enotif_anon_editor": "$1 névtelen felhasználó",
        "spam_reverting": "Visszatérés a $1 lapra mutató hivatkozásokat nem tartalmazó utolsó változathoz",
        "spam_blanking": "Az összes változat tartalmazott a $1 lapra mutató hivatkozásokat, kiürítés",
        "spam_deleting": "Minden változat tartalmazott $1-re mutató hivatkozást, törlöm",
-       "simpleantispam-label": "Spam elleni ellenőrzés.\n'''NE''' töltsd ezt ki!",
+       "simpleantispam-label": "Spam elleni ellenőrzés.\n<strong>NE</strong> töltsd ezt ki!",
        "pageinfo-title": "Információk a(z) „$1” lapról",
        "pageinfo-not-current": "Sajnáljuk, de lehetetlen információt nyújtani a régi verziókhoz.",
        "pageinfo-header-basic": "Alapinformációk",
index da0f648..45da113 100644 (file)
        "passwordreset-domain": "Դոմեն՝",
        "passwordreset-email": "Էլ-փոստի հասցեն՝",
        "passwordreset-emailtitle": "{{SITENAME}} հաշվի մանրամասները",
-       "passwordreset-emailelement": "Մասնակցային անունը՝ $1\nԺամանակավոր գաղտնաբառը՝ $2",
+       "passwordreset-emailelement": "Մասնակցային անունը՝ \n$1\n\nԺամանակավոր գաղտնաբառը՝ \n$2",
        "passwordreset-emailsent": "Ուղարկվեց հիշեցնող էլ․ նամակ։",
        "passwordreset-emailsent-capture": "Ուղարկվեց հիշեցնող էլ․ նամակ։ Այն ներկայացված է ստորև։",
        "passwordreset-emailerror-capture": "Ուղարկվեց հիշեցնող էլ․ նամակ։ Այն ներկայացված է ստորև։ Սակայն մասնակցին ուղարկելը չհաջողվեց․",
        "deletereasonotherlist": "Ուրիշ պատճառ",
        "deletereason-dropdown": "*Ջնջման տարածված պատճառներ\n** Հեղինակի խնդրանքով\n** Հեղինակային իրավունքների խախտում\n** Վանդալություն",
        "delete-edit-reasonlist": "Խմբագրել ջնջման պատճառները",
+       "deleting-backlinks-warning": "'''Զգուշացում''', ձեր կողմից ջնջվող էջին հղվում են [[Special:WhatLinksHere/{{FULLPAGENAME}}|այլ հոդվածներ]]:",
        "rollback": "Հետ գլորել խմբագրումները",
        "rollbacklink": "հետ գլորել",
        "rollbacklinkcount": "հետ գլորել $1 {{PLURAL:$1|խմբագրում}}",
index b6391d8..cb00042 100644 (file)
        "createacct-benefit-body2": "{{PLURAL:$1|pagina|paginas}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contributor|contributores}} recente",
        "badretype": "Le duo contrasignos que tu scribeva non es identic.",
+       "usernameinprogress": "Le creation de un conto con iste nomine de usator es jam in curso.\nPer favor, attende.",
        "userexists": "Iste nomine de usator es jam in uso.\nSelige un altere nomine.",
        "loginerror": "Error in le apertura del session",
        "createacct-error": "Error de creation de conto",
        "passwordreset-emailtitle": "Detalios del conto in {{SITENAME}}",
        "passwordreset-emailtext-ip": "Un persona (probabilemente tu, ab le adresse IP $1) requestava le reinitialisation de tu\ncontrasigno de {{SITENAME}} ($4). Le {{PLURAL:$3|conto|contos}} de usator sequente es\nassociate con iste adresse de e-mail:\n\n$2\n\nIste {{PLURAL:$3|contrasigno|contrasignos}} temporari expirara post {{PLURAL:$5|un die|$5 dies}}.\nTu deberea ora aperir session e eliger un nove contrasigno. Si un altere persona faceva iste\nrequesta, o si tu te ha rememorate tu contrasigno original e non plus\nvole cambiar lo, tu pote ignorar iste message e continuar a usar le ancian\ncontrasigno.",
        "passwordreset-emailtext-user": "Le usator $1 in {{SITENAME}} requestava un reinitialisation de tu contrasigno in {{SITENAME}}\n($4). Le {{PLURAL:$3|conto|contos}} de usator sequente es associate con iste adresse de e-mail:\n\n$2\n\nIste {{PLURAL:$3|contrasigno|contrasignos}} temporari expirara post {{PLURAL:$5|un die|$5 dies}}.\nTu deberea ora aperir session e eliger un nove contrasigno. Si un altere persona faceva iste\nrequesta, o si tu te ha rememorate tu contrasigno original e non plus\nvole cambiar lo, tu pote ignorar iste message e continuar a usar le ancian\ncontrasigno.",
-       "passwordreset-emailelement": "Nomine de usator: $1\nContrasigno temporari: $2",
+       "passwordreset-emailelement": "Nomine de usator: \n$1\n\nContrasigno temporari: \n$2",
        "passwordreset-emailsent": "Un message de e-mail pro le reinitialisation del contrasigno ha essite inviate.",
        "passwordreset-emailsent-capture": "Un message de e-mail pro le reinitialisation del contrasigno ha essite inviate; iste message es monstrate hic infra.",
        "passwordreset-emailerror-capture": "Un e-mail pro le reinitialisation del contrasigno ha essite generate; iste message es monstrate hic infra, ma le invio al {{GENDER:$2|usator}} ha fallite: $1",
        "rows": "Lineas:",
        "columns": "Columnas:",
        "searchresultshead": "Recerca",
-       "stub-threshold": "Limite pro formatar le ligamines in <a href=\"#\" class=\"stub\">stilo de peciettas</a> (bytes):",
+       "stub-threshold": "Limite pro formatar ligamines a peciettas ($1):",
+       "stub-threshold-sample-link": "exemplo",
        "stub-threshold-disabled": "Disactivate",
        "recentchangesdays": "Numero de dies a monstrar in modificationes recente:",
        "recentchangesdays-max": "(non plus de $1 {{PLURAL:$1|die|dies}})",
        "booksources-text": "Infra es un lista de ligamines a altere sitos que vende libros nove e usate, e pote etiam haber altere informationes super libros que tu cerca:",
        "booksources-invalid-isbn": "Le ISBN date non pare esser valide; verifica que tu non ha facite errores copiante lo del fonte original.",
        "specialloguserlabel": "Executor:",
-       "speciallogtitlelabel": "Objectivo (titulo o usator):",
+       "speciallogtitlelabel": "Objectivo (titulo o {{ns:user}}:nomine de usator):",
        "log": "Registros",
        "all-logs-page": "Tote le registros public",
        "alllogstext": "Presentation combinate de tote le registros disponibile de {{SITENAME}}.\nPro restringer le presentation, selige un typo de registro, le nomine de usator (sensibile al majusculas e minusculas), o le pagina in question (etiam sensibile al majusculas e minusculas).",
        "tooltip-ca-nstab-main": "Vider le pagina de contento",
        "tooltip-ca-nstab-user": "Vider le pagina de usator",
        "tooltip-ca-nstab-media": "Vider le pagina de media",
-       "tooltip-ca-nstab-special": "Isto es un pagina special, tu non pote modificar le pagina mesme",
+       "tooltip-ca-nstab-special": "Isto es un pagina special e non pote esser modificate",
        "tooltip-ca-nstab-project": "Vider le pagina de projecto",
        "tooltip-ca-nstab-image": "Vider le pagina del file",
        "tooltip-ca-nstab-mediawiki": "Vider le message del systema",
        "exif-lightsource-19": "Lumine standard C",
        "exif-lightsource-24": "Tungsten de studio ISO",
        "exif-lightsource-255": "Altere origine de lumine",
-       "exif-flash-fired-0": "Flash non fulgurava",
-       "exif-flash-fired-1": "Flash fulgurava",
+       "exif-flash-fired-0": "Flash non ha fulgurate",
+       "exif-flash-fired-1": "Flash ha fulgurate",
        "exif-flash-return-0": "nulle function pro deteger stroboscopio",
        "exif-flash-return-2": "stroboscopio non detegite",
        "exif-flash-return-3": "stroboscopio detegite",
-       "exif-flash-mode-1": "fulguration flash compulsori",
-       "exif-flash-mode-2": "suppression del flash compulsori",
+       "exif-flash-mode-1": "activation del flash fortiate",
+       "exif-flash-mode-2": "suppression del flash fortiate",
        "exif-flash-mode-3": "modo automatic",
        "exif-flash-function-1": "Nulle function de flash",
        "exif-flash-redeye-1": "modo de reduction de oculos rubie",
        "logentry-newusers-create2": "Le conto de usator $3 ha essite {{GENDER:$2|create}} per $1",
        "logentry-newusers-byemail": "Le conto de usator $3 ha essite {{GENDER:$2|create}} per $1 e le contrasigno ha essite inviate per e-mail",
        "logentry-newusers-autocreate": "Le conto $1 ha essite {{GENDER:$2|create}} automaticamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|displaciava}} le parametros de protection de $4 a $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|cambiava}} le appertinentia a gruppos pro $3 de $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cambiava}} le appertinentia a gruppos pro $3",
        "logentry-rights-autopromote": "$1 ha essite automaticamente {{GENDER:$2|promovite}} de $4 a $5",
index 265bb2d..05b2682 100644 (file)
@@ -39,7 +39,8 @@
                        "Ahdan",
                        "Macofe",
                        "Totosunarto",
-                       "Mirws"
+                       "Mirws",
+                       "Ilham"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
        "passwordreset-emailtitle": "Detail akun di {{SITENAME}}",
        "passwordreset-emailtext-ip": "Seseorang (mungkin Anda, dari alamat IP $1) meminta pengingat\ndetail akun untuk {{SITENAME}} ($4). {{PLURAL:$3|Akun|Akun-akun}} berikut\nterkait dengan alamat surel ini:\n\n$2\n\n{{PLURAL:$3|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|$5 hari}}.\nAnda harus masuk dan memilih sandi baru sekarang. Jika orang lain membuat\npermintaan ini atau jika Anda ingat sandi asli dan tidak lagi\ningin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi lama.",
        "passwordreset-emailtext-user": "Seseorang (mungkin Anda, dari alamat IP $1) meminta pengingat detail akun untuk {{SITENAME}} ($4).\n{{PLURAL:$3|Akun|Akun-akun}} berikut terkait dengan alamat surel ini:\n\n$2\n\n{{PLURAL:$3|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|$5 hari}}.\nAnda harus masuk dan memilih sandi baru sekarang. Jika orang lain membuat\npermintaan ini atau jika Anda ingat sandi asli dan tidak lagi\ningin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi lama.",
-       "passwordreset-emailelement": "Nama pengguna: $1\nSandi sementara: $2",
+       "passwordreset-emailelement": "Nama pengguna: \n$1\n\nSandi sementara: \n$2",
        "passwordreset-emailsent": "Surel setel ulang kata sandi telah dikirimkan.",
        "passwordreset-emailsent-capture": "Surel setel ulang kata sandi telah dikirim, yang ditampilkan di bawah.",
        "passwordreset-emailerror-capture": "Surel setel ulang kata sandi telah dibuat, yang ditampilkan di bawah, namun pengiriman pada {{GENDER:$2|pengguna}} gagal: $1",
        "booksources-text": "Di bawah ini adalah daftar pranala ke situs lain yang menjual buku baru dan bekas, dan mungkin juga mempunyai informasi lebih lanjut mengenai buku yang sedang Anda cari:",
        "booksources-invalid-isbn": "ISBN yang diberikan tampaknya tidak valid; periksa kesalahan penyalinan dari sumber asli.",
        "specialloguserlabel": "Pengguna:",
-       "speciallogtitlelabel": "Target (judul atau pengguna):",
+       "speciallogtitlelabel": "Target (judul atau{{ns:pengguna}}:nama pengguna untuk pengguna)",
        "log": "Catatan (Log)",
        "all-logs-page": "Semua log publik",
        "alllogstext": "Gabungan tampilan semua log yang tersedia di {{SITENAME}}.\nAnda dapat melakukan pembatasan tampilan dengan memilih jenis log, nama pengguna (sensitif kapitalisasi), atau judul halaman (juga sensitif kapitalisasi).",
        "tooltip-ca-nstab-main": "Lihat halaman isi",
        "tooltip-ca-nstab-user": "Lihat halaman pengguna",
        "tooltip-ca-nstab-media": "Lihat halaman media",
-       "tooltip-ca-nstab-special": "Ini adalah halaman istimewa yang tidak dapat disunting.",
+       "tooltip-ca-nstab-special": "Ini adalah halaman istimewa, dan tidak dapat disunting.",
        "tooltip-ca-nstab-project": "Lihat halaman proyek",
        "tooltip-ca-nstab-image": "Lihat halaman berkas",
        "tooltip-ca-nstab-mediawiki": "Lihat pesan sistem",
index 293b656..d8dae89 100644 (file)
        "resetpass-submit-cancel": "Kàchá",
        "resetpass-temp-password": "mkpurụ okwu ejị a gafẹ I gi kushi ngwa ngwa:",
        "passwordreset": "Nkuwaria okwúngáfè",
-       "passwordreset-emailelement": "Áhà Ọ'banife: $1\nPasswod nke gi gbanwe: $2",
+       "passwordreset-emailelement": "Áhà Ọ'banife: \n$1\n\nPasswod nke gi gbanwe: \n$2",
        "changeemail-none": "(efù)",
        "bold_sample": "Mkpúrù èdè íke",
        "bold_tip": "Mkpúrù èdè íke",
        "unusedtemplates": "Àtụ hè jí gị",
        "unusedtemplateswlh": "jikodo ndi ozor",
        "randompage": "Edemede nkeówúlạ",
+       "randomincategory-submit": "Gá",
        "statistics": "Olìlé ọtụ ihe dị",
        "statistics-header-pages": "Ọmúmú-nà-ńlé ihü",
        "statistics-header-edits": "Rüwá ọmúmú-nà-ńlé",
        "nlinks": "{{PLURAL:$1|jikodo|jikodo}} $1",
        "nmembers": "{{PLURAL:$1|ọ'bànifé|Ndi n'bànifé}} $1",
        "nrevisions": "{{PLURAL:$1|orübà|orübà}} $1",
-       "nviews": "{{PLURAL:$1|he lèrè nke|he lèrè nke}} $1",
        "lonelypages": "Ihü nke ogbènyè",
        "wantedpages": "Ihü há chọrọ",
        "prefixindex": "Ihü nílé jírí mkpụrụ édémédé nke mbu",
        "listgrouprights-addgroup": "Gbàkọ {{PLURAL:$2|ọtú|ọtú}}: $1",
        "listgrouprights-addgroup-all": "Tìnyé ọtú nílé",
        "emailuser": "Zi onye á ózí-nsónùsòrò",
-       "emailpage": "Mé ọ'bànifé e-mailù",
        "defemailsubject": "e-mail {{SITENAME}}",
        "emailfrom": "Onye banyere ya:",
        "emailto": "Onye o gi ru:",
index 41d53e0..63fd383 100644 (file)
        "passwordreset-emailtitle": "Dagiti salaysay ti pakabilangan iti {{SITENAME}}",
        "passwordreset-emailtext-ip": "Adda (baka sika, ti naggapuan ti IP a pagtaengan $1) a nagkiddaw ti maysa a panangisaad manen ti kontrasenias para iti {{SITNAME}} ($4) . {{PLURAL:$3|Ti |Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga esurat a pagtaengan:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ket saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloyka nga agusar ti daan a kontrasenias.",
        "passwordreset-emailtext-user": "Daytoy nga agar-aramat $1 iti {{SITENAME}} ket nagkiddaw ti maysa a panangisaad manen ti bukod a kontrasenias para iti {{SITENAME}}\n($4) . {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga esurat a pagtaengan:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ken saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloykan nga agusar ti daan a kontraseniasmo.",
-       "passwordreset-emailelement": "Nagan ti agar-aramat: $1\nTemporario a kontrasenias: $2",
+       "passwordreset-emailelement": "Nagan ti agar-aramat: \n$1\n\nTemporario a kontrasenias: \n$2",
        "passwordreset-emailsent": "Ti maysa nga esurat ti panangisaad manen ti kontrasenias ket naipatuloden.",
        "passwordreset-emailsent-capture": "Ti maysa nga esurat ti panangisaad manen ti kontrasenias ket naipatuloden, a naipakita dita baba.",
        "passwordreset-emailerror-capture": "Naaramid ti maysa nga esurat a panangisaad manen ti kontrasenias, a napaikita dita baba, ngem ti panangitulod kenni {{GENDER:$2|agar-aramat}} ket napaay: $1",
index 5ec43fe..0f697a9 100644 (file)
        "passwordreset-emailtitle": "Notendaupplýsingar á {{SITENAME}}",
        "passwordreset-emailtext-ip": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um \nendursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú manst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
        "passwordreset-emailtext-user": "Notandinn $1 á {{SITENAME}} hefur beðið um endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú manst aftur lykilorðið þitt, og vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
-       "passwordreset-emailelement": "Notendanafn: $1\nTímabundið lykilorð: $2",
+       "passwordreset-emailelement": "Notendanafn: \n$1\n\nTímabundið lykilorð: \n$2",
        "passwordreset-emailsent": "Töluvpóstur til að endursetja lykilorðið hefur verið sendur.",
        "passwordreset-emailsent-capture": "Tölvupóstur til að endursetja lykilorðið hefur verið sendur í tölvupósti, sem er sýndur hér fyrir neðan.",
        "passwordreset-emailerror-capture": "Tölvupóstur til að endursetja lykilorðið var búinn til, sem er sýndur hér fyrir neðan, en ekki tókst að senda hana til {{GENDER:$2|notandans}}: $1",
index bc8ce8f..bc3d1bc 100644 (file)
@@ -89,7 +89,8 @@
                        "Fringio",
                        "Aquatech",
                        "Statix64",
-                       "CassiodoroVicinetti"
+                       "CassiodoroVicinetti",
+                       "Bultro"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "passwordreset-emailtitle": "Dettagli dell'utente su {{SITENAME}}",
        "passwordreset-emailtext-ip": "Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
        "passwordreset-emailtext-user": "L'utente $1 di {{SITENAME}} ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
-       "passwordreset-emailelement": "Nome utente: $1\nPassword temporanea: $2",
+       "passwordreset-emailelement": "Nome utente: \n$1\n\nPassword temporanea: \n$2",
        "passwordreset-emailsent": "È stata inviata una email di reimpostazione della password.",
        "passwordreset-emailsent-capture": "È stata inviata una email di reimpostazione della password, il contenuto è riportato di seguito.",
        "passwordreset-emailerror-capture": "È stata generata una email di reimpostazione della password, riportata di seguito. L'invio {{GENDER:$2|all'utente}} non è riuscito: $1",
        "rows": "Righe:",
        "columns": "Colonne:",
        "searchresultshead": "Ricerca",
-       "stub-threshold": "Valore minimo per i <a href=\"#\" class=\"stub\">collegamenti agli abbozzi</a> (in byte):",
+       "stub-threshold": "Soglia per i collegamenti agli abbozzi ($1):",
+       "stub-threshold-sample-link": "esempio",
        "stub-threshold-disabled": "Disattivato",
        "recentchangesdays": "Numero di giorni da mostrare nelle ultime modifiche:",
        "recentchangesdays-max": "(massimo $1 {{PLURAL:$1|giorno|giorni}})",
        "recentchanges-label-unpatrolled": "Modifica non ancora verificata",
        "recentchanges-label-plusminus": "Variazione della pagina in numero di byte",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedi [[Special:NewPages|le nuove pagine]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedi le [[Special:NewPages|nuove pagine]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Di seguito {{PLURAL:$5|è elencata la modifica apportata|sono elencate le modifiche apportate}} a partire da <strong>$3, $4</strong> (mostrate fino a <strong>$1</strong>).",
        "rclistfrom": "Mostra le modifiche apportate a partire da $3 $2",
        "booksources-text": "Di seguito sono elencati alcuni collegamenti verso siti esterni che vendono libri nuovi e usati, attraverso i quali è possibile ottenere maggiori informazioni sul testo cercato.",
        "booksources-invalid-isbn": "L'ISBN inserito sembra non essere valido; verificare che non siano stati commessi errori nel copiarlo dalla fonte originale.",
        "specialloguserlabel": "Azione effettuata da:",
-       "speciallogtitlelabel": "Azione effettuata su:",
+       "speciallogtitlelabel": "Azione effettuata su (titolo della pagina o {{ns:user}}:Nome utente):",
        "log": "Registri",
        "all-logs-page": "Tutti i registri pubblici",
        "alllogstext": "Presentazione unificata di tutti i registri di {{SITENAME}}.\nÈ possibile restringere i criteri di ricerca selezionando il tipo di registro, l'utente che ha eseguito l'azione, e/o la pagina interessata (entrambi i campi sono sensibili al maiuscolo/minuscolo).",
        "tooltip-ca-nstab-main": "Vedi la voce",
        "tooltip-ca-nstab-user": "Vedi la pagina utente",
        "tooltip-ca-nstab-media": "Vedi la pagina del file multimediale",
-       "tooltip-ca-nstab-special": "Questa è una pagina speciale, non può essere modificata",
+       "tooltip-ca-nstab-special": "Questa è una pagina speciale e non può essere modificata",
        "tooltip-ca-nstab-project": "Vedi la pagina di servizio",
        "tooltip-ca-nstab-image": "Vedi la pagina del file",
        "tooltip-ca-nstab-mediawiki": "Vedi il messaggio di sistema",
        "logentry-newusers-create2": "L'utenza $3 è stata {{GENDER:$2|creata}} da $1",
        "logentry-newusers-byemail": "L'utenza $3 è stata {{GENDER:$2|creata}} da $1 e la password è stata inviata via email",
        "logentry-newusers-autocreate": "L'utenza $1 è stata {{GENDER:$2|creata}} automaticamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|ha spostato}} le impostazioni di protezione da $4 a $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|ha modificato}} l'appartenenza di $3 dal gruppo $4 al gruppo $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ha modificato}} l'appartenenza a gruppi di $3",
        "logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa|stato/a promosso/a}} automaticamente da $4 a $5",
index acbffe3..8939be7 100644 (file)
                ]
        },
        "tog-underline": "リンクの下線:",
-       "tog-hideminor": "最近の更新に細部の編集を表示しない",
-       "tog-hidepatrolled": "最近の更新に巡回済みの編集を表示しない",
-       "tog-newpageshidepatrolled": "新しいページの一覧に巡回済みのページを表示しない",
+       "tog-hideminor": "最近の更新に細部の編集を表示しない",
+       "tog-hidepatrolled": "最近の更新に巡回済みの編集を表示しない",
+       "tog-newpageshidepatrolled": "新しいページの一覧に巡回済みのページを表示しない",
        "tog-extendwatchlist": "ウォッチリストを拡張し、最新のものだけではなくすべての変更を表示",
-       "tog-usenewrc": "最近の更新とウォッチリストで複数の変更をページごとにまとめる",
+       "tog-usenewrc": "最近の更新とウォッチリストで複数の変更をページごとにまとめる",
        "tog-numberheadings": "見出しに番号を自動的に振る",
        "tog-showtoolbar": "編集用のツールバーを表示",
        "tog-editondblclick": "ダブルクリックでページを編集",
        "tog-editsectiononrightclick": "節見出しの右クリックで節を編集できるようにする",
-       "tog-watchcreations": "自分が作成したページやアップロードしたファイルをウォッチリストに追加",
-       "tog-watchdefault": "自分が編集したページやファイルをウォッチリストに追加",
-       "tog-watchmoves": "自分が移動したページやファイルをウォッチリストに追加",
-       "tog-watchdeletion": "自分が削除したページやファイルをウォッチリストに追加",
-       "tog-watchrollback": "ロールバックしたページをウォッチリストに追加",
-       "tog-minordefault": "ç´°é\83¨ã\81®ç·¨é\9b\86ã\81«既定でチェックを入れる",
+       "tog-watchcreations": "è\87ªå\88\86ã\81\8cä½\9cæ\88\90ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\84ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\97ã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ",
+       "tog-watchdefault": "è\87ªå\88\86ã\81\8cç·¨é\9b\86ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\84ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ",
+       "tog-watchmoves": "è\87ªå\88\86ã\81\8c移å\8b\95ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\84ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ",
+       "tog-watchdeletion": "è\87ªå\88\86ã\81\8cå\89\8aé\99¤ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\84ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ",
+       "tog-watchrollback": "ã\83­ã\83¼ã\83«ã\83\90ã\83\83ã\82¯ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\92ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ",
+       "tog-minordefault": "ç´°é\83¨ã\81®ç·¨é\9b\86ã\81\99ã\81¹ã\81¦ã\81«ã\80\81既定でチェックを入れる",
        "tog-previewontop": "プレビューを編集ボックスの前に配置",
        "tog-previewonfirst": "編集開始時にもプレビューを表示",
-       "tog-enotifwatchlistpages": "ウォッチリストにあるページやファイルが更新されたらメールを受け取る",
-       "tog-enotifusertalkpages": "自分のトークページが更新されたらメールを受け取る",
+       "tog-enotifwatchlistpages": "ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«ã\81\82ã\82\8bã\83\9aã\83¼ã\82¸ã\82\84ã\83\95ã\82¡ã\82¤ã\83«ã\81\8cæ\9b´æ\96°ã\81\95ã\82\8cã\81\9fã\82\89ã\80\81ã\83¡ã\83¼ã\83«ã\82\92å\8f\97ã\81\91å\8f\96ã\82\8b",
+       "tog-enotifusertalkpages": "è\87ªå\88\86ã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81\8cæ\9b´æ\96°ã\81\95ã\82\8cã\81\9fã\82\89ã\80\81ã\83¡ã\83¼ã\83«ã\82\92å\8f\97ã\81\91å\8f\96ã\82\8b",
        "tog-enotifminoredits": "ページやファイルへの細部の編集でもメールを受け取る",
        "tog-enotifrevealaddr": "通知メールで自分のメールアドレスを明示",
        "tog-shownumberswatching": "ページをウォッチしている利用者数を表示",
        "tog-oldsig": "既存の署名:",
        "tog-fancysig": "署名をウィキ文として扱う (自動リンクなし)",
        "tog-uselivepreview": "ライブプレビューを使用",
-       "tog-forceeditsummary": "要約欄が空欄の場合に確認をす",
+       "tog-forceeditsummary": "要約欄が空欄の場合に確認をうながす",
        "tog-watchlisthideown": "自分の編集をウォッチリストに表示しない",
        "tog-watchlisthidebots": "ボットによる編集をウォッチリストに表示しない",
        "tog-watchlisthideminor": "細部の編集をウォッチリストに表示しない",
        "underline-always": "常に付ける",
        "underline-never": "常に付けない",
        "underline-default": "外装またはブラウザーの既定値を使用",
-       "editfont-style": "編集エリアのフォント:",
+       "editfont-style": "編集エリアのフォント形式:",
        "editfont-default": "ブラウザーの設定を使用",
        "editfont-monospace": "等幅フォント",
        "editfont-sansserif": "サンセリフ体のフォント",
        "about": "解説",
        "article": "本文",
        "newwindow": "(新しいウィンドウで開きます)",
-       "cancel": "中止",
+       "cancel": "取り消し",
        "moredotdotdot": "続き...",
        "morenotlisted": "この一覧は完全ではありません。",
        "mypage": "ページ",
        "lastmodifiedat": "このページの最終更新日時は $1 $2 です。",
        "viewcount": "このページは {{PLURAL:$1|$1 回}}アクセスされました。",
        "protectedpage": "保護されたページ",
-       "jumpto": "移動:",
+       "jumpto": "移動:",
        "jumptonavigation": "案内",
        "jumptosearch": "検索",
        "view-pool-error": "申し訳ありませんが、現在サーバーに過大な負荷がかかっています。\nこのページを閲覧しようとする利用者が多すぎます。\nしばらく時間を置いてから、もう一度このページにアクセスしてみてください。\n\n$1",
        "nstab-image": "ファイル",
        "nstab-mediawiki": "メッセージ",
        "nstab-template": "テンプレート",
-       "nstab-help": "ヘルプ",
+       "nstab-help": "ヘルプページ",
        "nstab-category": "カテゴリ",
        "nosuchaction": "そのような操作はありません",
        "nosuchactiontext": "この URL で指定された操作は正しくありません。\nURL を間違って入力したか、正しくないリンクをたどった可能性があります。\n{{SITENAME}}が利用するソフトウェアのバグの可能性もあります。",
        "databaseerror-error": "エラー: $1",
        "laggedslavemode": "<strong>警告:</strong> ページに最新の編集が反映されていない可能性があります。",
        "readonly": "データベースがロックされています",
-       "enterlockreason": "ã\83­ã\83\83ã\82¯ã\81®ç\90\86ç\94±ã\81¨ã\83­ã\83\83ã\82¯è§£é\99¤ã\81®äº\88å®\9aã\82\92入力してください",
+       "enterlockreason": "ã\83­ã\83\83ã\82¯ã\81®ç\90\86ç\94±ã\81®å\85¥å\8a\9bã\81¨ã\80\81ã\83­ã\83\83ã\82¯è§£é\99¤ã\81®äº\88å®\9aã\82\92ã\80\81入力してください",
        "readonlytext": "データベースは現在、新しいページの追加や編集を受け付けない「ロック状態」になっています。これはおそらくデータベースの定期メンテナンスのためで、メンテナンス終了後は正常な状態に復帰します。\n\nデータベースをロックした管理者による説明は以下の通りです: $1",
        "missing-article": "指定されたページ「$1」$2 の本文がデータベース内で見つかりませんでした。\n\n通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。\n\nそれ以外の操作でこのメッセージが表示された場合、ソフトウェアのバグである可能性があります。\n[[Special:ListUsers/sysop|管理者]]までその URL を添えてお知らせください。",
        "missingarticle-rev": "(版番号: $1)",
        "directoryreadonlyerror": "ディレクトリー「$1」は読み取り専用です。",
        "directorynotreadableerror": "ディレクトリー「$1」は読み取りできません。",
        "filenotfound": "ファイル「$1」が見つかりませんでした。",
-       "unexpected": "äº\88æ\9c\9fã\81\97ã\81ªã\81\84å\80¤ã\80\8c$1ã\80\8d\80\8c$2ã\80\8dã\81§ã\81\99ã\80\82",
+       "unexpected": "äº\88æ\9c\9fã\81\97ã\81ªã\81\84å\80¤ã\81§ã\81\99ã\80\82\80\8c$1ã\80\8d\80\8c$2ã\80\8d",
        "formerror": "エラー: フォームを送信できませんでした。",
        "badarticleerror": "このページでは要求された操作を行えません。",
        "cannotdelete": "ページまたはファイル「$1」を削除できませんでした。\n他の人が既に削除した可能性があります。",
        "no-null-revision": "ページ「$1」に新しい空編集の版を作成できませんでした。",
        "badtitle": "正しくないページ名",
        "badtitletext": "無効または空のページ名が指定されたか、言語間/ウィキ間リンクの方法に誤りがあります。\nページ名に使用できない文字が含まれている可能性があります。",
-       "title-invalid-empty": "指定されたページ名は空もしくは名前空間しか含んでいません。",
+       "title-invalid-empty": "æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸å\90\8dã\81¯ç©ºã\81§ã\81\82ã\82\8bã\81\8bã\80\81ã\82\82ã\81\97ã\81\8fã\81¯å\90\8då\89\8d空é\96\93ã\81\97ã\81\8bå\90«ã\82\93ã\81§ã\81\84ã\81¾ã\81\9bã\82\93ã\80\82",
        "title-invalid-utf8": "指定されたページ名が無効なUTF-8シーケンスを含んでいます。",
-       "title-invalid-interwiki": "指定されたページ名がページ名として使用できないウィキ間リンクを含んでいます。",
+       "title-invalid-interwiki": "æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸å\90\8dã\81\8cã\80\81ã\83\9aã\83¼ã\82¸å\90\8dã\81¨ã\81\97ã\81¦ä½¿ç\94¨ã\81§ã\81\8dã\81ªã\81\84ã\82¦ã\82£ã\82­é\96\93ã\83ªã\83³ã\82¯ã\82\92å\90«ã\82\93ã\81§ã\81\84ã\81¾ã\81\99ã\80\82",
        "title-invalid-talk-namespace": "指定されたページは存在し得ないトークページです。",
        "title-invalid-characters": "指定されたページ名が無効な文字 \"$1\" を含んでいます。",
        "title-invalid-relative": "タイトルは相対パスを持っています。相対ページタイトル(./, ../)は無効であり、なぜならば利用者のブラウザでは多くの場合に到達不能だからです。",
        "title-invalid-magic-tilde": "指定されたページ名は無効なチルダ文字列 (<nowiki>~~~</nowiki>) を含んでいます。",
        "title-invalid-too-long": "指定されたページ名が長すぎます。UTF-8エンコードで $1 バイト以下でなければなりません。",
-       "title-invalid-leading-colon": "指定されたページ名の先頭に無効なコロンが含まれています。",
+       "title-invalid-leading-colon": "指定されたページ名の先頭に無効なコロンが含まれています。",
        "perfcached": "以下のデータはキャッシュされており、最新ではない可能性があります。最大 $1 {{PLURAL:$1|件の結果}}がキャッシュされます。",
        "perfcachedts": "以下のデータはキャッシュされており、最終更新日時は $1 です。最大 $4 {{PLURAL:$4|件の結果}}がキャッシュされます。",
        "querypage-no-updates": "ページの更新は無効になっています。\n以下のデータの更新は現在行われていません。",
        "createacct-yourpasswordagain-ph": "パスワードを再入力",
        "remembermypassword": "このブラウザーにログイン情報を保存 (最長 $1 {{PLURAL:$1|日|日間}})",
        "userlogin-remembermypassword": "ログイン状態を保持",
-       "userlogin-signwithsecure": "SSL (https) 接続を使用",
-       "yourdomainname": "ドメイン:",
+       "userlogin-signwithsecure": "安全な接続の使用",
+       "yourdomainname": "ã\81\82ã\81ªã\81\9fã\81®ã\83\89ã\83¡ã\82¤ã\83³:",
        "password-change-forbidden": "このウィキではパスワードを変更できません。",
-       "externaldberror": "認証データベースでエラーが発生した、または外部アカウントの更新が許可されていません。",
+       "externaldberror": "èª\8d証ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81§ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81\9fã\81\8bã\80\81ã\81¾ã\81\9fã\81¯å¤\96é\83¨ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®æ\9b´æ\96°ã\81\8c許å\8f¯ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\9bã\82\93ã\80\82",
        "login": "ログイン",
        "nav-login-createaccount": "ログインまたはアカウント作成",
        "userlogin": "ログインまたはアカウント作成",
        "nocookieslogin": "{{SITENAME}}ではログインに Cookie を使用します。\nCookie を無効にしているようです。\nCookie を有効にしてから、もう一度試してください。",
        "nocookiesfornew": "発信元を確認できなかったため、アカウントは作成されませんでした。\nCookieを有効にしていることを確認して、このページを再読込してもう一度試してください。",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
-       "noname": "利用者名を正しく指定していません。",
+       "noname": "有効な利用者名が指定されていません。",
        "loginsuccesstitle": "ログイン成功",
        "loginsuccess": "<strong>{{SITENAME}}に「$1」としてログインしました。</strong>",
        "nosuchuser": "「$1」という名前の利用者は見当たりません。\n利用者名では大文字と小文字を区別します。\n綴りが正しいことを確認するか、[[Special:UserLogin/signup|新たにアカウントを作成]]してください。",
        "passwordreset-emailtitle": "{{SITENAME}}上のアカウントの詳細",
        "passwordreset-emailtext-ip": "誰か (おそらくあなた、IP アドレス $1) が {{SITENAME}} ($4)\nでのパスワードを再設定するよう申請しました。\n以下の利用者{{PLURAL:$3|アカウント|アカウント群}}がこのメールアドレスと紐付けられています。\n\n$2\n\n{{PLURAL:$3|この仮パスワード|これらの仮パスワード}}は {{PLURAL:$5|$5 日|$5 日間}}で有効期限が切れます。\nあなたはすぐにログインして新しいパスワードを設定する必要があります。\nこれが他の誰かによる申請である場合、あるいはあなたが自分の元のパスワードを\n覚えていてそれを変更したくない場合には、このメッセージを無視して以前のパスワードを\n使用し続けることができます。",
        "passwordreset-emailtext-user": "{{SITENAME}} の利用者 $1 があなたの {{SITENAME}} ($4)\nでのパスワードを再設定するよう申請しました。\n以下の利用者{{PLURAL:$3|アカウント|アカウント群}}がこのメールアドレスと紐付けられています。\n\n$2\n\n{{PLURAL:$3|この仮パスワード|これらの仮パスワード}}は{{PLURAL:$5|$5日}}で有効期限が切れます。\nあなたは、すぐにログインして新しいパスワードを設定する必要があります。\nこの申請が他の誰かによるものの場合、あるいはあなたが自分の元のパスワードを\n覚えていて、変更したくない場合は、このメッセージを無視して\n以前のパスワードを使い続けることができます。",
-       "passwordreset-emailelement": "利用者名: $1\n仮パスワード: $2",
+       "passwordreset-emailelement": "利用者名: \n$1\n\n仮パスワード: \n$2",
        "passwordreset-emailsent": "パスワード再設定メールをお送りしました。",
        "passwordreset-emailsent-capture": "下記の内容の、パスワード再設定メールをお送りしました。",
        "passwordreset-emailerror-capture": "以下の内容のパスワード再設定メールを生成しましたが、{{GENDER:$2|利用者}}への送信に失敗しました: $1",
        "changeemail-none": "(なし)",
        "changeemail-password": "{{SITENAME}}のパスワード:",
        "changeemail-submit": "メールアドレスを変更",
-       "changeemail-throttled": "ログインの試行回数が多すぎます。\n$1待ってから再度試してください。",
+       "changeemail-throttled": "ログインの試行回数が多すぎます。\n$1、待ってから再度試してください。",
+       "changeemail-nochange": "異なる新しいメールアドレスを入力してください。",
        "resettokens": "トークンの再設定",
        "resettokens-text": "ここでは、アカウントに関連付けられた特定の非公開データにアクセスするためのトークンを再設定できます。\n\nトークンを誤って他人に教えてしまった場合やあなたのアカウントが侵害された場合は、必ず再設定してください。",
        "resettokens-no-tokens": "再設定できるトークンはありません。",
        "savearticle": "ページを保存",
        "preview": "プレビュー",
        "showpreview": "プレビューを表示",
-       "showdiff": "å·®å\88\86を表示",
+       "showdiff": "å¤\89æ\9b´を表示",
        "blankarticle": "<strong>警告:</strong>作成しようとしているページの内容がありません。{{Int:savearticle}}\"をもう一度クリックすると、中身の無いページが作成されます。",
        "anoneditwarning": "<strong>警告:</strong> ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。<strong>[$1 ログイン]</strong>または<strong>[$2 アカウントを作成]</strong>すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。",
        "anonpreviewwarning": "<em>ログインしていません。投稿を保存すると、ご使用中のIPアドレスがこのページの履歴に記録されます。</em>",
        "missingcommentheader": "<strong>注意:</strong> このコメントに対する題名/見出しが空欄です。\n「{{int:savearticle}}」ボタンをもう一度押すと、空のまま編集が保存されます。",
        "summary-preview": "要約のプレビュー:",
        "subject-preview": "題名/見出しのプレビュー:",
-       "previewerrortext": "変更のプレビューを処理中にエラーが発生しました。",
+       "previewerrortext": "å¤\89æ\9b´ã\81®ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\82\92å\87¦ç\90\86中ã\81«ã\80\81ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9fã\80\82",
        "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": "このIPアドレスは、$1によりブロックされた利用者によって使用されたため、自動的にブロックされています。\n理由は次の通りです。\n\n:<em>$2</em>\n\n* ブロック開始日時: $8\n* ブロック解除予定: $6\n* ブロック対象: $7\n\n$1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロックについて問い合わせることができます。\n\nただし、[[Special:Preferences|個人設定]]に正しいメールアドレスが登録されていない場合、またはメール送信がブロックされている場合、「この利用者にメールを送信」機能を使用できないことに注意してください。\n\n現在ご使用中のIPアドレスは$3 、このブロックIDは#$5です。\nお問い合わせの際は、上記の情報を必ず書いてください。",
        "currentrev-asof": "$1時点における最新版",
        "revisionasof": "$1時点における版",
        "revision-info": "$1時点における{{GENDER:$6|$2}}による版$7",
-       "previousrevision": "←前の版",
-       "nextrevision": "次ã\81®ç\89\88→",
+       "previousrevision": "← 古い版",
+       "nextrevision": "æ\96°ã\81\97ã\81\84ç\89\88 →",
        "currentrevisionlink": "最新版",
        "cur": "最新",
        "next": "次",
        "histlast": "最新",
        "historysize": "({{PLURAL:$1|$1バイト}})",
        "historyempty": "(空)",
-       "history-feed-title": "変更履歴",
+       "history-feed-title": "版の履歴",
        "history-feed-description": "このウィキのこのページに関する変更履歴",
        "history-feed-item-nocomment": "$2に$1による",
        "history-feed-empty": "要求されたページは存在しません。\nこのウィキから既に削除されたか、名前が変更された可能性があります。\n[[Special:Search|このウィキの検索]]で関連する新しいページを探してみてください。",
        "history-edit-tags": "選択した版のタグを編集",
        "rev-deleted-comment": "(要約は除去されています)",
        "rev-deleted-user": "(利用者名は除去されています)",
-       "rev-deleted-event": "(記録の詳細は除去されています)",
+       "rev-deleted-event": "(ログの詳細は除去されています)",
        "rev-deleted-user-contribs": "[利用者名またはIPアドレスは除去されました - その編集は投稿記録で非表示にされています]",
        "rev-deleted-text-permission": "この版は<strong>削除されています</strong>。\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。",
        "rev-suppressed-text-permission": "この版は<strong>秘匿されています</strong>。[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 秘匿記録]に詳細情報があるかもしれません。",
        "rev-suppressed-unhide-diff": "この差分の一方の版は<strong>秘匿されています</strong>。\n[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 秘匿記録]に詳細情報があるかもしれません。\nこのまま[$1 この差分を閲覧]できます。",
        "rev-deleted-diff-view": "この差分の一方の版は<strong>削除されています</strong>。\nこの差分を閲覧できます。[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。",
        "rev-suppressed-diff-view": "この差分の一方の版は<strong>秘匿されています</strong>。\nこの差分を閲覧できます。[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 秘匿記録]に詳細情報があるかもしれません。",
-       "rev-delundel": "表示/非表示",
+       "rev-delundel": "表示/非表示 の変更",
        "rev-showdeleted": "表示",
        "revisiondelete": "版の削除と復元",
-       "revdelete-nooldid-title": "無効な対象版",
+       "revdelete-nooldid-title": "無効な対象版",
        "revdelete-nooldid-text": "この操作の対象となる版を指定していないか、指定した版が存在しないか、または最新版を非表示にしようとしています。",
        "revdelete-no-file": "指定されたファイルは存在しません。",
        "revdelete-show-file-confirm": "ファイル「<nowiki>$1</nowiki>」の削除された$2$3の版を本当に閲覧しますか?",
        "revdelete-hide-user": "投稿者の利用者名/IPアドレス",
        "revdelete-hide-restricted": "他の利用者と同様に管理者からもデータを隠す",
        "revdelete-radio-same": "(変更しない)",
-       "revdelete-radio-set": "é\9d\9eå\85¬é\96\8b",
+       "revdelete-radio-set": "é\9a ã\81\99",
        "revdelete-radio-unset": "閲覧可能",
        "revdelete-suppress": "他の利用者と同様に管理者からもデータを隠す",
        "revdelete-unsuppress": "復元版に対する制限を除去",
        "search-category": "(カテゴリ $1)",
        "search-file-match": "(ファイルの内容との一致)",
        "search-suggest": "もしかして: $1",
+       "search-rewritten": "$1 の結果を表示しています。これは $2 の代わりに検索したものです。",
        "search-interwiki-caption": "姉妹プロジェクト",
        "search-interwiki-default": "$1からの結果:",
        "search-interwiki-more": "(続き)",
        "rows": "行数:",
        "columns": "列数:",
        "searchresultshead": "検索",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">スタブリンク</a>として表示する閾値 (バイト):",
+       "stub-threshold": "スタブリンク形式 ($1)として表示する閾値 :",
+       "stub-threshold-sample-link": "サンプル",
        "stub-threshold-disabled": "無効",
        "recentchangesdays": "最近の更新に表示する日数:",
        "recentchangesdays-max": "(最大 $1 {{PLURAL:$1|日|日間}})",
        "prefs-help-watchlist-token2": "これはあなたのウォッチリスト フィードの秘密のコードです。\nこのトークンを知っている人は誰でもあなたのウォッチリストを読めてしまうため、他の人に教えないでください。\n[[Special:ResetTokens|トークンを再設定する必要がある場合はここをクリックしてください]]。",
        "savedprefs": "個人設定を保存しました。",
        "timezonelegend": "タイムゾーン:",
-       "localtime": "ローカルの時刻:",
+       "localtime": "地域の時刻:",
        "timezoneuseserverdefault": "ウィキの既定を使用 ($1)",
        "timezoneuseoffset": "その他 (時差を指定)",
        "servertime": "サーバーの時刻:",
        "default": "既定",
        "prefs-files": "ファイル",
        "prefs-custom-css": "カスタムCSS",
-       "prefs-custom-js": "カスタムJS",
+       "prefs-custom-js": "カスタムJavaScript",
        "prefs-common-css-js": "すべての外装に共通のCSSとJavaScript:",
        "prefs-reset-intro": "このページを使用すると、自分の個人設定をこのサイトの初期設定に戻せます。\nこの操作は取り消せません。",
        "prefs-emailconfirm-label": "メールアドレスの確認:",
        "prefs-advancedediting": "全般オプション",
        "prefs-editor": "エディター",
        "prefs-preview": "プレビュー",
-       "prefs-advancedrc": "詳細設定",
-       "prefs-advancedrendering": "詳細設定",
+       "prefs-advancedrc": "詳細設定",
+       "prefs-advancedrendering": "詳細設定",
        "prefs-advancedsearchoptions": "詳細設定",
-       "prefs-advancedwatchlist": "詳細設定",
+       "prefs-advancedwatchlist": "詳細設定",
        "prefs-displayrc": "表示の設定",
        "prefs-displaywatchlist": "表示の設定",
        "prefs-tokenwatchlist": "トークン",
        "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "この利用者が属するグループを変更できます。\n* チェックが入っているボックスは、この利用者がそのグループに属していることを意味します。\n* チェックが入っていないボックスは、この利用者がそのグループに属していないことを意味します。\n* 「*」はグループに一旦追加した場合に除去 (あるいはその逆) ができないことを示しています。",
        "userrights-reason": "理由:",
-       "userrights-no-interwiki": "他ウィキ上における利用者権限の編集権限はありません。",
+       "userrights-no-interwiki": "ä»\96ã\82¦ã\82£ã\82­ä¸\8aã\81«ã\81\8aã\81\91ã\82\8bå\88©ç\94¨è\80\85権é\99\90ã\81®ç·¨é\9b\86権é\99\90ã\81¯ã\80\81ã\81\82ã\82\8aã\81¾ã\81\9bã\82\93ã\80\82",
        "userrights-nodatabase": "データベース$1は存在しないか、ローカル上にありません。",
        "userrights-nologin": "利用者権限を付与するには、管理者アカウントで[[Special:UserLogin|ログイン]]する必要があります。",
        "userrights-notallowed": "あなたには利用者権限を追加/除去する権限がありません。",
        "uploaded-script-svg": "アップロードされたSVGファイルにスクリプト可能な要素「$1」が見つかりました。",
        "uploaded-hostile-svg": "アップロードされたSVGファイルのスタイル要素に安全ではないCSSが見つかりました。",
        "uploaded-event-handler-on-svg": "イベントハンドラをセットする属性 <code>$1=\"$2\"</code> は、SVGファイルを許可されていません。",
+       "uploaded-href-attribute-svg": "ローカル以外のターゲット(http://、javascript: など) と href 属性の <code>&lt;$1 $2=\"$3\"&gt;</code> は、SVGファイルで許可されません。",
+       "uploaded-href-unsafe-target-svg": "アップロードされたSVGファイルに、安全ではないターゲット <code>&lt;$1 $2=\"$3\"&gt;</code> の href が見つかりました。",
+       "uploaded-animate-svg": "アップロードされたSVGファイルに、「from」属性 <code>&lt;$1 $2=\"$3\"&gt;</code> を使用した、href を変更させる可能性がある「animate」タグが見つかりました。",
+       "uploaded-setting-event-handler-svg": "アップロードされたSVGファイルに、ブロックされているイベントハンドラ属性が設定された <code>&lt;$1 $2=\"$3\"&gt;</code> が見つかりました。",
+       "uploaded-setting-href-svg": "親要素に「href」属性を追加する「set」タグの使用がブロックされています。",
+       "uploaded-wrong-setting-svg": "リモート/データ/スクリプトのターゲットを任意の属性に追加する「set」タグの使用がブロックされています。アップロードされたSVGファイルに <code>&lt;set to=\"$1\"&gt;</code> が見つかりました。",
+       "uploaded-setting-handler-svg": "リモート/データ/スクリプトの「handler」属性を設定するSVGがブロックされています。アップロードされたSVGファイルに <code>$1=\"$2\"</code> が見つかりました。",
+       "uploaded-remote-url-svg": "リモート URL の任意のスタイルを設定するSVGがブロックされています。アップロードされたSVGファイルに <code>$1=\"$2\"</code> が見つかりました。",
+       "uploaded-image-filter-svg": "URL に画像フィルターが見つかりました: アップロードされたSVGファイルの <code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploadscriptednamespace": "この SVG ファイルは無効な名前空間「$1」を含んでいます。",
        "uploadinvalidxml": "アップロードされたファイルに含まれる XML が構文解析できませんでした。",
        "uploadvirus": "このファイルはウイルスを含んでいます!\n詳細: $1",
        "unusedimages": "使われていないファイル",
        "wantedcategories": "カテゴリページが存在しないカテゴリ",
        "wantedpages": "ページが存在しないリンク",
+       "wantedpages-summary": "そのページのみへのリダイレクトリンクを含むページを除いた、ほとんどリンクが存在しないページの一覧です。そのページへのリダイレクトリンクを含む存在しないページの一覧は、[[{{#special:BrokenRedirects}}|迷子のリダイレクトの一覧]]を参照してください。",
        "wantedpages-badtitle": "結果が、無効なページ名を含んでいます: $1",
        "wantedfiles": "ファイル情報ページが存在しないファイル",
        "wantedfiletext-cat": "以下のファイルは使用されていますが存在しません。外部リポジトリ由来のファイルは、存在していてもここに列挙される場合があります。その場合は<del>取り消し線</del>が付きます。さらに、存在しないファイルを埋め込んでいるページは[[:$1]]に列挙されます。",
        "booksources-text": "お探しの書籍の新品/中古品を販売している外部サイトへのリンクを以下に列挙します。この書籍についてさらに詳しい情報があるかもしれません:",
        "booksources-invalid-isbn": "指定した ISBN は有効ではないようです。情報源から写し間違えていないか確認してください。",
        "specialloguserlabel": "実行者:",
-       "speciallogtitlelabel": "対象 (ページまたは利用者):",
+       "speciallogtitlelabel": "対象 (ページまたは{{ns:user}}:利用者のための利用者名):",
        "log": "記録",
        "all-logs-page": "すべての公開記録",
        "alllogstext": "{{SITENAME}}の取得できる記録をまとめて表示しています。\n記録の種類、実行した利用者 (大文字小文字は区別)、影響を受けたページ (大文字小文字は区別) による絞り込みができます。",
        "sessionfailure": "ログインのセッションに問題が発生しました。\nセッション乗っ取りを防ぐため、操作を取り消しました。\n前のページへ戻って再度読み込んだ後に、もう一度試してください。",
        "changecontentmodel": "ページのコンテント・モデルの変更",
        "changecontentmodel-legend": "コンテンツモデルを変更",
-       "changecontentmodel-title-label": "ページ タイトル",
+       "changecontentmodel-title-label": "ページ",
        "changecontentmodel-model-label": "新しい コンテンツ モデル",
        "changecontentmodel-reason-label": "理由:",
        "changecontentmodel-success-title": "コンテント・モデルは変更されました",
        "tooltip-ca-nstab-main": "本文を閲覧",
        "tooltip-ca-nstab-user": "利用者ページを表示",
        "tooltip-ca-nstab-media": "メディアページを表示",
-       "tooltip-ca-nstab-special": "ã\81\93ã\82\8cã\81¯ç\89¹å\88¥ã\83\9aã\83¼ã\82¸ã\81§ã\81\99ã\80\82編集はできません。",
+       "tooltip-ca-nstab-special": "ã\81\93ã\82\8cã\81¯ç\89¹å\88¥ã\83\9aã\83¼ã\82¸ã\81§ã\81\99ã\81®ã\81§ã\80\81編集はできません。",
        "tooltip-ca-nstab-project": "プロジェクトページを表示",
        "tooltip-ca-nstab-image": "ファイルページを表示",
        "tooltip-ca-nstab-mediawiki": "システムメッセージを表示",
        "tags-edit-success": "変更が正常に適用されました。",
        "tags-edit-failure": "変更は適用できませんでした: $1",
        "tags-edit-nooldid-title": "無効な対象版",
+       "tags-edit-nooldid-text": "この関数を実行しましたが、対象の版が指定されていない、あるいは指定された版が存在しません。",
        "tags-edit-none-selected": "追加または削除するには、少なくとも1つ以上のタグを選択してください。",
        "comparepages": "ページの比較",
        "compare-page1": "ページ 1",
        "logentry-newusers-create2": "利用者アカウント $3 が $1 により{{GENDER:$2|作成されました}}",
        "logentry-newusers-byemail": "利用者アカウント $3 が $1 によって{{GENDER:$2|作成され}}、そのパスワードがメールで送信されました",
        "logentry-newusers-autocreate": "利用者アカウント $1 が自動的に{{GENDER:$2|作成されました}}",
+       "logentry-protect-move_prot": "$1 が保護設定を $4 から $3 に{{GENDER:$2|移動しました}}",
        "logentry-rights-rights": "$1 が $3 の所属グループを $4 から $5 に{{GENDER:$2|変更しました}}",
        "logentry-rights-rights-legacy": "$1 が $3 の所属グループを{{GENDER:$2|変更しました}}",
        "logentry-rights-autopromote": "$1 が $4 から $5 に自動的に{{GENDER:$2|昇格しました}}",
        "logentry-managetags-activate": "$1 がタグ \"$4\" の利用者およびボットによる使用を{{GENDER:$2|有効化しました}}。",
        "logentry-managetags-deactivate": "$1 がタグ \"$4\" の利用者およびボットによる使用を{{GENDER:$2|無効化しました}}。",
        "log-name-tag": "タグ記録",
+       "log-description-tag": "このページには、個々の版またはエントリーの記録から、利用者を追加または削除した[[Special:Tags|タグ]]が表示されます。編集の一部、削除、同様の操作として発生したときの操作はタグ付けされず、記録には表示されません。",
        "logentry-tag-update-add-revision": "$1 がページ $3 の版 $4 に{{PLURAL:$7|タグ}} $6 を{{GENDER:$2|追加しました}}",
        "logentry-tag-update-add-logentry": "$1 がページ $3 の記録項目 $5 に{{PLURAL:$7|タグ}} $6 を{{GENDER:$2|追加しました}}",
        "logentry-tag-update-remove-revision": "$1 がページ $3 の版 $4 から{{PLURAL:$9|タグ}} $8 を{{GENDER:$2|除去しました}}",
        "logentry-tag-update-remove-logentry": "$1 がページ $3 の記録項目 $5 から{{PLURAL:$9|タグ}} $8 を{{GENDER:$2|除去しました}}",
+       "logentry-tag-update-revision": "$1 がページ「$3」の版 $4 でのタグを{{GENDER:$2|更新しました}} ($6 が{{PLURAL:$7|追加}}、$8 が{{PLURAL:$9|削除}})",
+       "logentry-tag-update-logentry": "$1 がページ「$3」のエントリー $5 での記録のタグを{{GENDER:$2|更新しました}} ($6 が{{PLURAL:$7|追加}}、$8 が{{PLURAL:$9|削除}})",
        "rightsnone": "(なし)",
        "revdelete-summary": "編集内容の要約",
        "feedback-adding": "ページへのフィードバックの追加...",
        "api-error-stashfailed": "内部エラー: サーバーは一時ファイルを格納できませんでした。",
        "api-error-publishfailed": "内部エラー: サーバーは一時ファイルを発行できませんでした。",
        "api-error-stasherror": "ファイルを未公開アップロードする際にエラーが発生しました。",
+       "api-error-stashedfilenotfound": "未公開場所からアップロードしようとしましたが、隠しファイルが見つかりませんでした。",
+       "api-error-stashpathinvalid": "隠しファイルのパスが無効です。",
        "api-error-stashfilestorage": "未公開ファイルを格納する際にエラーが発生しました。",
+       "api-error-stashzerolength": "長さが0であるため、サーバーはファイルを隠しておくことができませんでした。",
        "api-error-stashnotloggedin": "未公開ファイルを保存するにはログインが必要です。",
+       "api-error-stashwrongowner": "未公開場所にアクセスしようとしていたファイルは、あなたに属していません。",
+       "api-error-stashnosuchfilekey": "未公開場所にアクセスしようとしていたファイルのキーが存在しません。",
        "api-error-timeout": "サーバーが決められた時間内に応答しませんでした。",
        "api-error-unclassified": "不明なエラーが発生しました。",
        "api-error-unknown-code": "不明なエラー:「$1」",
        "expand_templates_generate_xml": "XML 構文解析ツリーを表示",
        "expand_templates_generate_rawhtml": "HTML ソースを表示",
        "expand_templates_preview": "プレビュー",
+       "expand_templates_preview_fail_html": "<em>{{SITENAME}} ではHTMLソースが有効になっており、セッションデータの損失が生じているので、JavaScript の攻撃に対する予防措置としてプレビューは表示されません。</em>\n\n<strong>これが合法的なプレビューの試みである場合には、もう一度試してください。</strong>\nそれでも動作しない場合は、[[Special:UserLogout|ログアウト]]して再度ログインしてみてください。",
+       "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} ではHTMLソースが有効になっており、ログインしていないため、JavaScript の攻撃に対する予防措置としてプレビューは表示されません。</em>\n\n<strong>これが合法的なプレビューの試みである場合には、[[Special:UserLogin|ログイン]]してもう一度試してください。</strong>",
        "pagelanguage": "ページ言語選択",
        "pagelang-name": "ページ",
        "pagelang-language": "言語",
index bc12e9a..a31af01 100644 (file)
        "passwordreset-emailtitle": "Rincian akun nèng {{SITENAME}}",
        "passwordreset-emailtext-ip": "Ana uwong (mbok menawa Sampéyan, mawa angka IP $1) njaluk ganti tembung sandhiné Sampéyan ana ing {{SITENAME}} ($4). {{PLURAL:$3|Rèkèning|Rèkèning-rèkèning}} ngisor iki magepokan karo padunungané layang èlèktronik iki:\n\n$2\n\n{{PLURAL:$3|Tembung sandhi sawetara iki}} bakal kedaluwarsa ing {{PLURAL:$5|sak dina|$5 dina}}.\nSampéyan kudu mlebu log lan milih siji tembung sandhi anyar saiki. Yèn wong liya sing njaluk iki, utawa yèn Sampéyan jebul wis kèlingan tembung sandhiné sing lawas saéngga ora ana niyat kanggo ngganti, Sampéyan bisa ngejaraké wara-wara iki lan bacutaké nganggo tembung sandhiné lawas Sampéyan.",
        "passwordreset-emailtext-user": "Panganggo $1 seka {{SITENAME}} njaluk ganti tembung sandhiné Sampéyan ana ing {{SITENAME}} ($4). {{PLURAL:$3|Rèkèning|Rèkèning-rèkèning}} ngisor iki magepokan karo padunungané layang èlèktronik iki:\n\n$2\n\n{{PLURAL:$3|Tembung sandhi sawetara iki}} bakal kedaluwarsa ing {{PLURAL:$5|sak dina|$5 dina}}.\nSampéyan kudu mlebu log lan milih siji tembung sandhi anyar saiki. Yèn wong liya sing njaluk iki, utawa yèn Sampéyan jebul wis kèlingan tembung sandhiné sing lawas saéngga ora ana niyat kanggo ngganti, Sampéyan bisa ngejaraké wara-wara iki lan bacutaké nganggo tembung sandhiné lawas Sampéyan.",
-       "passwordreset-emailelement": "Jeneng panganggo: $1\nTembung sandhi sawetara: $2",
+       "passwordreset-emailelement": "Jeneng panganggo: \n$1\n\nTembung sandhi sawetara: \n$2",
        "passwordreset-emailsent": "Layang èlèktronik kanggo mbalèkaké tembung sandhi wis dikirim.",
        "passwordreset-emailsent-capture": "Layang èlèktronik kanggo mbalèkaké tembung sandhi wis dikirim, bisa didelok ngisor iki.",
        "passwordreset-emailerror-capture": "Layang èlèktronik pangèling tembung sandhi wis digawe, yaiku sing ditampilaké nèng ngisor iki, nanging ora kasil dikirim ing {{GENDER:$2|panganggo}}: $1",
        "emailuser": "Kirim e-mail panganggo iki",
        "emailuser-title-target": "Kirim surel ke {{GENDER:$1|pengguna}} ini",
        "emailuser-title-notarget": "Kirimi panganggo iki layang e-mail",
-       "emailpage": "Kirimi panganggo iki layang e-mail",
        "emailpagetext": "Panjenengan bisa migunakaké formulir ing ngisor kanggo ngirim layang-e marang {{GENDER:$1|panganggo}} iki.\nAlamat layang-e sing panjenengan lebokaké ing [[Special:Preferences|préferèsi panjenengan]] bakal dadi alamat \"Saka\" jroning layang-e kasebut, mula panampa layang-e bakal bisa mbalesi langsung menyang panjenengan.",
        "defemailsubject": "{{SITENAME}} layang èlèktronik saka panganggo \"$1\"",
        "usermaildisabled": "E-mail panganggo dinonaktifaké",
index 58c5ed7..3366552 100644 (file)
        "passwordreset-emailtitle": "ანგარიშის მონაცემები {{SITENAME}}-თვის",
        "passwordreset-emailtext-ip": "ვიღაცამ (შესაძლოა თქვენ, ამ IP-მისამართიდან $1) მოითხოვა თქვენი \nპაროლის თავიდან დაყენება საიტისათვის {{SITENAME}} ($4).\n{{PLURAL:$3|შემდეგი ანგარიში მიბმულია|შემდეგი ანგარიშები მიბმულია}} ამ ელ.ფოსტის მისამართზე:\n\n$2\n\n{{PLURAL:$3|ეს დროებითი პაროლი|ეს დროებითი პაროლები}} იმოქმედებს {{PLURAL:$5|ერთი დღე|$5 დღე}}.\nთქვენ უნდა შეხვიდეთ სისტემაში და აირჩიოთ ახალი პაროლი.\nთუ თქვენ არ გაგიკეთებიათ აღნიშნული მოთხოვნა, ან გაიხსენეთ თქვენი პაროლი\nდა აღარ გსურთ მისი შეცვლა, მაშინ შეგიძლიათ იგნორირება გაუკეთოთ ამ შეტყობინებას\nდა გააგრძელოთ თქვენი ძველი პაროლის გამოყენება.",
        "passwordreset-emailtext-user": "მომხმარებელმა $1 პროექტიდან {{SITENAME}} მოითხოვა თქვენი \nპაროლის თავიდან დაყენება საიტისათვის {{SITENAME}} ($4).\n{{PLURAL:$3|შემდეგი ანგარიში მიბმულია|შემდეგი ანგარიშები მიბმულია}} ამ ელ.ფოსტის მისამართზე:\n\n$2\n\n{{PLURAL:$3|ეს დროებითი პაროლი|ეს დროებითი პაროლები}} იმოქმედებს {{PLURAL:$5|ერთი დღე|$5 დღე}}.\nთქვენ უნდა შეხვიდეთ სისტემაში და აირჩიოთ ახალი პაროლი.\nთუ თქვენ არ გაგიკეთებიათ აღნიშნული მოთხოვნა, ან გაიხსენეთ თქვენი პაროლი\nდა აღარ გსურთ მისი შეცვლა, მაშინ შეგიძლიათ იგნორირება გაუკეთოთ ამ შეტყობინებას\nდა გააგრძელოთ თქვენი ძველი პაროლის გამოყენება.",
-       "passwordreset-emailelement": "მომხმარებლის სახელი: $1\nდროებითი პაროლი: $2",
+       "passwordreset-emailelement": "მომხმარებლის სახელი: \n$1\n\nდროებითი პაროლი: \n$2",
        "passwordreset-emailsent": "პაროლის თავიდან დასაყენებელი ელ.ფოსტა გაიგზავნა.",
        "passwordreset-emailsent-capture": "ქვემოთ ნაჩვენები პაროლის თავიდან დასაყენებელი წერილი გაიგზავნა.",
        "passwordreset-emailerror-capture": "ქვემოთ მოცემულია შექმნილი პაროლის დასაყენებელი წერილი, რომლის გაგზავნაც {{GENDER:$2|მომხმარებელთან}} ვერ მოხერხდა: $1 გამო",
        "emailuser": "გაუგზავნეთ იმეილი ამ მომხმარებელს",
        "emailuser-title-target": "ელ. ფოსტის მიწერა {{GENDER:$1|მომხმარებელთან}}",
        "emailuser-title-notarget": "ელ. ფოსტის გაგზავნა მომხმარებელთან",
-       "emailpage": "ელ. ფოსტა მომხმარებელს",
        "emailpagetext": "თუ ამ მომხმარებელმა თავის პარამეტრებში ელ. ფოსტის მოქმედი მისამართი მიუთითა, ქვემოთ მოყვანილი ფორმის შევსებისას შეგიძლიათ {{GENDER:$1|მისთვის}} შეტყობინების გაგზავნა. ელ. ფოსტის მისამართი, რომელიც [[Special:Preferences|თქვენს პარამეტრებში]] მიუთითეთ, დაფიქსირდება „გამომგზავნის“ ველში, რათა ადრესატმა პასუხის გაცემა შეძლოს.",
        "defemailsubject": "ელ-ფოსტა საიტის {{SITENAME}} მომხმარებლისგან „$1“",
        "usermaildisabled": "მომხმარებლის e-mail გათიშულია",
index 8b1a04d..43ce460 100644 (file)
        "passwordreset-emailtitle": "Tilɣa n umiḍan ɣef {{SITENAME}}",
        "passwordreset-emailtext-ip": "Yiwen (Ahat kečč/kem, seg tansa IP $1) yessutered awennez n awal n uɛaddi i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yeqqen|imiḍanen n iseqdacen agi qqenen}} s tansa e-mail agi :\n\n$2\n\n{{PLURAL:$3|Awal n uɛaddi uɛḍil agi ad i aff tasewti-s|Awalen n uɛaddi uɛḍilen agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.",
        "passwordreset-emailtext-user": "Aseqdac $1 ɣef {{SITENAME}} yessutered awennez n awal n uɛaddi i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yeqqen|imiḍanen n iseqdacen agi qqenen}} s tansa e-mail agi :\n\n$2\n\n{{PLURAL:$3|Awal n uɛaddi uɛḍil agi ad i aff tasewti-s|Awalen n uɛaddi uɛḍilen agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.",
-       "passwordreset-emailelement": "Isem n useqdac : $1\nAwal n uɛddi akudan : $2",
+       "passwordreset-emailelement": "Isem n useqdac : \n$1\n\nAwal n uɛddi akudan : \n$2",
        "passwordreset-emailsent": "Tirawt n uwennez n awal n uɛaddi tetwaceggaɛ.",
        "passwordreset-emailsent-capture": "Tirawt n uwennez n awal n uɛaddi tetwaceggaɛ, ẓeṛ-itt ddaw agi.",
        "passwordreset-emailerror-capture": "Tirawt n uwennez n awal n uɛaddi t-arewed, ẓeṛ-itt ddaw agi, lamaɛna aceggaɛ i {{GENDER:$2|umseqdac}} yefkad anezri : $1",
index 5ab3ec8..da2b2ce 100644 (file)
        "qbedit": "Өңдеу",
        "qbpageoptions": "Бұл бет",
        "qbmyoptions": "Беттерім",
-       "faq": "Жиі қойылатын сұрақтар",
+       "faq": "ЖҚС",
        "faqpage": "Project:Жиі қойылатын сұрақтар",
        "actions": "Әрекеттер",
        "namespaces": "Есім кеңістіктері",
        "jumpto": "Мұнда ауысу:",
        "jumptonavigation": "шарлау",
        "jumptosearch": "іздеу",
-       "view-pool-error": "Кешіріңіз, қазір серверлер шектен тыс жүктелуде.\nОсы бетті қарауға өте көп сұраныс жасалды.\nӨтініш, күте тұрыңыз және осы бетке кіруге қайта әрекет жасаңыз.\n\n$1",
+       "view-pool-error": "Кешіріңіз, қазір серверлер шектен тыс жүктелуде.\nОсы бетті қарауға өте көп сұраныс жасалды.\nКүте тұрып осы бетке қайта қатынауға қайта әрекет жасаңыз.\n\n$1",
        "generic-pool-error": "Кешіріңіз, қазір серверлер шектен тыс жүктелуде.\nОсы бетті қарауға өте көп сұраныс жасалды.\nӨтініш, күте тұрыңыз және осы бетке кіруге қайта әрекет жасаңыз.",
        "pool-timeout": "Құлыпталу уақытын күту мерзімі өтті",
        "pool-queuefull": "Сұранымдар жинақтауышысы толық",
        "passwordreset-emailtitle": "{{SITENAME}} тіркелгісі туралы анықтама",
        "passwordreset-emailtext-ip": "Әлде кім (мүмкін сіз болуыңыз, $1 IP адресінен) {{SITENAME}} сайтында ($4) құпия сөзді өзгертуге өтініш білдірді. Мына қатысушы {{PLURAL:$3|аккаунты|аккаунттары}} осы электронды почта қатысты:\n\n$2\n\n{{PLURAL:$3|Бұл уақытша құпия сөз|Бұл уақытша құпия сөздер}} {{PLURAL:$5|бір күнде|$5 күнде}}уақыты аяқталады.\nСіз кіруіңіз және жаңа құпия сөзді таңдауыңыз керек. Егер бұл өтінішті басқа біреу жасаса, немесе сіз  бұрынғы құпия сөзіңізді еске түсірсеңіз және құпия сөзді ауыстыруды қаламасаңыз, сіз бұл хабарламаны ескермей және бұрынғы құпия сөзді қолдана беруіңізге болады.",
        "passwordreset-emailtext-user": "$1 есімді қатысушы {{SITENAME}} сайтында ($4) құпия сөзді өзгертуге өтініш білдірді. Мына қатысушы {{PLURAL:$3|аккаунт|аккаунттар}} осы електронды почта қатысты:\n\n$2\n\n{{PLURAL:$3|Бұл уақытша құпия сөз|Бұл уақытша құпия сөздер}} {{PLURAL:$5|бір күнде|$5 күнде}}уақыты аяқталады.\nСіз кіруіңіз және жаңа құпия сөзді таңдауыңыз керек. Егер бұл өтінішті басқа біреу жасаса, немесе сіз  бұрынғы құпия сөзіңізді еске түсірсеңіз, және құпия сөзді ауыстыруды қаламасаңыз, сіз бұл хабарламаны ескермей және бұрыңғы құпия сөзді қолдана беруіңізге болады.",
-       "passwordreset-emailelement": "Қатысушы есімі: $1\nУақытша құпия сөз: $2",
+       "passwordreset-emailelement": "Қатысушы есімі: \n$1\n\nУақытша құпия сөз: \n$2",
        "passwordreset-emailsent": "Құпия сөзді өзгерту электронды пошта арқылы жөнелтілді.",
        "passwordreset-emailsent-capture": "Құпия сөзді өзгерту электронды пошта арқылы жөнелтілді, ол төменде көрсетілген.",
        "passwordreset-emailerror-capture": "Құпиясөзді өзгерту электрон хаты жасалды, ол төменде көрсетілген, бірақ ол {{GENDER:$2|қатысушыға}} жөнелтілмеді: $1",
        "file-info": "файл өлшемі: $1, MIME түрі: $2",
        "file-info-size": "$1 × $2 нүкте, файл өлшемі: $3, MIME түрі: $4",
        "file-info-size-pages": "$1 × $2 нүкте (пиксел), Файл өлшемі: $3, MIME түрі: $4, $5 {{PLURAL:$5|бет|бет}}",
-       "file-nohires": "Ð\96оÒ\93аÑ\80Ñ\8b ÐºÐµÒ£ÐµÐ¹Ñ\82Ñ\96лÑ\96мдегÑ\96 нұсқалары жоқ.",
+       "file-nohires": "Ð\96оÒ\93аÑ\80Ñ\8b Ð°Ð¶Ñ\8bÑ\80аÑ\82Ñ\8bлÑ\8bмдÑ\8b нұсқалары жоқ.",
        "svg-long-desc": "SVG файлы, кесімді $1 × $2 (пиксел) нүкте, файл өлшемі: $3",
        "svg-long-desc-animated": "SVG қозғалысты файлы, кесімді $1 × $2 нүкте, файл өлшемі: $3",
        "svg-long-error": "жарамсыз SVG файлы: $1",
index 6acf87f..0cc83c4 100644 (file)
        "passwordreset-emailtitle": "ព័ត៌មានលំអិតពីគណនីនៅលើ {{SITENAME}}",
        "passwordreset-emailtext-ip": "មាននរណាម្នាក់ (ប្រហែលជាខ្លួនអ្នកផ្ទាល់, មកពីអាស័យដ្ឋាន IP $1) បានស្នើសុំស្ដារពាក្យសម្ងាត់របស់អ្នកសម្រាប់ {{SITENAME}} ($4)។ {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះ\nមានជាប់ទាក់ទិននឹងអាសយដ្ឋានអ៊ីមែលនេះ៖\n\n$2\n\n{{PLURAL:$3|ពាក្យសម្ងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសម្ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។\nយកល្អអ្នកគួរតែកត់ឈ្មោះចូលរួចជ្រើសរើសពាក្យសម្ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ \nឬប្រសិនបើអ្នកនឹកឃើញពាក្យសម្ងាត់ដើមរបស់អ្នក ហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ\nបំភ្លេចអំពីសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសម្ងាត់ចាស់របស់អ្នកទៅបានហើយ។",
        "passwordreset-emailtext-user": "អ្នកប្រើប្រាស់ $1 នៅក្នុង {{SITENAME}} បានស្នើសុំស្ដារពាក្យសម្ងាត់របស់អ្នកនៅក្នុង {{SITENAME}} ($4)។\n {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះមានជាប់ទាក់ទិននឹងអាសយដ្ឋានអ៊ីមែលនេះ៖\n\n$2\n\n{{PLURAL:$3|ពាក្យសម្ងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសម្ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។\nយកល្អអ្នកគួរតែកត់ឈ្មោះចូលរួចជ្រើសរើសពាក្យសម្ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ \nឬប្រសិនបើអ្នកនឹកឃើញពាក្យសម្ងាត់ដើមរបស់អ្នក ហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ\nបំភ្លេចអំពីសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសម្ងាត់ចាស់របស់អ្នកទៅបានហើយ។",
-       "passwordreset-emailelement": "អត្តនាម៖ $1\nពាក្យសម្ងាត់បណ្ដោះអាសន្ន៖ $2",
+       "passwordreset-emailelement": "អត្តនាម៖ \n$1\n\nពាក្យសម្ងាត់បណ្ដោះអាសន្ន៖ \n$2",
        "passwordreset-emailsent": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយត្រូវបានផ្ញើទៅហើយ។",
        "passwordreset-emailsent-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានផ្ញើទៅហើយ។",
        "passwordreset-emailerror-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានបង្កើតហើយ ប៉ុន្តែការផ្ញើទៅកាន់ {{GENDER:$2|អ្នកប្រើប្រាស់}}មិនបានសំរេចទេ៖ $1",
index d4d1ce9..8176256 100644 (file)
@@ -24,7 +24,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Pavanaja",
-                       "Ananth subray"
+                       "Ananth subray",
+                       "MarcoAurelio"
                ]
        },
        "tog-underline": "ಕೊಂಡಿಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ",
        "prefs-custom-js": "ಕಸ್ಟಮ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್",
        "prefs-emailconfirm-label": "ಮಿಂಚಂಚೆ ದೃಢೀಕರಣ",
        "youremail": "ಇ-ಅಂಚೆ:",
-       "username": "{{ಲಿಂಗ:$1|ಸದಸ್ಯತ್ವದ ಹೆಸರು}}:",
+       "username": "{{GENDER:$1|ಸದಸ್ಯತ್ವದ ಹೆಸರು}}:",
        "prefs-memberingroups": "ಈ {{PLURAL:$1|ಗುಂಪಿನ|ಗುಂಪುಗಳ}} ಸದಸ್ಯ:",
        "prefs-registration": "ನೋಂದಣಿ ಸಮಯ:",
        "yourrealname": "ನಿಜ ಹೆಸರು:",
        "mailnologintext": "ಇತರ ಬಳಕೆದಾರರಿಗೆ ಇ-ಅಂಚೆ ಕಳುಹಿಸಲು ನೀವು [[Special:UserLogin|ಲಾಗ್ ಇನ್]] ಆಗಿರಬೇಕು ಮತ್ತು ನಿಮ್ಮ [[Special:Preferences|ಪ್ರಾಶಸ್ತ್ಯಗಳ ಪುಟದಲ್ಲಿ]] ಒಂದು ಧೃಡೀಕೃತ ಇ-ಅಂಚೆ ವಿಳಾಸ ನೀಡಿರಬೇಕು.",
        "emailuser": "ಈ ಸದಸ್ಯರಿಗೆ ಇ-ಅಂಚೆ ಕಳಿಸಿ",
        "emailuser-title-notarget": "ಸದಸ್ಯರಿಗೆ ವಿ-ಅ೦ಚೆ ಕಳಿಸಿ",
-       "emailpage": "ಸದಸ್ಯರಿಗೆ ವಿ-ಅ೦ಚೆ ಕಳಿಸಿ",
        "defemailsubject": "ವಿಕಿಪೀಡಿಯ ವಿ-ಅ೦ಚೆ",
        "usermaildisabled": "ಬಳಕೆದಾರರ ಮಿಂಚಂಚೆಯನ್ನು ನಿಷ್ಕ್ತಿಯಗೊಳಿಸಲಾಗಿದೆ",
        "noemailtitle": "ಯಾವುದೇ ಇ-ಅಂಚೆ ವಿಳಾಸ ಇಲ್ಲ",
index 50d183a..a909979 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} 계정에 대한 자세한 정보",
        "passwordreset-emailtext-ip": "$1 IP 주소를 사용하는 누군가가 아마 자신이 {{SITENAME}} ($4)의 비밀번호 재설정을 요청하였습니다.\n이 이메일 주소와 연관된 {{PLURAL:$3|계정}}의 목록입니다:\n\n$2\n\n{{PLURAL:$3|이 임시 비밀번호}}는 {{PLURAL:$5|$5일}} 후에 만료됩니다.\n이 비밀번호로 로그인한 후 비밀번호를 바꾸십시오. 만약 당신이 아닌 다른 사람이 요청하였거나,\n원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고\n이전의 비밀번호를 계속 사용할 수 있습니다.",
        "passwordreset-emailtext-user": "{{SITENAME}} ($4)의 사용자 $1이 비밀번호 재설정을 요청하였습니다.\n이 이메일 주소와 연관된 {{PLURAL:$3|계정}}의 목록입니다:\n\n$2\n\n{{PLURAL:$3|이 임시 비밀번호}}는 {{PLURAL:$5|$5일}} 후에 만료됩니다.\n이 비밀번호로 로그인한 후 비밀번호를 바꾸십시오. 만약 당신이 아닌 다른 사람이 요청하였거나,\n원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고\n이전의 비밀번호를 계속 사용할 수 있습니다.",
-       "passwordreset-emailelement": "사용자 이름: $1\n임시 비밀번호: $2",
+       "passwordreset-emailelement": "사용자 이름: \n$1\n\n임시 비밀번호: \n$2",
        "passwordreset-emailsent": "비밀번호 재설정 이메일을 보냈습니다.",
        "passwordreset-emailsent-capture": "비밀번호 재설정 이메일이 발송되었으며, 아래에 나타나 있습니다.",
        "passwordreset-emailerror-capture": "비밀번호 재설정 이메일이 생성되어 아래에 보여져 있지만, {{GENDER:$2|사용자}}에게 발송하는 데에는 실패했습니다: $1",
        "blockedtext": "'''사용자 계정 또는 IP 주소가 차단되었습니다.'''\n\n차단한 사람은 $1입니다.\n차단한 이유는 다음과 같습니다: $2\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n현재 당신의 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
        "autoblockedtext": "당신의 IP 주소는 $1 사용자가 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.\n차단된 이유는 다음과 같습니다:\n\n:$2\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 \"이메일 보내기\" 기능을 사용할 수 있습니다. 또한 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n\n현재 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
        "blockednoreason": "이유를 입력하지 않음",
-       "whitelistedittext": "문서를 편집하려면 $1해야 합니다.",
+       "whitelistedittext": "문서를 편집하기 전에  $1해야 합니다.",
        "confirmedittext": "문서를 고치려면 이메일 인증 절차가 필요합니다.\n[[Special:Preferences|사용자 환경 설정]]에서 이메일 주소를 입력하고 이메일 주소 인증을 해주시기 바랍니다.",
        "nosuchsectiontitle": "문단을 찾을 수 없음",
        "nosuchsectiontext": "존재하지 않는 문단을 편집하려 했습니다.\n이 문서를 보는 동안 문단이 이동되었거나 삭제되었을 수 있습니다.",
        "noarticletext": "이 문서가 현재 존재하지 않습니다.\n이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]],\n이 문서에 관련된 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인하거나,\n문서를 직접 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 편집]</span>할 수 있습니다.",
        "noarticletext-nopermission": "이 문서가 현재 존재하지 않습니다.\n이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]], 이 문서에 관련된 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span> 그러나 이 문서를 만들 수 있는 권한은 없습니다.",
        "missing-revision": "\"{{FULLPAGENAME}}\"이라는 문서의 #$1판이 존재하지 않습니다.\n\n이 문제는 주로 삭제된 문서를 가리키는 오래된 문서 역사 링크로 인해 발생합니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 확인할 수 있습니다.",
-       "userpage-userdoesnotexist": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.\n이 문서를 만들거나 편집하려면 계정이 존재하는지 확인해주세요.",
+       "userpage-userdoesnotexist": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.\n이 문서를 만들거나 편집하기 전에 계정이 존재하는지 확인해주세요.",
        "userpage-userdoesnotexist-view": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.",
        "blocked-notice-logextract": "이 사용자는 현재 차단되어 있습니다.\n해당 사용자의 최근 차단 기록을 참조하십시오:",
        "clearyourcache": "<strong>참고:</strong> 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.\n* <strong>Firefox / Safari</strong>: <em>Shift</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em> 또는 <em>Ctrl-R</em> 을 입력 (Mac에서는 <em>⌘-R</em>)\n* <strong>Google Chrome</strong>: <em>Ctrl-Shift-R</em>키를 입력 (Mac에서는 <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer</strong>: <em>Ctrl</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em>를 입력.\n* <strong>Opera</strong>: <em>도구→설정</em>에서 캐시를 비움",
        "powersearch-togglenone": "모두 제외",
        "powersearch-remember": "향후 검색에 선택 기억하기",
        "search-external": "바깥 검색",
-       "searchdisabled": "{{SITENAME}} 검색이 비활성화되어 있습니다.\n검색이 작동하지 않는 동안에는 Google(구글)을 통해 검색할 수 있습니다.\n검색 엔진의 내용은 최신이 아닐 수 있다는 점을 참고하세요.",
+       "searchdisabled": "{{SITENAME}} 검색이 비활성화되어 있습니다.\n검색이 작동하지 않는 동안에는 Google을 통해 검색할 수 있습니다.\n검색 엔진의 내용은 최신이 아닐 수 있다는 점을 참고하세요.",
        "search-error": "검색하는 동안 오류가 발생했습니다: $1",
        "preferences": "사용자 환경 설정",
        "mypreferences": "환경 설정",
        "imageinvalidfilename": "새 파일 이름이 잘못되었습니다.",
        "fix-double-redirects": "원래 제목을 가리키는 넘겨주기를 새로 고침",
        "move-leave-redirect": "옮긴 뒤 넘겨주기를 남기기",
-       "protectedpagemovewarning": "<strong>경고:</strong> 이 문서는 관리자만이 이동할 수 있도록 잠겨 있습니다.\n최근의 기록을 참조용으로 제공합니다:",
-       "semiprotectedpagemovewarning": "<strong>참고:</strong> 이 문서는 등록된 사용자만이 이동할 수 있도록 잠겨 있습니다.\n최근 기록 내용을 참고용로 제공합니다:",
+       "protectedpagemovewarning": "<strong>경고:</strong> 이 문서는 관리자만이 이동할 수 있도록 잠겨 있습니다.\n최근의 기록을 참조를 위해 아래에 제공합니다:",
+       "semiprotectedpagemovewarning": "<strong>참고:</strong> 이 문서는 등록된 사용자만이 이동할 수 있도록 잠겨 있습니다.\n최근 기록 내용을 참조를 위해 아래에 제공합니다:",
        "move-over-sharedrepo": "== 파일이 존재함 ==\n[[:$1]] 파일이 공용 저장소에 있습니다. 이 이름으로 파일을 옮기면 공용의 파일을 덮어쓰게 될 것입니다.",
        "file-exists-sharedrepo": "선택한 파일 이름은 공용 저장소에서 사용 중입니다.\n다른 이름을 선택하세요.",
        "export": "문서 내보내기",
        "tooltip-ca-nstab-main": "본문 보기",
        "tooltip-ca-nstab-user": "사용자 문서 보기",
        "tooltip-ca-nstab-media": "미디어 문서 보기",
-       "tooltip-ca-nstab-special": "이 문서는 특수 문서로, 문서 자체를 편집할 수 없습니다",
+       "tooltip-ca-nstab-special": "이 문서는 특수 문서로, 편집할 수 없습니다",
        "tooltip-ca-nstab-project": "프로젝트 문서 보기",
        "tooltip-ca-nstab-image": "파일 문서 보기",
        "tooltip-ca-nstab-mediawiki": "시스템 메시지 보기",
        "pageinfo-robot-index": "허용됨",
        "pageinfo-robot-noindex": "불허됨",
        "pageinfo-watchers": "문서를 주시하는 사용자 수",
+       "pageinfo-visiting-watchers": "이 문서를 최근에 방문한 주시하는 사용자 수",
        "pageinfo-few-watchers": "{{PLURAL:$1|주시하는 사용자}} $1명보다 적음",
        "pageinfo-redirects-name": "이 문서의 넘겨주기 수",
        "pageinfo-redirects-value": "$1개",
index ee0c69e..a8e026d 100644 (file)
@@ -8,7 +8,8 @@
                        "Reedy",
                        "Къарачайлы",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Ernác"
                ]
        },
        "tog-underline": "Джибериулени черт:",
        "passwordreset-capture-help": "Бу белгини салсагъыз, къошулуучугъа ийилген болджаллы пароль бла билдириу сизге кёргюзюллюкдю.",
        "passwordreset-email": "Электрон почтаны адреси:",
        "passwordreset-emailtitle": "{{SITENAME}} сайтдагъы тергеу джазыуну юсюнден билгиле",
-       "passwordreset-emailelement": "Къошулуучуну аты: $1\nБолджаллы пароль: $2",
+       "passwordreset-emailelement": "Къошулуучуну аты: \n$1\n\nБолджаллы пароль: \n$2",
        "passwordreset-emailsent": "Пароль бла e-mail ийилди.",
        "passwordreset-emailsent-capture": "Ийилген пароль эсгертиу e-mail тюбюрекде берилибди.",
        "passwordreset-emailerror-capture": "Пароль эсгертиу e-mail генерация этилди (тюбюрекде берилибди), аны {{GENDER:$2|къошулуучугъа}} ашырыу джетишимсиз болду, чурум: $1",
        "emailuser": "Къошулуучугъа письмо",
        "emailuser-title-target": "{{GENDER:$1|Къошулуучугъа}} электрон джазма джазыу",
        "emailuser-title-notarget": "Электрон джазма джазыу",
-       "emailpage": "Къошулуучугъа письмо джибер",
        "emailpagetext": "Бу къошулуучуну почтасына письмо джиберир ючюн бу форманы толтурургъа боллукъсуз.\nЫзына адрес болуб, сиз [[Special:Preferences|джарашдырыуларыгъызда]] джазгъан адрес белгиленникди, ол себебден сизни письмогъузну аллыкъ сизге тюз джууаб берирге мадарлы боллукъду.",
        "defemailsubject": "{{SITENAME}} — $1 къошулуучудан билдириу",
        "usermaildisabled": "Къошулуучуну электрон почтасы джукъланыбды",
index ce0f13c..83e1fd4 100644 (file)
@@ -7,7 +7,8 @@
                        "Reedy",
                        "Rentenirer",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "TTO"
                ]
        },
        "tog-underline": "Dun de Lengks ongerschtriische:",
        "versionrequiredtext": "De Väsjohn $1 vum MehdijaWikki sing Projramme es nühdich, öm di Sigg heh bruche ze künne. Süsch op [[Special:Version|de Väsjohns_Sigg]], wat mer heh för ene Schtand han.",
        "ok": "Jot!",
        "pagetitle": "$1 — {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
        "backlinksubtitle": "←&nbsp;$1",
        "retrievedfrom": "Di Sigg heh stamp vun „$1“.",
        "youhavenewmessages": "Do häs $1 ($2).",
        "createacct-benefit-body2": "{{PLURAL:$1|Sigg|Sigge|Sigge }}",
        "createacct-benefit-body3": "{{PLURAL:$1|aktive Metmaacher}}",
        "badretype": "Ding zwëij ennjejovve Paßßwööter sinn nit ejaal. Do muss De Dich för ein entscheide.",
+       "usernameinprogress": "En Zohjang för heh dä Nahme för ene Metmaacher es ald ongewähß. Donn noch jät wahde.",
        "userexists": "Ene Metmaacher met däm Name jidd et ald.\nDo muss Der ene andere Name usdenke.",
        "loginerror": "Fähler beim Enlogge",
        "createacct-error": "Fähler beim Zohjang-Aanlääje",
        "passwordreset-emailtitle": "Einzelheite för der Zohjang op {{GRAMMAR:Akkusativ|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Do künns et sällver jewääse sin, öhnswää em Internet hät vun dä IP-Adräß $1 öm\ne neu Paßwoot jefrooch, för Dinge Zohjäng op {{GRAMMAR:Akkusativ|{{SITENAME}}}}\n$4\nHeh {{PLURAL:$3|dä Metmaacher hät|di Metmaacher han|hät keine Metmaacher}} Ding e-mail Addräß:\n\n$2\n\n{{PLURAL:$3|Dat Zweschepaßwoot leuf|Di Zweschepaßwööter loufe|Kein Zweschepaßwoot leuf}} en {{PLURAL:$5|enem Daach|$5 Dääsch|keinem Daach}} uß.\nDonn Desch jäz enlogge, un e neu Paßwoot faßlääje. Wann ene Andere wi\nDo dat heh aanjestüßße hät, udder wann De Desch widder aan Ding Paßwoot\nentsenne kanns, un et nimmih ändere wells, udder es suwwisu weiß, dann\nmoß De jäz jaa nix donn, un kanns Ding Paßwoot wigger bruche.",
        "passwordreset-emailtext-user": "Dä Metmaacher $1 vun {{GRAMMAR:Dativ|{{SITENAME}}}} hät öm e neu Paßwoot jefrooch,\nför Dinge Zohjäng op {{GRAMMAR:Akkusativ|{{SITENAME}}}}\n$4\nHeh {{PLURAL:$3|dä Metmaacher hät|di Metmaacher han|hät keine Metmaacher}} Ding e-mail Addräß:\n\n$2\n\n{{PLURAL:$3|Dat Zweschepaßwoot leuf|Di Zweschepaßwööter loufe|Kein Zweschepaßwoot leuf}} en {{PLURAL:$5|enem Daach|$5 Dääsch|keinem Daach}} uß.\nDonn Desch jäz enlogge, un e neu Paßwoot faßlääje. Wann ene Andere wi\nDo dat heh aanjestüßße hät, udder wann De Desch widder aan Ding Paßwoot\nentsenne kanns, un et nimmih ändere wells, udder es suwwisu weiß, dann\nmoß De jäz jaa nix donn, un kanns Ding Paßwoot wigger bruche.",
-       "passwordreset-emailelement": "Metmaacher Name: $1\nEijmohl-Paßwoot: $2",
+       "passwordreset-emailelement": "Metmaacher Name: \n$1\n\nEijmohl-Paßwoot: \n$2",
        "passwordreset-emailsent": "En <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> met Aanjahbe zom neue Paßwoot för der Zohjang heh es verschek.",
        "passwordreset-emailsent-capture": "En <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> met Aanjahbe zom neue Paßwoot för der Zohjang heh es verschek woode. Heh dronger kanns De se lässe.",
        "passwordreset-emailerror-capture": "En <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> met Aanjahbe zom neue Paßwoot för der Zohjang heh sullt verschek wääde, ävver dat Verscheke aan {{GENDER:$2|dä|dat|dä Metmaacher|de|dat}} $2 hät nit jeflup: $1",
        "changeemail-password": "Ding Passwoot {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}}:",
        "changeemail-submit": "Lohß jonn!",
        "changeemail-throttled": "Do häs zoh öff versöhk, enzelogge. Waat $1 Ih dat De es widder probeers.",
+       "changeemail-nochange": "Jivv_en ander neuje Adräß fö_de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>",
        "resettokens": "Neue Schlößel maache",
        "resettokens-text": "Do kanns neue Schlößel maache lohße för op beschtemmpte päsöhnlesche Daate uohjriife ze künne, di met Dingem Zohjang heh ze donn han.\n\nDonn dat op jeede Fall, wann se enem Andere bikannt jewoode sin, udder wann Dinge Zohjang jeknack woode es.",
        "resettokens-no-tokens": "Et sin kein Schlößele doh, för neu ze maache.",
        "rows": "Reihe:",
        "columns": "Spalte:",
        "searchresultshead": "Beim Söhke",
-       "stub-threshold": "Lengks zopaß för <a href=\"#\" class=\"stub\">klein Sigge</a> fomatehre av esu vill <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i>:",
+       "stub-threshold": "Lengks zopaß för klein Sigge ($1) fomatehre av esu vill <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i>:",
+       "stub-threshold-sample-link": "Beijschpell_Lengk",
        "stub-threshold-disabled": "Ußjeschalldt",
        "recentchangesdays": "de Aanzahl Dähsch en de Leß met de „Neuste Änderonge“ — als Standatt:",
        "recentchangesdays-max": "(Nit mih wie {{PLURAL:$1|eine Daach|$1 Dääsh|keine Daach}})",
        "uploadjava": "Dat es en Sammel_Dattei em ZIP-Fommaat, woh en Java-.class-Datei dren shtich.\nJava-Datteie huhlaade es nit zohjelohße, weil mer domet de Enshtellunge ömjonn kann, di der ẞörver schöze un däm sing Sescherheit jarranteere.",
        "upload-source": "Wo de Daate herkumme",
        "sourcefilename": "Dattei zem huhlahde:",
-       "sourceurl": "<i lang=\"en\">URL</i> för vun eronger ze laade",
+       "sourceurl": "<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>  för vun eronger ze lahde",
        "destfilename": "Unger däm Datteinahme avschpeijschere:",
        "upload-maxfilesize": "Der jrühtßte müjjelesche Ömfang för en Dattei es $1.",
        "upload-description": "Övver di Dattei",
        "upload-copy-upload-invalid-domain": "Fun dä Domain künne mer nix noh heh huh laade. Di es nit zohjelohße.",
        "upload-dialog-title": "Dateij huhlahde",
        "upload-dialog-error": "Ene Fähler es opjetrodde",
+       "upload-dialog-warning": "En Warnong wood ußjejovve.",
        "upload-dialog-button-cancel": "Ophühre!",
        "upload-dialog-button-done": "Jedonn",
        "upload-dialog-button-save": "Faßhalde",
        "upload-dialog-label-select-file": "De ußjesöhk Dattei",
        "upload-dialog-label-infoform-title": "Eijnzelheijte",
        "upload-dialog-label-infoform-name": "Nahme",
+       "upload-dialog-label-infoform-description": "Äkliehrong",
+       "upload-dialog-label-usage-title": "Der Jebruch",
        "upload-dialog-label-usage-filename": "Dä Dattei iehre Nahme",
        "backend-fail-stream": "Mer kunnte di Dattei $1 nit övverdraare.",
        "backend-fail-backup": "Mer kunnte kein Sescherongskopih vun dä Dattei $1 maache.",
        "booksources-text": "Hee noh küdd_en Leßß met Websigge,\nwo mir {{GRAMMAR:Dative fun|{{SITENAME}}}} nix wigger med ze donn hänn,\nwo mer jät övver Böösher erfaare\nun zom Dëijl och Böösher koufe kann.\nDoför moßß De Desh mannshmool allodengs eetß ennß aanmällde,\nwat Koßte un Jefaare met sesh brenge künndt.\nWo_t jëijdt,\njonn di Lengkß hee tirrägg_op dat Booch,\nwadd_Er am Sööke sidt.",
        "booksources-invalid-isbn": "De ISBNummer schingk verkeeht ze sin. Loohr ens donoh, woh se häe kütt.",
        "specialloguserlabel": "Dä Metmaacher, dä et jedonn hät:",
-       "speciallogtitlelabel": "Betroffe wohr: (dä Tittel vun ener Sigg udder enem Metmaacher singe Name)",
+       "speciallogtitlelabel": "Betroffe wohr: (dä Tittel vun ener Sigg udder enem Metmaacher singe Nahme)",
        "log": "Logböcher ehr Opzeichnunge (all)",
        "all-logs-page": "All de öffentlich Logböcher",
        "alllogstext": "Dat heh es en jesampte Less us all dä Logböhscher {{GRAMMAR:en|{{SITENAME}}}}.\nDä Logböhscher ehre Enhald kam_mer all noh de Aat, de Metmaacher,\noder de Sigge ehr Name, un esu, einzel zoteht aanluhre.\nBei dä Name moß mer op Jruß- un Kleinschreff aachjävve.",
        "tooltip-ca-nstab-main": "Don dä Enhallt vun dä Sigg aanzeije",
        "tooltip-ca-nstab-user": "Donn di Metmaachersigg aanzeije",
        "tooltip-ca-nstab-media": "Don de Sigg övver en Mediendatei aanzeije",
-       "tooltip-ca-nstab-special": "Dat is en {{int:nstab-special}}. Do kam'mer nix draan verändere.",
+       "tooltip-ca-nstab-special": "Dat is en {{int:nstab-special}}. Do kam_mer nix draan verändere.",
        "tooltip-ca-nstab-project": "Donn di Projäksigg aanzeije",
        "tooltip-ca-nstab-image": "Don di Sigg övver heh di Dattei aanzeije",
        "tooltip-ca-nstab-mediawiki": "En Täx vum MehdijaWikki-System aanzeije",
        "autoredircomment": "Leit öm op „[[$1]]“",
        "autosumm-new": "De Sigg wood neu aanjelaat met däm Aanfang: $1",
        "autosumm-newblank": "En läddijje Sigg wood aanjelaat",
-       "size-bytes": "$1&nbsp;Bytes",
+       "size-bytes": "$1&nbsp;<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Binary Digit\">{{PLURAL:$1|Byte|Bytes|Byte}}</i>",
        "size-kilobytes": "$1&nbsp;KB",
        "size-megabytes": "$1&nbsp;MB",
        "size-gigabytes": "$1&nbsp;GB",
        "size-exabytes": "$1&nbsp;EB",
        "size-zetabytes": "$1&nbsp;ZB",
        "size-yottabytes": "$1&nbsp;YB",
-       "size-pixel": "$1&nbsp;Pixelle",
+       "size-pixel": "$1&nbsp;{{PLURAL:$1|Pixel|Pixelle|Pixel}}",
        "size-kilopixel": "$1&nbsp;Killopixelle",
        "size-megapixel": "$1&nbsp;Mejapixelle",
        "size-gigapixel": "$1&nbsp;Jijapixelle",
        "logentry-newusers-create2": "{{GENDER:$4|Dä|Dat|Dä Metmaacher|De|Dat}} $3 wood {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} $1 aanjelaat.",
        "logentry-newusers-byemail": "{{GENDER:$4|Dä|Dat|Dä Metmaacher|De|Dat}} $1 wood {{GENDER:$4|als Metmaacher|als Metmaacher||als Metmaacher|als Metmaacher}} aanjelaat un {{GENDER:$4|sing|em sing|däm sing|dä iehr|däm sing}} Paßwoot met der <i lang=\"en>e-mail</i> verscheck.",
        "logentry-newusers-autocreate": "{{GENDER:$4|Dä|Dat|Dä Metmaacher|De|Dat}} $1 wood automattesch {{GENDER:$4|als Metmaacher|als Metmaacher||als Metmaacher|als Metmaacher}} {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} $1 aanjelaat.",
+       "logentry-protect-move_prot": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Enschtällong vum schoz vun dä Sigg „$4“ noh dä Sigg „$3“ övvenumme",
        "logentry-rights-rights": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät däm Metmaacher „$3“ sing Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.",
        "logentry-rights-rights-legacy": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.",
        "logentry-rights-autopromote": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 wood automattesch vum $4 zom $5 jemaat.",
        "api-error-duplicate-popup-title": "Di {{PLURAL:$1|Dattei es|Datteie sen|Dattei es}} ald doh.",
        "api-error-empty-file": "En dä huhjelaade Dattei wohr jaa_nix dren.",
        "api-error-emptypage": "Neu läddijje Sigge aanzelääje es verbodde.",
-       "api-error-fetchfileerror": "Fähler: Beim eronger Laade hät jät nit jeflupp.",
+       "api-error-fetchfileerror": "Fähler: Beim eronger Lahde hät jät nit jeflupp.",
        "api-error-fileexists-forbidden": "En Dattei mem Name „$1“ es ald doh un mer künne se nit övverschriive.",
        "api-error-fileexists-shared-forbidden": "En Dattei mem Name „$1“ es ald en ene jemeinsamme Sammlong, un mer künne se nit övverschriive.",
        "api-error-file-too-large": "De huhjelaade Dattei wohr ze jruß.",
        "limitreport-postexpandincludesize-value": "{{PLURAL:$1|ein|$1|kein}} vun {{PLURAL:$2|einem Byte|$2 Bytes|keinem Byte}}",
        "limitreport-templateargumentsize": "Der Ömvang vun de Parrameeterre vun Schablohne",
        "limitreport-templateargumentsize-value": "{{PLURAL:$1|ein|$1|kein}} vun {{PLURAL:$2|einem Byte|$2 Bytes|keinem Byte}}",
+       "limitreport-expansiondepth": "Deefste Ußdehnong beim Öplühse",
        "limitreport-expansiondepth-value": "$1 vun $2",
        "limitreport-expensivefunctioncount": "Oproofe vun „düüre“ Fonxjuhne em Paaser",
        "limitreport-expensivefunctioncount-value": "$1 vun $2",
index ddf03c9..b877a61 100644 (file)
        "passwordreset-domain": "Domain:",
        "passwordreset-email": "Navnîşana e-nameyê:",
        "passwordreset-emailtitle": "Hûragahiyên hesab li ser {{SITENAME}}",
-       "passwordreset-emailelement": "Navê bikarhêner:$1\nŞîfreya niha:$2",
+       "passwordreset-emailelement": "Navê bikarhêner:\n$1\n\nŞîfreya niha:\n$2",
        "passwordreset-emailsent": "E-nameyeke bibîrxistinê hate şandin.",
        "changeemail": "E-nameyê biguherîne",
        "changeemail-oldemail": "Navnîşana E-nameya niha:",
        "mailnologintext": "Te gireke xwe [[Special:UserLogin|qeydbikê]] û adrêsa e-nameyan di [[Special:Preferences|tercihên xwe]] da nivîsandibe ji bo şandina e-nameyan ji bikarhênerên din ra.",
        "emailuser": "Ji bikarhêner re e-name bişîne",
        "emailuser-title-notarget": "E-nameyekê ji bikarhêner re bişîne",
-       "emailpage": "E-nameya bikarhêner",
        "defemailsubject": "{{SITENAME}} e-name",
        "noemailtitle": "Navnîşana e-name tune",
        "emailusername": "Navê bikarhêner:",
index 0dec0a0..8c5fa95 100644 (file)
@@ -22,7 +22,6 @@
        "tog-hideminor": "Соңку өзгөрүүлөрдүн тизмесинен майда өзгөрүүлөрдү жашыруу",
        "tog-hidepatrolled": "Соңку өзгөрүүлөрдүн тизмесинен күзөттөлгөн оңдоолорду жашыруу",
        "tog-newpageshidepatrolled": "Жаңы барактар тизмесинен күзөттөлгөн барактарды жашыруу",
-       "tog-hidecategorization": "Барактардын категорияларын жашыруу",
        "tog-extendwatchlist": "Бүт өзгөртүүлөрдү камтыган кеңири көзөмөл тизмеси, эң соңкуларды гана эмес",
        "tog-usenewrc": "Өзгөртүүлөрдү соңку өзгөрүүлөргө жана көзөмөл тизмеме топтоо (JavaScript талап кылынат)",
        "tog-numberheadings": "Башжазууларды автоматтык түрдө номердөө",
        "passwordreset-capture": "Чыккан катты көрүү?",
        "passwordreset-email": "E-mail дарек:",
        "passwordreset-emailtitle": "{{SITENAME}} сайтындагы эсеп жазуусу жөнүндөгү маалымат",
-       "passwordreset-emailelement": "Колдонуучу аты: $1\nУбактылуу сырсөз: $2",
+       "passwordreset-emailelement": "Колдонуучу аты: \n$1\n\nУбактылуу сырсөз: \n$2",
        "passwordreset-emailsent": "Сырсөздү алмаштыруу эмейлге жөнөтүлдү.",
        "passwordreset-emailsent-capture": "Төмөндө көрсөтүлгөн эмейлге сырсөздү алмаштыруучу кат жөнөтүлдү.",
        "passwordreset-emailerror-capture": "Төмөндө көрсөтүлгөн дарекке сырсөздү алмаштыруу кат түзүлдү,бирок аны  {{GENDER:$2|катышуучуга}} жөнөтүү оңунан чыккан жок: $1",
index aac336c..63bb0b3 100644 (file)
        "resetpass-temp-password": "Tessera temporaria:",
        "passwordreset-username": "Nomen usoris:",
        "passwordreset-email": "Inscriptio electronica:",
-       "passwordreset-emailelement": "Nomen usoris: $1\nMomentarius Tessera: $2",
+       "passwordreset-emailelement": "Nomen usoris: \n$1\n\nMomentarius Tessera: \n$2",
        "changeemail-none": "(nulla)",
        "changeemail-submit": "Inscriptionem electronicam mutare",
        "bold_sample": "Litterae pingues",
        "unusedtemplateswlh": "nexus alii",
        "randompage": "Pagina fortuita",
        "randompage-nopages": "Non est ulla pagina {{PLURAL:$2|hoc in spatio nominale|in his spatiis nominalibus}}: $1.",
+       "randomincategory-submit": "Ire",
        "randomredirect": "Redirectio fortuita",
        "randomredirect-nopages": "Non est ulla redirectio in spatio nominali \"$1\".",
        "statistics": "Census",
        "listgrouprights-addgroup-self-all": "Addere omnes greges ad rationem propriam",
        "listgrouprights-removegroup-self-all": "Removere omnes greges ex ratione propria",
        "emailuser": "Litteras electronicas usori mittere",
-       "emailpage": "Mittere litteras electronicas huic usori",
        "emailpagetext": "Forma subter nuntium ad usorem mittet.\nInscriptio electronica quam in [[Special:Preferences|praeferentiis tuis]] dedis ut \"Ab\" inscriptione apparebit. Hoc modo usor tibi directe respondere poterit.",
        "defemailsubject": "{{SITENAME}} - Litterae electronicae ab usore \"$1\"",
        "noemailtitle": "Nulla inscriptio electronica",
index a5e8183..d0d98b4 100644 (file)
@@ -60,7 +60,7 @@
        "editfont-monospace": "Tipografía que cuvre lugar fikso",
        "editfont-sansserif": "Tipografía sans-serif",
        "editfont-serif": "Tipografía serif",
-       "sunday": "Alḥad",
+       "sunday": "Alhadh",
        "monday": "Lunes",
        "tuesday": "Martes",
        "wednesday": "Miércoles",
@@ -79,7 +79,7 @@
        "march": "Março",
        "april": "Abril",
        "may_long": "Mayo",
-       "june": "Juño",
+       "june": "Junio",
        "july": "Julio",
        "august": "Agosto",
        "september": "Setiembre",
        "passwordreset-username": "Nombre de usador:",
        "passwordreset-domain": "Dominio:",
        "passwordreset-email": "Adresso de letral:",
-       "passwordreset-emailelement": "Usuario: $1\nKontrasenya temporal: $2",
+       "passwordreset-emailelement": "Usuario: \n$1\n\nKontrasenya temporal: \n$2",
        "changeemail": "Kambiar adreso de korreo elektroniko",
        "changeemail-oldemail": "Adreso de korreo elektroniko aktual:",
        "changeemail-newemail": "Muevo adreso de korreo elektroniko:",
        "emailuser": "Embia korreo elektroniko a este usuario",
        "emailuser-title-target": "Embiar un korreo elektroniko a {{Gender:$1|este usuario|esta usuaria}}",
        "emailuser-title-notarget": "Embiar un korreo elektroniko a un usuario",
-       "emailpage": "Embiar un korreo elektroniko a un usuario",
        "defemailsubject": "Korreo elektroniko del usuario \"$1\" de {{SITENAME}}",
        "emailusername": "Nombre de usuario:",
        "emailfrom": "De:",
        "watchlisttools-view": "Ver los trocamientos",
        "watchlisttools-edit": "Ver i trocar tu lista de escogidas",
        "watchlisttools-raw": "Troca tu lista de escogidas en crudo",
-       "hebrew-calendar-m1": "Tishre",
-       "hebrew-calendar-m2": "Ḥeshvan",
+       "hebrew-calendar-m1": "Tishri",
+       "hebrew-calendar-m2": "Ḥeshván",
+       "hebrew-calendar-m4": "Teveth",
+       "hebrew-calendar-m6": "Adhar",
+       "hebrew-calendar-m6a": "Adhar I",
+       "hebrew-calendar-m6b": "Adhar II",
+       "hebrew-calendar-m7": "Nissán",
+       "hebrew-calendar-m8": "Iyyar",
+       "hebrew-calendar-m9": "Siván",
+       "hebrew-calendar-m10": "Tammuz",
        "hebrew-calendar-m1-gen": "Tishre",
        "hebrew-calendar-m2-gen": "Ḥeshvan",
        "duplicate-defaultsort": "'''Aviso:''' la klave primaria para ordenamiento \"$2\" anula la primera \"$1\"",
index be5d028..a65b64a 100644 (file)
        "passwordreset-emailtitle": "Detailer vum Benotzerkont op{{SITENAME}}",
        "passwordreset-emailtext-ip": "Iergendee mat der IP-Adress $1, wahrscheinlech Dir selwer, huet d'Zrécksetze vun Ärem Passwuert op {{SITENAME}} gefrot ($4). {{PLURAL:$3|De Benotzerkont ass|D'Benutzerkonte si}} mat dëser E-Mail-Adress verbonn:\n\n$2\n\n{{PLURAL:$3|Dëst temporärt Passwuert leeft|Dës temporär Passwierder lafe}} bannent {{PLURAL:$5|engem Dag|$5 Deeg}} of.\nDir sollt Iech aloggen an een neit Passwuert festleeën. Wann een Aneren déi Ufro gemaach huet oder Dir Iech erëm un Äert Passwuert erënnere kënnt an et net ännere wëllt, kënnt Dir dës Noriicht ignoréieren an Äert aalt Passwuert weider benotzen.",
        "passwordreset-emailtext-user": "De Benotzer $1 vu(n) {{SITENAME}} huet d'Zrécksetze vun Ärem Passwuert op {{SITENAME}} gefrot ($4). {{PLURAL:$3|De Benotzerkont|D'Benutzerkonte}} \n\n$2\n\n{{PLURAL:$3|ass|si}} mat dëser E-Mail-Adress verbonn.\n\n{{PLURAL:$3|Dëst temporärt Passwuert leeft|Dës temporär Passwierder lafe}} bannent {{PLURAL:$5|engem Dag|$5 Deeg}} of.\nDir sollt Iech aloggen an een neit Passwuert festleeën. Wann een Aneren déi Ufro gemaach huet oder Dir Iech erëm un Äert Passwuert erënnere kënnt an et net ännere wëllt, kënnt Dir dës Noriicht ignoréieren an Äert aalt Passwuert weider benotzen.",
-       "passwordreset-emailelement": "Benotzernumm: $1\nTemporärt Passwuert: $2",
+       "passwordreset-emailelement": "Benotzernumm: \n$1\n\nTemporärt Passwuert: \n$2",
        "passwordreset-emailsent": "Eng Mail fir d'Passwuert zréckzesetze gouf geschéckt.",
        "passwordreset-emailsent-capture": "Eng Mail fir d'Passwuert zréckzesetze gouf geschéckt, Dir gesitt se hei drënner.",
        "passwordreset-emailerror-capture": "Eng Mail fir d'Passwuert zréckzesetze gouf geschéckt, Dir gesitt se hei drënner, awer de {{GENDER:$2|Benotzer}} konnt se net kréien: $1",
        "changeemail-password": "Äert {{SITENAME}}-Passwuert:",
        "changeemail-submit": "Mailadress änneren",
        "changeemail-throttled": "Dir hutt zevill dacks versicht Iech anzeloggen.\nWaart w.e.g. $1 ier Dir et nach eng Kéier probéiert.",
+       "changeemail-nochange": "Gitt w.e.g. eng aner nei E-Mail-Adress an.",
        "resettokens": "Token zrécksetzen",
        "resettokens-no-tokens": "Et gëtt keng Tokens fir zréck ze setzen.",
        "resettokens-tokens": "Token:",
        "rows": "Zeilen",
        "columns": "Kolonnen",
        "searchresultshead": "Sichen",
-       "stub-threshold": "Maximum (a Byte) bei deem e Link nach ëmmer am <a href=\"#\" class=\"stub\">Skizze-Format</a> gewise gëtt:",
+       "stub-threshold": "Maximum bei deem e Link nach ëmmer am Skizze-Format ($1) gewise gëtt:",
+       "stub-threshold-sample-link": "Beispill",
        "stub-threshold-disabled": "Desaktivéiert",
        "recentchangesdays": "Deeg déi an de Rezenten Ännerungen ugewise ginn:",
        "recentchangesdays-max": "(Maximal $1 {{PLURAL:$1|Dag|Deeg}})",
        "booksources-text": "Hei ass eng Lëscht mat Linken op Internetsäiten, déi nei a gebraucht Bicher verkafen. Do kann et sinn datt Dir méi Informatiounen iwwer déi Bicher fannt déi Dir sicht.",
        "booksources-invalid-isbn": "D'ISBN-Nummer déi Dir uginn hutt schéngt net gëlteg ze sinn. Kuckt w.e.g. no ob beim Kopéiere kee Feeler geschitt ass.",
        "specialloguserlabel": "Aktive Benotzer:",
-       "speciallogtitlelabel": "Zil (Titel oder Benotzer):",
+       "speciallogtitlelabel": "Zil (Titel oder {{ns:user}}:Benotzernumm fir e Benotzer):",
        "log": "Logbicher",
        "all-logs-page": "All ëffentlech Logbicher",
        "alllogstext": "Dëst ass eng kombinéiert Lëscht vu Logbicher op {{SITENAME}}.\nDir kënnt d'Siche limitéieren wann Dir e Log-Typ, e Benotzernumm (case-senisitive) oder déi gefrote Säit (och case-senisitive) agitt.",
        "tooltip-ca-nstab-main": "Contenu vun der Säit weisen",
        "tooltip-ca-nstab-user": "Benotzersäit weisen",
        "tooltip-ca-nstab-media": "Mediesäit weisen",
-       "tooltip-ca-nstab-special": "Dëst ass eng Spezialsäit. Si kann net geännert ginn.",
+       "tooltip-ca-nstab-special": "Dëst ass eng Spezialsäit a si kann net geännert ginn",
        "tooltip-ca-nstab-project": "Portalsäit weisen",
        "tooltip-ca-nstab-image": "Billersäit weisen",
        "tooltip-ca-nstab-mediawiki": "Systemmessage weisen",
index 61899f6..5b8c07d 100644 (file)
        "resetpass-submit-loggedin": "Парол дегишарун",
        "resetpass-submit-cancel": "Гьич авун",
        "passwordreset": "Парол алудна гадрун",
-       "passwordreset-legend": "Парол алудна гадрун",
        "passwordreset-username": "Уртахдин тlвар:",
        "passwordreset-domain": "Домен:",
        "passwordreset-email": "E-mail адрес",
-       "passwordreset-emailelement": "Уртахдин тIвар: $1\nВахтуналди тир пароль: $2",
+       "passwordreset-emailelement": "Уртахдин тIвар: \n$1\n\nВахтуналди тир пароль: \n$2",
        "changeemail": "Э-почта дегишарун",
        "changeemail-none": "(садни)",
        "changeemail-submit": "E-адрес дегишун",
index 192cba7..fe50952 100644 (file)
        "resetpass-wrong-oldpass": "Okozesezza ekyama eky'ekiseerabuseera oba ekyaddala ekitakola.<br />\nOyinz'okuba nga wamaze okutegeka ekya ddala ekipya oba nga wakasabayo eky'ekiseerabuseera.",
        "resetpass-temp-password": "Ekyama kyo eky'ekiseerabuseera:",
        "passwordreset": "Damu okutegeka ekyama",
-       "passwordreset-legend": "Damu okutegeka ekyama",
        "passwordreset-disabled": "Eby'okuddamu okutegeka ebyama biymirizidwa ku wiki eno.",
        "passwordreset-username": "Ery'obwa memba:",
        "passwordreset-email": "Endagiriro eya 'email':",
        "passwordreset-emailtitle": "Ebya akawunti ey'oku {{SITENAME}}",
-       "passwordreset-emailelement": "Ery'obwa memba: $1 <br />\nEkyama kyo eky'ekiseerabuseera: $2",
+       "passwordreset-emailelement": "Ery'obwa memba: \n$1\n <br />\nEkyama kyo eky'ekiseerabuseera: \n$2",
        "bold_sample": "Ennukuta z'owandika wano zonna ziba nziggumivu",
        "bold_tip": "Bw'onyiga kano, ofuna w'oyinza okuwandikira ennukuta ezo ne zivaamu nga nziggumivu",
        "italic_sample": "Ennukuta z'owandika wano zonna ziba za italiki",
        "deleteotherreason": "Nsonga ndala:",
        "deletereasonotherlist": "Nsonga ndala",
        "rollback": "Jjululako ku bikyusidwamu",
-       "rollback_short": "Jjulula nkyukakyuka",
        "rollbacklink": "julula nkyukakyuka",
        "rollbackfailed": "Okujjulula tekusobose",
        "protectlogpage": "Olukalala lw'ebifa ku mpapula ezisibidwa",
index 896496b..5350ef2 100644 (file)
        "passwordreset-emailtitle": "Gebroekersgegaeves óp {{SITENAME}}",
        "passwordreset-emailtext-ip": "Emes, wersjienlik doe, vanaaf 't IP-adres $1, haet dien gebroekersgegaeves veur {{SITENAME}} ($4) ópgevraog.\nDe volgende {{PLURAL:$3|gebroeker is|gebroekers zint}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tiedelik wachwaord vervilt|Dees tiedelike wachweurd vervallen}} euver {{PLURAL:$5|einen daag|$5 daag}}.\nMel dich aan en veranger 't wachwaord noe. Es se dit verzeuk neet zelf hes gedaon, of es se 't oorspronkelik wachwaord nog kins en 't neet anges wils, laot dit berich den en blief dien aad wachwaord gebroeke.",
        "passwordreset-emailtext-user": "Gebroeker $1 op de site {{SITENAME}} haet dien gebroekersgegaeves veur {{SITENAME}} ($4) ópgevraog.\nDe volgende {{PLURAL:$3|gebroeker is|gebroekers zint}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tiedelik wachwaord vervilt|Dees tiedelike wachweurd vervallen}} euver {{PLURAL:$5|einen daag|$5 daag}}.\nMel dich aan en veranger 't wachwaord noe. Es se dit verzeuk neet zelf hes gedaon, of es se 't oorspronkelik wachwaord nog kins en 't neet anges wils, laot dit berich den en blief dien aad wachwaord gebroeke.",
-       "passwordreset-emailelement": "Gebroekersnaam: $1\nTiedelik wachwaord: $2",
+       "passwordreset-emailelement": "Gebroekersnaam: \n$1\n\nTiedelik wachwaord: \n$2",
        "passwordreset-emailsent": "d'r Is per mail 'n herinnering versjik.",
        "passwordreset-emailsent-capture": "d'r Is 'ne herinneringse-mail versjik. Deze weurt hieónger getuind.",
        "passwordreset-emailerror-capture": "d'r Is 'ne herinneringse-mail aangemaak. Deze weurt hieónger getuind. 't Verzènje nao de gebroeker is mislök óm de volgende raeje: $1",
        "mailnologin": "Gein e-mailadres bekènd veur deze gebroeker",
        "mailnologintext": "De mos zien [[Special:UserLogin|aangemèld]] en 'n gèldig e-mailadres in bie dien [[Special:Preferences|veurkäöre]] höbbe ingevuld om mail nao anger gebroekers te sjture.",
        "emailuser": "Sjik deze gebroeker 'nen e-mail",
-       "emailpage": "Sjik gebroeker 'nen e-mail",
        "emailpagetext": "Es deze gebroeker e geljig e-mailadres haet opgegaeve den kint g'r via dit formuleer e berich sjikke. 't E-mailadres wat geer heet opgegeve bie eur [[Special:Preferences|veurkäöre]] zal es versjikker aangegaeve waere.\nDae kin dös drek reazjere.",
        "defemailsubject": "E-mail van {{SITENAME}}-gebroeker \"$1\"",
        "usermaildisabled": "Gebroeker e-mail oetgezatj.",
index 3a1d771..34241d1 100644 (file)
        "passwordreset-username": "Nomme utente",
        "passwordreset-email": "Addresso e-mail:",
        "passwordreset-emailtitle": "Dettaggi account sciu {{SITENAME}}",
-       "passwordreset-emailelement": "Nomme utente: $1\nPoula segretta temporannia: $2",
+       "passwordreset-emailelement": "Nomme utente: \n$1\n\nPoula segretta temporannia: \n$2",
        "changeemail": "Cangia l'adresso e-mail",
        "changeemail-newemail": "Noeuvo adresso e-mail",
        "changeemail-none": "(nisciun)",
        "listusers-noresult": "Utente non trovöo.",
        "listgrouprights-members": "(Elenco di membri)",
        "emailuser": "Invia 'na email a st'utente chi",
-       "emailpage": "Mandighe 'na léttia elettronega",
        "defemailsubject": "{{SITENAME}} posta elettronega",
        "noemailtitle": "Nisciûn conto e-mail",
        "emailfrom": "Da",
index 264bb81..100aaaf 100644 (file)
        "resetpass-validity-soft": "La tò password l'è mìa bùna: $1\n\nTe g'harèset de catà fò 'n ótra password o clicà sö \"{{int:resetpass-submit-cancel}}\" per turnà a definìla piö tàrde.",
        "passwordreset": "Tùrna a defenéser la password",
        "passwordreset-text-one": "Empenés chèsto mòdulo per turnà a defenéser la tò password.",
-       "passwordreset-legend": "Tùrna a defenéser la password",
        "passwordreset-disabled": "La ridefinisiù de la password l'è mìa atìva sö chèsta wiki",
        "passwordreset-emaildisabled": "Le funsiù de pòsta eletrònica i è stàde disativàde sö chèsta wiki.",
        "passwordreset-username": "Nòm de ütènt",
        "passwordreset-domain": "Domini:",
        "passwordreset-email": "Indirìs e-mail:",
        "passwordreset-emailtitle": "Detài de l'ütènsa sö {{SITENAME}}",
-       "passwordreset-emailelement": "Nòm ütènt: $1\nPassword temporànea: $2",
+       "passwordreset-emailelement": "Nòm ütènt: \n$1\n\nPassword temporànea: \n$2",
        "passwordreset-emailsent": "Gh'è stat mandàt vià 'na e-mail de redefinisiù de la password.",
        "passwordreset-emailsent-capture": "Gh'è stat mandàt vià chèsta e-mail de redefinisiù de la password:",
        "changeemail": "Càmbia l'indirìs e-mail",
        "changeemail-throttled": "Te g'hét fat tròp tacc tentatìf de autenticàt, adès te g'hét de spetà $1 per püdì turnà a pröà.",
        "resettokens": "Redefenés i tokens",
        "resettokens-no-tokens": "Gh'è nisü token de redefenéser.",
-       "resettokens-legend": "Redefenés i tokens",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (valùr de adès: $2)",
        "resettokens-done": "Tokens redefinìcc.",
        "nmembers": "$1 {{PLURAL:$1|element|element}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|elemènt|elemèncc}}",
        "nrevisions": "$1 {{PLURAL:$1|reviziù}}",
-       "nviews": "$1 {{PLURAL:$1|vìzita|vìzite}}",
        "nimagelinks": "Dopràt sö $1 {{PLURAL:$1|pàgina|pàgine}}",
        "ntransclusions": "dopràt sö $1 {{PLURAL:$1|pàgina|pàgine}}",
        "specialpage-empty": "Chèsta pàgina speciàl al momènt l'è öda.",
index 88b9970..3251a49 100644 (file)
        "passwordreset-emailtitle": "جوزئیات حئساڤ ها د {{نوم مالگە}}",
        "passwordreset-emailtext-ip": "یە کئسی(گاسی خوتوٙ، ڤا تیرنئشوٙن آی پی $1) د نۊ زئنە کئردئن رازینە گوڤاردئنئتوٙ د {{SITENAME}} حاستیتە($4).\nسی کاریار «$2» یئ گئل رازینە گوڤاردئن موڤأقتی رأڤأندیاری بییە و هومبأراڤأر «$3» ە.\nأر دالئتوٙ یە بییە ئیسئ ڤاس بیائیت ڤامین ساموٙنە و یئ گئل رازینە گوڤاردئن هأنی بئهایت.\n رازینە گوڤاردئن {{PLURAL:$3|ئی رازینە یا گوڤاردئن موڤأقأتی|ئی رازینە یا گوڤاردئن موڤأقأتی}} شوما د گات {{PLURAL:$5|یئ روٙ|$5 روٙ}} باطئل بوٙە.\n\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-emailelement": "نوم کاریاری: \n$1\n\nرازینە گوڤاردئن موڤأقتی: \n$2",
        "passwordreset-emailsent": "یئ گئل رازینە گوڤاردئن هأنی سی أنجومانامە کئل بییە.",
        "passwordreset-emailsent-capture": "رازینە گوڤاردئن تازە توٙ سی أنجومانامە توٙ کئ ها د هار کئل بییە.",
        "passwordreset-emailerror-capture": "رازینە گوڤاردئن د أنجومانامە د نۊ زئنە کون کئل بییە،و ڤئ د هار دیاری میکە، ڤألی کئل بییئن ڤئ سی {{GENDER:$2|کاریار}} ناخوش سأرنجوم بییە:$1",
        "previewconflict": "ڤئرگأشت پیش سئیل د نیسئسە د راساگە ڤارو ڤیرایئشت کاری چی شئکل دیار بییئن بوٙەأر شوما  ڤئ نە سی ئمایە کئردئن ئنتئخاڤ بأکیت.",
        "session_fail_preview": "<strong>د بأخت گأن سی یە کئ رئسینە یا نئشأسجا نە د دأس دأئیمە نئمی توٙنیم کار پأردازئشت ڤیرایئشت کاری شومانە أنجوم بئمینوٙ.</strong>\nلوطف بأکیت یئ گئل ھأنی تئلاش بأکیت.\nأر ھأنی ڤئ دوروس کار نأکئرد،[[Special:UserLogout|ئوٙمائن ڤئ دأر]] نە ئزمایئشت بأکیت و د نۊ بیائیت ڤامین.",
        "session_fail_preview_html": "<strong>د بأخت گأن سی یە کئ رئسینە یا نئشأسجا نە د دأس دأئیمە نئمی توٙنیم کار پأردازئشت ڤیرایئشت کاری شومانە أنجوم بئمینوٙ.</strong>\n\n\n<em>سی یە کئ {{SITENAME}} یئ گئل رأگ ئچ تی ئم ئل کونئشتکار بییە دارە، پیش سئیل سی یە کئ د دأس چول کاریا جاڤا ئسکئریپت لیز داشتوٙە نئھوٙ بییە..</em>\n\nلوطف بأکیت یئ گئل ھأنی تئلاش بأکیت.\nأر ھأنی ڤئ دوروس کار نأکئرد،[[Special:UserLogout|ئوٙمائن ڤئ دأر]] نە ئزمایئشت بأکیت و د نۊ بیائیت ڤامین.",
-       "token_suffix_mismatch": "<strong>ویرایشتیا شما سی یه که دووارته نئر شما نیسسه یا نقطه نیائن نه د رازینه امنیتی ویرایشت د یک تیچسه.</strong>\nویرایشت سی یه که د خراو بیئن نیسسه بلگه نهاگری با رد بیه.\nای رخ ون د گاتیایی پیش میا که شما د یه گل رسینه جا پروکسی استفاده می کیت.",
-       "edit_form_incomplete": "<strong>پاره ای د ویرایشتا وه رسینه جا نمی رسن، هنی وارسی بکیت سی یه که بوینیت ویرایشتیا شما خوئه و هنی تلاش بکیت .</strong>",
+       "token_suffix_mismatch": "<strong>ڤیرایئشتیا شوما سی یە کئ دوڤارتە نیأر شوما نیسئسە یا نوقطە نیائن نە د رازینە أمینیأتی ڤیرایئشت د یأک تیچئسە رأد میکە.</strong>\nڤیرایئشت سی یە کئ د خئراڤ بییئن نیسئسە بألگە نئھاگئری با رأد بییە.\nئی روخ ڤأن د گاتیایی پیش میا کئ شوما یئ گئل  رئسینە جا پوروکسی نە ڤئ کار بئیریت.",
+       "edit_form_incomplete": "<strong>پارە یی د ڤیرایئشتیا ڤئ رئسینە جا نئمی رئسئن، د نۊ ڤارئسی بأکیت سی یە کئ د خوٙ بییئن ڤیرایئشتیا خوتوٙ ڤارئسیاری بأکیت و د نۊ تئلاش بأکیت.</strong>",
        "editing": "د حال و بال ڤیرایئشت $1",
        "creating": "راس کئردئن $1",
        "editingsection": "د حال و بال ڤیرایئشت $1 (بأرجا$1)",
        "yourdiff": "فأرخیا",
        "copyrightwarning": "لوطف بأکیت د ڤیر داشتوٙئیت کئ ئیچئ فأرض یأنە کئ ھأمە ھومیاریا شوما ڤا{{SITENAME}} د حال و بال «$2» دأرتیچ بوٙە(سی چیا تئر روئیت د $1).\nأر نئمیھایت کئ نیسئسە یا توٙ کئ فئرە ڤیرایئشت کاری بیینە و دئلحا دأرتیچ بان، د ئیچئ کئلئشوٙ نأکیت.<br />\nھأمچئنی شوما داریت ڤئ ئیما قول مئیت کئ خوتوٙ ڤئنوٙنە نیسأنیتە، یا ڤئنە د ڤئنوٙنە د یئ گئل سأرچئشمە آزاد ڤا بأرکئرد ھأمأگوٙنی یا چیایی چی ڤئ گئرتیتە.\n'''آرئنگیایی کئ صئلا دأرتیچئسئن (copyright) ھا دئشوٙ بی صئلا کئل نأکیت!'''",
        "copyrightwarning2": "لوطف بأکیت د ڤیر داشتوٙئیت کئ ئیچئ فأرض یأنە کئ ھأمە ھومیاریا شوما ڤا{{SITENAME}} د حال و بال «$2» دأرتیچ بوٙە(سی چیا تئر روئیت د $1).\nأر نئمیھایت کئ نیسئسە یا توٙ کئ فئرە ڤیرایئشت کاری بیینە و دئلحا دأرتیچ بان، د ئیچئ کئلئشوٙ نأکیت.<br />\nھأمچئنی شوما داریت ڤئ ئیما قول مئیت کئ خوتوٙ ڤئنوٙنە نیسأنیتە، یا ڤئنە د ڤئنوٙنە د یئ گئل سأرچئشمە آزاد ڤا بأرکئرد ھأمأگوٙنی یا چیایی چی ڤئ گئرتیتە.\n'''آرئنگیایی کئ صئلا دأرتیچئسئن (copyright) ھا دئشوٙ بی صئلا کئل نأکیت!'''",
-       "longpageerror": "<strong>خطا:نیسسه شما  {{PLURAL:$1|یه کلوبایت|$1 کلوبایت}}  درازی نه دئه، که ونو د بیشرونه انازه{{PLURAL:$2|یه کلوبایت|$2 کلوبایت}} گپترن.</strong>\nنبوئه وه اماییه با.",
-       "readonlywarning": "<strong>زئنار:رسینه گا سی واداشت قلف بیه، سی یه نه که شما ایسه نمی تونیت ویرایشتیاتونه اماییه بکیت.</strong>\nشات شما بحایت که نیسسه خوتونه د جانیا نیسسه ای وردار بدیس بکیت و ونه سی نهاتر اماییه بکیت.\n\nدیوونداری که ونه قلف کرده چنی گوته:$1",
-       "protectedpagewarning": "<strong>زئنار:ای بلگه سی یه پر و پیم بیه که کاریاریایی که دسرسی دیوونداری دارن فقط بتونن دش ویرایشت بکن.</strong>\nآخرین سیائه سی سرچشمه یا د هار اماییه کاری بیه:",
+       "editpage-cannot-use-custom-model": "شیڤە مینوٙنە یا ئی بألگە نأتوٙنە آلئشتکاری بوٙە.",
+       "longpageerror": "<strong>خأطا:نیسئسە شوما {{PLURAL:$1|یە کئلوٙبایت|$1 کئلوبایت}} دئرازا نە دأە، کئ ڤئنوٙ د بیشتأروٙنە أنازە {{PLURAL:$2|یە کئلوبایت|$2 کئلوبایت}} گأپتأرئن.</strong>\nنأبوٙە ڤئ ئمایە با.",
+       "readonlywarning": "<strong>د ڤیر داشتوٙئیت:رئسینە گا سی ڤاداشت کاری نئھاگئری بییە، سی یە نە کئ شوما ئیسە نئمی توٙنیت ڤیرایئشت کاریاتوٙنە ئمایە بأکیت.</strong>\nگاسی شوما بئھایت کئ نیسئسە خوتوٙنە د جانیا نیسئسە یی ڤوردار بئدیس بأکیت و ڤئنە سی نئھاتئر ئمایە بأکیت.\n\nدیڤوٙنداری کئ د ڤئ نئھاگئری کئردە چئنی گوتە:$1",
+       "protectedpagewarning": "<strong>د ڤیر داشتوٙئیت:ئی بألگە سی یە پأر و پیم بییە کئ فأقأط کاریاریایی کئ دأسرئسی دیڤوٙنداری دارئن بأتوٙنئن دئش ڤیرایئشت کاری بأکأن..</strong>\nآخئری سیاە سی سأرچئشمە یا د ھار ئمایە کاری بییە:",
        "semiprotectedpagewarning": "<strong>د ویر داشتویت:</strong> ای بلگه سی یه که فقط کاریاریا ثوت نام کرده تونستون دش ویرایشت بکه ن پر و پیم بیه.\nآخرین پهرستنومه دئه بیه سی سرچشمه هار نها اماییه بیه:",
        "cascadeprotectedwarning": "<strong>زئنار:</strong> ئی بألگە ڤئ دأس کاریاریایی کئ صئلا سأردیڤوٙنکاری دارن می توٙنە ڤیرایئشت کاری بوٙە سی یە کئ ئی بألگە ڤئ رأڤئشت تاف نئمایی پأر و پیم کاری بییە {{PLURAL:$1|بألگە|بألگە یا}}:",
        "titleprotectedwarning": "<strong>زئنار:ای بلگه پر و پیم بیه سی یه که[[ویجه:نوم گه حقوق گرو|حقوق ویجه]] باید ونه دروس بکن .</strong>\nآخرین پهرستنومه دئه بیه سی سرچشمه دئن نهااماییه بیه:",
        "action-changetags": "اضاف کردن یا جا وه جاکاری سردیسیا دل وه حایی د وانئریا و پهرستنومه یا شخصی",
        "nchanges": "$1 {{PLURAL:$1|آلشت|آلشتیا}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|د آخری دیئن}}",
-       "enhancedrc-history": "ويرگار",
+       "enhancedrc-history": "ڤیرگار",
        "recentchanges": "آلئشتیا ئیسئنی",
        "recentchanges-legend": "گزینه یا آلشتیا ایسنی",
        "recentchanges-summary": "دو بیشتر آلشتیا تازباو نه د ویکی نه د ای بلگه پیگری کو.",
        "double-redirect-fixer": "تعمیر کننه واگردونی",
        "brokenredirects": "واگردونیا بی سرانجوم",
        "brokenredirectstext": "واگردونیا نهاتر د بلگه یایی که وجود نارن هوم پیوند بینه.",
-       "brokenredirects-edit": "ویرایشت",
+       "brokenredirects-edit": "ڤیرایئشت",
        "brokenredirects-delete": "پاكسا كردن",
        "withoutinterwiki": "بلگه یایی که هوم پیوند زون نارن",
        "withoutinterwiki-summary": "بلگه یا هاری وه زون نسقه یا زونا تر هوم پیوند نبیه.",
        "minimum-size": "انازه کمترونه",
        "maximum-size": "انازه بیشترونه",
        "pagesize": "(بایتیا)",
-       "restriction-edit": "ويرايشت",
+       "restriction-edit": "ڤیرایئشت",
        "restriction-move": "جاوه جا بوئيت",
        "restriction-create": "راس كردن",
        "restriction-upload": "سوار کرد",
        "pageinfo-title": "دونسمنیا سی \"$1\"",
        "pageinfo-not-current": "د بدبختی،نبوئه که ای دونسمنیا نه سی وانئریا دماتری نهااماییه بکیت.",
        "pageinfo-header-basic": "دونسمنیا پایه",
-       "pageinfo-header-edits": "ویرایشت ویرگار",
+       "pageinfo-header-edits": "ڤیرایئشت ڤیرگار",
        "pageinfo-header-restrictions": "پر و پیم کردن بلگه",
        "pageinfo-header-properties": "چیا بلگه",
        "pageinfo-display-title": "نشو دئن سرون",
        "autosumm-newblank": "بلگه حالی دروس بیه",
        "lag-warn-normal": "شایت آلشتیا تازه تر د $1 {{PLURAL:$1|ثانیه|ثانیه یا}} د ای نومگه دیاری نکن.",
        "lag-warn-high": "شایت سی واپس رئتن فره رسینه جا، آلشتیا تازه تر د $1 {{PLURAL:$1|ثانیه|ثانیه یا}} د ای نومگه دیاری نکرده بان.",
-       "watchlistedit-normal-title": "ویرایشت سیل برگ",
+       "watchlistedit-normal-title": "ڤیرایئشت سئیل بأرگ",
        "watchlistedit-normal-legend": "ؤرداشتن سرونیا د سیل برگ",
        "watchlistedit-normal-explain": "داسونایی که هان د نومگه سیل برگه شما د هار اومائنه.\nسی پاکسا کردن داسون جعوه کناری وه نه نشودار بکیت و دگمه «{{int:Watchlistedit-normal-submit}}» نه بپورنیت.\nشما همچنی می تونیت [[Special:EditWatchlist/raw|نومگه خام نه ویرایشت بکیت]].",
        "watchlistedit-normal-submit": "ؤرداشتن سرونیا",
index 4fd8b2b..cda64a9 100644 (file)
        "passwordreset-emailtitle": "Paskyros informacija apie {{sitename}}",
        "passwordreset-emailtext-ip": "Kažkas (tikriausiai jūs, IP adresu $1) paprašė priminti jūsų slaptažodį svetainėje {{SITENAME}} ($4). Šio naudotojo {PLURAL:$3|paskyra|paskyros}} yra susietos su šiuo elektroninio pašto adresu:\n\n$2\n\n{{PLURAL:$3|Šis laikinas slaptažodis |Šie laikini slaptažodžiai}} baigs galiot po {{PLURAL:$5|vienos dienos|$5 dienų}}. \n\nJūs turėtumėte prisijungti ir pasirinkti naują slaptažodį. Jei kažkas kitas padarė šį prašymą arba jūs prisiminėte savo pirminį slaptažodį, ir jums nebereikia jo pakeisti, galite ignoruoti šį pranešimą ir toliau naudotis savo senuoju slaptažodžiu.",
        "passwordreset-emailtext-user": "Naudotojas $1 svetainėje {{SITENAME}} sukūrė užklausą slaptažodžio priminimui svetainėje {{SITENAME}}\n($4). Šio naudotojo {{PLURAL:$3|paskyra|paskyros}} susieto su šiuo elektroniniu paštu $2. \n\n{{PLURAL:$3|Šis laikinas slaptažodis|Šie laikini slaptažodžiai}} baigs galioti po {{PLURAL:$5|vienos dienos|$5 dienų}}. Jūs turėtumėte prisijungti ir pasirinkti naują slaptažodį. Jei kažkas padarė tai be jūsų žinios arba jūs prisiminėte savo pirminį slaptažodį, ir jūs nebenorite jo pakeisti, galite ignoruoti šį pranešimą ir toliau naudotis savo senuoju slaptažodžiu.",
-       "passwordreset-emailelement": "Naudotojo vardas: $1\nLaikinas slaptažodis: $2",
+       "passwordreset-emailelement": "Naudotojo vardas: \n$1\n\nLaikinas slaptažodis: \n$2",
        "passwordreset-emailsent": "Slaptažodžio priminimo laiškas buvo išsiųstas.",
        "passwordreset-emailsent-capture": "Slaptažodžio priminimo laiškas bus išsiųstas, toks koks parodytas.",
        "passwordreset-emailerror-capture": "Priminimo elektroninis laiškas buvo sukurtas, toks, koks parodytas žemiau, bet pasiuntimas naudotojui buvo nesėkmingas: $1",
        "rows": "Eilutės:",
        "columns": "Stulpeliai:",
        "searchresultshead": "Paieškos nustatymai",
-       "stub-threshold": "Puslapį žymėti <a href=\"#\" class=\"stub\">nebaigtu</a>, jei mažesnis nei:",
+       "stub-threshold": "Ribinė reikšmė nepilnų puslapių nuorodų formatavimui ($1):",
+       "stub-threshold-sample-link": "pavyzdys",
        "stub-threshold-disabled": "Išjungtas",
        "recentchangesdays": "Rodomos dienos paskutinių keitimų sąraše:",
        "recentchangesdays-max": "(daugiausiai $1 {{PLURAL:$1|diena|dienos|dienų}})",
        "tooltip-ca-nstab-main": "Rodyti puslapio turinį",
        "tooltip-ca-nstab-user": "Rodyti naudotojo puslapį",
        "tooltip-ca-nstab-media": "Rodyti media puslapį",
-       "tooltip-ca-nstab-special": "Šis puslapis yra specialusis - jo negalima redaguoti",
+       "tooltip-ca-nstab-special": "Šis puslapis yra specialusis ir jo negalima redaguoti",
        "tooltip-ca-nstab-project": "Rodyti projekto puslapį",
        "tooltip-ca-nstab-image": "Rodyti rinkmenos puslapį",
        "tooltip-ca-nstab-mediawiki": "Rodyti sisteminį pranešimą",
index 1513f00..fa8e3aa 100644 (file)
        "passwordreset-domain": "Huamchin:",
        "passwordreset-email": "E-chenhmun:",
        "passwordreset-emailtitle": "{{SITENAME}}-a siangchan chanchin kim",
-       "passwordreset-emailelement": "Hmangtuhming: $1\nThurûk lailâwk: $2",
+       "passwordreset-emailelement": "Hmangtuhming: \n$1\n\nThurûk lailâwk: \n$2",
        "passwordreset-emailsent": "Hriat nawntirna e-lehkha thawn fel a ni.",
        "passwordreset-emailsent-capture": "Hriat nawntirna e-lehkha thawn a ni, a hnuaia tarlan ang khuan.",
        "passwordreset-emailerror-capture": "Hriat nawntirna e-lehkha siam chhuah a ni a, a hnuaia tarlan ang khuan; mahsé thawn hlawhchham a ni: $1",
index 33be438..1d8f185 100644 (file)
        "tog-watchlisthideown": "Paslēpt manus labojumus uzraugāmo lapu sarakstā",
        "tog-watchlisthidebots": "Paslēpt botu labojumus uzraugāmo lapu sarakstā",
        "tog-watchlisthideminor": "Paslēpt maznozīmīgos labojumus uzraugāmo lapu sarakstā",
-       "tog-watchlisthideliu": "Paslēpt reģistrēto lietotāju labojumus uzraugāmo lapu sarakstā",
-       "tog-watchlisthideanons": "Paslēpt anonīmo lietotāju labojumus uzraugāmo lapu sarakstā",
+       "tog-watchlisthideliu": "Paslēpt reģistrēto dalībnieku labojumus uzraugāmo lapu sarakstā",
+       "tog-watchlisthideanons": "Paslēpt anonīmo dalībnieku labojumus uzraugāmo lapu sarakstā",
        "tog-watchlisthidepatrolled": "Paslēpt pārbaudītās lapas uzraugāmo lapu sarakstā",
-       "tog-ccmeonemails": "Sūtīt sev citiem lietotājiem nosūtīto epastu kopijas",
+       "tog-ccmeonemails": "Sūtīt sev citiem dalībniekiem nosūtīto epastu kopijas",
        "tog-diffonly": "Nerādīt lapu saturu zem izmaiņām",
        "tog-showhiddencats": "Rādīt slēptās kategorijas",
        "tog-norollbackdiff": "Neņemt vērā atšķirības, veicot atriti",
        "talkpage": "Diskusija par šo lapu",
        "talkpagelinktext": "Diskusija",
        "specialpage": "Īpašā Lapa",
-       "personaltools": "Lietotāja rīki",
+       "personaltools": "Dalībnieka rīki",
        "articlepage": "Apskatīt rakstu",
        "talk": "Diskusija",
        "views": "Apskates",
        "toolbox": "Rīki",
-       "userpage": "Skatīt lietotāja lapu",
+       "userpage": "Skatīt dalībnieka lapu",
        "projectpage": "Skatīt projekta lapu",
        "imagepage": "Skatīt faila lapu",
        "mediawikipage": "Skatīt paziņojuma lapu",
        "redirectedfrom": "(Pāradresēts no $1)",
        "redirectpagesub": "Pāradresācijas lapa",
        "redirectto": "Pāradresēt uz:",
-       "lastmodifiedat": "Šajā lapā pēdējās izmaiņas izdarītas $2, $1.",
+       "lastmodifiedat": "Šajā lapā pēdējo izmaiņu izdarīšanas brīdis: $2, $1.",
        "viewcount": "Šī lapa ir tikusi apskatīta $1 {{PLURAL:$1|reizes|reizi|reizes}}.",
        "protectedpage": "Aizsargāta lapa",
        "jumpto": "Pārlēkt uz:",
        "privacypage": "Project:Privātuma politika",
        "badaccess": "Atļaujas kļūda",
        "badaccess-group0": "Tev nav atļauts izpildīt darbību, kuru tu pieprasīji.",
-       "badaccess-groups": "Darbības izpilde, ko Tu pieprasīji, ir pieejama tikai $1 {{PLURAL:$2|lietotāju grupām|lietotāju grupai|lietotāju grupām}}.",
+       "badaccess-groups": "Darbības izpilde, ko Tu pieprasīji, ir pieejama tikai $1 {{PLURAL:$2|dalībnieku grupām|dalībnieku grupai|dalībnieku grupām}}.",
        "versionrequired": "Nepieciešamā ''MediaWiki'' versija: $1.",
        "versionrequiredtext": "Lai lietotu šo lapu, nepieciešama ''MediaWiki'' versija $1. Sk. [[Special:Version|versija]].",
        "ok": "Labi",
        "retrievedfrom": "Saturs iegūts no \"$1\"",
        "youhavenewmessages": "Tev ir $1 (skatīt $2).",
-       "youhavenewmessagesfromusers": "{{PLURAL:$4|Jums ir}} $1 no {{PLURAL:$3|cita lietotāja|$3 lietotājiem}} ($2).",
-       "youhavenewmessagesmanyusers": "Jums ir $1 no daudziem lietotājiem ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Jums ir}} $1 no {{PLURAL:$3|cita dalībnieka|$3 dalībniekiem}} ($2).",
+       "youhavenewmessagesmanyusers": "Jums ir $1 no daudziem dalībniekiem ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|999=jauni vēstījumi|jauns vēstījums|999=jauni vēstījumi}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|999=pēdējās izmaiņas|pēdējā izmaiņa|999=pēdējās izmaiņas}}",
        "youhavenewmessagesmulti": "Tev ir jauns ziņojums: $1",
        "sort-descending": "Kārtot dilstošā secībā",
        "sort-ascending": "Kārtot augošā secībā",
        "nstab-main": "Raksts",
-       "nstab-user": "Lietotāja lapa",
+       "nstab-user": "Dalībnieka lapa",
        "nstab-media": "Multivides lapa",
        "nstab-special": "Īpašā lapa",
        "nstab-project": "Projekta lapa",
        "nosuchuser": "Šeit nav lietotāja ar vārdu \"$1\". Lietotājvārdi ir reģistrjutīgi (lielie un mazie burti nav viens un tas pats) Pārbaudi, vai pareizi uzrakstīts, vai arī [[Special:UserLogin/signup|izveido jaunu kontu]].",
        "nosuchusershort": "Šeit nav lietotāja ar vārdu \"$1\". Pārbaudi, vai nav drukas kļūda.",
        "nouserspecified": "Tev jānorāda lietotājvārds.",
-       "login-userblocked": "Šis lietotājs ir bloķēts. Pieslēgšanās nav atļauta.",
+       "login-userblocked": "Šis dalībnieks ir bloķēts. Pieslēgšanās nav atļauta.",
        "wrongpassword": "Tu ievadīji nepareizu paroli. Lūdzu, mēģini vēlreiz.",
        "wrongpasswordempty": "Parole bija tukša. Lūdzu mēģini vēlreiz.",
        "passwordtooshort": "Tava parole ir pārāk īsa.\nTajā jābūt vismaz {{PLURAL:$1|$1 zīmēm|1 zīmei|$1 zīmēm}}.",
        "emaildisabled": "Šī vietne nevar nosūtīt e-pastus.",
        "accountcreated": "Konts izveidots",
        "accountcreatedtext": "Lietotāja konts priekš $1 tika izveidots.",
-       "createaccount-title": "Lietotāja konta izveidošana {{grammar:lokatīvs|{{SITENAME}}}}",
+       "createaccount-title": "Dalībnieka konta izveidošana {{grammar:lokatīvs|{{SITENAME}}}}",
        "login-throttled": "Jūs esat veicis pārāk daudz pieslēgšanās mēģinājumus.\nLūdzu, uzgaidiet $1 pirms mēģiniet vēlreiz.",
        "login-abort-generic": "Jūsu pieteikšanās bija neveiksmīga — Darbība pārtraukta",
        "loginlanguagelabel": "Valoda: $1",
        "passwordreset-capture": "Apskatīt izveidoto e-pastu?",
        "passwordreset-email": "E-pasta adrese:",
        "passwordreset-emailtitle": "Konta informācija {{SITENAME}}",
-       "passwordreset-emailelement": "Lietotājvārds: $1\nPagaidu parole: $2",
+       "passwordreset-emailelement": "Lietotājvārds: \n$1\n\nPagaidu parole: \n$2",
        "passwordreset-emailsent": "Paroles atiestatīšanas e-pasts ir nosūtīts.",
        "passwordreset-emailsent-capture": "Atgādinājuma e-pasta ziņojums ir nosūtīts, tas parādīts zemāk.",
        "passwordreset-emailerror-capture": "Atgādinājuma e-pasta ziņojums tika izveidots, tas parādīts zemāk, bet nosūtīšana lietotājam neizdevās: $1",
        "missingcommentheader": "'''Atgādinājums:''' Tu šim komentāram neesi norādījis virsrakstu/tematu.\nJa tu vēlreiz spiedīsi uz \"{{int:savearticle}}\", tavas izmaiņas tiks saglabātas bez virsraksta.",
        "summary-preview": "Kopsavilkuma pirmskats:",
        "subject-preview": "Kopsavilkuma/virsraksta pirmskats:",
-       "blockedtitle": "Lietotājs ir bloķēts.",
+       "blockedtitle": "Dalībnieks ir bloķēts.",
        "blockedtext": "'''Tavs lietotāja vārds vai IP adrese ir nobloķēta.'''\n\n$1 nobloķēja tavu lietotāja vārdu vai IP adresi.\nBloķējot norādītais iemesls bija: ''$2''.\n\n*Bloka sākums: $8\n*Bloka beigas: $6\n*Bija domāts nobloķēt: $7\n\nTu vari sazināties ar $1 vai kādu citu [[{{MediaWiki:Grouppage-sysop}}|administratoru]] lai apspriestu šo bloku.\n\nPievērs uzmanību, tam, ka ja tu neesi norādījis derīgu e-pasta adresi ''[[Special:Preferences|savās izvēlēs]]'', tev nedarbosies \"sūtīt e-pastu\" iespēja.\n\nTava IP adrese ir $3 un bloka identifikators ir #$5. Lūdzu iekļauj vienu no tiem, vai abus, visos turpmākajos pieprasījumos.",
        "autoblockedtext": "Tava IP adrese ir tikusi automātiski nobloķēta, tāpēc, ka to (nupat kā) ir lietojis cits lietotājs, kuru nobloķēja $1.\nNorādītais bloķēšanas iemesls bija:\n\n:''$2''\n\n* Bloka sākums: $8\n* Bloka beigas: $6\n* Bija domāts nobloķēt: $7\n\nTu vari sazināties ar $1 vai kādu citu [[{{MediaWiki:Grouppage-sysop}}|adminu]] lai apspriestu šo bloku.\n\nAtceries, ka tu nevari lietot \"sūtīt e-pastu šim lietotājam\" iespēju, ja tu neesi norādījis derīgu e-pasta adresi savās [[Special:Preferences|lietotāja izvelēs]] un bloķējot tev nav aizbloķēta iespēja sūtīt e-pastu.\n\nTava pašreizējā IP adrese ir $3 un  bloka ID ir $5.\nLūdzu iekļauj šos visos ziņojumos, kurus sūti adminiem, apspriežot šo bloku.",
        "blockednoreason": "iemesls nav norādīts",
        "noarticletext": "Šajā lapā šobrīd nav nekāda teksta, tu vari [[Special:Search/{{PAGENAME}}|meklēt citās lapās pēc šīs lapas nosaukuma]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītos reģistru ierakstos] vai arī [{{fullurl:{{FULLPAGENAME}}|action=edit}} sākt rediģēt šo lapu]</span>.",
        "noarticletext-nopermission": "Šajā lapā pašlaik nav nekāda teksta.\nTu vari [[Special:Search/{{PAGENAME}}|meklēt šīs lapas nosaukumu]] citās lapās,\nvai <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītus reģistru ierakstus]</span>, bet jums nav atļauja izveidot si lapu.",
        "userpage-userdoesnotexist": "Lietotājs \"<nowiki>$1</nowiki>\" nav reģistrēts.\nLūdzu, pārliecinies vai vēlies izveidot/izmainīt šo lapu.",
-       "userpage-userdoesnotexist-view": "Lietotājs \"$1\" nav reģistrēts.",
-       "blocked-notice-logextract": "Šis lietotājs pašlaik ir nobloķēts.\n\nPēdējais bloķēšanas reģistra ieraksts ir apskatāms zemāk:",
+       "userpage-userdoesnotexist-view": "Dalībnieks \"$1\" nav reģistrēts.",
+       "blocked-notice-logextract": "Šis dalībnieks pašlaik ir nobloķēts.\n\nPēdējais bloķēšanas reģistra ieraksts ir apskatāms zemāk:",
        "clearyourcache": "'''Piezīme:''' Lai redzētu izmaiņas, pēc saglabāšanas jums var nākties iztīrīt sava pārlūka kešatmiņu.\n* '''Firefox / Safari:''' Pieturiet ''Shift'' un klikšķiniet uz ''Pārlādēt'' vai nospiediet ''Ctrl-F5'' vai ''Ctrl-R'' (''Command-R'' uz Mac)\n* '''Google Chrome:''' Nospiediet ''Ctrl-Shift-R'' (''Command-Shift-R'' uz Mac)\n* '''Internet Explorer:''' Pieturiet ''Ctrl'' un klikšķiniet uz ''Pārlādēt'' vai nospiediet ''Ctrl-F5''\n* '''Konqueror:''' Klikšķiniet uz ''Pārlādēt'' vai nospiediet ''F5''\n* '''Opera:''' Iztīriet kešatmiņu ''Tools → Preferences''",
        "usercssyoucanpreview": "'''Ieteikums:''' Lieto pogu \"{{int:showpreview}}\", lai pārbaudītu savu jauno CSS pirms saglabāšanas.",
        "userjsyoucanpreview": "'''Ieteikums:''' Lieto pogu \"{{int:showpreview}}\", lai pārbaudītu savu jauno JavaScript pirms saglabāšanas.",
-       "usercsspreview": "'''Atceries, ka šis ir tikai tava lietotāja CSS pirmskats, lapa vēl nav saglabāta!'''",
+       "usercsspreview": "'''Atceries, ka šis ir tikai tava dalībnieka CSS pirmskats, lapa vēl nav saglabāta!'''",
        "userjspreview": "'''Atceries, ka šis ir tikai tava lietotāja JavaScript pirmskats/tests, lapa vēl nav saglabāta!'''",
        "sitecsspreview": "'''Atcerieties, ka jūs veicat tikai šī CSS priekšapskati.'''\n'''Tas vēl nav saglabāts!'''",
        "sitejspreview": "'''Atcerieties, ka jūs veicat tikai šī JavaScript koda priekšapskati.'''\n'''Tas vēl nav saglabāts!'''",
        "undo-failure": "Šo labojumu nevar atcelt, jo ir veikti nozīmīgi labojumi vēl pēc šī labojuma izdarīšanas.",
        "undo-norev": "Šo izmaiņu nevar atcelt, jo tādas nav vai tā ir izdzēsta.",
        "undo-summary": "Atcēlu [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]) izdarīto izmaiņu $1",
-       "cantcreateaccounttitle": "Nevar izveidot lietotāju",
+       "cantcreateaccounttitle": "Nevar izveidot dalībnieku",
        "cantcreateaccount-text": "[[Lietotājs:$3|$3]] ir bloķējis lietotāja izveidošanu no šīs IP adreses ('''$1''').\n\n$3 norādītais iemesls ir ''$2''",
        "viewpagelogs": "Apskatīt ar šo lapu saistītos reģistru ierakstus",
        "nohistory": "Šai lapai nav pieejama versiju hronoloģija.",
        "skin-preview": "Priekšskats",
        "datedefault": "Vienalga",
        "prefs-labs": "Laboratorijas funkcijas",
-       "prefs-user-pages": "Lietotāja lapas",
-       "prefs-personal": "Lietotāja dati",
+       "prefs-user-pages": "Dalībnieka lapas",
+       "prefs-personal": "Dalībnieka dati",
        "prefs-rc": "Pēdējās izmaiņas",
        "prefs-watchlist": "Uzraugāmie raksti",
        "prefs-editwatchlist": "Labot uzraugāmo rakstu sarakstu",
        "columns": "Simbolu skaits rindiņā:",
        "searchresultshead": "Meklēšana",
        "stub-threshold": "Slieksnis <a href=\"#\" class=\"stub\">aizmetņa saites</a> formatēšanai (baiti):",
+       "stub-threshold-sample-link": "piemērs",
        "stub-threshold-disabled": "Atslēgts",
        "recentchangesdays": "Dienu skaits, kuru rādīt pēdējās izmaiņās:",
        "recentchangesdays-max": "Ne vairāk kā $1 {{PLURAL:$1|dienas|diena|dienas}}",
        "timezoneregion-europe": "Eiropa",
        "timezoneregion-indian": "Indijas okeāns",
        "timezoneregion-pacific": "Klusais okeāns",
-       "allowemail": "Atļaut saņemt e-pastus no citiem lietotājiem",
+       "allowemail": "Atļaut saņemt e-pastus no citiem dalībniekiem",
        "prefs-searchoptions": "Meklēšana",
        "prefs-namespaces": "Vārdtelpas",
        "default": "pēc noklusējuma",
        "userrights-groupsmember-auto": "Netiešs dalībnieks:",
        "userrights-groups-help": "Tu vari izmainīt kādās grupās šis lietotājs ir:\n* Ieķeksēts lauciņš norāda, ka lietotājs ir attiecīgajā grupā.\n* Neieķeksēts lauciņš norāda, ka lietotājs nav attiecīgajā grupā.\n* * norāda, ka šo grupu tu nevarēsi noņemt, pēc tam, kad to būsi pielicis, vai otrādāk (tu nevarēsi atcelt savas izmaiņas).",
        "userrights-reason": "Iemesls:",
-       "userrights-no-interwiki": "Tev nav atļaujas izmainīt lietotāju tiesības citos wiki.",
+       "userrights-no-interwiki": "Tev nav atļaujas izmainīt dalībnieku tiesības citos wiki.",
        "userrights-nodatabase": "Datubāze $1 neeksistē vai nav lokāla.",
-       "userrights-nologin": "Tev ir [[Special:UserLogin|jāieiet iekšā]] kā adminam, lai varētu izmainīt lietotāju grupas.",
+       "userrights-nologin": "Tev ir [[Special:UserLogin|jāieiet iekšā]] kā adminam, lai varētu izmainīt dalībnieku grupas.",
        "userrights-notallowed": "Jūsu lietotāja kontam nav atļaujas pievienot vai noņemt lietotāju tiesības.",
        "userrights-changeable-col": "Grupas, kuras tu vari izmainīt",
        "userrights-unchangeable-col": "Grupas, kuras tu nevari izmainīt",
        "group": "Grupa:",
-       "group-user": "Lietotāji",
-       "group-autoconfirmed": "Automātiski apstiprinātie lietotāji",
+       "group-user": "Dalībnieki",
+       "group-autoconfirmed": "Automātiski apstiprinātie dalībnieki",
        "group-bot": "Boti",
        "group-sysop": "Administratori",
        "group-bureaucrat": "Birokrāti",
        "group-suppress": "Novērotāji",
        "group-all": "(visi)",
-       "group-user-member": "{{GENDER:$1|lietotājs}}",
-       "group-autoconfirmed-member": "{{GENDER:$1|automātiski apstiprināts lietotājs|automātiski apstiprināta lietotāja}}",
+       "group-user-member": "{{GENDER:$1|dalībnieks}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|automātiski apstiprināts dalībnieks|automātiski apstiprināta dalībniece}}",
        "group-bot-member": "{{GENDER:$1|bots}}",
        "group-sysop-member": "{{GENDER:$1|administrators|administratore}}",
        "group-bureaucrat-member": "{{GENDER:$1|birokrāts|birokrāte}}",
        "group-suppress-member": "{{GENDER:$1|novērotājs|novērotāja}}",
-       "grouppage-user": "{{ns:project}}:Lietotāji",
-       "grouppage-autoconfirmed": "{{ns:project}}:Automātiski apstiprināti lietotāji",
+       "grouppage-user": "{{ns:project}}:Dalībnieki",
+       "grouppage-autoconfirmed": "{{ns:project}}:Automātiski apstiprināti dalībnieki",
        "grouppage-bot": "{{ns:project}}:Boti",
        "grouppage-sysop": "{{ns:project}}:Administratori",
        "grouppage-bureaucrat": "{{ns:project}}:Birokrāti",
        "right-edit": "Izmainīt lapas",
        "right-createpage": "Izveidot lapas (kuras nav diskusiju lapas)",
        "right-createtalk": "Izveidot diskusiju lapas",
-       "right-createaccount": "Izveidot jaunus lietotāja kontus",
+       "right-createaccount": "Izveidot jaunus dalībnieka kontus",
        "right-minoredit": "Atzīmēt izmaiņas kā maznozīmīgas",
        "right-move": "Pārvietot lapas",
        "right-move-subpages": "Pārvietot lapas kopā ar to apakšlapām",
-       "right-move-rootuserpages": "Pārvietot saknes lietotāja lapas",
+       "right-move-rootuserpages": "Pārvietot saknes dalībnieka lapas",
        "right-move-categorypages": "Pārvietot kategoriju lapas",
        "right-movefile": "Pārvietot failus",
        "right-suppressredirect": "Neveidot pāradresāciju no vecā nosaukuma, pārvietojot lapu",
        "right-undelete": "Atjaunot lapu",
        "right-suppressrevision": "Apskatīt un atjaunot versijas, kas paslēptas no adminiem",
        "right-suppressionlog": "Skatīt personīgos reģistrus",
-       "right-block": "Bloķēt citus lietotājus (lapu izmainīšana)",
-       "right-blockemail": "Bloķēt citus lietotājus (iespēja sūtīt e-pastu)",
-       "right-hideuser": "Bloķēt lietotājvārdu, slēpjot to no citiem lietotājiem",
+       "right-block": "Bloķēt citus dalībniekus (lapu izmainīšana)",
+       "right-blockemail": "Bloķēt citus dalībniekus (iespēja sūtīt e-pastu)",
+       "right-hideuser": "Bloķēt lietotājvārdu, slēpjot to no citiem dalībniekiem",
        "right-ipblock-exempt": "Apiet IP bloķēšanu, automātisku bloķēšanu un IP apgabalu bloķēšanu",
        "right-proxyunbannable": "Apiet ''proxy'' automātiskos blokus",
        "right-unblockself": "Atbloķēt sevi",
        "right-protect": "Izmainīt aizsargātās lapas un to aizsardzības līmeni",
        "right-editprotected": "Labot aizsargātās lapas (bez kaskādes aizsardzības)",
-       "right-editinterface": "Izmainīt lietotāja interfeisu",
-       "right-editusercssjs": "Izmainīt citu lietotāju CSS un JS failus",
-       "right-editusercss": "Izmainīt citu lietotāju CSS failus",
-       "right-edituserjs": "Izmainīt citu lietotāju JS failus",
+       "right-editinterface": "Izmainīt dalībnieka interfeisu",
+       "right-editusercssjs": "Izmainīt citu dalībnieku CSS un JS failus",
+       "right-editusercss": "Izmainīt citu dalībnieku CSS failus",
+       "right-edituserjs": "Izmainīt citu dalībnieku JS failus",
        "right-viewmywatchlist": "Apskatīt savu uzraugāmo rakstu sarakstu",
-       "right-rollback": "Ātri veikt atriti pēdējā lietotāja labojumiem, kas veica izmaiņas kādā konkrētā lapā",
+       "right-rollback": "Ātri veikt atriti pēdējā dalībnieka labojumiem, kas veica izmaiņas kādā konkrētā lapā",
        "right-markbotedits": "Atzīmēt labojumus, kam veikta atrite, kā bota labojumus",
        "right-noratelimit": "Būt darbību ātruma ierobežojumu neietekmētiem",
        "right-import": "Importēt lapas no citiem wiki",
        "right-patrolmarks": "Apskatīt pēdējo izmaiņu lapu pārbaužu atzīmes",
        "right-unwatchedpages": "Apskatīt neuzraudzīto lapu sarakstu",
        "right-mergehistory": "Apvienot lapu vēsturi",
-       "right-userrights": "Mainīt visu lietotāju tiesības",
-       "right-userrights-interwiki": "Mainīt lietotāju tiesības citās Vikipēdijās",
+       "right-userrights": "Mainīt visu dalībnieku tiesības",
+       "right-userrights-interwiki": "Mainīt dalīnieku tiesības citās Vikipēdijās",
        "right-siteadmin": "Bloķēt un atbloķēt datubāzi",
-       "right-sendemail": "Sūtīt e-pastu citiem lietotājiem",
+       "right-sendemail": "Sūtīt e-pastu citiem dalībniekiem",
        "right-passwordreset": "Apskatīt paroles atiestatīšanas e-pasta ziņojumus",
-       "newuserlogpage": "Jauno lietotāju reģistrs",
+       "newuserlogpage": "Jauno dalībnieku reģistrs",
        "newuserlogpagetext": "Jauno lietotājvārdu reģistrs.",
-       "rightslog": "Lietotāju tiesību reģistrs",
-       "rightslogtext": "Šis ir lietotāju tiesību izmaiņu reģistrs.",
+       "rightslog": "Dalībnieku tiesību reģistrs",
+       "rightslogtext": "Šis ir dalībnieku tiesību izmaiņu reģistrs.",
        "action-read": "lasīt šo lapu",
        "action-edit": "labot šo lapu",
        "action-createpage": "izveidot lapas",
        "action-createtalk": "izveidot diskusiju lapas",
-       "action-createaccount": "izveidot šo lietotāja kontu",
+       "action-createaccount": "izveidot šo dalībnieka kontu",
        "action-history": "apskatīt šīs lapas vēsturi",
        "action-minoredit": "atzīmēt šo labojumu kā maznozīmīgu",
        "action-move": "pārvietot šo lapu",
        "action-move-subpages": "pārvietot šo lapu un tās apakšlapas",
-       "action-move-rootuserpages": "pārvietot saknes lietotāja lapas",
+       "action-move-rootuserpages": "pārvietot saknes dalībnieka lapas",
        "action-move-categorypages": "pārvietot kategoriju lapas",
        "action-movefile": "pārvietot šo failu",
        "action-upload": "augšupielādēt šo failu",
        "action-undelete": "atjaunot šo lapu",
        "action-suppressrevision": "pārskatīt un atjaunot šo slēpto versiju",
        "action-suppressionlog": "apskatīt šo privāto reģistru",
-       "action-block": "bloķēt šo lietotāju pret rakstu turpmāku labošanu",
+       "action-block": "bloķēt šo dalībnieku pret rakstu turpmāku labošanu",
        "action-protect": "izmainīt aizsardzības līmeņus šai lapai",
        "action-import": "importēt šo lapu no citas viki",
        "action-importupload": "importēt šo lapu no failu augšupielādes",
        "action-autopatrol": "iespēja savus labojumus atzīmēt kā pārbaudītus",
        "action-unwatchedpages": "apskatīt neuzraudzīto lapu sarakstu",
        "action-mergehistory": "apvienot šīs lapas vēsturi",
-       "action-userrights": "mainīt visu lietotāju tiesības",
-       "action-userrights-interwiki": "mainīt lietotāju tiesības citās Vikipēdijās",
+       "action-userrights": "mainīt visu dalībnieku tiesības",
+       "action-userrights-interwiki": "mainīt dalībnieku tiesības citās Vikipēdijās",
        "action-siteadmin": "bloķēt vai atbloķēt datubāzi",
        "action-sendemail": "sūtīt e-pastus",
        "nchanges": "$1 {{PLURAL:$1|izmaiņas|izmaiņa|izmaiņas}}",
        "rcshowhidebots": "$1 botus",
        "rcshowhidebots-show": "Rādīt",
        "rcshowhidebots-hide": "Slēpt",
-       "rcshowhideliu": "$1 reģistrētos lietotājus",
+       "rcshowhideliu": "$1 reģistrētos dalībniekus",
        "rcshowhideliu-show": "Rādīt",
        "rcshowhideliu-hide": "Slēpt",
        "rcshowhideanons": "$1 anonīmos",
        "minoreditletter": "m",
        "newpageletter": "J",
        "boteditletter": "b",
-       "number_of_watching_users_pageview": "[šo lapu uzrauga $1 {{PLURAL:$1|lietotāji|lietotājs|lietotāji}}]",
-       "rc_categories": "Ierobežot uz kategorijām (atdalīt ar \"|\")",
+       "number_of_watching_users_pageview": "[šo lapu uzrauga $1 {{PLURAL:$1|dalībnieki|dalībnieks|dalībnieki}}]",
+       "rc_categories": "Ierobežot uz kategorijām (atdalīt ar \"|\"):",
        "rc_categories_any": "Jebkas",
        "rc-change-size-new": "$1 {{PLURAL:$1|baiti|baits|baiti}} pēc izmaiņām",
        "newsectionsummary": "/* $1 */ jauna sadaļa",
        "categoriesfrom": "Parādīt kategorijas sākot ar:",
        "special-categories-sort-count": "kārtot pēc skaita",
        "special-categories-sort-abc": "kārtot alfabētiskā secībā",
-       "deletedcontributions": "Izdzēstais lietotāju devums",
-       "deletedcontributions-title": "Izdzēstais lietotāju devums",
+       "deletedcontributions": "Dzēstais dalībnieka devums",
+       "deletedcontributions-title": "Dzēstais dalībnieka devums",
        "sp-deletedcontributions-contribs": "devums",
        "linksearch": "Ārējo saišu meklēšana",
        "linksearch-pat": "Meklēt:",
        "enotif_impersonal_salutation": "{{SITENAME}} lietotājs",
        "enotif_lastvisited": "$1 lai apskatītos visas izmaiņas kopš tava pēdējā apmeklējuma.",
        "enotif_lastdiff": "$1 lai apskatītos šo izmaiņu.",
-       "enotif_anon_editor": "anonīms lietotājs $1",
+       "enotif_anon_editor": "anonīms dalībnieks $1",
        "enotif_body": "$WATCHINGUSERNAME,\n\n\n{{grammar:ģenitīvs|{{SITENAME}}}} lapu $PAGETITLE $CHANGEDORCREATED $PAGEEDITOR, $PAGEEDITDATE, pašreizējā versja ir $PAGETITLE_URL.\n\n$NEWPAGE\n\nIzmaiņu kopsavilkums bija: $PAGESUMMARY $PAGEMINOREDIT\n\nSazināties ar attiecīgo lietotāju:\ne-pasts: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nJa šo uzraugāmo lapu izmainīs vēl, turpmāku paziņojumu par to nebūs, kamēr tu to neatvērsi.\nTu arī vari atstatīt visu uzraugāmo lapu paziņojumu statusus uzraugāmo lapu sarakstā.\n\n             {{grammar:ģenitīvs|{{SITENAME}}}} paziņojumu sistēma\n\n--\nLai izmainītu uzraugāmo lapu saraksta uzstādījumus:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nLai dzēstu lapu no uzraugāmo lapu saraksta:\n$UNWATCHURL\n\nPapildinformācija:\n$HELPPAGE",
        "created": "izveidoja",
        "changed": "izmainīja",
        "invert": "Izvēlēties pretēji",
        "namespace_association": "Saistītā vārdtelpa",
        "blanknamespace": "(Pamatlapa)",
-       "contributions": "{{GENDER:$1|Lietotāja|Lietotājas|Lietotāja}} devums",
-       "contributions-title": "Lietotāja $1 devums",
+       "contributions": "{{GENDER:$1|Dalībnieka|Dalībnieces|Dalībnieka}} devums",
+       "contributions-title": "Dalībnieka $1 devums",
        "mycontris": "Devums",
        "contribsub2": "Lietotājs: $1 ($2)",
        "nocontribs": "Netika atrastas izmaiņas, kas atbilstu šiem kritērijiem.",
        "sp-contributions-newbies": "Rādīt jauno lietotāju devumu",
        "sp-contributions-newbies-sub": "Jaunie lietotāji",
        "sp-contributions-blocklog": "Bloķēšanas reģistrs",
-       "sp-contributions-deleted": "Izdzēstais lietotāja devums",
+       "sp-contributions-deleted": "dzēstais dalībnieka devums",
        "sp-contributions-uploads": "augšupielādes",
        "sp-contributions-logs": "reģistri",
        "sp-contributions-talk": "diskusija",
        "lastmodifiedatby": "Šo lapu pēdējoreiz izmainīja $3, $2, $1.",
        "othercontribs": "Balstototies uz $1 darbu.",
        "others": "citi",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|lietotāju|lietotāja|lietotāju}} $1",
-       "anonusers": "{{SITENAME}} anonīma {{PLURAL:$2|lietotāju|lietotāja|lietotāju}} $1",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|dalībnieku|dalībnieka|dalībnieku}} $1",
+       "anonusers": "{{SITENAME}} anonīma {{PLURAL:$2|dalībnieku|dalībnieka|dalībnieku}} $1",
        "creditspage": "Lapas autori",
        "nocredits": "Šai lapa nav pieejama informācija par autoriem.",
        "spamprotectiontitle": "Spama filtrs",
index 6d892f1..9f85bf7 100644 (file)
        "tog-hidepatrolled": "隱近巡",
        "tog-newpageshidepatrolled": "隱新巡",
        "tog-extendwatchlist": "展列見變",
-       "tog-usenewrc": "出近易",
+       "tog-usenewrc": "出近易",
        "tog-numberheadings": "生章數",
        "tog-showtoolbar": "多寶列見",
-       "tog-editondblclick": "雙擊以纂",
-       "tog-editsectiononrightclick": "纂段右擊標",
+       "tog-editondblclick": "雙擊以纂",
+       "tog-editsectiononrightclick": "右擊標以纂段",
        "tog-watchcreations": "哨己撰",
        "tog-watchdefault": "哨己纂",
-       "tog-watchmoves": "派哨予吾遷之頁",
-       "tog-watchdeletion": "派哨至吾除之頁",
+       "tog-watchmoves": "派哨於頁吾遷者",
+       "tog-watchdeletion": "派哨於頁吾除者",
        "tog-minordefault": "慣為校",
        "tog-previewontop": "頂草覽",
        "tog-previewonfirst": "覽首修",
        "viewcount": "此頁$1閱矣",
        "protectedpage": "此頁錮矣",
        "jumpto": "往:",
-       "jumptonavigation": "å\9a®",
+       "jumptonavigation": "å°\8e",
        "jumptosearch": "尋",
-       "view-pool-error": "歉也,伺服器超負矣。\n多簿查頁。\n欲試候之。\n\n$1",
+       "view-pool-error": "甚歉!伺服器超負矣。\n尋頁之人也眾矣。\n若欲再試請稍候。\n\n$1",
        "pool-timeout": "待鎖超時",
        "pool-queuefull": "池隊滿之",
-       "pool-errorunknown": "未明之錯",
+       "pool-errorunknown": "未知之誤",
        "aboutsite": "述{{SITENAME}}",
        "aboutpage": "Project:述",
        "copyright": "文奉$1行。",
        "nstab-help": "助",
        "nstab-category": "類",
        "nosuchaction": "無可為",
-       "nosuchactiontext": "無此址",
+       "nosuchactiontext": "此址也無",
        "nosuchspecialpage": "無此特查",
        "nospecialpagetext": "<strong>無此特查。</strong>\n\n見[[Special:SpecialPages|{{int:specialpages}}]]。",
        "error": "有誤",
-       "databaseerror": "庫藏誤然",
+       "databaseerror": "庫藏也誤",
        "databaseerror-query": "尋:$1",
        "databaseerror-error": "錯:$1",
-       "laggedslavemode": "警示,此頁不新",
+       "laggedslavemode": "警告:此頁不新。",
        "readonly": "鎖庫藏",
        "enterlockreason": "何以鎖之?何日啟之?",
        "readonlytext": "鎖者曰:「$1」,庫藏鎖矣,撰纂謝焉。",
        "filenotfound": "\"$1\"未見。",
        "unexpected": "異數,\"$1\"=\"$2\"。",
        "formerror": "有誤:表不可呈",
-       "badarticleerror": "此頁為之",
+       "badarticleerror": "此頁不可為之",
        "cannotdelete": "頁或檔\"$1\"刪矣,不復為之。",
-       "cannotdelete-title": "å\88ªã\80\8c$1ã\80\8dä¸\8dè\83½ä¹\9f。",
+       "cannotdelete-title": "å\88ªã\80\8c$1ã\80\8dä¹\9fä¸\8dè\83½。",
        "delete-hook-aborted": "鈎纂消矣。\n無解也。",
        "badtitle": "無此題",
        "badtitletext": "或別、或缺、或違、或他山謬鏈,此題不存也。",
        "viewsource-title": "查$1之案",
        "actionthrottled": "無為",
        "actionthrottledtext": "基反垃圾之量,於短時中限欲,爾之上限已過。數分後再試之。",
-       "protectedpagetext": "該頁被錮無纂也。",
+       "protectedpagetext": "此頁見錮以避纂也。",
        "viewsourcetext": "爾可視及複之本頁之原始碼。",
        "protectedinterface": "此頁司版,錮之以遠濫。",
        "editinginterface": "'''警示:'''此頁司版,一髮牽身,惠慎之。如譯之,可慮[//translatewiki.net/wiki/Main_Page?setlang=zh-hant translatewiki.net]也,為MediaWiki軟件本地化之計劃也。",
        "cascadeprotected": "此頁\"迭緘\"矣。$1頁牽連如下:\n$2",
        "namespaceprotected": "子權未逮,莫能纂'''$1'''。",
-       "ns-specialprotected": "奇頁禁纂。",
-       "titleprotected": "緘焉自[[User:$1|$1]]防建也。因''$2''也。",
+       "ns-specialprotected": "奇頁禁纂。",
+       "titleprotected": "緘焉自[[User:$1|$1]]防建。以''$2''之故也。",
        "invalidtitle-knownnamespace": "無效卷題,含名域\"$2\"與文本\"$3\"",
        "exception-nologin": "尚未登簿",
        "virus-badscanner": "壞設:不明之病掃:''$1''",
        "virus-unknownscanner": "不明之反毒:",
        "logouttext": "'''子去簿矣'''\n\n子可匿名還覽{{SITENAME}},或<span class='plainlinks'>[$1 復登]</span>同簿、異簿。\n未清謄本,覽器文舊,且慎之。",
        "welcomeuser": "$1居,惠迎!",
-       "welcomecreation-msg": "子簿建矣。\n\n請更簿註乎[[Special:Preferences|此]]。",
+       "welcomecreation-msg": "汝簿建矣。\n\n請更汝「{{SITENAME}}」[[Special:Preferences|焉]]。",
        "yourname": "名",
        "userlogin-yourname": "簿名",
-       "userlogin-yourname-ph": "簿名",
-       "createacct-another-username-ph": "簿名",
+       "userlogin-yourname-ph": "簿名",
+       "createacct-another-username-ph": "簿名",
        "yourpassword": "符節",
        "userlogin-yourpassword": "符節",
-       "userlogin-yourpassword-ph": "輸子符節",
-       "createacct-yourpassword-ph": "一符節",
+       "userlogin-yourpassword-ph": "告汝符節",
+       "createacct-yourpassword-ph": "一符節",
        "yourpasswordagain": "復核節",
        "createacct-yourpasswordagain": "訂子符節",
-       "createacct-yourpasswordagain-ph": "復符節",
+       "createacct-yourpasswordagain-ph": "復符節",
        "remembermypassword": "吾之簿通越(達至$1日)",
-       "userlogin-remembermypassword": "記吾",
+       "userlogin-remembermypassword": "保我簿登",
        "userlogin-signwithsecure": "以安全伺服登簿",
-       "yourdomainname": "之網域",
+       "yourdomainname": "之網域",
        "password-change-forbidden": "符節不能改乎此維基也。",
-       "externaldberror": "認庫之錯或禁更爾之外簿。",
+       "externaldberror": "認庫之錯,或禁更汝之外簿。",
        "login": "登簿",
        "nav-login-createaccount": "登簿、增簿",
        "userlogin": "登簿、增簿",
        "logout": "去簿",
        "userlogout": "去簿",
        "notloggedin": "尚未登簿",
-       "userlogin-noaccount": "無簿乎?",
+       "userlogin-noaccount": "無簿乎?",
        "userlogin-joinproject": "入{{SITENAME}}",
-       "nologin": "無簿乎?往$1。",
+       "nologin": "尚無簿乎?惠往$1。",
        "nologinlink": "增簿",
        "createaccount": "增簿",
-       "gotaccount": "有簿矣哉?往$1。",
+       "gotaccount": "已有簿矣?惠往$1。",
        "gotaccountlink": "登簿",
-       "userlogin-resetlink": "君忘登簿所需爾?",
+       "userlogin-resetlink": "汝忘登簿所需?",
        "userlogin-resetpassword-link": "輸子符節",
-       "userlogin-helplink2": "助登簿",
+       "userlogin-helplink2": "助登簿",
        "createacct-emailrequired": "電郵",
-       "createacct-emailoptional": "電郵 (可選)",
+       "createacct-emailoptional": "電郵(可選)",
        "createaccountmail": "同郵",
-       "createacct-realname": "實名(選)",
+       "createacct-realname": "實名(選)",
        "createaccountreason": "因:",
        "createacct-reason": "因:",
-       "createacct-reason-ph": "何為子另立一簿乎?",
+       "createacct-reason-ph": "汝另立一簿者何哉?",
        "createacct-captcha": "安檢",
-       "createacct-imgcaptcha-ph": "輸上文字",
+       "createacct-imgcaptcha-ph": "輸上文字",
        "createacct-submit": "增簿",
-       "createacct-another-submit": "å\86\8d立一簿",
+       "createacct-another-submit": "復立一簿",
        "createacct-benefit-heading": "吾等立{{SITENAME}}者,或黔首,或專戶。",
        "createacct-benefit-body1": "纂",
        "createacct-benefit-body2": "頁",
        "createacct-benefit-body3": "是月纂者",
        "badretype": "符節不合也。",
-       "userexists": "簿名矣,惠更之。",
-       "loginerror": "登簿誤然",
+       "userexists": "簿名見用矣,惠更之。",
+       "loginerror": "登簿生誤",
        "createacct-error": "建簿未成",
        "createaccounterror": "無增簿:$1",
-       "nocookiesnew": "{{SITENAME}}簿增而未登,惠准cookies後再登之。",
-       "nocookieslogin": "登簿{{SITENAME}}須cookies,惠准之後登。",
-       "nocookiesfornew": "簿未建,眾乃未定源之。\n爾乃開之,重載再乃一試。",
+       "nocookiesnew": "{{SITENAME}}簿增而未登,惠准存 cookies ,方可登之。",
+       "nocookieslogin": "欲登簿{{SITENAME}},需允 cookies 之存,惠准後方可登。",
+       "nocookiesfornew": "簿未建,眾乃未定源之。\n汝其啟之,重載,繼而予一試。",
        "noname": "缺簿名,或不格也。",
        "loginsuccesstitle": "登簿成矣",
        "loginsuccess": "'''$1'''登{{SITENAME}}矣",
        "nosuchuser": "查無此人。惠請更名,查大小寫或立此簿。",
        "nosuchusershort": "查無\"$1\",惠核之。",
-       "nouserspecified": "簿名須也",
-       "login-userblocked": "此簿已被封。登無簿也。",
+       "nouserspecified": "簿名必須",
+       "login-userblocked": "此簿見錮矣。是之登未見許可。",
        "wrongpassword": "符節不合,惠核之。",
        "wrongpasswordempty": "缺符節,惠補之。",
        "passwordtooshort": "符節莫逾$1字。",
-       "password-name-match": "符節與簿名異也。",
-       "password-login-forbidden": "此簿與符節之用乃禁之。",
+       "password-name-match": "符ç¯\80è\88\87ç°¿å\90\8dç\9b¸ç\95°ä¹\9fã\80\82",
+       "password-login-forbidden": "此簿共符節之用見禁矣。",
        "mailmypassword": "遣吾符節",
        "passwordremindertitle": "新臨符節自{{SITENAME}}",
-       "passwordremindertext": "$1æ±\82é\81£{{SITENAME}}ï¼\88$4ï¼\89ï¼\9a\"$2\"ä¹\8bè\87¨ç¬¦ç¯\80ç\82º\"$3\"ã\80\82æ\97¥å\88°æ\9c\89$5ã\80\82\n\nå­\90è\8b¥ç½\94é \88æ\88\96ç\9c\81æ\9b´ä¹\8bï¼\8cå¦\82è\88\8aå\8d³可。",
+       "passwordremindertext": "$1æ±\82é\81£{{SITENAME}}ï¼\88$4ï¼\89ï¼\9a\"$2\"ä¹\8bè\87¨ç¬¦ç¯\80ç\82º\"$3\"ã\80\82æ\97¥å\88°æ\9c\89$5ã\80\82\n\nå­\90è\8b¥ç½\94é \88æ\88\96ç\9c\81æ\9b´ä¹\8bï¼\8cå¦\82è\88\8aå\89\87可。",
        "noemail": "\"$1\"無存郵也。",
-       "noemailcreate": "爾需乙郵也",
+       "noemailcreate": "汝需乙郵",
        "passwordsent": "新節已遣$1\",惠鑒復登之。",
-       "blocked-mailpassword": "爾之IP已錮,密復無用之,以之濫也。",
+       "blocked-mailpassword": "汝 IP 已錮,密復無用之,以之濫也。",
        "eauthentsent": "核文遣矣。惠循核之,簿方活也。",
-       "throttled-mailpassword": "密記已寄之於$1時前。\n防濫,單一密記短至$1時寄之。",
-       "mailerror": "信失遣如下:$1",
+       "throttled-mailpassword": "符節見寄於$1時前矣。\n防濫用故,單一密記短至$1時寄之。",
+       "mailerror": "信失遣。斯文如下:$1",
        "acct_creation_throttle_hit": "一日之內,於一址但許一人增簿。",
        "emailauthenticated": "$2 $3郵驛證矣",
        "emailnotauthenticated": "郵驛未證,下不遺書。",
        "noemailprefs": "郵驛設而用之。",
        "emailconfirmlink": "惠考郵驛",
        "invalidemailaddress": "驛址不格,惠正略之。",
-       "cannotchangeemail": "é\9b»é\83µå\9c°å\9d\80ä¸\8då\8f¯æ\94¹äº\8e此wiki",
+       "cannotchangeemail": "é\83µå\9d\80ä¸\8då\8f¯æ\9b´æ\96¼此wiki",
        "emaildisabled": "是站不可遣函也。",
        "accountcreated": "簿增矣",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|書]])簿增矣。",
        "createaccount-title": "於{{SITENAME}}增簿",
-       "createaccount-text": "有人於{{SITENAME}}用爾之電郵增名為 \"$2\" 之簿 ($4),符節為 \"$3\" 。汝應登,再改符節也。\n\n如簿誤增,爾可略之。",
-       "login-throttled": "爾嘗登簿甚矣。\n請候 $1 再試之。",
+       "createaccount-text": "有人以汝電郵於{{SITENAME}}增簿。簿名為 \"$2\" ($4)。符節為 \"$3\" 。汝應登而更符節。\n\n如簿誤增,汝可略之。",
+       "login-throttled": "汝嘗登簿甚矣。\n請候 $1 而試之。",
        "login-abort-generic": "登簿未成——棄",
        "loginlanguagelabel": "語:$1",
        "suspicious-userlogout": "爾欲無離也,可由壞瀏覽器或快枝代理呈送之。",
        "newpassword": "新符節:",
        "retypenew": "重察新符節:",
        "resetpass_submit": "設符再登",
-       "changepassword-success": "之符節已改!",
+       "changepassword-success": "之符節已改!",
        "changepassword-throttled": "爾嘗登簿甚矣。\n請候 $1 再試之。",
-       "resetpass_forbidden": "ç\84¡æ\94¹ç¬¦ç¯\80",
-       "resetpass-no-info": "爾須登簿後方進此頁。",
+       "resetpass_forbidden": "符ç¯\80ä¹\8bæ\9b´ä¹\9fä¸\8då\8f¯ã\80\82",
+       "resetpass-no-info": "欲入此頁,爾須登簿。",
        "resetpass-submit-loggedin": "改符節",
        "resetpass-submit-cancel": "消",
        "resetpass-wrong-oldpass": "無效之臨符或現符。\n爾或改符,或求新臨符。",
-       "resetpass-temp-password": "臨符節:",
+       "resetpass-temp-password": "臨符節:",
        "resetpass-abort-generic": "符節不可更",
        "passwordreset": "重設符節",
        "passwordreset-text-one": "慾更符節,填此佇列",
        "passwordreset-email": "電郵址",
        "changeemail": "更郵址",
        "changeemail-oldemail": "當前郵驛:",
-       "changeemail-newemail": "新郵驛:",
+       "changeemail-newemail": "æ·»æ\96°é\83µé©\9bï¼\9a",
        "changeemail-none": "(無)",
        "changeemail-password": "汝 {{SITENAME}} 之符節",
-       "changeemail-throttled": "爾嘗登簿甚矣。\n請候 $1 再試之。",
+       "changeemail-throttled": "汝嘗登簿甚矣。\n請候 $1 而試之。",
        "bold_sample": "粗體",
        "bold_tip": "粗體",
        "italic_sample": "斜體",
        "link_sample": "鏈",
        "link_tip": "鏈內",
        "extlink_sample": "http://www.example.com 鍵 題",
-       "extlink_tip": "冠http://以鏈外",
+       "extlink_tip": "冠 http:// 以外鏈",
        "headline_sample": "題",
        "headline_tip": "二題",
        "nowiki_sample": "此不排版",
        "watchthis": "派哨",
        "savearticle": "存儲",
        "preview": "草覽",
-       "showpreview": "覽",
+       "showpreview": "覽",
        "showdiff": "示異",
        "anoneditwarning": "'''警示:'''子未登簿,IP將誌。",
        "anonpreviewwarning": "''子未登簿,IP將誌。''",
        "missingcommentheader": "'''醒示:'''子未概標之,復「{{int:savearticle}}」則文倍焉。",
        "summary-preview": "覽概:",
        "subject-preview": "覽題:",
-       "blockedtitle": "子見禁",
+       "blockedtitle": "汝見禁矣",
        "blockedtext": "'''子名、IP見禁。'''禁者$1也,因''$2''故。\n\n* 始之時為:$8\n* 終之時為:$6\n* 見禁之人:$7\n\n存惑可詢$1,或[[{{MediaWiki:Grouppage-sysop}}|有秩]],[[Special:Preferences|簿註]]無驛則信不遣。另,子IP為$3,其禁號為#$5。詢時切附之。",
        "autoblockedtext": "爾之IP或簿自禁,因簿先用,禁者$1也。因故::\\'\\'$2\\'\\'\n\n* 始之時為:$8\n* 終之時為:$6\n* 見禁之人:$7\n\n存惑可詢$1,或[[{{MediaWiki:Grouppage-sysop}}|有秩]],[[Special:Preferences|簿註]]無驛則信不遣。另,子用IP $3,禁號為#$5。詢時切附之。",
        "blockednoreason": "無由",
        "mailnologin": "無驛",
        "mailnologintext": "[[Special:UserLogin|登簿]]置郵,方可捎書。",
        "emailuser": "捎君",
-       "emailpage": "捎書",
        "emailpagetext": "表下捎焉,以郵制君。\n署[[Special:Preferences|子簿郵]]以候往返。",
        "defemailsubject": "{{SITENAME}}來書",
        "usermaildisabled": "無他人之郵",
index 6802243..784fb94 100644 (file)
        "passwordreset-emailtitle": "लेखा विवरण {{अन्तर्जालक नाम}}",
        "passwordreset-emailtext-ip": "कियो (सम्भवतः अहाँ, अन्तर्जाल सेवा कल्पक $1 सँ) अपन लेखा विवरणक पुनःस्मरणक लेल अनुरोध केलहुँ ऐ लेल {{ अन्तर्जालक नाम}} ($4). ई प्रयोक्ता {{PLURAL:$3|लेखा अछि| लेखा सभ अछि}}\nऐ ई-पत्र संकेतसँ सम्बन्धित:\n\n$2\n\n{{PLURAL:$3|ई अल्पकालक कूटशब्द| ई सभ अल्पकालक कूटशब्द}} खतम भऽ जाएत {{PLURAL:$5|एक दिन|$5 पाँच दिन}}.\nअहाँ सम्प्रवेश करू आ एकटा नव कूटशब्द चुनू।. जौं कियो आन ई आग्रह केने अछि, वा अहाँकेँ अपन पुरान कूटशब्द मोन पड़ि गेल अछि , आ आब एकरा बदलबाक इच्छा नै राखै छी तँ अहाँ ऐ संदेशकेँ बिसरि जाउ आ अपन पुरान कूटशब्दक प्रयोग करैत रहू।",
        "passwordreset-emailtext-user": "प्रयोक्ता $1 {{अन्तर्जाल}} पर अहाँक खाता विवरणक {{SITENAME}} लेल फेरसँ ($4) आग्रह केने छथि। ई प्रयोक्ता {{PLURAL:$3|खाता अछि|खाता सभ अछि}} ऐ ई-पत्र संकेतसँ जुड़ल: $2\n{{PLURAL:$3| ई अस्थायी कूटशब्द|ई सभ अस्थायी कूटशब्द}} खतम भऽ जाएत {{PLURAL:$5|एक दिन|$5 दिन}} मे।\nअहाँ सम्प्रवेश करू आ एकटा नव कूटशब्द आब चुनू। जँ कियो दोसर ई आग्रह केने छथि, वा जँ अहाँकेँ अपन मूल कूटशब्द मोन पड़ि गेल अछि, आ अहाँ आब ओइ कूटशब्दकेँ नै बदलऽ चाहै छी, अहाँ ऐ संदेशकेँ बिसरि सकै छी आ अपन पुरान कूटशब्दक प्रयोग जारी राखि सकै छी।",
-       "passwordreset-emailelement": "प्रयोक्ता: $1\nअस्थायी कूटशब्द: $2",
+       "passwordreset-emailelement": "प्रयोक्ता: \n$1\n\nअस्थायी कूटशब्द: \n$2",
        "passwordreset-emailsent": "एकटा ई-पत्र मोन पाड़बा लेल पठाओल गेल अछि।",
        "passwordreset-emailsent-capture": "एकटा स्मरण ई-पत्र पठाएल गेल अछि, जे नीचाँ देखाएल अछि।",
        "passwordreset-emailerror-capture": "एकटा स्मरण ई-पत्र बनाएल गेल अछि, जे नीचाँ देखाएल अछि, मुदा प्र्योक्ताकेँ एकरा पठेबाक प्रयास विफल भेल: $1",
        "emailuser": "ऐ प्रयोक्ताकेँ ई-पत्र पठाउ",
        "emailuser-title-target": "इ {{GENDER:$1|प्रयोक्ता}} के ई-पत्र भेजु।",
        "emailuser-title-notarget": "ई-पत्र प्रयोक्ता",
-       "emailpage": "ई-पत्र प्रयोक्ता",
        "emailpagetext": "अहाँक नीचाँक आवेदन-पत्र ऐ प्रयोक्ताकेँ ई-पत्र संदेश पठेबा लेल प्रयोग कऽ सकै छी।\nई-पत्र जे अहाँ [[Special:Preferences|your user preferences]] मे देलहुँ से ई-पत्र\"एतएसँ\" पतासँ देखाएत, से प्राप्तकर्ता सोझे अहाँकेँ उत्तर देबामे समर्थ हेताह।",
        "defemailsubject": "{{जालस्थल}} प्रयोक्ता \"$1\" सँ ई-पत्र",
        "usermaildisabled": "प्रयोक्ता ई-पत्र अशक्त",
index 17aafd7..ac5cb5b 100644 (file)
        "passwordreset": "Tembung sandhi di-''reset''",
        "passwordreset-text-one": "Kumpliti formulir kiye kanggo nyetel maning tembung sandhine Rika.",
        "passwordreset-text-many": "{{PLURAL:$1|Isi salah siji kotak kanggo nyetel maning tembung sandhine Rika.}}",
-       "passwordreset-legend": "Tembung sandhi di-''reset''",
        "passwordreset-disabled": "''Reset'' tembung sandhi wis dipateni nang wiki kiye.",
        "passwordreset-emaildisabled": "Fitur imel wis dinonaktifna nang wiki kiye.",
        "passwordreset-username": "Jeneng panganggo:",
        "passwordreset-capture-help": "Angger Rika nyonteng kotak kiye, imel (sing isi tembung sandhi sauntara) bakal ditidokna maring Rika barengan karo dikirimna maring panganggo.",
        "passwordreset-email": "Alamat imel:",
        "passwordreset-emailtitle": "Detil akun nang {{SITENAME}}",
-       "passwordreset-emailelement": "Jeneng panganggo: $1\nTembung sandhi sauntara: $2",
+       "passwordreset-emailelement": "Jeneng panganggo: \n$1\n\nTembung sandhi sauntara: \n$2",
        "passwordreset-emailsent": "Imel nggo nyetel maning tembung sandhi uwis dikirim.",
        "passwordreset-emailsent-capture": "Imel kanggo nyetel maning tembung sandhi uwis dikirim, kaya sing ditidokna nang ngisor kiye.",
        "passwordreset-emailerror-capture": "Imel nggo nyetel maning tembung sandhi uwis digawe, kaya sing ditidokna nang ngisor kiye, ningen gole ngirim maring {{GENDER:$2|panganggo}} ora teyeng: $1",
        "changeemail-password": "Tembung sandhi {{SITENAME}} Rika:",
        "changeemail-submit": "Ganti imel",
        "resettokens-no-tokens": "Ora ana token sing arep disetel maning.",
-       "resettokens-legend": "Nyetel maning token",
        "resettokens-token-label": "$1 (biji sekiye:$2)",
        "resettokens-done": "Token wis disetel maning.",
        "resettokens-resetbutton": "Nyetel maning token sing dipilih",
        "nlinks": "$1 {{PLURAL:$1|pranala|pranala}}",
        "nmembers": "$1 {{PLURAL:$1|isi|isi}}",
        "nrevisions": "$1 {{PLURAL:$1|revisi|revisi}}",
-       "nviews": "Wis ping $1 {{PLURAL:$1|dideleng|dideleng}}",
        "nimagelinks": "Digunakna nang $1 {{PLURAL:$1|kaca|kaca}}",
        "ntransclusions": "digunakna nang $1 {{PLURAL:$1|kaca|kaca}}",
        "specialpage-empty": "Ora ana sing perlu dilaporna.",
index 37ca9f5..a6c92b5 100644 (file)
        "hidden-categories": "{{PLURAL:$1|Sokajy misitrika|Sokajy misitrika}} $1",
        "hidden-category-category": "Sokajy misitrika",
        "category-subcat-count": "{{PLURAL:$2|Ity sokajy ity|Ireo sokajy ireo}} dia manana {{PLURAL:$1|zana-tsokajy|zana-tsokajy}} $1 . Ny taotaliny dia $2",
-       "category-subcat-count-limited": "Misy zana-tsokajy $1 ity sokajy ity.{{PLURAL:}}",
-       "category-article-count": "{{PLURAL:$2|Misy pejy $1 ity sokajy ity|Misy pejy $1 ity sokajy ity}}. Pejy $2 no anatin'ity sokajy ity",
+       "category-subcat-count-limited": "Misy zana-tsokajy $1 ato amin'ity sokajy ity.{{PLURAL:}}",
+       "category-article-count": "Misy pejy $2 ato amin'ity ity sokajy ity. Pejy $1 no aseho ato.{{PLURAL:$2|}}",
        "category-article-count-limited": "Anatin'ity sokajy ity ireo pejy ireo pejy ireo ($1 ny tontaliny){{PLURAL:}}",
        "category-file-count": "Misy rakitra $1 (tontaliny : rakitra $2) ireo ity sokajy ity{{PLURAL:}}",
        "category-file-count-limited": "Anatin'ity sokajy ity ireo rakitra ireo. ($1 no aseho) {{PLURAL:}}",
        "viewdeleted_short": "Hijery fanovana voafafa {{PLURAL:$1|tokana|$1}}",
        "protect": "Hiaro",
        "protect_change": "ovaina",
-       "protectthispage": "Hiaro ity pejy ity",
+       "protectthispage": "Hiaro an'ity pejy ity",
        "unprotect": "Hanala ny fiarovana",
        "unprotectthispage": "Hanala idy an'ity pejy ity",
        "newpage": "Pejy vaovao",
        "passwordreset-emailtitle": "Antsipirihan'ny kaonty eo amin'i {{SITENAME}}",
        "passwordreset-emailtext-ip": "Nisy olona (izay mety ianao, avy amin'ny adiresy IP $1) nangataka ny hamerina ny tenimiafin'ny kaontim-pikambany ho an'i {{SITENAME}} ($4). Mampiasa ity adiresy mailaka ity {{PLURAL:$3|ity kaontim-pikambana mpikambana io|ireo kaontim-mpikambana ireo}}:\n\n$2\n\nHitsahatra afaka $5 andro {{PLURAL:$3|io tenimiafina io|ireo tenimiafina ireo}}.\nTokony miditra ianao ary mifidy tenimiafina vaovao. Raha misy olon-kafa nanao ity hataka ity, na efa tadidinao indray ilay tenimiafinao taloha, ary raha tsy tia hanova azy intsony, azonao tsy raharahiana ity hafatra ity ary mitohy mampiasa ny tenimiafinao taloha.",
        "passwordreset-emailtext-user": "Nisy mpikambana mitondra anarana $1 eo amin'i {{SITENAME}} nangataka fampatsiahivana mikasika ny kaontinao eo amin'i {{SITENAME}} ($4). Manana io adiresy imailaka {{PLURAL:$3|io kaontim-pikambana io|ireo kaontim-pikambana ireo}} :\n\n$2\n\nHitsahatra afaka {{PLURAL:$5|iray|$5}} andro {{PLURAL:$3|io|ireo}} tenimiafina {{PLURAL:$3|io|ireo}}. Mila miditra dien'izao ianao izao ary mifidy tenimiafina vaovao. Raha tsy avy aminao ity hataka ity na efa nahatadidy ny tenimiafinao taloha ianao, ary raha tsy tianao hovaina intsony ilay tenimiafinao, dia azonao tsy raharahiana ity hafatra ity ary mampiasa ny tenimiafinao taloha.",
-       "passwordreset-emailelement": "Anaram-pikambana : $1\nTenimiafina miserana : $2",
+       "passwordreset-emailelement": "Anaram-pikambana : \n$1\n\nTenimiafina miserana : \n$2",
        "passwordreset-emailsent": "Lasa ny mailaka famerenana tenimiafina.",
        "passwordreset-emailsent-capture": "Lasa ilay mailaka famerenana tenimiafina, izay aseho eo ambany.",
        "passwordreset-emailerror-capture": "Nosoratana ilay mailaka famerenana tenimiafina, izay aseho eo ambany, fa tsy tafalefa tany amin'ilay mpikambana ilay izy : $1{{GENDER:$2}}",
        "filehist-comment": "resaka",
        "imagelinks": "Fampiasana an'io rakitra io",
        "linkstoimage": "Ireto avy no {{PLURAL:$1|pejy mirohy|pejy mirohy}} ($1) amin'io rakitra io:",
-       "nolinkstoimage": "Tsy misy pejy mirohy amin'ity sary ity.",
+       "nolinkstoimage": "Tsy misy pejy mirohy amin'ity rakitra ity.",
        "morelinkstoimage": "Hijery [[Special:WhatLinksHere/$1|rohy fanampiny]] makany amin'io rakitra io.",
        "linkstoimage-redirect": "$1 (fihodinana) $2",
        "sharedupload": "Mety ho rakitra itambarana amin'ny tetikasa hafa ny rakitra $1.",
        "protectlogpage": "Laogim-piarovana",
        "protectlogtext": "Eto ambany ny lisitry ny fiarovana/fanalana hidy ny pejy. \nHo ann'y fanazavana fanampiny, jereo [[Special:ProtectedPages|ny lisitry ny pejy voaaro]] ho an'ny pejy fiarovana amin'izao fotoana izao.",
        "protectedarticle": "voaaro ny pejy \"[[$1]]\"",
-       "modifiedarticleprotection": "nanova ny haabo ny fiarovana ho an'ny « [[$1]] »",
+       "modifiedarticleprotection": "dia nanova ny haavom-piarovan'i « [[$1]] »",
        "unprotectedarticle": "nanala ny fiarovana an'i « [[$1]] »",
        "movedarticleprotection": "nanova ny safidim-piarovana : « [[$2]] » lasa « [[$1]] »",
        "protect-title": "Hanova ny lentam-piarovana ho an'i « $1 »",
        "protect-locked-blocked": "Tsy afaka ovanao ny sokajy ny fiarovana raha tsy mahazo manoratra ianao.\nIty ny sokajy ny pejy '''$1''' :",
        "protect-locked-dblock": "Tsy afaka solona ny sokajy ny fiarovana satria ny voatohana ny fotom-pandraisana.\nIty ny reglajy ny pejy  '''$1'''",
        "protect-locked-access": "Tsy manana alalana manova ny fiarovana ny pejy ianao.\nIty ny réglage ny pejy '''$1''' :",
-       "protect-cascadeon": "Voaaro ity pejy ity ankehitriny noho ny fisiany anatin'{{PLURAL:$1|ity pejy voaaro ity|ireo pejy voaaro ireo}} miaraka amin'ny « fiarovana an-driana » (protection en cascade). Azonareo ovaina ny fiarovan'ity pejy ity fa tsy ho voakasika ny fiarovana an-driana.",
+       "protect-cascadeon": "Voaaro ity pejy ity satria ampiasaina anatin'{{PLURAL:$1|ity pejy ity|ireo pejy ireo}} izay mampiasa fiarovana miitatra.\nTsy hanam-piantraika amin'ny fiarovana miitatra ny fanovana haavom-piarovana.",
        "protect-default": "Avela daholo ny mpikambana",
        "protect-fallback": "Hanome alalana ny mpikambana manana ny zo \"$1\"",
        "protect-level-autoconfirmed": "Hanome alalana ny mpikambana voamarina",
        "logentry-newusers-create": "{{GENDER:$2|Noforonina}} ny kaontim-pikambana $1",
        "logentry-newusers-create2": "{{GENDER:$2|Noforonin}}'i $1 ny kaomtim-pikambana $3",
        "logentry-newusers-autocreate": "{{GENDER:$2|Noforonina}} ho azy ny kaontim-pikambana $1",
+       "logentry-protect-move_prot": "Nanova ny parameta-piarovan'i avy amin'ny $4 ho $3 i $1{{GENDER:$2|}}",
        "logentry-rights-rights": "$1 dia nanova ny sokajim-pikambana isian'i $3 avy amin'ny $4 lasa $5{{GENDER:$2}}",
        "logentry-rights-rights-legacy": "{{GENDER:$2}}$1 nanova ny vonodrom-pikambana isian'i $3",
        "logentry-rights-autopromote": "{{GENDER:$2}}Lasa $5 ho azy i $1 izay $4 taloha",
index 018e415..fa670f5 100644 (file)
        "passwordreset": "Setel ulang kato sandi",
        "passwordreset-text-one": "Lengkapkan formulir ko untuak manuka baliak kato sandi Sanak.",
        "passwordreset-text-many": "{{PLURAL:$1|Masuakan data di bawah ko untuak manuka baliak kato sandi Sanak.}}",
-       "passwordreset-legend": "Tuka baliak kato sandi",
        "passwordreset-disabled": "Pangubahan kato sandi alah dimatian di wiki iko.",
        "passwordreset-emaildisabled": "Fitur surel alah dimatian pado wiki iko.",
        "passwordreset-username": "Namo pangguno:",
        "passwordreset-emailtitle": "Detail akun di {{SITENAME}}",
        "passwordreset-emailtext-ip": "Sasaurang (mungkin Sanak, dari alamaik IP $1) mamintak parubahan kato sandi untuak {{SITENAME}} ($4). {{PLURAL:$3|Akun}} barikuik takaik jo alamaik surel ko:\n\n$2\n\n{{PLURAL:$3|Sandi samantaro}} barikuik akan habih masonyo dalam {{PLURAL:$5|$5 ari}}.\nSanak harus masuak dan mamiliah sandi baru. Jikok urang lain mambuek pamintaan ko atau jikok Sanak ingek sandi awal dan indak nio maubahnyo, Sanak dapek mangacuahkan pasan ko dan taruih manggunoan kato sandi lamo.",
        "passwordreset-emailtext-user": "Sasaurang (mungkin Sanak, dari alamaik IP $1) mamintak parubahan kato sandi untuak {{SITENAME}} ($4).\n{{PLURAL:$3|Akun}} barikuik takaik jo alamaik surel ko:\n\n$2\n\n{{PLURAL:$3|Sandi samantaro}} barikuik akan habih masonyo dalam {{PLURAL:$5|$5 ari}}.\nSanak harus masuak dan mamiliah sandi baru. Jikok urang lain mambuek pamintaan ko atau jikok Sanak ingek sandi awal dan indak nio maubahnyo, Sanak dapek mangacuahkan pasan ko dan taruih manggunoan kato sandi lamo.",
-       "passwordreset-emailelement": "Namo pangguno: $1\nSandi samantaro: $2",
+       "passwordreset-emailelement": "Namo pangguno: \n$1\n\nSandi samantaro: \n$2",
        "passwordreset-emailsent": "Surel parubahan kato sandi alah dikirim.",
        "passwordreset-emailsent-capture": "Surel parubahan kato sandi alah dikirim, nan nampak di bawah ko.",
        "passwordreset-emailerror-capture": "Surel parubahan kato sandi nan ditampilan di bawah, alah dibuek, tapi pangirimannyo ka {{GENDER:$2|pangguno}} gagal: $1",
        "unusedtemplatestext": "Daftar barikuik adolah kasado laman pado ruangnamo {{ns:template}} nan indak dipakai di laman manopun.\nPariso dulu \"pautan baliak\" ka templat tasabuik sabalun manghapuihnyo.",
        "unusedtemplateswlh": "pautan baliak",
        "randompage": "Laman sumbarang",
+       "randomincategory-submit": "Tuju",
        "randomredirect": "Pangaliahan sumbarang",
        "statistics": "Statistik",
        "statistics-header-pages": "Statistik laman",
        "nlinks": "$1 {{PLURAL:$1|pautan}}",
        "nmembers": "$1 {{PLURAL:$1|anggota}}",
        "nrevisions": "$1 {{PLURAL:$1|revisi}}",
-       "nviews": "dilihek $1 {{PLURAL:$1|kali}}",
        "nimagelinks": "Digunoan pado $1 {{PLURAL:$1|laman}}",
        "ntransclusions": "digunoan pado $1 {{PLURAL:$1|laman}}",
        "specialpage-empty": "Indak ado nan paralu dilaporan.",
        "emailuser": "Surel pangguno",
        "emailuser-title-target": "Kirim surel ka {{GENDER:$1|panggun}} ko",
        "emailuser-title-notarget": "Kirim surel",
-       "emailpage": "Kirim surel ka pangguno ko",
        "emailpagetext": "Sanak dapek manggunoan formulir di bawah ko untuak mangirimkan surel ka {{GENDER:$1|pangguna}} ko.\nAlamaik surel nan Sanak masuakkan di [[Special:Preferences|pangaturan akun]] akan kalua sabagai alamaik \"Dari\" pado surel tasabuik, jadi panarimo dapek langsuang mambalehnyo.",
        "usermaildisabled": "Surel pangguno non-aktif",
        "emailtarget": "Masuakan namo pangguno nan ka manarimo surel",
index 5033ace..4b13794 100644 (file)
        "november-date": "$1 ноември",
        "december-date": "$1 декември",
        "pagecategories": "{{PLURAL:$1|Категорија|Категории}}",
-       "category_header": "Статии во категоријата „$1“",
+       "category_header": "Страници во категоријата „$1“",
        "subcategories": "Поткатегории",
        "category-media-header": "Податотеки во категоријата „$1“",
        "category-empty": "''Оваа категорија моментално не содржи страници или податотеки.''",
        "passwordreset-emailtitle": "Најавни податоци за {{SITENAME}}",
        "passwordreset-emailtext-ip": "Некој (веројатно вие, од IP-адресата $1) побара измена на вашата\nлозинка за {{SITENAME}} ($4). Оваа е-поштенска адреса е наведена во\n{{PLURAL:$3|следнава корисничка сметка|следниве кориснички сметки}}:\n\n$2\n\n{{PLURAL:$3|Оваа привремена лозинка ќе истече|Овие привремени лозинки ќе истечат}} во рок од {{PLURAL:$5|еден ден|$5 дена}}.\nСега треба да се најавите и да внесете нова лозинка. Ако ова барање го\nпоставил некој друг, или пак во меѓувреме сте се сетиле на лозинката, и не сакате\nда ја менувате, тогаш слободно занемарете ја поракава и продолжете да ја користите старата.",
        "passwordreset-emailtext-user": "Корисникот $1 на {{SITENAME}} побара измена на вашата лозинка на {{SITENAME}}\n($4). Оваа е-поштенска адреса е наведена во {{PLURAL:$3|следнава корисничка сметка|следниве кориснички сметки}}:\n\n$2\n\n{{PLURAL:$3|Оваа привремена лозинка ќе истече|Овие привремени лозинки ќе истечат}} во рок од {{PLURAL:$5|еден ден|$5 дена}}.\nСега треба да се најавите и да внесете нова лозинка. Ако ова барање го\nпоставил некој друг, или пак во меѓувреме сте се сетиле на лозинката, и не сакате\nда ја менувате, тогаш слободно занемарете ја поракава и продолжете да ја користите старата.",
-       "passwordreset-emailelement": "Корисничко име: $1\nПривремена лозинка: $2",
+       "passwordreset-emailelement": "Корисничко име: \n$1\n\nПривремена лозинка: \n$2",
        "passwordreset-emailsent": "Испратено е писмо за измена на лозинката.",
        "passwordreset-emailsent-capture": "Испратено е писмо за измена на лозинката (прикажано подолу).",
        "passwordreset-emailerror-capture": "Создадено е писмо за измена на лозинката (прикажано подолу), но не успеав да го испратам на {{GENDER:$2|корисникот}}: $1",
        "changeemail-password": "Вашата лозинка на {{SITENAME}}:",
        "changeemail-submit": "Смени е-пошта",
        "changeemail-throttled": "Имате премногу обиди за најава за кратко време.\nПочекајте $1 пред да се обидете повторно.",
+       "changeemail-nochange": "Внесете поинаква нова е-пошта.",
        "resettokens": "Врати одново шифри",
        "resettokens-text": "Можете шифрите да ги вратите одново што овозможува пристап до извесни лични податоци што се однесуваат на вашата овдешна сметка.\n\nОва треба да се направи ако по грешка сте споделиле нешто со некого или ако сметката ви е изложена на опасност.",
        "resettokens-no-tokens": "Нема шифри за враќање.",
        "rows": "Редови:",
        "columns": "Колони:",
        "searchresultshead": "Пребарување",
-       "stub-threshold": "Праг за <a href=\"#\" class=\"stub\">никулци</a> (бајти):",
+       "stub-threshold": "Праг за форматирање на врска за никулци ($1):",
+       "stub-threshold-sample-link": "примерок",
        "stub-threshold-disabled": "Оневозможено",
        "recentchangesdays": "Денови за приказ во скорешните промени:",
        "recentchangesdays-max": "(највеќе {{PLURAL:$1|еден ден|$1 дена}})",
        "booksources-text": "Ова е список на врски кон други мрежни места кои продаваат нови и користени книги, и тие може\nда имаат повеќе информации за книгите што ги баравте:",
        "booksources-invalid-isbn": "Наведениот ISBN се чини неправилен. Проверете да не настанала некоја грешка при копирањето од изворот.",
        "specialloguserlabel": "Изведувач:",
-       "speciallogtitlelabel": "Цел (наслов или корисник):",
+       "speciallogtitlelabel": "Цел (наслов или {{ns:user}}:корисничко име на корисникот):",
        "log": "Дневници",
        "all-logs-page": "Сите јавни дневници",
        "alllogstext": "Комбиниран приказ на сите расположиви дневници на {{SITENAME}}.\nМожете да го ограничите прикажаното избирајќи тип на дневник, корисничко име (разликува големи и мали букви), или страница (разликува големи и мали букви).",
index 32dd176..60f032c 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} സംരംഭത്തിലെ അംഗത്വവിവരങ്ങൾ",
        "passwordreset-emailtext-ip": "ആരോ ഒരാൾ (മിക്കവാറും താങ്കളായിരിക്കും, $1 എന്ന ഐ.പി. വിലാസത്തിൽ നിന്നും) {{SITENAME}} സംരംഭത്തിലെ ($4) താങ്കളുടെ രഹസ്യവാക്ക് പുനർസജ്ജീകരിക്കാൻ അഭ്യർത്ഥിച്ചിരിക്കുന്നു. ഈ ഇമെയിൽ വിലാസവുമായി ബന്ധപ്പെട്ടിരിക്കുന്ന {{PLURAL:$3|അംഗത്വം|അംഗത്വങ്ങൾ}} താഴെക്കൊടുത്തിരിക്കുന്നു:\n\n$2\n\n\nഈ {{PLURAL:$3|താത്കാലിക രഹസ്യവാക്ക്|താത്കാലിക രഹസ്യവാക്കുകൾ}} {{PLURAL:$5|ഒരു ദിവസം|$5 ദിവസങ്ങൾ}} കൊണ്ട് കാലഹരണപ്പെട്ട് പോകുന്നവയാണ്.\nതാങ്കൾ ഇപ്പോൾ തന്നെ പ്രവേശിച്ച് രഹസ്യവാക്ക് മാറ്റുന്നതാണ് ഉചിതം. ഈ അഭ്യർത്ഥന മറ്റാരോ ആണ് നടത്തിയത് അല്ലെങ്കിൽ, യഥാർത്ഥ രഹസ്യവാക്ക് താങ്കൾ ഓർമ്മിക്കുകയും അത് മാറ്റാൻ ആഗ്രഹിക്കാതിരിക്കുകയും ആണെങ്കിൽ, ഈ സന്ദേശം അവഗണിച്ച് താങ്കളുടെ പഴയ രഹസ്യവാക്ക് തുടർന്നും ഉപയോഗിക്കാവുന്നതാണ്.",
        "passwordreset-emailtext-user": "{{SITENAME}} സംരംഭത്തിലെ ഉപയോക്താവായ $1 {{SITENAME}} സംരംഭത്തിലെ ($4) രഹസ്യവാക്ക് പുനർസജ്ജീകരിക്കാൻ അഭ്യർത്ഥിച്ചിരിക്കുന്നു. ഈ ഇമെയിൽ വിലാസവുമായി ബന്ധപ്പെട്ടിരിക്കുന്ന {{PLURAL:$3|അംഗത്വം|അംഗത്വങ്ങൾ}} താഴെക്കൊടുത്തിരിക്കുന്നു:\n\n$2\n\n\nഈ {{PLURAL:$3|താത്കാലിക രഹസ്യവാക്ക്|താത്കാലിക രഹസ്യവാക്കുകൾ}} {{PLURAL:$5|ഒരു ദിവസം|$5 ദിവസങ്ങൾ}} കൊണ്ട് കാലഹരണപ്പെട്ട് പോകുന്നവയാണ്.\nതാങ്കൾ ഇപ്പോൾ തന്നെ പ്രവേശിച്ച് രഹസ്യവാക്ക് മാറ്റുന്നതാണ് ഉചിതം. ഈ അഭ്യർത്ഥന മറ്റാരോ ആണ് നടത്തിയത് അല്ലെങ്കിൽ, യഥാർത്ഥ രഹസ്യവാക്ക് താങ്കൾ ഓർമ്മിക്കുകയും അത് മാറ്റാൻ ആഗ്രഹിക്കാതിരിക്കുകയും ആണെങ്കിൽ, ഈ സന്ദേശം അവഗണിച്ച് താങ്കളുടെ പഴയ രഹസ്യവാക്ക് തുടർന്നും ഉപയോഗിക്കാവുന്നതാണ്.",
-       "passwordreset-emailelement": "ഉപയോക്തൃനാമം: $1\nതാത്കാലിക രഹസ്യവാക്ക്: $2",
+       "passwordreset-emailelement": "ഉപയോക്തൃനാമം: \n$1\n\nതാത്കാലിക രഹസ്യവാക്ക്: \n$2",
        "passwordreset-emailsent": "ഒരു രഹസ്യവാക്ക് പുനർസജ്ജീകരണ ഇമെയിൽ അയച്ചിട്ടുണ്ട്.",
        "passwordreset-emailsent-capture": "രഹസ്യവാക്ക് പുനർസജ്ജീകരണ ഇമെയിൽ അയച്ചിട്ടുണ്ട്, അത് താഴെക്കൊടുക്കുന്നു.",
        "passwordreset-emailerror-capture": "താഴെക്കൊടുത്തിരിക്കുന്ന, രഹസ്യവാക്ക് പുനർസജ്ജീകരണ ഇമെയിൽ സൃഷ്ടിക്കാനായെങ്കിലും, അത് {{GENDER:$2|ഉപയോക്താവിന്}} അയയ്ക്കുന്നത് പരാജയപ്പെട്ടു: $1",
        "rows": "വരി:",
        "columns": "നിര:",
        "searchresultshead": "തിരയൂ",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">അപൂർണ്ണമായ കണ്ണിയെന്നു</a> സ്ഥാപിക്കാനുള്ള ത്വരകം (ബൈറ്റുകൾ):",
+       "stub-threshold": "അപൂർണ്ണമായ കണ്ണിയെന്നു സ്ഥാപിക്കാനുള്ള ത്വരകം ($1):",
+       "stub-threshold-sample-link": "സാമ്പിൾ",
        "stub-threshold-disabled": "നിർജ്ജീവമാക്കപ്പെട്ടിരിക്കുന്നു",
        "recentchangesdays": "പുതിയ മാറ്റങ്ങളിൽ കാണിക്കേണ്ട ദിവസങ്ങളുടെ എണ്ണം:",
        "recentchangesdays-max": "പരമാവധി {{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസങ്ങൾ}}",
        "booksources-text": "പുതിയതും ഉപയോഗിച്ചതുമായ പുസ്തകങ്ങൾ വിൽക്കുന്ന സൈറ്റുകളിലേക്കുള്ള ലിങ്കുകളുടെ പട്ടിക ആണ്‌ താഴെ. താങ്കൾ തിരയുന്ന പുസ്തകത്തെ പറ്റിയുള്ള കൂടുതൽ വിവരങ്ങൾ ഈ പട്ടികയിൽ നിന്നു ലഭിച്ചേക്കാം:",
        "booksources-invalid-isbn": "തന്നിരിക്കുന്ന ഐ.എസ്.ബി.എൻ. സാധുവാണെന്നു തോന്നുന്നില്ല; യഥാർത്ഥ സ്രോതസ്സിൽ നിന്നും പകർത്തിയപ്പോൾ തെറ്റുപറ്റിയോ എന്നു പരിശോധിക്കുക",
        "specialloguserlabel": "നടപ്പിലാക്കിയയാൾ:",
-       "speciallogtitlelabel": "à´²à´\95àµ\8dà´·àµ\8dà´¯à´\82 (തലà´\95àµ\8dà´\95àµ\86à´\9fàµ\8dà´\9fàµ\8d à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´\89പയàµ\8bà´\95àµ\8dതാവàµ\8d) :",
+       "speciallogtitlelabel": "à´²à´\95àµ\8dà´·àµ\8dà´¯à´\82 (തലà´\95àµ\8dà´\95àµ\86à´\9fàµ\8dà´\9fàµ\8d à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´\89പയàµ\8bà´\95àµ\8dതാവിനàµ\86 à´¤à´¿à´°à´¯à´¾à´¨àµ\81à´³àµ\8dà´³ {{ns:user}}:à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83നാമà´\82) :",
        "log": "പ്രവർത്തനരേഖകൾ",
        "all-logs-page": "എല്ലാ പൊതുരേഖകളും",
        "alllogstext": "{{SITENAME}} സംരംഭത്തിൽ ലഭ്യമായ വിവിധ പ്രവർത്തന രേഖകൾ ഈ താളിൽ ഒരുമിച്ച് കാണാം. താങ്കൾക്ക് രേഖകളുടെ സ്വഭാവം, ഉപയോക്തൃനാമം (കേസ് സെൻസിറ്റീവ്), ബന്ധപ്പെട്ട താൾ (കേസ് സെൻസിറ്റീവ്) മുതലായവ തിരഞ്ഞെടുത്ത് അന്വേഷണം കൂടുതൽ ക്ഌപ്തപ്പെടുത്താവുന്നതാണ്.",
        "tooltip-ca-nstab-main": "വിവരദായക താൾ കാണുക",
        "tooltip-ca-nstab-user": "ഉപയോക്താവിന്റെ താൾ കാണുക",
        "tooltip-ca-nstab-media": "മീഡിയ താൾ കാണുക",
-       "tooltip-ca-nstab-special": "ഇതൊരു '''പ്രത്യേക''' താളാണ്‌. ഇത് തിരുത്തുക സാധ്യമല്ല.",
+       "tooltip-ca-nstab-special": "ഇതൊരു പ്രത്യേക താളാണ്‌. ഇത് തിരുത്തുക സാധ്യമല്ല.",
        "tooltip-ca-nstab-project": "പദ്ധതി താൾ കാണുക",
        "tooltip-ca-nstab-image": "പ്രമാണ താൾ കാണുക",
        "tooltip-ca-nstab-mediawiki": "വ്യവസ്ഥാസന്ദേശം കാണുക",
index 60f05c0..3c380d9 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}}-н бүртгэлийн мэдээлэл",
        "passwordreset-emailtext-ip": "Хэн нэгэн ($1 гэсэн IP хаягаас) {{SITENAME}} ($4) дээр таны бүртгэлийн сануулга авахаар хүссэн байна. Дараах {{PLURAL:$3|бүртгэл|бүртгэл}}\nуг е-шуудантай холбоотой:\n\n$2\n\n{{PLURAL:$3|Уг түр хэрэглэх нууц үг|Уг түр хэрэглэх нууц үгүүд}} нь {{PLURAL:$5|нэг өдрийн|$5 өдрийн}} дотор устах болно.\nТа уг нууц үгээр нэвтэрч, түүнийг шинэчлэх хэрэгтэй. Хэрэв өөр нэгэн уг хүсэлтийг явуулсан бол \nэсвэл өөрийн ориг нууц үгээ санаж байгаад түүнийгээ өөрчлөхийг хүсэхгүй байгаа бол энэ захиаг үл ойшоож \nэнгийнээр нэвтэрч болно.",
        "passwordreset-emailtext-user": "{{SITENAME}} дээрх $1 хэрэглэгч {{SITENAME}} ($4) дээр өөрийн тань бүртгэл дээр сануулга хүссэн байна. \nДараах {{PLURAL:$3|бүртгэл|бүртгэлүүд}} уг е-шуудантай холбоотой байна:\n\n$2\n\nЭнэ {{PLURAL:$3|түр нууц үг|түр нууц үгс}} {{PLURAL:$5|нэг өдрийн дараа|$5 өдрийн дараа}} устах болно.\nТүүгээр нэвтэрч ороод нууц үгээ шинэчилнэ үү. Энэ сануулгыг өөр хэн нэгэн хийсэн, эсвэл та\nнууц үгээ санаж байгаа бол энэ захиаг анхааралгүйгээр хуучнаараа ороход болно.",
-       "passwordreset-emailelement": "Хэрэглэгчийн нэр: $1\nТүр зуурын нууц үг: $2",
+       "passwordreset-emailelement": "Хэрэглэгчийн нэр: \n$1\n\nТүр зуурын нууц үг: \n$2",
        "passwordreset-emailsent": "Нууц үг солин емайл илгээсэн.",
        "passwordreset-emailsent-capture": "Доор харагдаж байгаа нь танируу илгээсэн нууц үг ресет хийх емайл.",
        "passwordreset-emailerror-capture": "Доор харагдаж байгаа нууц үг ресет хийх емайл үүссэх боловч {{GENDER:$2|хэрэглэгчид}} илгээхэд алдаа гарлаа : $1",
        "emailuser": "Энэ хэрэглэгчид мэйл илгээх",
        "emailuser-title-target": "Энэ {{GENDER:$1|хэрэглэгчийг}} и-мейлээр явуулах",
        "emailuser-title-notarget": "И-мейл хэрэглэгч",
-       "emailpage": "Хэрэглэгчид мэйл илгээх",
        "emailpagetext": "Энэ хэрэглэгч рүү мэйл илгээхэд доорхийг бөглөнө.\nТаны өөрийн [[Special:Preferences|хэрэглэгчийн тохиргоонд]] оруулсан мэйл хаяг нь \"Хэнээс\" гэсэн хэсэгт гарах тул хүлээн авагч хариугаа тань руу шууд илгээх боломжтой.",
        "defemailsubject": "{{SITENAME}} дахь \"$1\" хэрэглэгчийн и-мэйл хаяг",
        "usermaildisabled": "Хэрэглэгчийн и-мэйлийг идэвхигүйжүүлэв",
index 3dc9089..ef5cbdf 100644 (file)
        "view-foreign": "$1 वर पहा",
        "edit": "संपादन",
        "create": "तयार करा",
+       "create-local": "स्थानिक वर्णन जोडा",
        "editthispage": "हे पृष्ठ संपादित करा",
        "create-this-page": "हे पान तयार करा",
        "delete": "वगळा",
        "pool-timeout": "ताळ्यासाठी वाट पाहण्याची वेळ संपली",
        "pool-queuefull": "सर्व्हरवर ताण आहे.",
        "pool-errorunknown": "अपरिचित त्रुटी",
+       "poolcounter-usage-error": "वापर त्रूटी:$1",
        "aboutsite": "{{SITENAME}}बद्दल",
        "aboutpage": "Project:माहितीपृष्ठ",
        "copyright": "येथील मजकूर $1च्या अंतर्गत उपलब्ध आहे जोपर्यंत इतर नोंदी केलेल्या नाहीत.",
        "hidetoc": "लपवा",
        "collapsible-collapse": "निपात करा",
        "collapsible-expand": "विस्तार",
+       "confirmable-confirm": "{{GENDER:$1|आपणास}}खात्री आहे काय?",
        "confirmable-yes": "होय",
        "confirmable-no": "नाही",
        "thisisdeleted": "$1चे अवलोकन किंवा पुनर्स्थापन करायचे ?",
        "filerenameerror": "\"$1\" संचिकेचे \"$2\" असे नामांतर करता आले नाही.",
        "filedeleteerror": "\"$1\" संचिका वगळता आली नाही.",
        "directorycreateerror": "\"$1\" कार्यधारीका (डिरेक्टरी) तयार केली जाऊ शकली नाही.",
+       "directoryreadonlyerror": "कोश \"$1\" ला फक्त वाचता येऊ शकते.",
+       "directorynotreadableerror": "कोश \"$1\" ला वाचता येऊ शकत नाही.",
        "filenotfound": "\"$1\" ही संचिका सापडत नाही.",
        "unexpected": "अनपेक्षित मूल्य: \"$1\"=\"$2\"",
        "formerror": "त्रुटी: आवेदन सादर करता आले नाही.",
        "no-null-revision": "\"$1\" या पानाची नविन रिक्त आवृत्ती निर्मिता आली नाही.",
        "badtitle": "खराब शीर्षक",
        "badtitletext": "आपण विनंती केलेले पानाचे शीर्षक अयोग्य, रिकामे अथवा चुकिने जोडलेले आंतर-भाषिय किंवा आंतर-विकि शीर्षक आहे. त्यात,शीर्षकास अयोग्य अशी एक किंवा अधिक चिन्हे आहेत.",
+       "title-invalid-empty": "आपण विनंति केलेले पान-शिर्षक एकतर रिकामे आहे किंवा त्यात एखाद्या नामविश्वाचे नाव आहे.",
+       "title-invalid-utf8": "आपण विनंती केलेल्या पानाच्या शिर्षकात अवैध यूटिएफ-८ क्रमवारी आहेत.",
+       "title-invalid-interwiki": "आपण विनंती केलेल्या पानात आंतरविकि दुवे आहेत जे शिर्षकात वापरता येउ शकत नाहीत.",
+       "title-invalid-talk-namespace": "आपण विनंति केलेले पान उपलब्ध नसलेल्या चर्च्या पानास संबोधित करते",
        "perfcached": "खालील माहिती सयीमधील (कॅशे) असल्यामुळे ती अद्ययावत् नाही.जास्तीतजास्त {{PLURAL:$1|एक प्रतिफळ |$1 प्रतिफळे }} सयीमध्ये असतात.",
        "perfcachedts": "खालील माहिती सयीमधील (कॅशे) आहे व ती  $1 पर्यंत अद्ययावत् आहे. जास्तीतजास्त {{PLURAL:$4|एक प्रतिफळ |$4 प्रतिफळे}} सयीमध्ये असतात.",
        "querypage-no-updates": "सध्या या पानाकरिता नवी अद्यतने अनुपलब्ध केली आहेत.आत्ताच येथील विदा तरोताजा होणार नाही.",
        "passwordreset-emailtitle": "{{SITENAME}} वरील खात्याची माहिती",
        "passwordreset-emailtext-ip": "कुणीतरी (कदाचित तुम्ही, अंकपत्ता $1 वरुन) {{SITENAME}}($4) करिता नविन 'परवलीचा शब्द' पुनर्स्थापनेबद्दल विनंती केली आहे.\nखालील{{PLURAL:$3|सदस्यखाते}}या विपत्रपत्त्याशी निगडीत आहे: \n\"$2\"\n{{PLURAL:$3|हा तात्पुरता परवलीचा शब्द|हे तात्पुरते परवलीचे शब्द}}{{PLURAL:$5|एक दिवस|$5 दिवसात}} मुदतबाह्य होतील.आता आपण लॉग-ईन करून  नविन परवलीचा शब्द निवडा.जर ईतर कोणी ही विनंती केली असेल,किंवा जर आपणास परवलीच शब्द आठवला असेल तर,व जर आपण तो बदलु इच्छित नसाल तर आपण हा संदेश टाळा व आपला जुना परवलीचा शब्द वापरणे सुरू ठेवा.",
        "passwordreset-emailtext-user": " {{SITENAME}}वरील सदस्य $1ने {{SITENAME}}($4) करिता नविन 'परवलीचा शब्द' पुनर्स्थापनेबद्दल विनंती केली आहे.\nखालील{{PLURAL:$3|सदस्यखाते}}या विपत्रपत्त्याशी निगडीत आहे: \n\n\"$2\"\n\n{{PLURAL:$3|हा तात्पुरता परवलीचा शब्द|हे तात्पुरते परवलीचे शब्द}}{{PLURAL:$5|एक दिवस|$5 दिवसात}} मुदतबाह्य होतील.आता आपण लॉग-ईन करून  नविन परवलीचा शब्द निवडा.जर ईतर कोणी ही विनंती केली असेल,किंवा जर आपणास परवलीच शब्द आठवला असेल तर,व, जर आपण तो बदलु इच्छित नसाल तर आपण हा संदेश टाळा व आपला जुना परवलीचा शब्द वापरणे सुरू ठेवा.",
-       "passwordreset-emailelement": "सदस्यनाव: $1\nअस्थायी परवलीचा शब्द: $2",
+       "passwordreset-emailelement": "सदस्यनाव: \n$1\n\nअस्थायी परवलीचा शब्द: \n$2",
        "passwordreset-emailsent": "'परवलीचा शब्द' पुनर्स्थापनेबाबत एक विपत्र पाठवण्यात आले आहे.",
        "passwordreset-emailsent-capture": "'परवलीचा शब्द' पुनर्स्थापनेबाबत एक विपत्र पाठवण्यात आले आहे जे खाली दर्शविण्यात आले आहे.",
        "passwordreset-emailerror-capture": "'परवलीचा शब्द' पुनर्स्थापनेबाबत एक विपत्र निर्माण करण्यात आले, जे खाली दर्शविण्यात आले आहे.परंतु,{{GENDER:$2|सदस्य}}ला पाठविणे असफल झाले: $1",
        "showhideselectedversions": "निवडलेल्या आवृत्त्या दाखवा / लपवा",
        "editundo": "उलटवा",
        "diff-empty": "(काही फरक नाही)",
+       "diff-multi-sameuser": "({{PLURAL:$1|याच सदस्याची एक माध्यमिक आवृत्ती|$1 याच सदस्याच्या माध्यमिक आवृत्त्या}} दर्श्यविण्यात आलेल्या नाहीत)",
        "diff-multi-manyusers": "{{PLURAL:$2|सदस्याची|$2 सदस्यांच्या}} ({{PLURAL:$1|आवृत्ती|$1 आवृत्त्या}} दाखवल्या नाहीत)",
        "difference-missing-revision": "या लेखाचे/ची  ($1) हे {{PLURAL:$2|संस्करण|$2 संस्करणे}} {{PLURAL:$2|सापडले नाही|सापडली नाहीत}}.वगळल्या गेलेल्या लेखपानाच्या जुन्या इतिहास-दुव्याचे अनुसरण केल्यामुळे, शक्यतोवर,असे घडु शकते.याबाबत अधिक तपशील  [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदी] येथे बघता येईल.",
        "searchresults": "शोध निकाल",
        "tooltip-ca-nstab-main": "आशयाचे पान पहा",
        "tooltip-ca-nstab-user": "सदस्य पान पहा",
        "tooltip-ca-nstab-media": "माध्यम पान पहा",
-       "tooltip-ca-nstab-special": "हे विशेष पान आहे; तुम्ही ते बदलू शकत नाही.",
+       "tooltip-ca-nstab-special": "हे विशेष पान आहे,व त्याचे संपादन होउ शकत नाही.",
        "tooltip-ca-nstab-project": "प्रकल्प पान पहा",
        "tooltip-ca-nstab-image": "संचिका पान पहा",
        "tooltip-ca-nstab-mediawiki": "सिस्टीम संदेश पहा",
        "logentry-rights-rights": "$1 ने $3 साठी $4 वरुन $5 ला गट सदस्यता{{GENDER:$2|बदलली}}",
        "logentry-rights-rights-legacy": "$1 ने $3 साठी गट सदस्यता {{GENDER:$2|बदलली}}",
        "logentry-rights-autopromote": "$1 ला स्वयंचलितरित्या $4 वरुन $5 ला {{GENDER:$2|बढती दिल्या गेली}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|अपभारीत केली}} $3",
        "rightsnone": "(काहीही नाही)",
        "revdelete-summary": "संपादन माहिती",
        "feedback-adding": "आपला पश्चप्रदाय (फिडबॅक)  जोडत आहोत या पानास.......",
index e27a3f4..1a7d7d9 100644 (file)
        "passwordreset-emailtitle": "Butiran akaun di {{SITENAME}}",
        "passwordreset-emailtext-ip": "Seseorang (mungkin anda, dari alamat IP $1) telah memohon supaya kata laluan diset semula untuk {{SITENAME}} anda ($4). {{PLURAL:$3|Akaun|Akaun-akaun}} pengguna yang berikut\ndikaitkan dengan alamat e-mel ini:\n\n$2\n\n{{PLURAL:$3|Kata|Kata-kata}} laluan sementara ini akan luput dalam masa $5 hari. Anda harus log masuk dan membuat kata laluan yang baru sekarang. Jika permohonan ini dibuat oleh orang lain, atau jika anda teringat kembali kata laluan asal anda dan anda tidak lagi berhasrat untuk mengubahnya, anda boleh mengabaikan pesanan ini dan terus menggunakan kata laluan lama anda.",
        "passwordreset-emailtext-user": "Pengguna $1 telah memohon supaya kata laluan diset semula untuk {{SITENAME}} anda ($4). {{PLURAL:$3|Akaun|Akaun-akaun}} pengguna yang berikut\ndikaitkan dengan alamat e-mel ini:\n\n$2\n\n{{PLURAL:$3|Kata|Kata-kata}} laluan sementara ini akan luput dalam masa $5 hari. Anda harus log masuk dan membuat kata laluan yang baru sekarang. Jika permohonan ini dibuat oleh orang lain, atau jika anda teringat kembali kata laluan asal anda dan anda tidak lagi berhasrat untuk mengubahnya, anda boleh mengabaikan pesanan ini dan terus menggunakan kata laluan lama anda.",
-       "passwordreset-emailelement": "Nama pengguna: $1\nKata laluan sementara: $2",
+       "passwordreset-emailelement": "Nama pengguna: \n$1\n\nKata laluan sementara: \n$2",
        "passwordreset-emailsent": "E-mel set semula kata laluan telah dihantar.",
        "passwordreset-emailsent-capture": "E-mel set semula kata laluan telah dihantar, seperti yang dipaparkan di bawah.",
        "passwordreset-emailerror-capture": "E-mel set semula kata laluan telah dihasilkan, seperti yang dipaparkan di bawah, tetapi tidak berjaya dihantar kepada {{GENDER:$2|pengguna}} berkenaan: $1",
index 3fcfbff..a8b84f9 100644 (file)
        "passwordreset-emailtitle": "Dettalji tal-kont fuq {{SITENAME}}",
        "passwordreset-emailtext-ip": "Xi ħadd (probabbilment int, mill-indirizz IP $1) għamel rikjesta sabiex jingħata password ġdida sabiex jaċċessa l-{{SITENAME}} ($4). L-{{PLURAL:$3|utent assoċjat|utenti assoċjati}} ma' dan l-indirizz elettroniku {{PLURAL:$3|huwa|huma}}:\n\n$2\n\n{{PLURAL:$3|Din il-password temporanja se tiskadi|Dawn il-passwords temporanji se jiskadu}} fi żmien {{PLURAL:$5|ġurnata|$5 jum}}. Inti għadek tidħol fil-kont tiegħek u tagħżel password ġdida issa. Jekk xi ħadd ieħor għamel din ir-rikjesta, jew jekk ftakart il-password oriġinali, u m'għadekx trid tbiddilha, inti tista' tinjora dan il-messaġġ u tibqa' tuża' l-password il-qadima.",
        "passwordreset-emailtext-user": "{{PLURAL:$3|Din il-password temporanja se tiskadi|Dawn il-passwords temporanji se jiskadu}} fi żmien {{PLURAL:$5|ġurnata|$5 jum}}. Inti għadek tidħol fil-kont tiegħek u tagħżel password ġdida issa. Jekk xi ħadd ieħor għamel din ir-rikjesta, jew jekk ftakart il-password oriġinali, u m'għadikx trid tbiddilha, inti tista' tinjora dan il-messaġġ u tibqa' tuża' l-password il-qadima.",
-       "passwordreset-emailelement": "Isem tal-utent: $1\nPassword temporanja: $2",
+       "passwordreset-emailelement": "Isem tal-utent: \n$1\n\nPassword temporanja: \n$2",
        "passwordreset-emailsent": "Intbagħtet ittra-e għall-issettjar mill-ġdid tal-password.",
        "passwordreset-emailsent-capture": "Intbagħtet ittra-e għall-ssettjar mill-ġdid tal-password u l-kontenut jidher hawn taħt.",
        "passwordreset-emailerror-capture": "Ġiet ġenerata ittra-e ta' tfakkira, li l-kontenut tagħha jidher hawn taħt. Madanakollu, il-posta ma ntbagħtitx lill-utent: $1",
index 71ff9d3..9898372 100644 (file)
        "passwordreset": "Одов ладямс салававал",
        "passwordreset-username": "Теиця леметь:",
        "passwordreset-email": "Е-сёрмапаргот:",
-       "passwordreset-emailelement": "Теицянь леметь: $1\nНурькине шкань салававалот: $2",
+       "passwordreset-emailelement": "Теицянь леметь: \n$1\n\nНурькине шкань салававалот: \n$2",
        "changeemail-oldemail": "Неень е-сёрмапаргот:",
        "changeemail-newemail": "Од е-сёрмапаргот:",
        "changeemail-none": "(арась мезе невтемс)",
index e20b385..432b416 100644 (file)
        "listgrouprights-members": "(کارورون لیست)",
        "mailnologintext": "برای برسنی‌ین پوست الکترونیکی به کارورون دیگه ونه [[Special:UserLogin|بورین سامانه دله]] و نشونی پوست الکترونیکی معتبری تو [[Special:Preferences|ترجیحات]] خادت ره داشته بایی.",
        "emailuser": "این کارور وسّه ایمیل بَرسِن",
-       "emailpage": "ئـی-مه‌یـل ای کـارور وه‌سه",
        "watchlist": "مه دمبال‌هاکرده‌‌ئون ِلیست",
        "mywatchlist": "دمبال‌هاکرده‌ئون فهرست",
        "watchnologin": "سیستم ره دله نی ئه موئین",
        "tooltip-n-portal": "اینجه بتونّی بقیه جه کومک بَیرین یا سؤال هاکنین",
        "tooltip-n-currentevents": "تازه اخبار ره بخوندِستن",
        "tooltip-n-recentchanges": "تازه دچی‌یه‌ئون ره لیست",
-       "tooltip-n-randompage": "اتت شانسی صفحه بَدی‌ین",
+       "tooltip-n-randompage": "اتا شانسی صفحه بَدی‌ین",
        "tooltip-n-help": "أتـا جـا کـه...",
        "tooltip-t-whatlinkshere": "هأمو ولـگ‌ئونی که ایجه ره لینک هه‌دانه",
        "tooltip-t-recentchangeslinked": "اِسایی دِگاردسته‌ئون ِصفحه‌ئون که این صفحه جه لینک دارنه",
        "tooltip-ca-nstab-main": "بدی‌ین ِصفحه",
        "tooltip-ca-nstab-user": "کاروری صفحه ره بَدی‌ین",
        "tooltip-ca-nstab-media": "مدیا صفحه هارشی‌ین",
-       "tooltip-ca-nstab-special": "اینتا اتا شا صفحه هسته که شِما نتوندی وه ره دچینی",
+       "tooltip-ca-nstab-special": "اینتا اتا شا صفحه هسته که شِما نتوندی وه ره دچینین",
        "tooltip-ca-nstab-project": "پروژه‌ی ِصفحه ره بدی‌ین",
        "tooltip-ca-nstab-image": "عکس ِصفحه ره بدی‌ین",
        "tooltip-ca-nstab-template": "شـابـلـون بـأویـنـه‌ن",
        "tooltip-undo": "«واچی‌ین» این دچی‌یه ره خنثی کانده و دچی‌ین ِجعبه ره پیش-پیش سِراق هِدائِن ِحالت دله وا کانده تا شه دچی‌یه‌ئون ِدلیل ره اضافه هاکنین.",
        "tooltip-summary": "خلاصه بنویسین",
        "siteusers": "$1، {{PLURAL:$2|کارور|کارورون}} {{SITENAME}}",
-       "simpleantispam-label": "!آنتی‌اسپم ِچک‌هاکردن.\nاین قسمت ره پـِر <strong>نکان!</strong>",
+       "simpleantispam-label": "آنتی‌اسپم ره چک‌هاکردن.\nاین قسمت ره پـِر <strong>نکان!</strong>",
        "pageinfo-toolboxlink": "صفحه‌ی ِاطلاعات",
        "previousdiff": "کوهنه‌تر دچی‌ین ←",
        "nextdiff": "ته‌رنه دأچیه‌ن ←",
index 17a4858..7fb21a3 100644 (file)
@@ -9,7 +9,8 @@
                        "Shirayuki",
                        "Teòtlalili",
                        "아라",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Taresi"
                ]
        },
        "tog-underline": "Mokìnxòîkuilòtzàswis tzòwilistìn:",
@@ -32,6 +33,8 @@
        "tog-enotifminoredits": "Notech moēhualtia cē maltzinteyōtl netitlaniztli nō ihcuāc mopatla tepitōn zāzanilli in notlachiyaliz.",
        "tog-enotifrevealaddr": "Ticnēxtīz mo e-mailcān āxcāncayōtechcopa āmatlacuilizpan",
        "tog-shownumberswatching": "Tiquinttāz tlatequitiltilīlli tlein tlachiyacateh",
+       "tog-oldsig": "Nicān tōcāyoh:",
+       "tog-fancysig": "Wikitext īpan ticmatiz tōcāyoh (in ahtleh auto-link)",
        "tog-forceeditsummary": "Xinēchnōtzāz ihcuāc ahmo niquihtōz inōn ōnitlapatlac",
        "tog-watchlisthideown": "Tiquintlātīz mopatlaliz motlachiyalizpan",
        "tog-watchlisthidebots": "Tiquintlātīz tepozpatlaliztli motlachiyalizpan",
        "oct": "ic mahtlāc",
        "nov": "ic mahtlāctli oncē",
        "dec": "ic mahtlāctli omōme",
+       "january-date": "Īccēmētztli $1",
+       "february-date": "Īcōmemētztli $1",
+       "march-date": "Īquēyimētztli $1",
+       "april-date": "Īcnāhuimētztli $1",
+       "may-date": "Īcmācuīllimētztli $1",
+       "june-date": "Īcchicuacemmētztli $1",
+       "july-date": "Īcchicōmemētztli $1",
+       "august-date": "Īcchicuēyimētztli $1",
+       "september-date": "Īcchiucnāhuimētztli $1",
+       "october-date": "Īcmahtlactlimētztli $1",
+       "november-date": "Īcmahtlactlioncēmētztli $1",
+       "december-date": "Īcmahtlactliomōmemētztli $1",
        "pagecategories": "{{PLURAL:$1|Tlaìxmatkàtlàlilòtl|Tlaìxmatkàtlàlilòmë}}",
        "category_header": "Tlâkuilòlpiltin ìpan tlaìxmatkàtlàlilòtl \"$1\"",
        "subcategories": "Tlaìxmatkàtlàlilòpilòmë",
        "permalink": "Mochipa tzonhuiliztli",
        "print": "Tictepoztlahcuilōz",
        "view": "Mà mỏta",
-       "edit": "Ticpatlāz",
-       "create": "Ticchīhuāz",
-       "editthispage": "Ticpatlāz inīn zāzanilli",
-       "create-this-page": "Ticchīhuāz inīn zāzanilli",
+       "edit": "Ticpatlaz",
+       "edit-local": "Ticpatlaz nicān tlahtōlli",
+       "create": "Ticchīhuaz",
+       "create-local": "Ticahxiltīz nicān tlahtōlli",
+       "editthispage": "Ticpatlaz inīn zāzanilli",
+       "create-this-page": "Ticchīhuaz inīn zāzanilli",
        "delete": "Ticpolōz",
        "deletethispage": "Ticpolōz inīn zāzanilli",
        "undelete_short": "Ahticpolōz {{PLURAL:$1|cē tlapatlaliztli|$1 tlapatlaliztli}}",
        "viewdeleted_short": "Mà mỏta {{PLURAL:$1|se tlatlaìxpôpolòlli tlayèktlàlilistli|$1 tlatlaìxpôpolòltin tlayèktlàlilistin}}",
        "protect": "Ticquīxtīz",
-       "protect_change": "ticpatlāz",
+       "protect_change": "ticpatlaz",
        "protectthispage": "Ticquīxtiāz inīn zāzanilli",
        "unprotect": "Ticpatlaz in tlaquīxtīliztli",
        "unprotectthispage": "Ticpatlaz inīn āmatl ītlaquīxtīliz",
        "retrievedfrom": "Ōquīzqui ītech  \"$1\"",
        "youhavenewmessages": "Tiquimpiya $1 ($2).",
        "youhavenewmessagesmulti": "Tiquimpiya yancuīc tlahcuilōlli īpan $1",
-       "editsection": "ticpatlāz",
-       "editold": "ticpatlāz",
+       "editsection": "ticpatlaz",
+       "editold": "ticpatlaz",
        "viewsourceold": "xiquitta tlahtōlcaquiliztilōni",
-       "editlink": "ticpatlāz",
-       "viewsourcelink": "tiquittāz tlahtōlcaquiliztilōni",
+       "editlink": "ticpatlaz",
+       "viewsourcelink": "tiquittaz tlahtōlcaquiliztilōni",
        "editsectionhint": "Ticpatlacah: $1",
        "toc": "Inīn tlahcuilōlco",
        "showtoc": "xiquitta",
        "hidetoc": "tictlātīz",
        "collapsible-collapse": "Motlàtìs",
        "collapsible-expand": "Monèxtìs",
-       "thisisdeleted": "¿Tiquittāz nozo ahticpolōz $1?",
+       "confirmable-yes": "Quēmah",
+       "confirmable-no": "Ahmō",
+       "thisisdeleted": "¿Tiquittaz nozo ahticpolōz $1?",
        "viewdeleted": "¿Tiquiēlēhuia tiquitta $1?",
        "restorelink": "{{PLURAL:$1|cē tlapatlaliztli polotic|$1 tlapatlaliztli polotic}}",
        "feedlinks": "Olōlpōl:",
        "site-atom-feed": "$1 Atom huelītiliztli",
        "page-rss-feed": "\"$1\" RSS huelītiliztli",
        "page-atom-feed": "\"$1\" RSS huelītiliztli",
-       "red-link-title": "$1 (ayàk in tlaìxtlapalli)",
-       "nstab-main": "Tlaìxtlapalli",
+       "red-link-title": "$1 (ayāc in centlaīxtli)",
+       "nstab-main": "Centlaīxtli",
        "nstab-user": "Tlatequitiltilīlli",
        "nstab-media": "Mēdiatl",
        "nstab-special": "Nònkuâkìskàtlaìxtlapalli",
        "error": "Ahcuallōtl",
        "databaseerror": "Tlahcuilōltzintlān īahcuallo",
        "laggedslavemode": "Xiquitta: huel ahmo ia achi yancuīc in tlapatlaliztli inīn zāzanilco.",
+       "readonly": "Mactzīntlantli tzahtzacticah",
        "missingarticle-rev": "(tlachiyaliztli ītlapōhual: $1)",
        "missingarticle-diff": "(Ahneneuh.: $1, $2)",
        "internalerror": "Ahcuallōtl tlahtic",
        "internalerror_info": "Ahcuallōtl tlahtic: $1",
-       "filecopyerror": "Ahmo ōmohuelītic tlacopīna \"$1\" īhuīc \"$2\".",
-       "filerenameerror": "Ahmo ōmohuelītic tlazaca \"$1\" īhuīc \"$2\".",
-       "filedeleteerror": "Ahmo ōmohuelītic tlapoloa \"$1\".",
-       "filenotfound": "Ahmo ōmohuelītic tlanāmiqui \"$1\".",
-       "cannotdelete": "Ahmo ōhuelītic mopoloa in zāzanilli \"$1\".\nHueli tlein āquin ōquipolo achtopa.",
+       "filecopyerror": "Ahmō ōmohuelītic tlacopīna \"$1\" īhuīc \"$2\".",
+       "filerenameerror": "Ahmō ōmohuelītic tlazaca \"$1\" īhuīc \"$2\".",
+       "filedeleteerror": "Ahmō ōmohuelītic tlapoloa \"$1\".",
+       "filenotfound": "Ahmō ōmohuelītic tlanāmiqui \"$1\".",
+       "cannotdelete": "Ahmō ōhuelītic mopoloa in zāzanilli \"$1\".\nHueli tlein āquin ōquipolo achtopa.",
        "badtitle": "Ahcualli tōcāitl",
        "badtitletext": "Zāzanilli ticnequi in ītōca cah ahcualli, ahtlein quipiya nozo ahcualtzonhuiliztli interwiki tōcāhuicpa.\nHueliz quimpiya tlahtōl tlein ahmo mohuelītih motequitiltia tōcāpan.",
-       "viewsource": "Tiquittāz tlahtōlcaquiliztilōni",
+       "viewsource": "Tiquittaz tlahtōlcaquiliztilōni",
        "actionthrottled": "Tlachīhualiztli ōmotzacuili",
        "viewsourcetext": "Tihuelīti tiquitta auh ticcopīna inīn zāzanilli ītlahtōlcaquiliztilōni:",
        "namespaceprotected": "Ahmo tiquihuelīti tiquimpatla zāzaniltin īpan '''$1'''.",
        "ns-specialprotected": "In nònkuâkìskàtlaìxtlapaltìn awel ìmpan nemàtilòs mokinyèktlàlis.",
        "titleprotected": "Inīn zāzanilli ōmoquīxti ic tlachīhualiztli ic [[User:$1|$1]].\nŌquihto: ''$2''",
+       "exception-nologin": "Ahmō timocalac",
        "virus-unknownscanner": "ahmatic antivirus:",
+       "welcomeuser": "Ximopanōltih, $1!",
        "yourname": "Motlatequitiltilīltōca:",
        "yourpassword": "Motlahtōlichtacāyo",
        "yourpasswordagain": "Motlahtōlichtacāyo occeppa",
        "nav-login-createaccount": "Ximocalaqui / ximomachiyōmaca",
        "userlogin": "Ximomachiyōmaca/Ximocalaqui",
        "userloginnocreate": "Ximocalaqui",
-       "logout": "Tiquīzāz",
-       "userlogout": "Tiquīzāz",
-       "notloggedin": "Ahmo ōtimocalac",
-       "nologin": "¿Ahmo ticpiya cuentah? '''$1'''.",
-       "nologinlink": "Ticchīhuāz cē cuentah",
-       "createaccount": "Ticchīhuāz cē cuentah",
+       "logout": "Tiquīzaz",
+       "userlogout": "Tiquīzaz",
+       "notloggedin": "Ahmō ōtimocalac",
+       "nologin": "¿Ahmō ticpiya cuentah? '''$1'''.",
+       "nologinlink": "Ticchīhuaz cē cuentah",
+       "createaccount": "Ticchīhuaz cuentah",
        "gotaccount": "¿Ye ticpiya cē cuentah? '''$1'''.",
        "gotaccountlink": "Ximocalaqui",
        "createaccountmail": "Ticnemītīz ahmo cemihcac zāzoichtacātlahtōlli nō in tiquēhualtīz in maltzinteyōtl monetitlanizyeyān",
-       "createaccountreason": "Tlèka:",
+       "createaccountreason": "Tleīpampa:",
+       "createacct-reason": "Tleīpampa",
+       "createacct-submit": "Ticchīhuaz in motlapōhual",
        "badretype": "Ahneneuhqui motlahtōlichtacāyo.",
        "userexists": "In tlatequitiltilīltōcāitl in ōquipehpen ye ia.\nTimitztlātlauhtiah xicpehpena occē.",
        "loginerror": "Ahcuallōtl tlacalaquiliztechcopa",
        "accountcreatedtext": "In ītlatequitiltilīllapōhual in [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) ōquiyōcoyalo.",
        "createaccount-title": "Cuentah ītlachīhualiz ic {{SITENAME}}",
        "loginlanguagelabel": "Tlâtòlli: $1",
+       "pt-createaccount": "Ticchīhuaz motlapōhual",
        "changepassword": "Ticpatlāz motlahtōlichtacāyo",
        "resetpass_header": "Xicpatlāz motlahtōlichtacāyo",
        "oldpassword": "Huēhueh motlahtōlichtacayo:",
        "note": "'''Tlahtōlcaquiliztilōni:'''",
        "previewnote": "'''Xiquilnamiqui tein inīn zan tlaachtopaittaliztli.'''\n¡Motlapatlaliz ayamo ōquinpix!",
        "editing": "Ticpatlacah $1",
+       "creating": "Ticchīhua $1",
        "editingsection": "Ticpatlacah $1 (tlahtōltzintli)",
        "editingcomment": "Ticpatlacah $1 (tlahtōltzintli)",
        "editconflict": "Tlapatlaliztli yāōyōtōn: $1",
        "history-feed-item-nocomment": "$1 īpan $2",
        "history-feed-empty": "In zāzanilli tiquiēlēhuia ahmo ia.\nHueliz ōmopolo huiqui nozo ōmozacac.\n[[Special:Search|Xitēmoa huiquipan]] yancuīc huēyi zāzaniltin.",
        "rev-delundel": "tiquittāz/tictlātīz",
+       "rev-showdeleted": "ticnēxtīz",
        "revisiondelete": "Tiquimpolōz/ahtiquimpolōz tlachiyaliztli",
        "revdelete-show-file-submit": "Quēmah",
        "revdelete-hide-text": "In tlahtlachiyaliztli ītlahcuilōl",
        "revdelete-hide-image": "Tictlātīz tlahcuilōlli ītlapiyaliz",
        "revdelete-radio-set": "Tlaīnāyalli",
        "revdelete-radio-unset": "Ittalōni",
+       "revdelete-log": "Tleīpampa:",
        "revdel-restore": "Ticpatlāz tlattaliztli",
        "pagehist": "Zāzanilli tlahcuilōlloh",
        "deletedhist": "Ōtlapolo tlahcuilōlloh",
        "mergehistory-no-destination": "Zāzanilhuīc $1 ahmo ia.",
        "mergehistory-autocomment": "Ōmocēntili [[:$1]] īpan [[:$2]]",
        "mergehistory-comment": "Ōmocēntili [[:$1]] īpan [[:$2]]: $3",
+       "mergehistory-reason": "Tleīpampa:",
        "revertmerge": "Tiquīxipehuaz",
        "history-title": "«$1» tlahcuilōlloh ītlaihittaliz",
        "lineno": "Pāntli $1:",
        "preferences": "Tlaēlēhuiliztli",
        "mypreferences": "Notlaēlēhuiliz",
        "prefs-edits": "Tlapatlaliztli tlapōhualli:",
+       "prefs-skin": "Ēhuatl",
        "skin-preview": "Xiquitta quemeh yez",
        "datedefault": "Ayāc tlanequiliztli",
        "prefs-labs": "Ìntlâtlamảtilis in tlayêyẻkòyàntìn",
        "recentchanges-label-minor": "Inīn tlapatlaliztli tepitōn",
        "rclistfrom": "Xiquinttāz yancuīc tlapatlaliztli īhuīcpa $3 $2",
        "rcshowhideminor": "$1 tlapatlalitzintli",
+       "rcshowhideminor-show": "Ticnēxtīz",
        "rcshowhidebots": "$1 tepoztlācah",
+       "rcshowhidebots-hide": "Tiquihyānaz",
        "rcshowhideliu": "$1 tēmachiyōmacalli tlatequitiltilīltin",
        "rcshowhideanons": "$1 ahtōcā tlatequitiltilīlli",
+       "rcshowhideanons-show": "Ticnēxtīz",
        "rcshowhidepatr": "$1 tlapatlaliztli mochiyahua",
        "rcshowhidemine": "$1 notlahcuilōl",
+       "rcshowhidemine-show": "Ticnēxtīz",
        "rclinks": "Xiquintta xōcoyōc $1 tlapatlaliztli xōcoyōc $2 tōnalpan.<br />$3",
        "diff": "ahneneuh",
        "hist": "tlahcuil",
        "unusedtemplateswlh": "occequīntīn tzonhuiliztli",
        "randompage": "Zāzozāzanilli",
        "randompage-nopages": "Ahmo oncah zāzanilli īpan inīn {{PLURAL:$2|tōcāitl}}: $1.",
+       "randomincategory-submit": "Yāuh",
        "randomredirect": "Zāzotlacuepaliztli",
        "statistics": "Tlapōhualiztli",
        "statistics-header-pages": "Zāzaniltin tlapōhualli",
        "pager-newer-n": "{{PLURAL:$1|1 yancuīc|$1 yancuīc}}",
        "pager-older-n": "{{PLURAL:$1|1 huēhuetl|$1 huēhueh}}",
        "booksources": "āmoxmēyalli",
+       "booksources-search-legend": "Tiquīxtēmōz āmoxmēyalli",
+       "booksources-search": "Tiquīxtēmōz",
        "specialloguserlabel": "Tlatequitiltilīlli:",
        "speciallogtitlelabel": "Tōcāitl:",
        "log": "Tlahcuilōlloh",
index bec75f5..2373ab7 100644 (file)
        "passwordreset": "Têng siat bi̍t-bé",
        "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-emailelement": "Iōng-chiá: \n$1\n\nLîm-sî ê bi̍t-bé: \n$2",
        "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í:",
index 2dada9d..76b609d 100644 (file)
        "navigation-heading": "Menu 'e navigazzione",
        "errorpagetitle": "Sbaglio",
        "returnto": "Torna a $1.",
-       "tagline": "Dda {{SITENAME}}.",
+       "tagline": "'A {{SITENAME}}.",
        "help": "Ajùto",
        "search": "Truova",
        "searchbutton": "Truova",
        "toolbox": "Strumiente",
        "userpage": "Vere a paggena utente",
        "projectpage": "Vere a paggena 'e servizio",
-       "imagepage": "Vere a paggena ddo file",
+       "imagepage": "Vere a paggena d' 'o file",
        "mediawikipage": "Vere 'a mmasciata",
        "templatepage": "Vere 'o template",
        "viewhelppage": "Vere 'a paggena 'e ajùto",
        "emailnotauthenticated": "'O ndirizzo 'e posta elettronica nun è stat'ancora cunfermato.\nNun se mannarranno mmasciate e-mail p' ' funzione ccà abbascio.",
        "noemailprefs": "Avite 'a specificà nu ndirizzo e-mail pe ll'attivà sti funzione.",
        "emailconfirmlink": "Cunferma 'o nderizzo mail d' 'o tujo.",
-       "invalidemailaddress": "'O nderizzo e-mail scritto nun se può accettà pecché nun tene nu furmatto buono.\nScrivite n'ata vota nu nderizzo bbuono o abbacantate 'a casciulella.",
+       "invalidemailaddress": "'O nderizzo e-mail scritto nun se può accettà pecché nun tene nu furmato buono.\nScrivite n'ata vota nu nderizzo bbuono o abbacantate 'a casciulella.",
        "cannotchangeemail": "'E ccunte mail nun se ponno cagnà dint'a sta wiki.",
        "emaildisabled": "Chistu sito nun può mannà mmasciate e-mail.",
        "accountcreated": "Cunto criato",
        "passwordreset-emailtitle": "Dettaglie d' 'o cunto pe' {{SITENAME}}",
        "passwordreset-emailtext-ip": "Coccherun (può darse ca sì tu, cu n'indirizzo IP $1) ha addimannato na mmasciata c' 'a password nova pe' putè trasì a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|L'utente associate}} a st'indirizze e-mail songo:\n\n$2\n\n{{PLURAL:$3|Sta password temporanea ammaturarrà|Sti password temporanee ammaturarranno}} aropp'a {{PLURAL:$5|nu juorno|$5 ghiuorne}}.\nHè 'a trasì e scegliere na password nova mò. \n\nSi nun sì stato tu a fà sta richiesta, o te sì scurdat' 'a password origginale e nun 'a buò cagnà cchiù, lassa perde sta mmasciata e usa 'a password viecchia.",
        "passwordreset-emailtext-user": "L'utente $1 di {{SITENAME}} ha addimannato na mmasciata c' 'a password nova pe' putè trasì a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|L'utente associate}} a st'indirizze e-mail songo:\n\n$2\n\n{{PLURAL:$3|Sta password temporanea ammaturarrà|Sti password temporanee ammaturarranno}} aropp'a {{PLURAL:$5|nu juorno|$5 ghiuorne}}.\nHè 'a trasì e scegliere na password nova mò. \n\nSi nun sì stato tu a fà sta richiesta, o te sì scurdat' 'a password origginale e nun 'a buò cagnà cchiù, lassa perde sta mmasciata e usa 'a password viecchia.",
-       "passwordreset-emailelement": "Nomme utente: $1\nPassword temporanea: $2",
+       "passwordreset-emailelement": "Nomme utente: \n$1\n\nPassword temporanea: \n$2",
        "passwordreset-emailsent": "Na mmasciata e-mail pe' riabbià 'a password è stata mannata.",
        "passwordreset-emailsent-capture": "Na mmasciata e-mail pe' riabbià 'a password è stata mannata, chista mmasciata 'a putite vedé ccà abbascio.",
        "passwordreset-emailerror-capture": "Na mmasciata e-mail pe' riabbià 'a password è stata mannata, 'a putite vedé ccà abbascio, ma aita sapé ca nun s'è mannata a {{GENDER:$2|l'utente}} pecché c'è stato cocch'errore: $1",
        "changeemail-password": "'A password vosta pe' {{SITENAME}}:",
        "changeemail-submit": "Cagna e-mail",
        "changeemail-throttled": "Avite fatto troppe tentative 'a trasì.\nAspettate nu $1 apprimma 'e pruvà n'ata vota.",
+       "changeemail-nochange": "Pe' piacere mettite n'indirizzo e-mail differente",
        "resettokens": "Riabbìa 'e token",
        "resettokens-text": "Ccà se ponno riabbià 'e chiave ca permetessero l'acciesso a determinate date private associate a 'o cunto vuosto.\n\nL'aviste 'e ffà quanno l'avete spartuto pe' sbaglio cu cocche perzona o pure quanno 'o cunto d' 'o vuosto è stato compromesso.",
        "resettokens-no-tokens": "Nun ce stanno token 'a riabbià.",
        "bold_tip": "Grassetto",
        "italic_sample": "Corsivo",
        "italic_tip": "Corsivo",
-       "link_sample": "Titulo ddo cullegamente",
+       "link_sample": "Titulo d' 'o cullegamento",
        "link_tip": "Jonte nterne",
-       "extlink_sample": "http://www.example.com titulo ddo cullegamente",
+       "extlink_sample": "http://www.example.com titulo d' 'o cullegamento",
        "extlink_tip": "Link esterno (arricuordate 'o prefisso http:// )",
        "headline_sample": "Testate",
        "headline_tip": "Testate 'e 2° livello",
        "media_tip": "Cullegamente a file multimediale",
        "sig_tip": "Firma cu data e ora",
        "hr_tip": "Linea orizzontale (ausà cu gedizzio)",
-       "summary": "Énnece",
+       "summary": "Innece",
        "subject": "Argomiento/titolo:",
        "minoredit": "Chisto è nu cagnamiénto piccerillo",
        "watchthis": "Tiene d'uocchio chesta paggena",
        "invalid-content-data": "Date cuntenute nun buone",
        "content-not-allowed-here": "'O cuntenuto \"$1\" nun è permesso dint'a paggena [[$2]]",
        "editwarning-warning": "Ascenno 'e sta paggena putisse ffà sperdere 'e cagnamiente fatte.\nSi sì trasuto, allora può stutà st'avviso dint'a sezziona \"{{int:prefs-editing}}\" d' 'e preferenze.",
-       "editpage-notsupportedcontentformat-title": "Furmatto d' 'o cuntenuto nun suppurtato",
-       "editpage-notsupportedcontentformat-text": "'O furmatto d' 'o cuntenuto $1 nun è suppurtato d' 'o mudello 'e cuntenuto $2.",
+       "editpage-notsupportedcontentformat-title": "Furmato d' 'o cuntenuto nun suppurtato",
+       "editpage-notsupportedcontentformat-text": "'O furmato d' 'o cuntenuto $1 nun è suppurtato d' 'o mudello 'e cuntenuto $2.",
        "content-model-wikitext": "wikitesto",
        "content-model-text": "testo nurmale",
        "content-model-javascript": "JavaScript",
        "rows": "Righe:",
        "columns": "Culonne:",
        "searchresultshead": "Truova",
-       "stub-threshold": "Valore minimo p' 'e <a href=\"#\" class=\"stub\">cullegamiente a 'e stub</a>, 'n byte:",
+       "stub-threshold": "Valore lemmeto p' 'o furmato d' 'o cullegamento stub ($1):",
+       "stub-threshold-sample-link": "mostra",
        "stub-threshold-disabled": "Stutato",
        "recentchangesdays": "Nummero 'e juorne a mmustà dint'a l'urdeme cagnamiente:",
        "recentchangesdays-max": "Massimo $1 {{PLURAL:$1|juorno|juorne}}",
        "recentchangeslinked-toolbox": "Cagnamiénte cullegate",
        "recentchangeslinked-title": "Cagnamiénte cullegate a \"$1\"",
        "recentchangeslinked-summary": "Chest'è n'alenco d' 'e cagnamiente fatte mò a 'e paggene cullegate 'a chilla specificata (o pe' cuntenute dint'a na categurìa specificata). 'E paggene cuntenute dint' 'o proprio elenco 'e l'[[Special:Watchlist|Paggene cuntrullate]] songo mmustate 'n '''grassetto'''.",
-       "recentchangeslinked-page": "Nomme dda paggena",
+       "recentchangeslinked-page": "Nomme d' 'a paggena",
        "recentchangeslinked-to": "Mmusta sulamente 'e cagnamiente a 'e paggene cullegate a chilla specificata",
        "upload": "Carreca file",
        "uploadbtn": "Carreca file",
        "booksources-text": "Ccà abbascio ce sta na lista 'e cullegamiente a l'ati site ca venneno libbre nuove e viecchie, ca putessero pure avé cchiù nfurmaziune ncopp' 'e libbre ca jate ascianno:",
        "booksources-invalid-isbn": "L'ISBN c'avete miso nun pare bbuono; cuntrolla si ce sta cocch'errore quanno stavate cupianno stu nummero d' 'a fonte origginale.",
        "specialloguserlabel": "Mplementatore:",
-       "speciallogtitlelabel": "Destinazione (titolo o utente):",
+       "speciallogtitlelabel": "Destinazione (titolo o {{ns:user}}:cunto utente pe' ll'utente):",
        "log": "Logs",
        "all-logs-page": "Tutte l'archivie pubbleche",
        "alllogstext": "Visualizzazione mmescata 'e tutte 'e riggistre a disposizione ncopp'a {{SITENAME}}.\nPutite restringere 'a vista a sicondo 'o tipo 'e riggistro, 'o nomme utente (sensibbele a 'e maiuscole), o 'e paggene coinvolte (pure chiste songo sensibbele a 'e maiuscole).",
        "whatlinkshere-hideredirs": "$1 redirects",
        "whatlinkshere-hidetrans": "$1 'nclusione",
        "whatlinkshere-hidelinks": "$1 jonte",
-       "whatlinkshere-hideimages": "$1 links ddo file",
+       "whatlinkshere-hideimages": "$1 links d' 'o file",
        "whatlinkshere-filters": "Filtre",
        "autoblockid": "Autoblocco #$1",
        "block": "Blocca l'utente",
        "tooltip-n-mainpage-description": "Visita a paggena prencepale",
        "tooltip-n-portal": "Descrizione d' 'o prugietto, che po' ffa, addò truvà 'e ccose",
        "tooltip-n-currentevents": "Ascìa 'e nfurmaziune ncopp' 'e fatte succiesse mò mò",
-       "tooltip-n-recentchanges": "Ennece dde urdeme cagnamiénte ddo sito",
+       "tooltip-n-recentchanges": "Ennece dde urdeme cagnamiénte d' 'o sito",
        "tooltip-n-randompage": "Na paggena qualsiase",
        "tooltip-n-help": "Paggena 'e ajùto",
        "tooltip-t-whatlinkshere": "'Na lista 'e tutte e paggene ca song cullegate a chista",
        "tooltip-ca-nstab-main": "Vere a paggena e contenuto",
        "tooltip-ca-nstab-user": "Vere a paggena utente",
        "tooltip-ca-nstab-media": "Vide 'a pàggena d' 'e media",
-       "tooltip-ca-nstab-special": "Chista è 'na paggena speciale, nun può essere càgnata",
+       "tooltip-ca-nstab-special": "Chista è 'na paggena speciale e nun può essere càgnata",
        "tooltip-ca-nstab-project": "Vere a paggena 'e servizio",
        "tooltip-ca-nstab-image": "Vere a paggena ddo file",
        "tooltip-ca-nstab-mediawiki": "Vide 'a mmasciata d' 'o sistema",
        "log-description-pagelang": "Chest'è nu riggistro 'e cagnamiente 'e lengua d' 'e paggene.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ave cagnato}} 'a lengua d' 'a paggena $3 'a $4 a $5.",
        "default-skin-not-found": "Oops! 'A skin predefinta ' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\n'A installazione pare ca tenesse {{PLURAL:$4|'a skin|'e skin}} ccà abbascio. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] pe' n'avè cchiù nfurmaziune ncopp' 'a manera {{PLURAL:$4|'e ll'abbià}} o scegliere chilla predefinita.\n\n$2\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Scarrecanne 'e tarballs individuale 'e skin 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Ausanno Git pe' scarrecà skin].\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki.\n\n; Si avite MediaWiki agghiurnato MediaWiki mò mò:\n: MediaWiki 1.24 e verziune appriesso nun abbìa automatecamente 'e skin installate (vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]). Putite copià {{PLURAL:$5|'a linea|'e linee}} ccà abbascio dint' 'o <code>LocalSettings.php</code> pe' putè appiccià {{PLURAL:$5|'o|tutt' 'e}} {{PLURAL:$5|skin}} installate mò mò:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si avite cagnato mò mò <code>LocalSettings.php</code>:\n: Cuntrullate 'e nomme d' 'e skin n'ata vota pe' ve sparagnà cocch'errore 'e battitura.",
-       "default-skin-not-found-no-skins": "Oops! 'A skin predefinita p' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\nNun avite installato nisciuno skin.\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanne 'e tarballs individuale 'e skin 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]) pe n'avè nfurmaziune ncopp' 'a maniera d'appiccià e scegliere chella predefinita.",
+       "default-skin-not-found-no-skins": "oops! 'O skin predefinito p' 'a wiki vuosta, definito int'a <code>$wgDefaultSkin</code> comm'a <code>$1</code>, nun è a disposizione.\n\nVuje nun tenite nisciuno skin installato.\n\n; Si avite installato o agghiurnato MediaWiki mo' mo':\n: È possibbele ca l'avite installato 'a git, o direttamente d' 'o codece sorgente ausanno n'atu metodo. Chesto s'aspettava. Mediawiki 1.24 o cchiù nuova nun include nisciuno skin dint' 'o repositorio prencepale. Tentate 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins sta cartella 'e mediawiki.org], facenno:\n:* Scarreca 'e [https://www.mediawiki.org/wiki/Download tarball installer], ca venesse cu nu cuofeno 'e skin e estensiune. Vuje putite cupià e azzeccà 'a cartella <code>skins/</code> 'a chiste.\n:* Scarrecanno tarball 'e skin individuale 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Ausanno Git pe' puté scarrecà skin].\n: A ffà chesto nun avesse nteferì c' 'o repositorio d' 'o git vuosto, si vuje site sviluppatore MediaWiki. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: Mpustaziona skin] pe' n'avé nfurmaziune ncopp'a comme s'avesser'appiccià skin e scegliere 'o valore predefinito.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (funzione appicciata)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''funzione stutata''')",
        "mediastatistics": "Statistiche d' 'e media",
index d4048dc..b17439f 100644 (file)
@@ -44,7 +44,8 @@
                        "Chameleon222",
                        "Helland",
                        "Macofe",
-                       "Kingu"
+                       "Kingu",
+                       "Tarjeimo"
                ]
        },
        "tog-underline": "Strek under lenker:",
        "lastmodifiedat": "Denne siden ble sist endret $1 kl. $2.",
        "viewcount": "Denne siden er vist {{PLURAL:$1|én gang|$1 ganger}}.",
        "protectedpage": "Låst side",
-       "jumpto": " til:",
+       "jumpto": "Hopp til:",
        "jumptonavigation": "navigasjon",
        "jumptosearch": "søk",
        "view-pool-error": "Beklager, serverne er overbelastet for øyeblikket.\nFor mange brukere forsøker å se denne siden.\nVennligst vent en stund før du prøver å besøke denne siden på nytt.\n\n$1",
        "actionthrottled": "Handlingsgrense overskredet",
        "actionthrottledtext": "For å beskytte mot spam, kan du ikke utføre denne handlingen for mange ganger i løpet av et kort tidssrom, og du har overskredet denne grensen. Prøv igjen om noen minutter.",
        "protectedpagetext": "Denne siden har blitt låst for endringer.",
-       "viewsourcetext": "Du kan se og kopiere kilden til denne siden:",
-       "viewyourtext": "Du kan se og kopiere kilden til '''dine endringer''' på denne siden:",
+       "viewsourcetext": "Du kan se og kopiere kildekoden til denne siden:",
+       "viewyourtext": "Du kan se og kopiere kilden til <strong>dine endringer</strong> på denne siden.",
        "protectedinterface": "Denne siden kontrollerer brukergrensesnittekst for programvaren, og er låst for å hindre misbruk.",
        "editinginterface": "<strong>Advarsel:</strong> Du redigerer en side som brukes til å kontrollere grensesnittekst for programvaren.\nEndringer av denne siden vil påvirke hvordan grensesnittet vil se ut for andre brukere på denne wikien.",
        "translateinterface": "For å legge til eller endre oversettelser for alle wikier bruk [//translatewiki.net/ translatewiki.net], MediaWikis lokaliseringsprosjekt.",
-       "cascadeprotected": "Denne siden er låst for redigering fordi den inkluderes på følgende sider som har dypbeskyttelse slått på:<!--{{PLURAL:$1}}-->\n$2",
+       "cascadeprotected": "Denne siden er låst for redigering fordi den inkluderes på følgende {{PLURAL:$1|side som har|sider som har}} som har dypbeskyttelse slått på:\n$2",
        "namespaceprotected": "Du har ikke tillatelse til å redigere sider i navnerommet '''$1'''.",
        "customcssprotected": "Du har ikke tillatelse til å redigere denne CSS-siden fordi den inneholder en annen brukers personlige innstillinger.",
        "customjsprotected": "Du har ikke tillatelse til å redigere denne JavaScript-siden fordi den inneholder en annen brukers personlige innstillinger.",
        "createacct-benefit-body2": "{{PLURAL:$1|side|sider}}",
        "createacct-benefit-body3": "{{PLURAL:$1|aktiv bidragsyter|aktive bidragsytere}}",
        "badretype": "Passordene samsvarte ikke.",
+       "usernameinprogress": "Opprettelsesprosessen for dette brukernavnet er igang.\nVennligst vent.",
        "userexists": "Brukernavnet er allerede i bruk.\nVelg et annet brukernavn.",
        "loginerror": "Innloggingsfeil",
        "createacct-error": "Feil med kontoppretting",
        "passwordreset-emailtitle": "Kontodetaljer på {{SITENAME}}",
        "passwordreset-emailtext-ip": "Noen (sannsynligvis deg fra IP-adressen $1) ba om en tilbakestilling av ditt passord for {{SITENAME}} ($4). {{PLURAL:$3|Den følgende brukerkontoen|De følgende brukerkontoene}} er\ntilknyttet denne e-postadressen:\n\n$2\n\n{{PLURAL:$3|Dette midlertidige passordet|Disse midlertidige passordene}} utløper om {{PLURAL:$5|én dag|$5 dager}}.\nDu bør logge på og velge et nytt passord nå. Dersom noen andre kom med denne\nforespørselen, eller du har kommet på ditt opprinnelige passord, og ikke lenger\nønsker å endre det, kan du ignorere denne meldingen og fortsette å bruke ditt gamle\npassord.",
        "passwordreset-emailtext-user": "Brukeren $1 på {{SITENAME}} ba om en tilbakestilling av passordet ditt for {{SITENAME}}\n($4). {{PLURAL:$3|Den følgende brukerkontoen|De følgende brukerkontoene}} er tilknyttet denne e-postadressen:\n\n$2\n\n{{PLURAL:$3|Dette midlertidige passordet|Disse midlertidige passordene}} utløper om {{én dag|$5 dager}}.\nDu bør logge på og velge et nytt passord nå. Dersom noen andre kom med denne\nforespørselen, eller du har kommet på ditt opprinnelige passord, og ikke lenger\nønsker å endre det, kan du ignorere denne meldingen og fortsette å bruke ditt gamle\npassord.",
-       "passwordreset-emailelement": "Brukernavn: $1\nMidlertidig passord: $2",
+       "passwordreset-emailelement": "Brukernavn: \n$1\n\nMidlertidig passord: \n$2",
        "passwordreset-emailsent": "En passordtilbakestillingslenke har blitt sendt per e-post.",
        "passwordreset-emailsent-capture": "Passordtilbakestillingseposten vist under har blitt sendt ut.",
        "passwordreset-emailerror-capture": "En passordtilbakestillingsepost ble laget, men det lyktes ikke å sende denne til {{GENDER:$2|brukeren}}: $1",
        "creating": "Oppretter $1",
        "editingsection": "Redigerer $1 (avsnitt)",
        "editingcomment": "Redigerer $1 (ny seksjon)",
-       "editconflict": "Redigeringkonflikt: $1",
+       "editconflict": "Redigeringskollisjon: $1",
        "explainconflict": "Noen andre har endret teksten siden du begynte å redigere.\nDen øverste boksen inneholder den nåværende teksten.\nDine endringer vises i den nederste boksen.\nDu er nødt til å flette dine endringer sammen med den nåværende teksten.\n'''Kun''' teksten i den øverste tekstboksen blir lagret når du trykker «{{int:savearticle}}».",
        "yourtext": "Din tekst",
        "storedversion": "Den lagrede versjonen",
        "readonlywarning": "'''ADVARSEL: Databasen er låst på grunn av vedlikehold,\nså du kan ikke lagre dine endringer akkurat nå. Det kan være en god idé å\nkopiere teksten din til en tekstfil, så du kan lagre den til senere.'''\n\nSystemadministratoren som låste databasen oppga følgende årsak: $1",
        "protectedpagewarning": "'''Advarsel: Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den.'''\nDet siste loggelementet er oppgitt under som referanse:",
        "semiprotectedpagewarning": "'''Merk:''' Denne siden har blitt låst slik at kun registrerte brukere kan endre den.\nDet siste loggelementet er oppgitt under som referanse:",
-       "cascadeprotectedwarning": "'''Advarsel:''' Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den, fordi den inkluderes på følgende dypbeskyttede {{PLURAL:$1|sider}}:",
+       "cascadeprotectedwarning": "<strong>Advarsel:</strong> Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den, fordi den inkluderes på følgende dypbeskyttede {{PLURAL:$1|side|sider}}:",
        "titleprotectedwarning": "'''Advarsel: Denne siden har blitt låst slik at [[Special:ListGroupRights|bestemte rettigheter]] kreves for å opprette den.'''\nTil orientering vises den siste loggoppføringen under:",
        "templatesused": "{{PLURAL:$1|Mal|Maler}} som brukes på denne siden:",
        "templatesusedpreview": "{{PLURAL:$1|Mal|Maler}} brukt i denne forhåndsvisningen:",
        "log-fulllog": "Vis hele loggen",
        "edit-hook-aborted": "Redigering avbrutt av en funksjon, uten forklaring.",
        "edit-gone-missing": "Kunne ikke oppdatere siden fordi den har blitt slettet.",
-       "edit-conflict": "Redigeringskonflikt.",
+       "edit-conflict": "Redigeringskollisjon.",
        "edit-no-change": "Redigeringen din ble ignorert fordi det ikke var noen endringer.",
        "postedit-confirmation-created": "Siden har blitt opprettet.",
        "postedit-confirmation-restored": "Siden har blitt gjenopprettet.",
        "content-json-empty-object": "Tomt objekt",
        "content-json-empty-array": "Tom matrise",
        "duplicate-args-warning": "<strong>Advarsel:</strong> [[:$1]] kaller [[:$2]] med flere enn en verdi for \"$3\"-parameteren. Bare den sist angitte verdien vil brukes.",
-       "duplicate-args-category": "Sider med like argumenter i malkall",
+       "duplicate-args-category": "Sider med duplikate argumenter i malkall",
        "duplicate-args-category-desc": "Denne siden inneholder malkall med duplikate parametre, slik som <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> eller <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Advarsel: Denne siden inneholder for mange prosesskrevende parserfunksjoner.\n\nDet burde være mindre enn {{PLURAL:$2|$2|$2}}, men er nå {{PLURAL:$1|$1|$1}}..",
        "expensive-parserfunction-category": "Sider med for mange prosesskrevende parserfunksjoner",
        "search-category": "(kategori $1)",
        "search-file-match": "(matcher filinnhold)",
        "search-suggest": "Mente du: $1",
+       "search-rewritten": "Viser resultatet for $1. Søk i stedet for $2.",
        "search-interwiki-caption": "Søsterprosjekter",
        "search-interwiki-default": "Resultater fra $1:",
        "search-interwiki-more": "(mer)",
        "searchrelated": "relatert",
        "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}} fra og med nummer <strong>$2</strong> til og med nummer <strong>$3</strong>.",
+       "showingresultsinrange": "Nedenfor vises opptil {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resultater}} fra og med nummer <strong>$2</strong> til og med nummer <strong>$3</strong>.",
        "search-showingresults": "Resultat <strong>{{PLURAL:$4|$1|$1–$2}}</strong> av <strong>$3</strong>",
        "search-nonefound": "Ingen resultater passet til søket.",
        "powersearch-legend": "Avansert søk",
        "rows": "Rader:",
        "columns": "Kolonner",
        "searchresultshead": "Søk",
-       "stub-threshold": "Grense for <span class=\"mw-stub-example\">stubblenkeformatering</span>:",
+       "stub-threshold": "Grense for stubblenkeformatering ($1):",
+       "stub-threshold-sample-link": "eksempel",
        "stub-threshold-disabled": "Deaktivert",
        "recentchangesdays": "Antall dager som skal vises i siste endringer:",
        "recentchangesdays-max": "Maks $1 {{PLURAL:$1|dag|dager}}",
        "userrights-lookup-user": "Ordne brukergrupper",
        "userrights-user-editname": "Skriv inn et brukernavn:",
        "editusergroup": "Endre brukergrupper",
-       "editinguser": "Endrer brukerrettighetene for {{GENDER:$1|bruker}} <strong>[[Bruker:$1|$1]]</strong> $2",
+       "editinguser": "Endrer brukerrettighetene for {{GENDER:$1|bruker}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Rediger brukergrupper",
        "saveusergroups": "Lagre brukergrupper",
        "userrights-groupsmember": "Medlem av:",
        "longpages": "Lange sider",
        "deadendpages": "Blindveisider",
        "deadendpagestext": "Følgende sider lenker ikke til andre sider på {{SITENAME}}.",
-       "protectedpages": "Låste sider",
+       "protectedpages": "Beskyttede sider",
        "protectedpages-indef": "Kun beskyttelser på ubestemt tid",
        "protectedpages-summary": "Denne siden viser en liste av eksisterende sider som for tiden er beskyttet. For å se en liste av sider som er beskyttet mot opprettelse, se [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Kun dypbeskyttelse",
        "unwatchthispage": "Fjerner overvåkning",
        "notanarticle": "Ikke en artikkel",
        "notvisiblerev": "Revisjonen er slettet",
-       "watchlist-details": "Du har {{PLURAL:$1|én side|'''$1''' sider}} på [[Hjelp:Overvåke sider|overvåkningslisten]] din (pluss tilhørende [[Hjelp:Diskusjonsside|diskusjonssider]]).",
+       "watchlist-details": "Du har {{PLURAL:$1|én side|$1 sider}} på overvåkningslisten din (med tilhørende diskusjonssider).",
        "wlheader-enotif": "E-postvarsling er slått på.",
        "wlheader-showupdated": "Sider som har blitt endret siden du besøkte dem sist vises med '''fet skrift'''.",
        "wlnote": "Nedenfor er {{PLURAL:$1|den siste endringen|de siste <strong>$1</strong> endringene}} {{PLURAL:$2|den siste timen|de siste <strong>$2</strong> timene}}, per $3 kl. $4",
        "ipb-confirmhideuser": "Du er i ferd med å blokkere en bruker med «skjul bruker» aktivert. Dette vil skjule brukerens navn i alle lister og loggoppføringer. Er du sikker på at du vil gjøre dette?",
        "ipb-confirmaction": "Marker feltet \"{{int:ipb-confirm}}\" nederst om du er sikker på at du virkelig vil gjøre det.",
        "ipb-edit-dropdown": "Rediger blokkeringsgrunner",
-       "ipb-unblock-addr": "Avblokker $1",
-       "ipb-unblock": "Avblokker et brukernavn eller en IP-adresse",
+       "ipb-unblock-addr": "Opphev blokkering av $1",
+       "ipb-unblock": "Opphev blokkering av et brukernavn eller en IP-adresse",
        "ipb-blocklist": "Vis gjeldende blokkeringer",
        "ipb-blocklist-contribs": "Bidrag fra {{GENDER:$1|$1}}",
        "unblockip": "Opphev blokkering",
        "import-revision-count": "({{PLURAL:$1|Én revisjon|$1 revisjoner}})",
        "importnopages": "Ingen sider å importere.",
        "imported-log-entries": "Importerte $1 {{PLURAL:$1|loggoppføring|loggoppføringer}}.",
-       "importfailed": "Importering mislyktes: $1",
+       "importfailed": "Import mislyktes: $1",
        "importunknownsource": "Ukjent importkildetype",
        "importcantopen": "Kunne ikke åpne importfil",
        "importbadinterwiki": "Ugyldig interwikilenke",
-       "importsuccess": "Importering ferdig.",
+       "importsuccess": "Import ferdig!",
        "importnosources": "Ingen transwikiimportkilder er angitt, og direkte historikkimporteringer er slått av.",
        "importnofile": "Ingen importfil opplastet.",
        "importuploaderrorsize": "Importfilopplasting mislyktes. Filen er større enn tillatt opplastingsstørrelse.",
        "import-rootpage-nosubpage": "Navnerommet \"$1\" til grunnsiden tillater ikke undersider.",
        "importlogpage": "Importlogg",
        "importlogpagetext": "Administrativ import av sider med redigeringshistorikk fra andre wikier.",
-       "import-logentry-upload-detail": "{{PLURAL:$1|\\Én revisjon|$1 revisjoner}} er importert",
+       "import-logentry-upload-detail": "{{PLURAL:$1|Én revisjon|$1 revisjoner}} er importert",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Én revisjon|$1 revisjoner}} er importert fra $2",
        "javascripttest": "JavaScript-testing",
        "javascripttest-pagetext-noframework": "Denne siden er reservert for å kjøre JavaScript-tester.",
        "tooltip-pt-logout": "Logg ut",
        "tooltip-pt-createaccount": "Du oppfordres til å opprette en konto og logge inn, men det er ikke obligatorisk.",
        "tooltip-ca-talk": "Diskusjon om innholdssiden",
-       "tooltip-ca-edit": "Du kan redigere denne siden. Vennligst bruk forhåndsvisningsknappen før du lagrer.",
+       "tooltip-ca-edit": "Rediger denne siden",
        "tooltip-ca-addsection": "Start et nytt avsnitt",
        "tooltip-ca-viewsource": "Denne siden er beskyttet.\nDu kan se på kildeteksten",
        "tooltip-ca-history": "Tidligere revisjoner av denne siden",
        "spam_reverting": "Tilbakestiller til siste versjon uten lenke til $1",
        "spam_blanking": "Alle revisjoner inneholdt lenke til $1, tømmer siden",
        "spam_deleting": "Sletter alle revisjoner med lenker til $1",
-       "simpleantispam-label": "Antispamsjekk.\n'''IKKE''' fyll inn dette feltet!",
+       "simpleantispam-label": "Antispamsjekk.\n<strong>IKKE</strong> fyll inn dette feltet!",
        "pageinfo-title": "Informasjon om «$1»",
        "pageinfo-not-current": "Beklager, det er ikke mulig å vise denne informasjonen for gamle revisjoner.",
        "pageinfo-header-basic": "Grunnleggende informasjon",
        "confirmemail_sendfailed": "{{SITENAME}} klarte ikke å sende bekreftelseskode.\nSjekk e-postadressen for ugyldige tegn.\n\nE-postsenderen ga følgende melding: $1",
        "confirmemail_invalid": "Ugyldig bekreftelseskode. Koden kan ha utløpt.",
        "confirmemail_needlogin": "Du må $1 for å bekrefte e-postadressen din.",
-       "confirmemail_success": "Din e-postadresse er nå bekreftet. Du kan nå logge inn og nyte wikien.",
+       "confirmemail_success": "Din e-postadresse er nå bekreftet. Du kan nå logge inn og bruke wikien.",
        "confirmemail_loggedin": "E-postadressen din er bekreftet.",
        "confirmemail_subject": "Bekreftelsesmelding fra {{SITENAME}}",
        "confirmemail_body": "Noen, antageligvis deg, har registrert kontoen «$2» på {{SITENAME}}, fra IP-adressen $1.\n\nFor å bekrefte at denne kontoen tilhører deg og for å aktivere e-posttjenester på {{SITENAME}}, åpne følgende lenke i nettleseren din:\n\n$3\n\nOm du *ikke* registrerte kontoen, følg denne lenken for å avbryte bekreftelse av e-postadresse:\n\n$5\n\nDenne bekreftelseskoden utgår $4.",
index e5cdad2..0e312ba 100644 (file)
        "passwordreset-emailtitle": "Gebrukersgegevens op {{SITENAME}}",
        "passwordreset-emailtext-ip": "Der hef der ene, waorschienlik jie zelf vanaof t IP-adres $1, n anvraag edaon um joew wachtwoord veur {{SITENAME}} ($4) opniej in te stellen.\nDe volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres:\n\n$2\n\n{{PLURAL:$3|Dit tiejelike wachtwoord vervölt|Disse tiejelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.\nMeld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
        "passwordreset-emailtext-user": "De gebruker $1 van {{SITENAME}} hef n anvraag edaon um joew wachtwoord veur {{SITENAME}} ($4) opniej in te stellen. \nDe volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres:\n\n$2\n\n{{PLURAL:$3|Dit tiejelike wachtwoord vervölt|Disse tiejelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.\nMeld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
-       "passwordreset-emailelement": "Gebrukersnaam: $1\nTiedelik wachtwoord: $2",
+       "passwordreset-emailelement": "Gebrukersnaam: \n$1\n\nTiedelik wachtwoord: \n$2",
        "passwordreset-emailsent": "Der is n bericht verstuurd um t wachtwoord opniej in te stellen.",
        "passwordreset-emailsent-capture": "Der is n bericht verstuurd um joew wachtwoord opniej in te stellen. Dit ku'j hieronder lezen.",
        "passwordreset-emailerror-capture": "Der is n bericht veur t opniej opstellen van joew wachwoord an-emaakt, dit ku'j hieronder lezen. t Versturen naor de {{GENDER:$2|gebruker}} is mislokt um de volgende reden: $1",
        "emailuser": "n Bericht sturen",
        "emailuser-title-target": "Disse {{GENDER:$1|gebruker}} n bericht sturen",
        "emailuser-title-notarget": "Gebruker n bericht sturen",
-       "emailpage": "Gebruker n bericht sturen",
        "emailpagetext": "Deur middel van dit formulier ku'j n bericht sturen naor disse {{GENDER:$1|gebruker}}.\nt Adres da'j op-egeven hebben bie [[Special:Preferences|joew veurkeuren]] zal as aofzender gebruukt wörden.\nDe ontvanger kan dus drek beantwoorden.",
        "defemailsubject": "Bericht van {{SITENAME}}-gebruker \"$1\"",
        "usermaildisabled": "n Persoonlik berichjen sturen geet niet.",
index dcf2b1c..510ef79 100644 (file)
        "viewhelppage": "सहायता पृष्ठ हेर्ने",
        "categorypage": "श्रेणी पृष्ठ हेर्नुहोस्",
        "viewtalkpage": "छलफल हेर्नुहोस्",
-       "otherlanguages": "à¤\85रà¥\81 à¤­à¤¾à¤·à¤¾मा",
+       "otherlanguages": "à¤\85रà¥\82 à¤­à¤¾à¤·à¤¾à¤¹à¤°à¥\82मा",
        "redirectedfrom": "($1बाट अनुप्रेषित)",
        "redirectpagesub": "अनुप्रेषित पृष्ठ",
        "redirectto": "अनुप्रेषित पृष्ठ:",
        "translateinterface": "सबै विकिहरूको लागी अनुवाद जोड्न वा परिवर्तन गर्नका लागि मीडियाविकि क्षेत्रीयकरण परियोजना [//translatewiki.net/ ट्रान्सलेटविकि.नेट]को प्रयोग गर्नुहोस।",
        "cascadeprotected": "यो पृष्ठ सम्पादन गर्नबाट सुरक्षित गरिएकोछ किनभनें {{PLURAL:$1|पृष्ठ |पृष्ठहरू}}मा सुरक्षित गर्नुका साथै प्रपात (\"cascading\") विकल्प खुल्ला राखिएको छ:\n$2",
        "namespaceprotected": " '''$1'''  नेमस्पेसमा रहेका पृष्ठहरू सम्पादन गर्ने अनुमति यहाँलाई छैन ।",
-       "customcssprotected": "तपाà¤\88लाà¤\88 à¤¯à¤¸  à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87 à¤\85नà¥\81मति à¤\9bà¥\88न, à¤\95िनà¤\95à¥\80 à¤¯à¤¸à¤®à¤¾ à¤\95à¥\81नà¥\88 à¤\85रà¥\8dà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤µà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\85भिरà¥\81à¤\9aà¥\80हरà¥\81 संग्रहित छन् ।",
-       "customjsprotected": "तपाà¤\88लाà¤\88 à¤¯à¤¸ à¤\9cाभासà¥\8dà¤\95à¥\83पà¥\8dà¤\9f à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87 à¤\85नà¥\81मति à¤\9bà¥\88न, à¤\95िनà¤\95à¥\80 à¤¯à¤¸à¤®à¤¾ à¤\95à¥\81नà¥\88 à¤\85रà¥\8dà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤µà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\85भिरà¥\81à¤\9aà¥\80हरà¥\81 संग्रहित छन् ।",
+       "customcssprotected": "तपाà¤\88à¤\82लाà¤\88 à¤¯à¥\8b  à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87 à¤\85नà¥\81मति à¤\9bà¥\88न, à¤\95िनà¤\95à¥\80 à¤¯à¤¸à¤®à¤¾ à¤\95à¥\81नà¥\88 à¤\85रà¥\8dà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤µà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\85भिरà¥\81à¤\9aà¥\80हरà¥\82 संग्रहित छन् ।",
+       "customjsprotected": "तपाà¤\88à¤\82लाà¤\88 à¤¯à¥\8b à¤\9cाभासà¥\8dà¤\95à¥\83पà¥\8dà¤\9f à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87 à¤\85नà¥\81मति à¤\9bà¥\88न, à¤\95िनà¤\95à¥\80 à¤¯à¤¸à¤®à¤¾ à¤\95à¥\81नà¥\88 à¤\85रà¥\8dà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤µà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\85भिरà¥\81à¤\9aà¥\80हरà¥\82 संग्रहित छन् ।",
        "mycustomcssprotected": "यस CSSपृष्ठ सम्पादन गर्नको लागि लागि तपाईँलाई अनुमति छैन ।",
        "mycustomjsprotected": "यस JavaScript पृष्ठ सम्पादन गर्नको लागि लागि तपाईँलाई अनुमति छैन ।",
        "myprivateinfoprotected": "तपाईँसँग तपाईँको निजी जानकारीहरू सम्पादन गर्ने अनुमती छैन",
        "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": "{{SITENAME}} को $1 प्रयोगकर्ताले  {{SITENAME}} ($4)को लागि खाता विवरणको निम्ति एउटा अनुस्मारकको अनुरोध गरेको छ। निम्न प्रयोगकर्ता {{PLURAL:$3|खाता यस इमेल ठेगानासित सम्बन्धित छ|खाताहरू यस इमेल ठेगानासित सम्बन्धित छन्}}:\n\n$2\n\n{{PLURAL:$3|यो अस्थाई पासवर्डको|यी अस्थाई पासवर्डहरूको}} समय {{PLURAL:$5|एक दिन|$5 दिन}}मा सकिनेछ।\nतपाईंले प्रवेश गरेर अहिले नैं नयाँ पासवर्ड छान्नुहोस्। यदि अरु कसैले अनुरोध गरेको भए अथवा यदि तपाईंलाई मूल पासवर्ड याद भए अनि यसलाई परिवर्तन गर्न चाहनुहुन्न भनें, तपाईंले यस सन्देशलाई अनदेखा गर्नुहोस् र पुरानै पासवर्डलाई चालू राख्नुहोस्।",
-       "passwordreset-emailelement": "प्रयोगकर्ताको नाम: $1\nअस्थाई पासवर्ड: $2",
+       "passwordreset-emailelement": "प्रयोगकर्ताको नाम: \n$1\n\nअस्थाई पासवर्ड: \n$2",
        "passwordreset-emailsent": "पासवर्ड परिवर्तनको लागि इमेल पठाइएको छ।",
        "passwordreset-emailsent-capture": "पासवर्ड परिवर्तनको लागि इमेल पठाइयो, जुन तल देखाइएकोछ।",
        "passwordreset-emailerror-capture": "पासवर्ड रिसेट इमेल जारि गरिएको छ, जुन तल देखाइएको छ, तर यसलाई {{GENDER:$2|प्रयोगकर्ता}}मा पठाउन विफल भयो: $1",
        "deletedhist": "मेटाएका इतिहास",
        "revdelete-hide-current": "$2, $1: मिति गरिएका वस्तुहरु लुकाउन मिलेन यो नै सबैभन्दा नयाँ संस्करण हो ।\nयसलाई लुकाउन मिल्दैन ।",
        "revdelete-show-no-access": "  $2समय र $1 मिति भएको वस्तु देखाउन सकिएन: यसलाई \"निषेधित\"भनि चिनो लगाइएको छ।\nयसलाई हेर्न तपाईसँग अनुमती छैन ।",
-       "revdelete-modify-no-access": "  $2समय र $1 मिति भएको वस्तु परिवर्तन गर्न सकिएन यसलाई \"निषेधित\"भनि चिनो लगाइएको छ।\nयसलाई परिवर्तन गर्न तपाईसँग अनुमती छैन ।",
+       "revdelete-modify-no-access": "  $2, $1 भएको वस्तु परिवर्तन गर्न सकिएन यसलाई \"निषेधित\"भनि चिनो लगाइएको छ।\nयसलाई परिवर्तन गर्न तपाईंसँग अनुमती छैन ।",
        "revdelete-modify-missing": "आइडी  $1 रहेको वस्तु परिवर्तन गर्दा त्रुटी भएको छ: यस वस्तु डेटावेसबाट हराइरहेको छ !",
        "revdelete-no-change": "'''चेतावनी:''' $2, $1मिति भइको वस्तुको पहिले नै अनुरोध गरे अनुसारको दृश्य सेटिङ्गहरु छन् ।",
        "revdelete-concurrent-change": " $2, $1 मिति गरिएको वस्तु परिवर्तन गर्न सकिएन: यसको स्थितीले तपाईंले परिवर्तन गर्नलाग्नुहुँदा कोहीअरुले नै परिवर्तन गरेजस्तो देखाउँछ\nकृपया लगहरू हेर्नुहोला ।",
        "searchprofile-advanced": "उन्नत",
        "searchprofile-articles-tooltip": "$1 मा खोज्ने",
        "searchprofile-images-tooltip": "फाइलहरू खोज्ने",
-       "searchprofile-everything-tooltip": "सबै सामग्री खोज्ने (वार्तालाप समेत )",
+       "searchprofile-everything-tooltip": "सबै सामग्री खोज्ने (वार्तालाप समेत)",
        "searchprofile-advanced-tooltip": "अनुकुल नेमस्पेसमा खोज्ने",
        "search-result-size": "$1 ({{PLURAL:$2|1 शब्द|$2 शब्दहरू}})",
        "search-result-category-size": "{{PLURAL:$1|एक सदस्य|$1 सदस्यहरू}} ({{PLURAL:$2|1 उपश्रेणी|$2  उपश्रेणीहरू}}, {{PLURAL:$3|एउटा फाइल|$3 फाइलहरू}})",
        "powersearch-togglelabel": "जाँच्ने :",
        "powersearch-toggleall": "सबै",
        "powersearch-togglenone": "कुनै पनि होइन",
-       "powersearch-remember": "चयन गरिएको लाई भविष्यमा गरिने खोजहरूको लागि सम्झिने",
+       "powersearch-remember": "चयन गरिएकोलाई भविष्यमा गरिने खोजहरूको लागि सम्झिने",
        "search-external": "बाह्य खोज",
        "searchdisabled": "{{SITENAME}} खोज निस्क्रिय पारिएको छ ।\nहाललाई तपाईं गूगलद्वारा खोज्न सक्नुहुन्छ ।\nयाद गर्नुहोस् उनीहरूको {{SITENAME}}को सूची सामग्री पुरानो भएको हुनसक्छ ।",
        "search-error": "खोज्ने क्रममा समस्या देखियोः $1",
        "yourvariant": "लेखको भाषा संस्करण:",
        "prefs-help-variant": "तपाईंको मनपरेको संस्करण वा हिज्जे यस विकि भित्र सामग्री पृष्ठहरू प्रदर्शित गर्नका निमित्त।",
        "yournick": "नयाँ हस्ताक्षर:",
-       "prefs-help-signature": "वारà¥\8dतालाप à¤ªà¥\83षà¥\8dठà¤\95ा à¤\9fिपà¥\8dपणà¥\80हरà¥\81 \"<nowiki>~~~~</nowiki>\" द्वारा दस्तखत गरिनुपर्छ ,जुन पछि तपाईँको दस्तखत र समयरेखामा रुपान्तरित हुनेछ ।",
+       "prefs-help-signature": "वारà¥\8dतालाप à¤ªà¥\83षà¥\8dठà¤\95ा à¤\9fिपà¥\8dपणà¥\80हरà¥\82 \"<nowiki>~~~~</nowiki>\" द्वारा दस्तखत गरिनुपर्छ ,जुन पछि तपाईँको दस्तखत र समयरेखामा रुपान्तरित हुनेछ ।",
        "badsig": "अमान्य कच्चा दस्तखत।\nHTML ट्यागहरु जाँच्नुहोस् ।",
        "badsiglength": "तपाईंको दस्तखत धेरै लामो छ।\nयो $1 {{PLURAL:$1|अक्षर|अक्षरहरू}} भन्दा लामो हुनु हुँदैन ।",
        "yourgender": "कसरी वताउन चाहनुहुन्छ ?",
        "movenotallowedfile": "फाइल हटाउने अनुमति तपाईँलाई  छैन।",
        "cant-move-user-page": "तपाईसँग प्रयोगकर्ता पृष्ठहरू सार्न अनुमती छैन (सहपृष्ठहरू बाहेक)",
        "cant-move-to-user-page": "तपाईंलाई पृष्ठहरू प्रयोगकर्ता पृष्ठमा सार्न अनुमती छैन (प्रयोगकर्ता सहपृष्ठहरूमा बाहेक)",
-       "cant-move-category-page": "तपाईलाई श्रेणीको पृष्ठहरू सार्ने अनुमति छैन ।",
-       "cant-move-to-category-page": "कुनै श्रेणी पृष्ठमा सार्नको लागी तपाईलाई अनुमति छैन ।",
+       "cant-move-category-page": "तपाà¤\88à¤\82लाà¤\88 à¤¶à¥\8dरà¥\87णà¥\80à¤\95à¥\8b à¤ªà¥\83षà¥\8dठहरà¥\82 à¤¸à¤¾à¤°à¥\8dनà¥\87 à¤\85नà¥\81मति à¤\9bà¥\88न à¥¤",
+       "cant-move-to-category-page": "à¤\95à¥\81नà¥\88 à¤¶à¥\8dरà¥\87णà¥\80 à¤ªà¥\83षà¥\8dठमा à¤¸à¤¾à¤°à¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97à¥\80 à¤¤à¤ªà¤¾à¤\88à¤\82लाà¤\88 à¤\85नà¥\81मति à¤\9bà¥\88न à¥¤",
        "newtitle": "नयाँ शीर्षकमा :",
        "move-watch": "यो पृष्ठ निगरानीमा राख्नुहोस्",
        "movepagebtn": "पृष्ठ सार्नुहोस्",
        "import-upload": "XML डेटा अपलोड गर्ने",
        "import-token-mismatch": "सत्र जानकारी नष्ट भयो\nकृपया पुन: प्रयास गर्नुहोस्।",
        "import-invalid-interwiki": "खुलाइएको विकिबाट आयात गर्न सकिएन",
-       "import-error-edit": "तपाईलाई सम्पादन गर्ने अनुमति नभएको पृष्ठ \"$1\" आयात गरिएन ।",
-       "import-error-create": "तपाà¤\88लाà¤\88 à¤¨à¤¯à¤¾à¤\81 à¤¬à¤¨à¤¾à¤\89नà¥\87 à¤\97रà¥\8dने अनुमति नभएको पृष्ठ \"$1\" आयात गरिएन ।",
+       "import-error-edit": "तपाà¤\88à¤\82लाà¤\88 à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87 à¤\85नà¥\81मति à¤¨à¤­à¤\8fà¤\95à¥\8b à¤ªà¥\83षà¥\8dठ \"$1\" à¤\86यात à¤\97रिà¤\8fन à¥¤",
+       "import-error-create": "तपाà¤\88à¤\82लाà¤\88 à¤¨à¤¯à¤¾à¤\81 à¤¬à¤¨à¤¾à¤\89ने अनुमति नभएको पृष्ठ \"$1\" आयात गरिएन ।",
        "import-error-interwiki": "यसको नाम बाह्य लिङ्क (अन्तरविकि) को लागी जगेडा राखिएको हुँदा  पृष्ठ \"$1\" आयात गरिएन ।",
        "import-error-special": "पृष्ठ \"$1\" आयात गर्न सकिएन किनभने यो एउटा यस्तो विशेष नामस्थान अन्तर्गत आउँछ जसमा पृष्ठ बनाउन सकिंदैन।",
        "import-error-invalid": "पृष्ठ \"$1\" आयात गर्न सकिएन किनभने यसको आयात पश्चात जुन नाम हुन्थ्यो त्यो यस विकिमा मान्य छैन।",
        "tooltip-pt-logout": "निर्गमन (लग आउट) गर्नुहोस्",
        "tooltip-pt-createaccount": "तपाईंलाई खाता बनाउन र लग इन गर्न हामि प्रोत्साहित गर्छौ; तथापि, यो अनिवार्य भने छैन।",
        "tooltip-ca-talk": "सामग्री पृष्ठबारेमा छलफल",
-       "tooltip-ca-edit": "तपाà¤\88à¤\81लà¥\87 à¤¯à¥\8b à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤ à¤\95à¥\83पया à¤¸à¤\99à¥\8dà¤\97à¥\8dरह â\80\8dà¤\97रà¥\8dनà¥\81 à¤ªà¥\82रà¥\8dव à¤ªà¥\82रà¥\8dवावलà¥\8bà¤\95न à¤¬à¤\9fन à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dनà¥\81हà¥\8bला à¥¤",
+       "tooltip-ca-edit": "यà¥\8b à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87",
        "tooltip-ca-addsection": "नयाँ खण्ड सुरु गर्नुहोस्",
        "tooltip-ca-viewsource": "यो पृष्ठ सुरक्षित गरिएको छ। यसको श्रोत हेर्न सक्नुहुन्छ।",
        "tooltip-ca-history": "यस पृष्ठको पहिलेका पुनरावलोकनहरु",
        "tooltip-p-logo": "मुख्य पृष्ठ",
        "tooltip-n-mainpage": "मुख्य पृष्ठमा जाने",
        "tooltip-n-mainpage-description": "मुख्य पृष्ठमा जानुहो्स्",
-       "tooltip-n-portal": "आयोजनाका बारेमा , तपाईँ के गर्न सक्नुहुन्छ , सामग्री कहाँ भेट्टाउने",
+       "tooltip-n-portal": "आयोजनाका बारेमा, तपाईँ के गर्न सक्नुहुन्छ, सामग्री कहाँ भेट्टाउने",
        "tooltip-n-currentevents": "हालैको घटनाको बारेमा पृष्ठभूमि जानकारी पत्ता लगाउनुहोस्",
        "tooltip-n-recentchanges": "विकिमा गरिएका हालैका परिवर्तनहरुको सूची",
        "tooltip-n-randompage": "जुन कुनै पृष्ठ खोल्ने",
        "tooltip-ca-nstab-main": "सामग्री पृष्ठ हेर्नुहोस",
        "tooltip-ca-nstab-user": "प्रयोगकर्ता पृष्ठ हेर्नुहोस्",
        "tooltip-ca-nstab-media": "मिडिया पृष्ठ हेर्नुहोस्",
-       "tooltip-ca-nstab-special": "यो विशेष पृष्ठ हो , तपाईँले आफै सम्पादन गर्न सक्नुहुन्न",
+       "tooltip-ca-nstab-special": "यो विशेष पृष्ठ हो, यो सम्पादन गर्न सकिदैन",
        "tooltip-ca-nstab-project": "आयोजान पृष्ठ हेर्नुहोस्",
        "tooltip-ca-nstab-image": "फाइल पृष्ठ हेर्नुहोस्",
        "tooltip-ca-nstab-mediawiki": "प्रणाली सन्देश हेर्नुहोस्",
        "spam_reverting": "$1 मा कडीहरू  नभएका पुरानो अवतरणमा पुनर्स्थापित गर्दै",
        "spam_blanking": "$1 का सबै अवतरणहरूमा कडीहरू  भेटिए, मेटाएर खालि गर्दै",
        "spam_deleting": "$1 भएको सम्पूर्ण संशोधन कडीहरू मेटाइदै",
-       "simpleantispam-label": "ऐन्टी-स्प्याम जाँच।\nयसलाई <strong>नहीं</strong> भर्ने!",
+       "simpleantispam-label": "ऐन्टी-स्प्याम जाँच।\nयसलाई <strong>न</strong> भर्ने!",
        "pageinfo-title": " \"$1\"को लागि जाकारी",
        "pageinfo-not-current": "माफ गर्नुहोस्, यो जानकारी पूरानो संस्करणमा उपलब्ध गराउन असम्भव छ ।",
        "pageinfo-header-basic": "साधारण जानकारी",
        "hebrew-calendar-m10-gen": "तामुज",
        "hebrew-calendar-m11-gen": "अभ्",
        "hebrew-calendar-m12-gen": "एलल्",
-       "signature": "[[{{ns:user}}:$1|$2]]",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|वार्ता]])",
        "timezone-utc": "युटिसी(UTC)",
        "duplicate-defaultsort": "'''चेतावनी:''' पूर्व निर्धारित छोटकरी \"$2\" ले पुरानो पूर्वनिर्धारित छोटकरी\"$1\"लाई विस्थापन गरेको छ ।",
        "duplicate-displaytitle": "<strong>चेतावनी:</strong> शीर्षक देखाउने \"$2\" पूर्व देखाइएको शीर्षक \"$1\" मा ओभररेड गरिंदै छ।",
index 4438a4f..01adf4e 100644 (file)
        "disclaimers": "Voorbehoud",
        "disclaimerpage": "Project:Algemeen voorbehoud",
        "edithelp": "Hulp bij bewerken",
-       "helppage-top-gethelp": "Help",
+       "helppage-top-gethelp": "Hulp",
        "mainpage": "Hoofdpagina",
        "mainpage-description": "Hoofdpagina",
        "policy-url": "Project:Beleid",
        "versionrequiredtext": "Versie $1 van MediaWiki is vereist om deze pagina te gebruiken.\nMeer informatie is beschikbaar op de pagina [[Special:Version|softwareversie]].",
        "ok": "OK",
        "retrievedfrom": "Overgenomen van \"$1\"",
-       "youhavenewmessages": "{{PLURAL:$3|U hebt|Jullie hebben}} $1 ($2).",
-       "youhavenewmessagesfromusers": "{{PLURAL:$4|U hebt|Jullie hebben}} $1 van {{PLURAL:$3|een andere gebruiker|$3 gebruikers}} ($2).",
+       "youhavenewmessages": "{{PLURAL:$3|U hebt}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|U hebt}} $1 van {{PLURAL:$3|een andere gebruiker|$3 gebruikers}} ($2).",
        "youhavenewmessagesmanyusers": "U heeft $1 van een groot aantal gebruikers ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|een nieuw bericht|999=nieuwe berichten}}",
        "newmessagesdifflinkplural": "laatste {{PLURAL:$1|wijziging|999=wijzigingen}}",
        "title-invalid-leading-colon": "De opgevraagde paginanaam bevat een ongeldige dubbele punt aan het begin.",
        "perfcached": "Deze gegevens komen uit een cache en zijn mogelijk niet actueel. Er {{PLURAL:$1|is maximaal één resultaat|zijn maximaal $1 resultaten}} beschikbaar in de cache.",
        "perfcachedts": "Deze gegevens komen uit een cache die voor het laatst is bijgewerkt op $2 om $3. Er {{PLURAL:$4|is maximaal één resultaat|zijn maximaal $4 resultaten}} beschikbaar in de cache.",
-       "querypage-no-updates": "Het bijwerken van deze pagina is momenteel uitgeschakeld.\nGegevens op deze pagina worden niet ververst.",
+       "querypage-no-updates": "Deze pagina wordt niet bijgewerkt.\nGegevens op deze pagina worden niet ververst.",
        "viewsource": "Brontekst bekijken",
        "viewsource-title": "Brontekst bekijken van $1",
        "actionthrottled": "Handeling tegengehouden",
        "exception-nologin": "Niet aangemeld",
        "exception-nologin-text": "Meld u aan om deze pagina te bekijken of deze handeling uit te voeren.",
        "exception-nologin-text-manual": "U moet $1 om deze pagina te kunnen bekijken of de handeling uit te voeren.",
-       "virus-badscanner": "Onjuiste configuratie: Onbekende virusscanner: <em>$1</em>.",
+       "virus-badscanner": "Onjuiste configuratie: onbekende virusscanner: <em>$1</em>.",
        "virus-scanfailed": "scannen is mislukt (code $1)",
        "virus-unknownscanner": "onbekend antivirusprogramma:",
        "logouttext": "<strong>U bent nu afgemeld.</strong>\n\nSommige pagina's kunnen blijven weergegeven alsof u nog aangemeld bent, totdat u uw browsercache leegt.",
        "createacct-reason-ph": "Waarom u een andere gebruiker aanmaakt",
        "createacct-captcha": "Veiligheidscontrole",
        "createacct-imgcaptcha-ph": "Geef de tekst in die u hierboven ziet",
-       "createacct-submit": "Gebruiker registreren",
+       "createacct-submit": "Account aanmaken",
        "createacct-another-submit": "Gebruiker aanmaken",
        "createacct-benefit-heading": "{{SITENAME}} wordt gemaakt door mensen zoals u.",
        "createacct-benefit-body1": "bewerking{{PLURAL:$1||en}}",
        "noname": "U hebt geen geldige gebruikersnaam opgegeven.",
        "loginsuccesstitle": "Aanmelden geslaagd",
        "loginsuccess": "<strong>U bent nu aangemeld bij {{SITENAME}} als \"$1\".</strong>",
-       "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:UserLogin/signup|registreer een nieuw gebruiker]].",
+       "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:UserLogin/signup|maak een nieuw gebruiker aan]].",
        "nosuchusershort": "De gebruiker \"$1\" bestaat niet.\nControleer de schrijfwijze.",
        "nouserspecified": "Geef een gebruikersnaam op.",
        "login-userblocked": "Deze gebruiker is geblokkeerd.\nAanmelden is niet mogelijk.",
        "passwordreset-emailtitle": "Gebruikersgegevens op {{SITENAME}}",
        "passwordreset-emailtext-ip": "Iemand, waarschijnlijk u, heeft vanaf het IP-adres $1 een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}. Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.",
        "passwordreset-emailtext-user": "Gebruiker $1 op de site {{SITENAME}} heeft een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.",
-       "passwordreset-emailelement": "Gebruikersnaam: $1\nTijdelijk wachtwoord: $2",
+       "passwordreset-emailelement": "Gebruikersnaam: \n$1\n\nTijdelijk wachtwoord: \n$2",
        "passwordreset-emailsent": "Er is een e-mail voor het opnieuw instellen van een wachtwoord verzonden.",
        "passwordreset-emailsent-capture": "Er is een e-mail voor het opnieuw instellen van een wachtwoord verzonden. Deze wordt hieronder weergegeven.",
        "passwordreset-emailerror-capture": "Er is een e-mail voor het opnieuw instellen van een wachtwoord aangemaakt. Deze wordt hieronder weergegeven. Het verzenden naar de {{GENDER:$2|gebruiker}} is mislukt om de volgende reden: $1",
        "showpreview": "Bewerking ter controle bekijken",
        "showdiff": "Wijzigingen bekijken",
        "blankarticle": "<strong>Waarschuwing:</strong> de pagina die u wilt aanmaken is leeg.\nAls u opnieuw op \"{{int:savearticle}}\" klikt, wordt de pagina aangemaakt zonder enige inhoud.",
-       "anoneditwarning": "<strong>Waarschuwing:</strong> u bent niet aangemeld.\nUw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt. Wanneer u <strong>[$1 aanmeldt]</strong> of <strong>[$2 een gebruiker aanmaakt]</strong verschijnen uw bewerkingen onder uw gebruikersnaam, naast andere voordelen.",
+       "anoneditwarning": "<strong>Waarschuwing:</strong> u bent niet aangemeld.\nUw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt. Wanneer u <strong>[$1 aanmeldt]</strong> of <strong>[$2 een gebruiker aanmaakt]</strong> verschijnen uw bewerkingen onder uw gebruikersnaam, naast andere voordelen.",
        "anonpreviewwarning": "''U bent niet aangemeld.''\n''Door uw bewerking op te slaan wordt uw IP-adres opgeslagen in de paginageschiedenis.''",
        "missingsummary": "'''Let op:''' u hebt geen bewerkingssamenvatting opgegeven.\nAls u nogmaals op \"{{int:savearticle}}\" klikt wordt de bewerking zonder samenvatting opgeslagen.",
        "selfredirect": "<strong>Waarschuwing:</strong>U heeft een doorverwijzing gemaakt naar dezelfde pagina. Mogelijk heeft u de verkeerde bestemming voor de doorverwijzing gebruikt, of bewerkt u de verkeerde pagina. Door alsnog op \"{{int:savearticle}}\" te klikken word de doorverwijzing alsnog aangemaakt.",
        "missingcommentheader": "'''Let op:''' u hebt geen onderwerp/kop voor deze opmerking opgegeven.\nAls u opnieuw op \"{{int:savearticle}}\" klikt, wordt uw wijziging zonder een onderwerp/kop opgeslagen.",
        "summary-preview": "Bewerkingssamenvatting nakijken:",
        "subject-preview": "Onderwerp/kop nakijken:",
-       "previewerrortext": "Er is een fout opgetreden bij het voorvertonen van je bewerkingen.",
+       "previewerrortext": "Er is een fout opgetreden tijdens het weergeven van uw wijzigingen.",
        "blockedtitle": "Gebruiker is geblokkeerd",
        "blockedtext": "'''Uw gebruiker of IP-adres is geblokkeerd.'''\n\nDe blokkade is uitgevoerd door $1.\nDe opgegeven reden is ''$2''.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\nU kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
        "autoblockedtext": "Uw IP-adres is automatisch geblokkeerd, omdat het is gebruikt door een andere gebruiker, die is geblokkeerd door $1.\nDe opgegeven reden is:\n\n:''$2''\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt deze blokkade bespreken met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]].\n\nU kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet is geblokkeerd.\n\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
        "action-editmyprivateinfo": "uw eigen privégegevens te bewerken",
        "action-editcontentmodel": "de paginainhoudmodel te bewerken",
        "action-managechangetags": "labels aanmaken en verwijderen",
-       "action-applychangetags": "labels aan je bewerkingen toe te voegen",
+       "action-applychangetags": "labels aan uw bewerkingen toe te voegen",
        "action-changetags": "willekeurige labels toe te voegen aan en te verwijderen van versies en logboekregels",
        "nchanges": "$1 {{PLURAL:$1|bewerking|bewerkingen}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sinds uw laatste bezoek}}",
        "tooltip-pt-preferences": "Mijn voorkeuren",
        "tooltip-pt-watchlist": "Overzicht van pagina's die u volgt",
        "tooltip-pt-mycontris": "Overzicht van uw bijdragen",
-       "tooltip-pt-login": "U wordt van harte uitgenodigd om in te loggen, maar dit is niet verplicht",
+       "tooltip-pt-login": "U wordt van harte uitgenodigd om aan te melden, maar dit is niet verplicht",
        "tooltip-pt-logout": "Afmelden",
        "tooltip-pt-createaccount": "Registreer u vooral en meld u aan. Dit is echter niet vereist.",
        "tooltip-ca-talk": "Overleg over deze pagina",
        "tooltip-p-logo": "Naar de hoofdpagina gaan",
        "tooltip-n-mainpage": "Naar de hoofdpagina gaan",
        "tooltip-n-mainpage-description": "Naar de hoofdpagina gaan",
-       "tooltip-n-portal": "Informatie over het project: wat je kunt doen, waar je dingen kunt vinden",
+       "tooltip-n-portal": "Informatie over het project: wat u kunt doen, waar u dingen kunt vinden",
        "tooltip-n-currentevents": "Achtergrondinformatie over actuele zaken",
        "tooltip-n-recentchanges": "Een lijst met recente wijzigingen in deze wiki.",
        "tooltip-n-randompage": "Een willekeurige pagina bekijken",
        "tooltip-ca-nstab-main": "Inhoudspagina bekijken",
        "tooltip-ca-nstab-user": "Gebruikerspagina bekijken",
        "tooltip-ca-nstab-media": "Mediapagina bekijken",
-       "tooltip-ca-nstab-special": "Dit is een speciale pagina, u kunt de pagina zelf niet bewerken",
+       "tooltip-ca-nstab-special": "Dit is een speciale pagina die niet bewerkt kan worden",
        "tooltip-ca-nstab-project": "Projectpagina bekijken",
        "tooltip-ca-nstab-image": "Bestandspagina bekijken",
        "tooltip-ca-nstab-mediawiki": "Systeembericht bekijken",
index 80ddb30..4d13fb7 100644 (file)
        "passwordreset-emailtitle": "↓Kontodetaljar på {{SITENAME}}",
        "passwordreset-emailtext-ip": "Nokon (sannsynlegvis deg, frå IP-adressa $1) bad om ei påminning for kontodetaljane dine for {{SITENAME}} ($4). {{PLURAL:$3|Den fylgjande brukarkontoen|Dei fylgjande brukarkontoane}} er assosierte med denne e-postadressa:\n\n$2\n\n{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} vil verta ugilde om {{PLURAL:$5|éin dag|$5 dagar}}.\nDu bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne påminninga, eller du har kome i hug det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.",
        "passwordreset-emailtext-user": "Brukaren $1 på {{SITENAME}} bad om ei påminning for kontodetaljane dine for {{SITENAME}} ($4). {{PLURAL:$3|Den fylgjande brukarkontoen|Dei fylgjande brukarkontoane}} er assosierte med denne e-postadressa:\n\n$2\n\n{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} vil verta ugilde om {{PLURAL:$5|éin dag|$5 dagar}}.\nDu bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne påminninga, eller du har kome i hug det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.",
-       "passwordreset-emailelement": "↓Brukarnamn: $1\nMellombels passord: $2",
+       "passwordreset-emailelement": "↓Brukarnamn: \n$1\n\nMellombels passord: \n$2",
        "passwordreset-emailsent": "Ein e-post for attendestilling av passord er vorten send",
        "passwordreset-emailsent-capture": "Ein e-post om attendestilling av passord - vist under - er vorten send",
        "passwordreset-emailerror-capture": "Ein e-post om attendestilling av passord vart oppretta, og er vist nedanfor; men det lukkast ikkje å senda han til {{GENDER:$2|brukaren}}: $1",
        "recentchangeslinked-title": "Endringar relaterte til «$1»",
        "recentchangeslinked-summary": "Dette er ei liste over nylege endringar som er gjorde på sider som vert lenkja til frå ei oppgjeven side (eller på medlemer av ein oppgjeven kategori). Sider på [[Special:Watchlist|overvakingslista di]] er '''utheva'''.",
        "recentchangeslinked-page": "Sidenamn:",
-       "recentchangeslinked-to": "Vis endringar på sider som lenkjer til den gitte sida i staden",
+       "recentchangeslinked-to": "Vis endringar på sider som lenkjar til den gitte sida i staden",
        "upload": "Last opp fil",
        "uploadbtn": "Last opp fil",
        "reuploaddesc": "Attende til opplastingsskjemaet.",
        "filehist-comment": "Kommentar",
        "imagelinks": "Filbruk",
        "linkstoimage": "{{PLURAL:$1|Den følgjande sida|Dei følgjande $1 sidene}} har lenkjer til denne fila:",
-       "linkstoimage-more": "Meir enn $1 {{PLURAL:$1|side|sider}} lenkjer til denne fila.\nFølgjande liste viser {{PLURAL:$1|den første sida|dei $1 første sidene}}.\nEi [[Special:WhatLinksHere/$2|fullstendig liste]] er tilgjengeleg.",
+       "linkstoimage-more": "Meir enn $1 {{PLURAL:$1|side|sider}} lenkjar til denne fila.\nDenne lista viser {{PLURAL:$1|den første sida|dei $1 første sidene}}.\nEi [[Special:WhatLinksHere/$2|fullstendig liste]] er tilgjengeleg.",
        "nolinkstoimage": "Det finst ikkje noka side med lenkje til denne fila.",
        "morelinkstoimage": "Vis [[Special:WhatLinksHere/$1|fleire lenkjer]] til denne fila.",
        "linkstoimage-redirect": "$1 (filomdirigering) $2",
        "linksearch-ns": "Namnerom:",
        "linksearch-ok": "Søk",
        "linksearch-text": "Jokerteikn som «*.wikipedia.org» kan nyttast.\nDet er påkravt med eit toppnivådomene, til dømes «*.org».<br />\n{{PLURAL:$2|Stødd protokoll|Stødde protokollar}}: $1 (nyttar http:// som standard om ingen protokoll er oppgjeven)",
-       "linksearch-line": "$2 lenkjer til $1",
+       "linksearch-line": "$2 lenkjar til $1",
        "linksearch-error": "Jokerteikn kan berre nyttast føre tenarnamnet.",
        "listusersfrom": "Vis brukarnamna frå og med:",
        "listusers-submit": "Vis",
        "delete-edit-reasonlist": "Endre grunnar til sletting",
        "delete-toobig": "Denne sida har ein stor endringsshistorikk, med over {{PLURAL:$1|$1&nbsp;endring|$1&nbsp;endringar}}. Sletting av slike sider er avgrensa for å unngå utilsikta forstyrring av {{SITENAME}}.",
        "delete-warning-toobig": "Denne sida har ein lang endringshistorikk, med meir enn {{PLURAL:$1|$1&nbsp;endring|$1&nbsp;endringar}}. Dersom du slettar henne kan det forstyrre handlingar i databasen til {{SITENAME}}, ver varsam.",
-       "deleting-backlinks-warning": "'''Åtvaring''': Andre sider lenkjer til eller inkluderer sida du er i ferd med å sletta.",
+       "deleting-backlinks-warning": "'''Åtvaring''': [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] lenkjar til eller inkluderer sida du er i ferd med å sletta.",
        "rollback": "Rull attende endringar",
        "rollbacklink": "rull attende",
        "rollbacklinkcount": "rull attende {{PLURAL:$1|éi endring|$1 endringar}}",
        "tooltip-n-randompage": "Vis ei tilfeldig side",
        "tooltip-n-help": "Hjelp til å bruke alle funksjonane.",
        "tooltip-t-whatlinkshere": "Liste over alle wikisidene som har lenkjer hit",
-       "tooltip-t-recentchangeslinked": "Siste endringar på sider denne sida lenkjer til",
+       "tooltip-t-recentchangeslinked": "Nylege endringar på sider denne sida lenkjar til",
        "tooltip-feed-rss": "RSS-mating for denne sida",
        "tooltip-feed-atom": "Atom-mating for denne sida",
        "tooltip-t-contributions": "Sjå liste over bidrag frå denne brukaren",
index 12bf5df..5b54f9d 100644 (file)
        "passwordreset-emailtitle": "Detailhs d'un compte per {{SITENAME}}",
        "passwordreset-emailtext-ip": "Qualqu'un (probablament vos, dempuèi l'adreça IP $1) a demandat una reïnicializacion de vòstre senhal per {{SITENAME}} ($4). {{PLURAL:$3|Lo compte d'utilizaire seguent es associat|Los comptes d'utilizaires seguents son associats}} a aquesta adreça de corrièr electronic :\n\n$2\n\n{{PLURAL:$3|Aqueste senhal temporari expirarà|Aquestes senhals temporaris expiraràn}} dins {{PLURAL:$5|un jorn|$5 jorns}}. Ara, vos cal vos connectar e causir un senhal novèl. Se aquesta demanda proven pas de vos, o que vos sètz remembrat de vòstre senhal inicial, e que volètz pas mai lo modificar, podètz ignorar aqueste messatge e contunhar d'utilizar vòstre ancian senhal.",
        "passwordreset-emailtext-user": "L'utilizaire $1 sus {{SITENAME}} a demandat una reïnicializacion de vòstre senhal per {{SITENAME}} ($4). {{PLURAL:$3|Lo compte d'utilizaire seguent es associat|Los comptes d'utilizaires seguents son associats}} a aquesta adreça de corrièr electronic :\n\n$2\n\n{{PLURAL:$3|Aqueste senhal temporari expirarà|Aquestes senhals temporaris expiraràn}} dins {{PLURAL:$5|un jorn|$5 jorns}}. Ara, vos cal vos connectar e causir un senhal novèl. Se aquesta demanda proven pas de vos, o que vos sètz remembrat de vòstre senhal inicial, e que lo volètz pas mai modificar, podètz ignorar aqueste messatge e contunhar d'utilizar vòstre ancian senhal.",
-       "passwordreset-emailelement": "Utilizaire: $1\nSenhal temporari: $2",
+       "passwordreset-emailelement": "Utilizaire: \n$1\n\nSenhal temporari: \n$2",
        "passwordreset-emailsent": "Un corrièr electronic de reïnicializacion de senhal es estat mandat.",
        "passwordreset-emailsent-capture": "Un corrièr electronic de reïnicializacion senhal es estat mandat, qu'es afichat çaijós.",
        "passwordreset-emailerror-capture": "Un corrièr electronic de reïnicializacion de senhal es estat generat, qu'es afichat çaijós, mas lo mandadís a l'{{GENDER:$2|utilizaire}} a fracassat : $1",
        "emailuser": "Mandar un messatge a aqueste utilizaire",
        "emailuser-title-target": "Mandar un corrièl a {{GENDER:$1|aqueste utilizaire|aquesta utilizaira}}",
        "emailuser-title-notarget": "Mandar un corrièr electronic a l’utilizaire",
-       "emailpage": "Mandar un corrièr electronic a l’utilizaire",
        "emailpagetext": "Podètz utilizar lo formulari çaijós per mandar un corrièr electronic a {{GENDER:$1|aqueste utilizaire|aquesta utilizaira}}.\nL'adreça electronica qu'avètz indicada dins [[Special:Preferences|vòstras preferéncias]] apareisserà dins lo camp « Expeditor » de vòstre messatge. E mai, lo destinatari vos poirà respondre dirèctament.",
        "defemailsubject": "{{SITENAME}} Corrièl de l'utilizaire « $1 »",
        "usermaildisabled": "Lo mandadís de corrièrs electronics entre utilizairers es desactivat",
diff --git a/languages/i18n/olo.json b/languages/i18n/olo.json
new file mode 100644 (file)
index 0000000..0f38416
--- /dev/null
@@ -0,0 +1,811 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Denö",
+                       "Hiloin Natoi",
+                       "Ilja.mos",
+                       "Mashoi7"
+               ]
+       },
+       "tog-underline": "Linkien alleviivuamine:",
+       "tog-hideminor": "Peittiä pienet muutokset uuvet muutokset -listaspäi",
+       "tog-hidepatrolled": "Peittiä tarkastetut muutokset uvvet muutokset -listaspäi",
+       "tog-newpageshidepatrolled": "Peittiä tarkastetut sivut uuzien sivuloin listalpäi",
+       "tog-extendwatchlist": "Levitä valvonduluvettelo ku ozuttua kai muutokset, ei vaiku jälgimäzii",
+       "tog-editondblclick": "Edituiče sivuloi kaksoispainalduksel",
+       "tog-watchcreations": "Ližiä minun luajitut sivut da ližätyt failat minun valvonduluvetteloh",
+       "tog-watchdefault": "Ližiä minun kohendetut sivut da failat minun valvonduluvetteloh",
+       "tog-watchmoves": "Ližiä minun siirretyt sivut da failat minun valvonduluvetteloh",
+       "tog-watchdeletion": "Ližiä minun iäreotetut sivut da failat minun valvonduluvetteloh",
+       "tog-oldsig": "Nygöine allekirjutus:",
+       "tog-watchlisthideliu": "Peitä kirjutannuhuoloin käyttäjien kohendukset valvondulistalpäi",
+       "tog-watchlisthideanons": "Peitä registriiruičemattomien käyttäjien kohendukset valvondulistalpäi",
+       "tog-watchlisthidepatrolled": "Peitä muutoksientarkistajien hyväksytyt kohendukset valvondulistalpäi",
+       "tog-ccmeonemails": "Työnnä minule koupii MediiWikin kauti työttylöis sähköpoštuviestilöis",
+       "tog-diffonly": "Älä ozuta sivun syväindyö eroverdailun alapuolel",
+       "tog-showhiddencats": "Ozuta peitetyt kategouriet",
+       "tog-norollbackdiff": "Älä ozuta eroloi, konzu olet ottanuh järilleh aijemban versien järilleh tuondu -toimindol",
+       "underline-always": "Ainos",
+       "underline-never": "Nikonzu",
+       "editfont-style": "Edituičendualovehen kirjainstiilu:",
+       "editfont-sansserif": "Sans-serif -fontu",
+       "editfont-serif": "Serif-fontu",
+       "sunday": "Pyhäpäivy",
+       "monday": "Enzimäinargi",
+       "tuesday": "Toinargi",
+       "wednesday": "Kolmaspäivy",
+       "thursday": "Nelläspäivy",
+       "friday": "Piäteniččy",
+       "saturday": "Suovattu",
+       "sun": "Pyh",
+       "mon": "Enzimäinargi",
+       "tue": "Toinargi",
+       "wed": "Kol",
+       "thu": "Nel",
+       "fri": "Piä",
+       "sat": "Suo",
+       "january": "pakkaskuu",
+       "february": "tuhukuu",
+       "march": "kevätkuu",
+       "april": "sulakuu",
+       "may_long": "oraskuu",
+       "june": "kezäkuu",
+       "july": "heinykuu",
+       "august": "elokuu",
+       "september": "syvyskuu",
+       "october": "ligakuu",
+       "november": "kylmykuu",
+       "december": "talvikuu",
+       "january-gen": "pakkaskuudu",
+       "february-gen": "tuhukuudu",
+       "march-gen": "kevätkuudu",
+       "april-gen": "kevätkuudu",
+       "may-gen": "oraskuudu",
+       "june-gen": "kezäkuudu",
+       "july-gen": "heinykuudu",
+       "august-gen": "elokuudu",
+       "september-gen": "syvyskuudu",
+       "october-gen": "ligakuudu",
+       "november-gen": "kylmykuudu",
+       "december-gen": "talvikuudu",
+       "jan": "pakkaskuu",
+       "feb": "tuhu",
+       "mar": "kevätkuu",
+       "apr": "Sula",
+       "may": "Oras",
+       "jun": "Pakkas",
+       "jul": "Heiny",
+       "aug": "Elo",
+       "sep": "Syvys",
+       "oct": "ligakuu",
+       "nov": "kylmykuu",
+       "dec": "talvikuu",
+       "january-date": "$1. pakkaskuudu",
+       "february-date": "$1. tuhukuudu",
+       "march-date": "Kevätkuu $1",
+       "april-date": "Sulakuu $1",
+       "may-date": "Oraskuu $1",
+       "june-date": "Kezäkuu $1",
+       "july-date": "Heinykuu $1",
+       "august-date": "Elokuu $1",
+       "september-date": "Syvyskuu $1",
+       "october-date": "Ligakuu $1",
+       "november-date": "Kylmykuu $1",
+       "december-date": "Talvikuu $1",
+       "pagecategories": "{{PLURAL:$1|Kategourii|Kategouriet}}",
+       "category_header": "Sivut kategouries \"$1\"",
+       "subcategories": "Alikategouriet",
+       "category-media-header": "Medii kategouries \"$1\"",
+       "hidden-categories": "{{PLURAL:$1|Peitetty kategourii|Peitetyt kategouriet}}",
+       "hidden-category-category": "Peitetyt kategouriet",
+       "category-subcat-count": "{{PLURAL:$2|Täs kategouries on vaiku tämä alikategourii.|Täs kategouries on nämmä {{PLURAL:$1|subcategory|$1 alikategouriet}}, kaikkiedah $2.}}",
+       "category-article-count": "{{PLURAL:$2|Täs kategouries on vaiku tämä sivu.|{{PLURAL:$1|Tämä sivu on|$1 Nämmä sivut ollah}} täs kategouries, $2 kaikkiedah.}}",
+       "category-file-count": "{{PLURAL:$2|Täs kategouriis on vaiku tämä failu.| {{PLURAL:$1|Tämä failu on|$1 Nämmä failat ollah}} täs kategouries, $2 kaikkiedah.}}",
+       "listingcontinuesabbrev": "(jatko)",
+       "index-category": "Indeksiruitut sivut",
+       "noindex-category": "Indeksiruičemattomat sivut",
+       "broken-file-category": "Sivut, kudamil on ruadamattomii failulinkilöi",
+       "about": "Tieduo sovellukses",
+       "article": "Yhtevyssivu",
+       "newwindow": "(avata uvves ikkunas)",
+       "cancel": "Hylgiä",
+       "moredotdotdot": "Ližiä...",
+       "morenotlisted": "Tämä listu ei ole valmis.",
+       "mypage": "Sivu",
+       "mytalk": "Pagin",
+       "anontalk": "Paginsivutälle IP-adressile",
+       "navigation": "Navigatsii",
+       "and": "&#32;da",
+       "qbfind": "Eči",
+       "qbbrowse": "Livua",
+       "qbedit": "Korjata",
+       "qbpageoptions": "Tämä sivu",
+       "qbmyoptions": "Minun sivut",
+       "faq": "PKK",
+       "faqpage": "Project:PKK",
+       "actions": "Tevot",
+       "namespaces": "Nimitilat",
+       "variants": "Variantat",
+       "navigation-heading": "Navigatsii",
+       "errorpagetitle": "Haireh",
+       "returnto": "Mene järilleh sivule $1.",
+       "tagline": "Lähteh {{SITENAME}}",
+       "help": "Kyzy abuu",
+       "search": "Eči",
+       "searchbutton": "Eči",
+       "go": "Mennä",
+       "searcharticle": "Mene",
+       "history": "Kačo histourii",
+       "history_short": "Histourii",
+       "printableversion": "Tulostettavu versii",
+       "permalink": "Vagituine linki",
+       "print": "Pane bumuagale",
+       "view": "Kačo",
+       "view-foreign": "Kačo saital $1",
+       "edit": "Korjua",
+       "create": "Luaji",
+       "create-local": "Ližiä paikalline kuvavus",
+       "editthispage": "Korjua tädä sivuu",
+       "create-this-page": "Luaji tämä sivu",
+       "delete": "Ota iäre",
+       "deletethispage": "Ota tämä sivu iäre",
+       "undeletethispage": "Tuo sivu järilleh",
+       "protect": "Suojua",
+       "protect_change": "vaihta",
+       "protectthispage": "Suojua tämä sivu",
+       "unprotect": "Vaihta suojavustu",
+       "unprotectthispage": "Vaihta tämän sivun suojavustu",
+       "newpage": "Uuzi sivu",
+       "talkpage": "Pagize täh sivuh näh",
+       "talkpagelinktext": "Pagin",
+       "specialpage": "Erikoine sivu",
+       "personaltools": "Omat instrumentat",
+       "articlepage": "Ozuta syväindösivu",
+       "talk": "Paginat",
+       "views": "Kaččokerrat",
+       "toolbox": "Instrumentat",
+       "userpage": "Ozuta käyttäisivu",
+       "projectpage": "Ozuta projektusivu",
+       "imagepage": "Ozuta failusivu",
+       "mediawikipage": "Ozuta viestisivu",
+       "templatepage": "Ozuta šablonsivu",
+       "viewhelppage": "Ozuta ohjavosivu",
+       "categorypage": "Ozuta kategouriisivu",
+       "viewtalkpage": "Ozuta paginsivu",
+       "otherlanguages": "Toizil kielil",
+       "redirectedfrom": "(siirretty $1:späi)",
+       "redirectpagesub": "uvvellehohjavussivu",
+       "redirectto": "Uvvellehohjuau sivuh:",
+       "lastmodifiedat": "Tädä sivuu on muutettu jälgimäizen kerran $1, $2 aigah.",
+       "protectedpage": "Suojattu sivu",
+       "jumpto": "Siirry",
+       "jumptonavigation": "navigatsii",
+       "jumptosearch": "eči",
+       "pool-errorunknown": "Tundematoi haireh",
+       "poolcounter-usage-error": "Käyttöhaireh: $1",
+       "aboutsite": "Lähteh {{SITENAME}}",
+       "aboutpage": "Project:Kuvavus",
+       "copyrightpage": "{{ns:project}}:Luadijan oigevukset",
+       "currentevents": "Aijankohtazet tapahtumat",
+       "currentevents-url": "Project:Aijankohtazet tapahtumat",
+       "disclaimers": "Kieldävymine vastuos",
+       "disclaimerpage": "Project:Vastuos kieldävymine",
+       "edithelp": "Abu korjuamizeh",
+       "helppage-top-gethelp": "Kyzyö abuu",
+       "mainpage": "Piäsivu",
+       "mainpage-description": "Piäsivu",
+       "portal": "Yhtevyksen portualu",
+       "portal-url": "Project:Portualu",
+       "privacy": "Luottamuksen periuateh",
+       "privacypage": "Project:Luottamuksen periuateh",
+       "versionrequired": "MediiWikis pidäy vähimyölleh versii $1",
+       "versionrequiredtext": "MediiWikis pidäy vähimyölleh versii $1 tädä sivuu kaččojes. Kačo [[Special:Version|versii]].",
+       "ok": "OK",
+       "retrievedfrom": "Lähteh - \"$1\"",
+       "youhavenewmessages": "{{PLURAL:$3|Sinule on}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Sinule on}} $1 {{PLURAL:$3|toizel käyttäjälpäi|$3 käyttäjältä}} ($2).",
+       "youhavenewmessagesmanyusers": "Sinule on $1 uuzii viestilöi monil käyttäjilpäi ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|uuzi viesti|999=uuzii viestilöi}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|jälgimäine muutos|jälgimästy muutostu}}",
+       "youhavenewmessagesmulti": "Sinul on uuzii viestilöi sivuloil $1",
+       "editsection": "Korjua",
+       "editold": "korjua",
+       "viewsourceold": "Kačo algukoodu",
+       "editlink": "korjua",
+       "viewsourcelink": "Kačo algukoodu",
+       "editsectionhint": "Korjua tädä kohtua: $1",
+       "toc": "Sizäldö",
+       "showtoc": "ozuttua",
+       "hidetoc": "peittiä",
+       "collapsible-expand": "Levitä",
+       "confirmable-confirm": "{{GENDER:$1|Oletgo}} varmu?",
+       "confirmable-yes": "Muga",
+       "confirmable-no": "Ei",
+       "viewdeleted": "Ozuta $1?",
+       "restorelink": "{{PLURAL:$1|yksi iäre otettu edituičendu|$1 iäre otettuu edituičendua}}",
+       "feedlinks": "Syöteh:",
+       "site-rss-feed": "$1 (RSS-syöteh)",
+       "site-atom-feed": "$1 Atom-lentu",
+       "page-rss-feed": "$1 (RsS-syöteh)",
+       "page-atom-feed": "$1 Atom-lentu",
+       "red-link-title": "$1 (sivuu ei lövvy)",
+       "nstab-main": "Sivu",
+       "nstab-user": "Käyttäisivu",
+       "nstab-media": "Mediisivu",
+       "nstab-special": "Erikoine sivu",
+       "nstab-project": "Projektusivu",
+       "nstab-image": "Failu",
+       "nstab-mediawiki": "Viesti",
+       "nstab-template": "Šablon",
+       "nstab-help": "Abusivu",
+       "nstab-category": "Kategourii",
+       "nosuchaction": "Nengostu toiminduo ei ole",
+       "error": "Haireh",
+       "databaseerror": "Tiedokanduhaireh",
+       "databaseerror-query": "Kyzely: $1",
+       "databaseerror-function": "Funkcii:$1",
+       "databaseerror-error": "Haireh: $1",
+       "readonly": "Tiedokandu lukuttu",
+       "missingarticle-rev": "(versii № $1)",
+       "missingarticle-diff": "(Ero: $1, $2)",
+       "internalerror": "Syväindölline haireh",
+       "internalerror_info": "Syväindölline haireh: $1",
+       "filecopyerror": "Failua \"$1\" ei voitu kopiruija failakse \"$2\".",
+       "filerenameerror": "Ei voi uvvellehnimittoä \"$1\"-failua nimele \"$2\".",
+       "filedeleteerror": "Failua \"$1\" ei voitu ottua iäre.",
+       "directorycreateerror": "Ei voi luadie al'bomua \"$1\".",
+       "directoryreadonlyerror": "Al'bom $1 on kirjutussuojattu.",
+       "directorynotreadableerror": "Al'bom $1 ei ole lugiettavis.",
+       "filenotfound": "Failua \"$1\" ei lövvetty.",
+       "badarticleerror": "Tädä toimindua ei voi ruadua täl sivul.",
+       "cannotdelete": "Sivuu libo failua \"$1\" ei voi ottua iäre. Kentah toine on jo toinah ottanuh sen iäre.",
+       "cannotdelete-title": "Ei voi ottua iäre sivuu \"$1\"",
+       "badtitle": "Paha rubriekku",
+       "badtitletext": "Kyzelyn rubriekku oli pädemätöi, tyhjy, libo viärin linkitetty kielienväline libo wikienväline rubriekku. \nSit voibi olla yksi libo enämbi merkii, kudamua ei voi käyttiä rubriekas.",
+       "title-invalid-talk-namespace": "Kyzytyn sivun nimi ohjuau nengozeh paginsivuh, kudamua ei ole olemas.",
+       "title-invalid-characters": "Kyzytyn sivun nimes on pädemättömii merkilöi: ”$1”.",
+       "viewsource": "Kačo",
+       "viewsource-title": "Ozuta sivun $1 lähteh",
+       "viewsourcetext": "Voit kaččuo da kopiruija tämänsivun lähtehen.",
+       "viewyourtext": "Voit kaččuo da kopiruija <strong>sinun kohenduksien</strong> lähtehii täl sivul.",
+       "namespaceprotected": "Sinul ei ole oigevuksii kohendua sivuloi nimitilas <strong>$1</strong>.",
+       "mycustomcssprotected": "Sinul ei ole oigevuksii edituija tädä syväindönhalličendusistieman sivuu.",
+       "mycustomjsprotected": "Sinul ei ole oigevuksii edituija tädä JavaScript-sivuu.",
+       "exception-nologin": "Ei ole kirjutannuhes",
+       "virus-scanfailed": "skanniruičendu ei ozavunnu (koudu $1)",
+       "welcomeuser": "Tule terveh, $1!",
+       "yourname": "Käyttäinimi:",
+       "userlogin-yourname": "Käyttäinimi",
+       "userlogin-yourname-ph": "Kirjuta sinun käyttäinimi",
+       "createacct-another-username-ph": "Kirjuta käyttäitunnus",
+       "yourpassword": "Peittosana:",
+       "userlogin-yourpassword": "Peittosana",
+       "userlogin-yourpassword-ph": "Kirjuta sinun peittosana",
+       "createacct-yourpassword-ph": "Kirjuta peittosana",
+       "yourpasswordagain": "Kirjuta peittosana myös:",
+       "createacct-yourpasswordagain": "Lujenda peittosana",
+       "createacct-yourpasswordagain-ph": "Myös kirjuta peittosana",
+       "userlogin-remembermypassword": "Pie minut kirjutannuhuonnu",
+       "userlogin-signwithsecure": "Käytä suojattuu yhtevytty",
+       "yourdomainname": "Sinun domain:",
+       "password-change-forbidden": "Et voi vaihtua peittosanoi täs wikis.",
+       "login": "Kirjuttai",
+       "nav-login-createaccount": "Kirjuttai libo registriiruiččei",
+       "userlogin": "Kirjuttai libo registriiruiččei",
+       "userloginnocreate": "Kirjuttai",
+       "logout": "Kirjuttai ullos",
+       "userlogout": "Kirjuttai ullos",
+       "notloggedin": "Ei kirjutannuhes",
+       "userlogin-noaccount": "Ei ole tilii?",
+       "userlogin-joinproject": "Yhty {{SITENAME}}",
+       "nologin": "Ei ole tilii? $1",
+       "nologinlink": "Luaji tili",
+       "createaccount": "Registriiruiččei",
+       "gotaccount": "Ollou sinul jo tunnus? $1",
+       "gotaccountlink": "Kirjuttai",
+       "userlogin-resetlink": "Unohtitgo sinun käyttäinimen/peittosanan?",
+       "userlogin-resetpassword-link": "Unohtitgo sinun peittosanan?",
+       "userlogin-helplink2": "Abuu ku kirjuttuakseh",
+       "userlogin-loggedin": "Olet jo kirjutannuhes nimel {{GENDER:$1|$1}}.\nKäytä al olijua ankiettua ku kirjuttuakseh eri käyttäjänny.",
+       "userlogin-createanother": "Luaji toine tili",
+       "createacct-emailrequired": "Sähköpoštuadressu",
+       "createacct-emailoptional": "Sähköpoštuadressu (ei vältämätöi)",
+       "createacct-email-ph": "Kirjuta sinun sähköpoštuadressu",
+       "createacct-another-email-ph": "Kirjuta sinun sähköpoštuadressu",
+       "createacct-realname": "Tovelline nimi (omatahtoine tiedo)",
+       "createacct-reason-ph": "Mindäh olet luadimas tostu käyttäitilii",
+       "createacct-captcha": "Turvallizusvarmistus",
+       "createacct-imgcaptcha-ph": "Kirjuta ylähän olii tekstu",
+       "createacct-submit": "Luaji tili",
+       "createacct-another-submit": "Luaji toine tili",
+       "createacct-benefit-heading": "Sivun {{SITENAME}} ollah luajittu sinunjyttymät rahvas.",
+       "createacct-benefit-body1": "{{PLURAL:$1|kohennus|kohendustu}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|sivu|sivuu}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|Jälgimäime käyttäi|Jälgimäzet käyttäjät}}",
+       "badretype": "Sinun kirjutetut peittosanat ei oldu yhtenjyttymät.",
+       "loginerror": "Kirjuttuanduhaireh",
+       "createacct-error": "Haireh käyttäitunnuksen luadimizes",
+       "createaccounterror": "Ei voinuh luadie tilii: $1",
+       "loginsuccess": "<strong>Olet kirjutannuhes sivule {{SITENAME}} käyttäitunnuksel \"$1\".</strong>",
+       "nosuchusershort": "Ei ole käyttäjiä nimel \"$1\". Tarkista kirjutitgo oigein.",
+       "nouserspecified": "Käyttäinimi pidäy.",
+       "login-userblocked": "Tämä käyttäi on estetty. Ei oigevuttu kirjuttuakseh.",
+       "wrongpassword": "Kirjutit viärän peittosanan. Ole hyvä, opi vie kerdu.",
+       "wrongpasswordempty": "Et voi jättiä peittosanua tyhjäkse. Ole hyvä, opi vie kerdu.",
+       "passwordtooshort": "Peittosanal pidäy olla piduhuttu vähimyölleh {{PLURAL:$1|yksi merki|$1 merkii}}.",
+       "passwordtoolong": "Peittosana ei voi olla pitkembi $1 {{PLURAL:$1|merkii}}.",
+       "password-name-match": "Peittosana pidäy olla eri migu käyttäinimi.",
+       "password-login-forbidden": "Tämän käyttäinimen da peittosanan käyttö on estetty.",
+       "mailmypassword": "Azeta peittosana uvvelleh",
+       "passwordremindertitle": "Uusi väliaigaine peittosana {{SITENAME}}-sivuh niškoi",
+       "passwordremindertext": "Kentah IP-adressispäi $1 kyzyi työndämäh uuttu peittosanua saitale {{SITENAME}} ($4). Väliaigaine peittosana käyttäjäle $2 on nygöi $3. Kirjuttai da vaihta peittosana. Väliaigaine peittosana vahnenou {{PLURAL:$5|yhten päivän|$5 päivän}} jälles.\n\nOllou kentah toine työndänyh tämän pakičuksen, libo ku ollet mustanuh sinun peittosanan da et tahto vaihtua sidä, voit jättiä tämän viestin huomivottah dajatkua vahnan peittosanan käyttyö.",
+       "mailerror": "Haireh työndäjes sähköpoštua: $1",
+       "accountcreated": "Tili luajittu",
+       "loginlanguagelabel": "Kieli: $1",
+       "pt-login": "Kirjuttai",
+       "pt-login-button": "Kirjuttai",
+       "pt-createaccount": "Registriiruiččei",
+       "pt-userlogout": "Kirjuttai ullos",
+       "user-mail-no-addy": "Opit työndiä sähköpoštan sähköpoštuadressittah.",
+       "changepassword": "Vaihta peittosana",
+       "resetpass_header": "Vaihta tilin peittosana",
+       "oldpassword": "Vahnu peittosana:",
+       "newpassword": "Uuzi peittosana:",
+       "changepassword-success": "Sinun peittosana on vaihtettu!",
+       "resetpass_forbidden": "Ei voi vaihtua peittosanua",
+       "resetpass-no-info": "Et voi nähtä tädä sivuu kuni et ole kirjutannuhes.",
+       "resetpass-submit-loggedin": "Vaihta peittosana",
+       "resetpass-submit-cancel": "Hyllätä",
+       "resetpass-recycled": "Ole hyvä, valliče uvvekse peittosanakse eri migu nygöine peittosana.",
+       "resetpass-temp-password": "Väliaigaine peittosana:",
+       "resetpass-expired": "Sinun peittosana on vahnennuh. Ole hyvä, luaji uuzi peittosana ku kirjuttuakseh.",
+       "passwordreset": "Azeta peittosana uvvelleh",
+       "passwordreset-username": "Käyttäinimi:",
+       "passwordreset-domain": "Domain:",
+       "passwordreset-email": "Sähköpoštuadressu:",
+       "passwordreset-emailelement": "Käyttäinimi: \n$1\n\nVäliaigaine peittosana: \n$2",
+       "changeemail": "Vaihta sähköpoštuadressu",
+       "changeemail-oldemail": "Nygöine sähköpoštuadressu:",
+       "changeemail-newemail": "Uuzi sähköpoštuadressu:",
+       "changeemail-none": "(niyhty)",
+       "changeemail-password": "Sinun {{SITENAME}}-peittosana:",
+       "changeemail-submit": "Vaihta sähköpoštu",
+       "changeemail-throttled": "Olet oppinuh kirjuttuakseh liijan moni kerdua. Ole hyvä, vuota $1 enne ku opit uvvelleh.",
+       "resettokens-tokens": "Avaimet:",
+       "bold_sample": "Lihavoitu tekstu",
+       "bold_tip": "Lihavoitu tekstu",
+       "italic_sample": "Kursivoitu tekstu",
+       "italic_tip": "Kursivoitu tekstu",
+       "link_sample": "Linkan nimi",
+       "link_tip": "Sižähine linku",
+       "extlink_sample": "http://www.example.com linkan nimi",
+       "extlink_tip": "Ulgohine linku (musta http:// alguh)",
+       "headline_sample": "Rubriekkutekstu",
+       "headline_tip": "Tazon 2 rubriekku",
+       "nowiki_sample": "Ližiä täh tekstu, kudamua ei pie korjata",
+       "nowiki_tip": "Älä puutu wiki-korjavuksih",
+       "image_tip": "Upotettu failu",
+       "media_tip": "Linki failah",
+       "sig_tip": "Teijän allekirjutus da aigu",
+       "hr_tip": "Horizontualine viivu (älä käytä liijakse)",
+       "summary": "Yhtehvedo:",
+       "subject": "Tiemu/rubriekku:",
+       "minoredit": "Tämä on pieni korjavus",
+       "watchthis": "Tarkaile tädä sivuu",
+       "savearticle": "Tallenda sivu",
+       "preview": "Ezikačo",
+       "showpreview": "Ezikaččo",
+       "showdiff": "Luajitut korjavukset",
+       "anoneditwarning": "<strong>Varaitus:</strong> Et ole kirjutannuhes. Luadinet muutoksii syväindölöih, sinun Ip-adressu tulou nägövih kaikile. Ku <strong>[$1 kirjutannuttos]</strong> libo <strong>[$2 registriiruičettos]</strong>, sinun syväindömuutokset nävytäh sinun käyttäinimel, toizien eduloin ližäkse.",
+       "blockedtitle": "Käyttäi on estetty",
+       "blockednoreason": "ei viärysty annettu",
+       "loginreqlink": "kirjuttai",
+       "accmailtitle": "Peittosana työtty",
+       "newarticle": "(Uuzi)",
+       "newarticletext": "Olet puutunuh sivule, kudamua ei ole vie. Ku luadie sivu, zavodi kirjuttua al olijah juaššiekkah (kačo [$1 help page] ku suaha ližätieduo).\nKu puutuit tänne petties, painalda sinun livaimen <strong>järilleh</strong>-nyblyä.",
+       "noarticletext": "Täl sivul ei ole juuri nygöi tekstua.\nVoit [[Special:Search/{{PAGENAME}}|eččie sivun nimel]] toizis sivuloispäi,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} eččie sidä koskijua logua],\nlibo [{{fullurl:{{FULLPAGENAME}}|action=edit}} korjata tädä sivuu]</span>.",
+       "noarticletext-nopermission": "Täl sivul ei ole tekstua.\nVoit [[Special:Search/{{PAGENAME}}|eččie sivun nimel]] toizis sivuloispäi, libo <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} eččie sivuu koskijua logua]</span>, ga sinul ei ole oigevuksii luadie tädä sivuu.",
+       "updated": "(Päivitetty)",
+       "editing": "Edituijah sivuu $1",
+       "creating": "Luajitah sivuu \"$1\"",
+       "editingsection": "Korjuandu $1 (alalugu)",
+       "yourtext": "Sinun tekstu",
+       "yourdiff": "Erot",
+       "templatesused": "{{PLURAL:$1|Šablon|Šablonat}} käytetty täl sivul:",
+       "template-protected": "(suojattu)",
+       "template-semiprotected": "(puolekse suojattu)",
+       "hiddencategories": "Tämä sivu kuuluu {{PLURAL:$1|1 peitettyh kategourieh|$1 peitettyh kategourieh}}:",
+       "permissionserrorstext-withaction": "Sinul ei ole lubua toimindoh $2 niškoi, {{PLURAL:$1|tämän syyn periä|nämmien syylöin periä}}:",
+       "moveddeleted-notice": "Tämä sivu on otettu iäre. Sivun iäreotandu- da siirdohistourii ollah annettu al viittavuksennu.",
+       "postedit-confirmation-saved": "Sinun kohendus tallendettih.",
+       "content-model-wikitext": "wikitekstu",
+       "content-model-text": "perustekstu",
+       "content-model-javascript": "JavaScript",
+       "content-json-empty-object": "Tyhjy objektu",
+       "viewpagelogs": "Ozuta tämän sivun logat",
+       "currentrev": "Jälgimäzin versii",
+       "currentrev-asof": "Sivun $1 jälgimäzin versii",
+       "revisionasof": "Versii $1",
+       "revision-info": "Versii $1 {{GENDER:$6|$2}}$7",
+       "previousrevision": "← Edelline",
+       "nextrevision": "Uvvembi versii →",
+       "currentrevisionlink": "Jälgimäine versii",
+       "cur": "nygöine",
+       "next": "tulii",
+       "last": "iel",
+       "page_first": "enzimäine",
+       "page_last": "jälgimäine",
+       "histfirst": "vahnin",
+       "histlast": "uuzin",
+       "historyempty": "(tyhjy)",
+       "rev-delundel": "vaihta nägyvys",
+       "rev-showdeleted": "ozuttua",
+       "revdelete-show-file-submit": "Muga",
+       "revdelete-radio-same": "(älä vaihta)",
+       "revdelete-radio-set": "Peitetty",
+       "revdelete-radio-unset": "Nägövil",
+       "pagehist": "Sivuhistourii",
+       "history-title": "Sivun \"$1\" versiihistourii",
+       "difference-title": "Sivun \"$1\" versielöin eroloi",
+       "lineno": "Rivi $1:",
+       "editundo": "Hylgiä",
+       "diff-multi-sameuser": "({{PLURAL:$1|Yksi keskitazon versii |$1 keskitazon versiedy}} samal käyttäjälpäi ei ozutettu)",
+       "searchresults": "Eččimizen tulokset",
+       "searchresults-title": "Eči \"$1\"",
+       "prevn": "ielline {{PLURAL:$1|$1}}",
+       "nextn": "tulii {{PLURAL:$1|$1}}",
+       "prev-page": "ielline sivu",
+       "next-page": "tulii sivu",
+       "nextn-title": "Tulii $1 {{PLURAL:$1|tulos|tulokset}}",
+       "shown-title": "Ozuttua $1 {{PLURAL:$1|tulos|tulostu}} sivul",
+       "viewprevnext": "Ozuta ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "<strong>Luaji sivu \"[[:$1]]\" täh wikih!</strong> {{PLURAL:$2|0=|Kačo sežo sinun eččol löytyt sivut.|Kačo sežo löytyt eččon tulokset.}}",
+       "searchprofile-articles": "Yhtevyssivu",
+       "searchprofile-images": "Multimedii",
+       "searchprofile-everything": "Kaikkiel",
+       "searchprofile-advanced": "Eči tarkembah",
+       "searchprofile-articles-tooltip": "Eči kohtas $1",
+       "searchprofile-images-tooltip": "Eči failat",
+       "searchprofile-everything-tooltip": "Eči kaikil sivuloil (dai paginois)",
+       "searchprofile-advanced-tooltip": "Eči nämmien nimitiloin keskes",
+       "search-result-size": "$1 ({{PLURAL:$2|1 sana|$2 sanua}})",
+       "search-redirect": "(siirretty $1)",
+       "search-section": "(alalugu $1)",
+       "search-suggest": "Tarkoititgo: $1",
+       "search-interwiki-more": "(enämbi)",
+       "search-relatedarticle": "Eči yhtenjyttymii sivuloi",
+       "searchrelated": "yhtenjyttymät",
+       "searchall": "kai",
+       "search-showingresults": "{{PLURAL:$4|Tulos <strong>$1</strong> / <strong>$3</strong>|Tulokset <strong>$1 - $2</strong> / <strong>$3</strong>}}",
+       "search-nonefound": "Kyzelyh ei löydynyh tuloksii.",
+       "powersearch-legend": "Levitetty eččo",
+       "powersearch-togglelabel": "Valliče:",
+       "powersearch-toggleall": "Kai",
+       "powersearch-togglenone": "Nimidä",
+       "mypreferences": "Azetukset",
+       "prefs-edits": "Edituičendoi kaikkiedah:",
+       "prefs-skin": "Kettu",
+       "prefs-user-pages": "Käyttäisivut",
+       "prefs-watchlist": "Valvondulistu",
+       "prefs-resetpass": "Vaihta peittosana",
+       "prefs-changeemail": "Vaihta sähköpoštuadressu",
+       "prefs-setemail": "Kirjuta sähköpoštuadressu",
+       "saveprefs": "Tallenda",
+       "rows": "Riädyy:",
+       "searchresultshead": "Eččie",
+       "timezoneregion-africa": "Afrikku",
+       "timezoneregion-america": "Amerikku",
+       "timezoneregion-antarctica": "Antarktikku",
+       "timezoneregion-arctic": "Artikku",
+       "timezoneregion-asia": "Aazii",
+       "timezoneregion-atlantic": "Atlantine valdumeri",
+       "timezoneregion-australia": "Australii",
+       "timezoneregion-europe": "Jevrouppu",
+       "timezoneregion-indian": "Indien meri",
+       "timezoneregion-pacific": "Tyyni valdumeri",
+       "prefs-searchoptions": "Eččie",
+       "prefs-namespaces": "Nimilöin tilat",
+       "youremail": "Sähköpoštu:",
+       "username": "{{GENDER:$1|Käyttäinimi}}:",
+       "yourlanguage": "Kieli:",
+       "yournick": "Uuzi allekirjutus:",
+       "yourgender": "Sugupuoli:",
+       "gender-unknown": "Jätän valličemattah",
+       "gender-male": "Mies",
+       "gender-female": "Naine",
+       "prefs-help-gender": "Tämän azetuksen valliččemine on omatahtostu.\nProgrammu käyttäy annettuu tieduo, ku viitata sinuh oigiel kieliopillizel terminäl. \nTämä tiedo on julgine.",
+       "email": "Sähköpoštu",
+       "prefs-help-realname": "Oigien nimen andamine on omatahtostu.\nOllou annettu, sidä voijah käyttiä luadijan sanelendah.",
+       "prefs-help-email": "Sähköpoštuadresan andamine on omatahtostu, no se pidäy ku kyzyö uuzi peittosana, ku unohtannet sinun peittosanan.",
+       "prefs-help-email-required": "Sähköpoštuadressu vältämättäh pidäy.",
+       "prefs-info": "Perustiijot",
+       "prefs-signature": "Allekirjutus",
+       "prefs-advancedrc": "Ližäazetukset",
+       "prefs-advancedrendering": "Ližäazetukset",
+       "prefs-advancedsearchoptions": "Ližäazetukset",
+       "prefs-advancedwatchlist": "Ližäazetukset",
+       "prefs-tokenwatchlist": "Avain",
+       "userrights-user-editname": "Kirjuta käyttäitunnus:",
+       "userrights-groupsmember": "Yhtynnyönny joukkoloih:",
+       "group-user": "Käyttäjät",
+       "group-all": "(kai)",
+       "right-read": "Lugie sivuloi",
+       "right-edit": "Edituija sivuloi",
+       "right-createpage": "Luadie sivuloi (kudamat ei olla paginsivuloi)",
+       "right-createtalk": "Luadie paginsivuloi",
+       "right-createaccount": "Luadie uuzii käyttäitunnuksii",
+       "right-minoredit": "Merkitä edituičendoi pienikse",
+       "right-move": "Siirrä sivut",
+       "right-move-subpages": "Siirrä sivut alisivuloinke",
+       "right-move-rootuserpages": "Siirdiä käyttäisivuloi",
+       "right-move-categorypages": "Siirdiä kategouriisivuloi",
+       "right-movefile": "Siirdiä failoi",
+       "right-writeapi": "Käytä API:i",
+       "newuserlogpage": "Uuzien käyttäjien luvettelo",
+       "action-read": "luve tämä sivu",
+       "action-move": "siirrä tämä sivu",
+       "action-move-subpages": "siirrä tämä sivu, da sen alisivut",
+       "action-movefile": "siirrä tämä failu",
+       "enhancedrc-history": "histourii",
+       "recentchanges": "Uvvet korjavukset",
+       "recentchanges-legend": "Tuorehien muutoksien azetukset",
+       "recentchanges-summary": "Jällitä kaikkii jälgimäzet muutokset wikih täl sivul.",
+       "recentchanges-label-newpage": "Tämä korjavus on johtanuh uvven sivun luadimizeh",
+       "recentchanges-label-minor": "Tämä on pieni korjavus",
+       "recentchanges-label-bot": "Tämän muutoksen on luadinuh bot",
+       "recentchanges-label-unpatrolled": "Tädä korjuandua vie ei ole tarkistettu",
+       "recentchanges-label-plusminus": "Sivu on kazvanuh [] baital",
+       "recentchanges-legend-heading": "'''Legendu:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kačo sežo [[Special:NewPages|uuzien sivuloin listu]])",
+       "rclistfrom": "Ozuta jälgimäzet muutokset algajen $2, $3",
+       "rcshowhideminor": "$1 pienet muutokset",
+       "rcshowhideminor-show": "Ozuta",
+       "rcshowhideminor-hide": "Peitä",
+       "rcshowhidebots": "$1 botat",
+       "rcshowhidebots-show": "Ozuta",
+       "rcshowhidebots-hide": "Peitä",
+       "rcshowhideliu": "$1 registruittuu käyttäjiä",
+       "rcshowhideliu-hide": "Peitä",
+       "rcshowhideanons": "$1 anoniimua käyttäjiä",
+       "rcshowhideanons-show": "Ozuta",
+       "rcshowhideanons-hide": "Peitä",
+       "rcshowhidepatr-show": "Ozuttua",
+       "rcshowhidepatr-hide": "Peittiä",
+       "rcshowhidemine": "$1 minun kohendukset",
+       "rcshowhidemine-show": "Ozuta",
+       "rcshowhidemine-hide": "Peitä",
+       "rclinks": "Ozuta jälgimäzet $1 muutostu jälgimäzen $2 päivän aijannu<br />$3",
+       "diff": "erot",
+       "hist": "Histourii",
+       "hide": "Peitä",
+       "show": "Ozuta",
+       "minoreditletter": "p",
+       "newpageletter": "U",
+       "boteditletter": "b",
+       "rc-change-size-new": "Kogo jälles muutoksii: $1 {{PLURAL:$1|baitu|baitua}}",
+       "recentchangeslinked": "Koskijat muutokset",
+       "recentchangeslinked-toolbox": "Toine toizeh liittyjät korjavukset",
+       "recentchangeslinked-title": "Muutokset koskijen sivuu \"$1\"",
+       "recentchangeslinked-summary": "Tämä on nengomien sivuloin korjavuksien luvettelo, kudamih viittuau tämä sivu (libo sih kategourieh kuulujat).Sivut, kudamat kuulutah [[Special:Watchlist|teijän valvonduluvettelo]], ollah  <strong>bold</strong>.",
+       "recentchangeslinked-page": "Sivun nimi:",
+       "recentchangeslinked-to": "Ozuta linkitetyn sivun muutokset annetun sivun sijah",
+       "upload": "Ližiä tiijosto",
+       "filedesc": "Yhtehvedo",
+       "fileuploadsummary": "Yhtehvedo:",
+       "filereuploadsummary": "Muutokset failah:",
+       "filesource": "Lähteh:",
+       "filename-tooshort": "Failunimi on liijan lyhyt.",
+       "watchthisupload": "Valvo tädä failua",
+       "upload-dialog-button-save": "Tallenda",
+       "upload-dialog-label-infoform-title": "Tiijot",
+       "upload-dialog-label-infoform-name": "Nimi",
+       "upload-dialog-label-infoform-description": "Kuvavus",
+       "upload-dialog-label-usage-title": "Käyttö",
+       "upload-dialog-label-usage-filename": "Failunimi",
+       "license-header": "Licenzii",
+       "imgfile": "tiijosto",
+       "listfiles_name": "Nimi",
+       "listfiles_user": "Käyttäi",
+       "listfiles_size": "Kogo",
+       "listfiles_description": "Kuvavus",
+       "listfiles_count": "Versii",
+       "listfiles-latestversion": "Nygöine versii",
+       "listfiles-latestversion-yes": "Muga",
+       "listfiles-latestversion-no": "Ei",
+       "file-anchor-link": "Failu",
+       "filehist": "Kačo histourii",
+       "filehist-help": "Klikkua päivymiäriä/aigua kaččuo, mittuine failu oli silloi",
+       "filehist-current": "Nygöine",
+       "filehist-datetime": "Päivymiäry/aigu",
+       "filehist-thumb": "Kuvahaine",
+       "filehist-thumbtext": "Pieni kogo versieh $1",
+       "filehist-user": "Käyttäi",
+       "filehist-dimensions": "Kogo",
+       "filehist-comment": "Huomahtus",
+       "imagelinks": "Failan käyttö",
+       "linkstoimage": "{{PLURAL:$1|Tämä sivu linkittähes|$1 Nämmä sivut linkittiäkseh}} täh failah:",
+       "nolinkstoimage": "Täh tiijostoh viittuajua sivuu ei ole.",
+       "sharedupload-desc-here": "Tädä failua $1 ymbäristös voibi sežo käyttiä toizis projektois.\nSen kuvavus [$2 sivun kuvavuksen] on alemba.",
+       "upload-disallowed-here": "Et voi kirjuttua tämän failan piäle.",
+       "randompage": "Sattumanvaraine sivu",
+       "statistics": "Statistiekat",
+       "statistics-header-pages": "Sivustatistiekat",
+       "statistics-header-users": "Käyttäistatistiekat",
+       "statistics-header-hooks": "Toizet statistiekat",
+       "statistics-articles": "Syväindösivut",
+       "statistics-pages": "Sivut",
+       "nbytes": "$1 {{PLURAL:$1|baitu|baitua}}",
+       "nmembers": "$1 {{PLURAL:$1|käyttäi|käyttäjiä}}",
+       "newpages": "Uvvet sivut",
+       "newpages-username": "Käyttäinimi:",
+       "ancientpages": "Vahnimat sivut",
+       "move": "Siirrä",
+       "movethispage": "Siirrä tämä sivu",
+       "pager-older-n": "{{PLURAL:$1|vahnembi 1|vahnembi $1}}",
+       "booksources": "Kniigulähtehet",
+       "booksources-search-legend": "Eči kniigulähtehii",
+       "booksources-search": "Eči",
+       "log": "Logat",
+       "allpages": "Kai sivut",
+       "nextpage": "Tulii sivu ($1)",
+       "prevpage": "Ielline sivu ($1)",
+       "allarticles": "Kai sivut",
+       "allpagessubmit": "Mene",
+       "categories": "Kategouriet",
+       "emailusername": "Käyttäinimi:",
+       "emailfrom": "Kespäi:",
+       "emailto": "Kelle:",
+       "emailsubject": "Teema:",
+       "emailmessage": "Viesti:",
+       "emailsend": "Työnnä",
+       "emailccme": "Työnnä minule koupii viestis.",
+       "watchlist": "Valvonduluvettelo",
+       "mywatchlist": "Valvonduluvettelo",
+       "addwatch": "Ližiä valvondulistah",
+       "watch": "Valvo",
+       "watchthispage": "Valvo tädä sivuu",
+       "unwatch": "Lope valvondu",
+       "unwatchthispage": "Lope valvondu",
+       "watching": "Valvotah...",
+       "unwatching": "Ei valvota...",
+       "dellogpage": "Iäreotanduhistourii",
+       "rollbacklink": "Tuo endine versii",
+       "rollbacklinkcount": "mene järilleh $1 {{PLURAL:$1|edituičendu|edituičendua}}",
+       "protectlogpage": "Suojavushistourii",
+       "undelete-show-file-submit": "Muga",
+       "namespace": "Nimitilat:",
+       "invert": "Piänvastaine valličendu",
+       "tooltip-invert": "Tahtonet peittiä tämän sivun muutokset vallitul nimitilal, valliče tämä kohtu.",
+       "namespace_association": "Liittyjät nimitilat",
+       "tooltip-namespace_association": "Tahtonet kerale sežo vallittuh nimitilah liittyjät pagin- libo tiemunimitilat, valliče tämä kohtu.",
+       "blanknamespace": "(Piä)",
+       "contributions": "{{GENDER:$1|Käyttäi}} kirjutukset",
+       "mycontris": "Kirjutukset",
+       "month": "Täs kuus (libo aijembi)",
+       "year": "Tänävuon (libo aijembi):",
+       "whatlinkshere": "Linkit tänne",
+       "whatlinkshere-title": "Sivut, kudamat kosketah sivuu \"$1\"",
+       "whatlinkshere-page": "Sivu:",
+       "linkshere": "Nämmä sivut linkittiäkseh sivuh <strong>[[:$1]]</strong>:",
+       "isredirect": "uvvellehohjavussivu",
+       "istemplate": "sižällyttämine",
+       "isimage": "failan linku",
+       "whatlinkshere-prev": "{{PLURAL:$1|ielline|ielline $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|tulii|tulii $1}}",
+       "whatlinkshere-links": "← linkat",
+       "whatlinkshere-hideredirs": "$1 uvvellehohjavukset",
+       "whatlinkshere-hidetrans": "$1 sižällyttämizet",
+       "whatlinkshere-hidelinks": "$1 linkat",
+       "whatlinkshere-filters": "Filtrat",
+       "blocklink": "Lukiče",
+       "contribslink": "korjavukset",
+       "movelogpage": "Siirrä loga",
+       "export": "Vie sivut",
+       "allmessages-language": "Kieli:",
+       "allmessages-filter-submit": "Mene",
+       "allmessages-filter-translate": "Kiännä",
+       "thumbnail-more": "Suurendua",
+       "filemissing": "Failua ei ole",
+       "tooltip-pt-userpage": "Sinun käyttäisivu",
+       "tooltip-pt-mytalk": "Sinun paginsivu",
+       "tooltip-pt-preferences": "Sinun azetukset",
+       "tooltip-pt-watchlist": "Listu sivulois kudamien muutoksii valvot",
+       "tooltip-pt-mycontris": "Listu sinun kirjutuksis",
+       "tooltip-pt-login": "Täs voibi registriiruijakseh, ga se ei ole vältämätöi",
+       "tooltip-pt-logout": "Kirjuttai ullos",
+       "tooltip-pt-createaccount": "Voit registriiruijakseh da kirjuttuakseh järjestelmäh, ga se ei ole vältämätöi",
+       "tooltip-ca-talk": "Pagize piäsivun sizäldös",
+       "tooltip-ca-edit": "Korjua tädä sivuu",
+       "tooltip-ca-addsection": "Luaji uuzi alalugu",
+       "tooltip-ca-viewsource": "Tämä sivu on suojattu. Voit kaččuo sen lähtehkoudan",
+       "tooltip-ca-history": "Tämän sivun jälgimäzet muutokset",
+       "tooltip-ca-move": "Siirrä tämä sivu",
+       "tooltip-ca-watch": "Ližiä tämä sivu omah valvonduluvetteloh",
+       "tooltip-search": "Eči {{SITENAME}}",
+       "tooltip-search-go": "Mennä sivule, kudamal on sama nimi",
+       "tooltip-search-fulltext": "Eči sivuloi, kudamis on tädä tekstua",
+       "tooltip-p-logo": "Mene piäsivule",
+       "tooltip-n-mainpage": "Mene piäsivule",
+       "tooltip-n-mainpage-description": "Mene piäsivule",
+       "tooltip-n-portal": "Täs projektas, midä voit ruadua, kus midä on",
+       "tooltip-n-currentevents": "Ližätieduo aijankohtazis tapahtumis",
+       "tooltip-n-recentchanges": "Luvettelo vaste luajittulois wikimuutoksis",
+       "tooltip-n-randompage": "Kačo sattumastu sivuu",
+       "tooltip-n-help": "Täs voit kyzyö abuu",
+       "tooltip-t-whatlinkshere": "Kaikkien sivuloin luvettelo, kudamis on linki täh sivuh",
+       "tooltip-t-recentchangeslinked": "Jälgimäzet muutokset sivuloil, kudamile on linki täl sivul",
+       "tooltip-feed-atom": "Atom-syöttö täh sivuh",
+       "tooltip-t-contributions": "Listu tämän käyttäjän kirjutuksis",
+       "tooltip-t-upload": "Ližiä tiijostot",
+       "tooltip-t-specialpages": "Kaikkien erikozien sivuloin luvettelo",
+       "tooltip-t-print": "Tämän sivun tulostettavu versii",
+       "tooltip-t-permalink": "Pyzyi linki tämän sivun versieh",
+       "tooltip-ca-nstab-main": "Kačo piäsivun sizäldö",
+       "tooltip-ca-nstab-user": "Ozuta käyttäisivu",
+       "tooltip-ca-nstab-special": "Tämä on erikoine sivu, sidä ei voi korjata",
+       "tooltip-ca-nstab-project": "Ozuta projektusivu",
+       "tooltip-ca-nstab-image": "Kačo failan sivu",
+       "tooltip-ca-nstab-template": "Ozuta šablon",
+       "tooltip-ca-nstab-category": "Kategourien sivu",
+       "tooltip-save": "Tallenda muutokset",
+       "tooltip-preview": "Ezikačo muutokset. Ole hyvä, luaji nenga ainos enne tallendamistu!",
+       "tooltip-diff": "Ozuta sinun luajitut muutokset tekstah",
+       "tooltip-rollback": "Yhtel painalluksel poistua jälgimäine korjavus",
+       "tooltip-undo": "\"Kumua\" tuou järilleh aijemban edituičenduversien da avuau edituičenduankietan ezikaččelendutilas. Sen vuoh voi ližätä kumuandumotiivan yhtehvevos.",
+       "tooltip-summary": "Kirjuta lyhyt kuvavus",
+       "simpleantispam-label": "Anti-spam-tarkistus. \n<strong>älä</strong> täytä!",
+       "pageinfo-toolboxlink": "Sivun tiijot",
+       "pageinfo-protect-cascading-yes": "Muga",
+       "previousdiff": "Vahnembi muutos",
+       "nextdiff": "Uvvembi muutos →",
+       "file-info-size": "$1 × $2 pikselii, failan kogo: $3, MIME-laji: $4",
+       "file-nohires": "Ei korgiembua rezoluciedu suadavannu.",
+       "svg-long-desc": "SVG-failu, nimellizesti $1 × $2 pikselua, failan kogo: $3",
+       "show-big-image": "Alguperäine failu",
+       "show-big-image-preview": "Tämän failan kogo: $1.",
+       "show-big-image-other": "Toine {{PLURAL:$2|resolution|resolutions}}: $1.",
+       "show-big-image-size": "$1 × $2 pikselii",
+       "metadata": "Metatiijostot",
+       "metadata-help": "Failah kuulutah ližätiijot, kudamii tavan mugah ližätäh digikameroil libo skanneroil. Gu failua oldaneh korjattu jälles sen enzimästy julguamistu, erähät parametrat voijah erota nygözes kuvas.",
+       "metadata-fields": "Kuvan metatiedoloin kentät, kudamat ollah täs luvettelos, ruvetah nägymäh kuvan sivul, konzu metatiedoloin taulukko ei rodei nägyvis. Toizet kentät roijah sultetut automuattizesti.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "Orientacii",
+       "exif-xresolution": "Horizontualine rezolucii",
+       "exif-yresolution": "Vertikualine rezolucii",
+       "exif-datetime": "Tiijoston muutospäivy da -aigu",
+       "exif-make": "Kameran valmistai",
+       "exif-model": "Kamerumodellu",
+       "exif-software": "Käytetty programmu",
+       "exif-exifversion": "Exif-versii",
+       "exif-colorspace": "Väritila",
+       "exif-datetimeoriginal": "Suaduloin tiedoloin päivy da aigu",
+       "exif-datetimedigitized": "Digituimizen päivy da aigu",
+       "exif-orientation-1": "Tavalline",
+       "exif-subjectdistancerange-0": "Tundematoi",
+       "namespacesall": "kai",
+       "monthsall": "kai",
+       "quotation-marks": "\"$1\"",
+       "imgmultipageprev": "← ielline sivu",
+       "imgmultipagenext": "tulii sivu →",
+       "imgmultigo": "Mene!",
+       "imgmultigoto": "Mene sivule $1",
+       "table_pager_first": "Enzimäine sivu",
+       "table_pager_last": "Jälgimäine sivu",
+       "table_pager_limit_submit": "Mene",
+       "table_pager_empty": "Ei tuloksii",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|pagize]])",
+       "specialpages": "Erikozet sivut",
+       "tag-filter": "[[Special:Tags|Tag]] filtru:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merki|Merkii}}]]: $2)",
+       "tags-edit-existing-tags-none": "\"Nimidä\"",
+       "compare-page1": "Sivu 1",
+       "compare-page2": "Sivu 2",
+       "htmlform-no": "Ei",
+       "htmlform-yes": "Muga",
+       "logentry-delete-delete": "$1 {{GENDER:$2|iäreotettu}} sivu $3",
+       "logentry-move-move": "$1 {{GENDER:$2|siirretty}} sivu $3 kohtah $4",
+       "logentry-newusers-create": "Käyttäi $1 oli perustettu $2",
+       "logentry-upload-upload": "$1 {{GENDER:$2|päivitetty}} $3",
+       "rightsnone": "(nimidä)",
+       "searchsuggest-search": "Eči",
+       "mw-widgets-titleinput-description-new-page": "sivuu ei vie ole"
+}
index cc106dc..017b910 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} ର ଖାତା ସବିଶେଷ",
        "passwordreset-emailtext-ip": "କେହିଜଣେ (ବୋଧେ ଆପଣ, $1 IP addressରୁ) {{SITENAME}} ($4)ରେ ପାସୱାର୍ଡ଼ ରି-ସେଟ କରିବା ପାଇଁ ଅନୁରୋଧ କରିଛନ୍ତି । ଉକ୍ତ ଇମେଲ ଠିକଣା ସହିତ ଏହି {{PLURAL:$3|ସଭ୍ୟ ଖାତାଟି|ସଭ୍ୟ ଖାତାମାନ}} ସମ୍ବନ୍ଧିତ:\n\n$2\n\n{{PLURAL:$3|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ଟି|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ମାନ}} {{PLURAL:$5|ଦିନକ|$5 ଦିନ}}ରେ ଅଚଳ ହୋଇଯିବ ।\nଆପଣ ଏବେ ଲଗ ଇନ କରି ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ବାଛନ୍ତୁ । ଯଦି ଆଉ କେହି ଏହି ଅନୁରୋଧ କରିଥାନ୍ତି କିମ୍ବା ନିଜର ପୁରୁଣା ପାସୱାର୍ଡ଼ଟି ମନେପଡ଼ିଲା, ଏବଂ ଆଉ ପାସୱାର୍ଡ଼ଟି ବଦଳାଇବାକୁ ଚାହୁଁନାହାଁନ୍ତି ତାହେଲେ ଏହି ମେଲଟିକୁ ଅଣଦେଖା କରି ନିଜର ପୁରୁଣା ପାସୱାର୍ଡ଼ ବ୍ୟବହାର କରନ୍ତୁ ।",
        "passwordreset-emailtext-user": "$1 ନାମକ ସଭ୍ୟଜଣକ {{SITENAME}}ରେ {{SITENAME}} ($4) ପାଇଁ ଆପଣଙ୍କ ପାସ ୱାର୍ଡ଼ ରିସେଟ କରିବାର ଅନୁରୋଧ କରିଛନ୍ତି । ତଳ {{PLURAL:$3|ଖାତାଟି|ଖାତାମାନ}} ଉକ୍ତ ଇମେଲ ସହିତ ସମ୍ବନ୍ଧିତ:\n\n$2\n\n{{PLURAL:$3|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ଟି|ଏହି ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ମାନ}} {{PLURAL:$5|ଦିନକ|$5 ଦିନ}}ରେ ଅଚଳ ହୋଇଯିବ ।\nଆପଣ ଲଗ ଇନ କରି ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ବାଛନ୍ତୁ । ଯଦି ଆଉ କେହି ଏହି ଅନୁରୋଧଟି କରିଥାନ୍ତି କିମ୍ବା ଆପଣଙ୍କର ନିଜ ପୁରୁଣା ପାସୱାର୍ଡ଼ଟି ମନେପଡ଼ିଗଲା ତେବେ ଆପଣଙ୍କୁ ଆଉ ପାସୱାର୍ଡ଼ ବଦଳାଇବାର ଆବଶ୍ୟକତା ନାହିଁ । ଆପଣ ଏହି ମେସେଜଟିକୁ ଅଣଦେଖା କରି ନିଜର ପୁରୁଣା ପାସୱାର୍ଡ଼ ବ୍ୟବହାର କରୁଥାନ୍ତୁ ।",
-       "passwordreset-emailelement": "ଇଉଜର ନାମ: $1\nଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼: $2",
+       "passwordreset-emailelement": "ଇଉଜର ନାମ: \n$1\n\nଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼: \n$2",
        "passwordreset-emailsent": "ଏକ ପାସୱାର୍ଡ଼ ପୁନଃସ୍ଥାପନ ଇମେଲ ପଠାଇଦିଆଯାଇଅଛି ।",
        "passwordreset-emailsent-capture": "ତଳେ ଦେଖାଯାଉଥିବା ଭଳି, ପାସୱାର୍ଡ଼ ପୁନଃସ୍ଥାପନ ଇମେଲଟିଏ ପଠାଇଦିଆଯାଇଛି ।",
        "passwordreset-emailerror-capture": "ପାସୱାର୍ଡ଼ ବଦଳାଇବା ସୂଚନା ସହ ଇମେଲଟିଏ ତିଆରି ହୋଇଛି, ଯାହା ତଳେ ଦେଖିପାରିବେ । କିନ୍ତୁ ଏହାକୁ {{GENDER:$2|ସଭ୍ୟ}}ଙ୍କୁ ପଠାଇବାରେ ବିଫଳ ହେଲୁ, କାରଣ: $1",
        "emailuser": "ଏହି ସଭ୍ୟଙ୍କୁ ଇମେଲ କରିବେ",
        "emailuser-title-target": "{{GENDER:$1|user}}ଙ୍କୁ ଇ-ମେଲ କରନ୍ତୁ",
        "emailuser-title-notarget": "ବ୍ୟବହାରକାରୀଙ୍କୁ ଇ-ମେଲ କରନ୍ତୁ",
-       "emailpage": "ବ୍ୟବହାରକାରୀଙ୍କୁ ଇ-ମେଲ କରନ୍ତୁ",
        "emailpagetext": "ଆପଣ ତଳେ ଥିବା ଫର୍ମ ବ୍ୟବହାର କରି ଏହି {{GENDER:$1|ସଭ୍ୟ}}ଙ୍କୁ ଇମେଲ କରିପାରିବେ । [[Special:Preferences|ଆପଣଙ୍କ ପସନ୍ଦ]]ରେ ଥିବା ଇମେଲ ଠିକଣା \"ପ୍ରେରକ\" ଭାବରେ ଦେଖାଯିବ, ତେଣୁ ଇମେଲ ପାଇଥିବା ସଭ୍ୟ ଆପଣଙ୍କୁ ସିଧା ସଳଖ ଉତ୍ତର ଦେଇପାରିବେ ।",
        "defemailsubject": "{{SITENAME}} \"$1\" ସଭ୍ୟଙ୍କ ଠାରୁ ଇ-ମେଲ କରିବେ",
        "usermaildisabled": "ବ୍ୟବହାରକାରୀଙ୍କ ଈ-ମେଲ ଅଚଳ କରାଗଲା",
index 37b8e59..b13db96 100644 (file)
        "resetpass-expired": "Дæ паролы æмгъуыд фæци. Ног пароль сæвæр, дæ хорзæхæй.",
        "passwordreset": "Пароль раппарæн",
        "passwordreset-text-one": "Ацы формæ байдзаг кæн цæмæй дæм барвитæм рæстæгмæ пароль дæ эл. посты адрисмæ.",
-       "passwordreset-legend": "Пароль раппарын",
        "passwordreset-disabled": "Парол фæлварын ацы викийы хицæн у.",
        "passwordreset-emaildisabled": "Электрон пост ацы викийы хицæн у.",
        "passwordreset-username": "Фæсномыг:",
        "passwordreset-emailtitle": "{{grammar:genitive|{{SITENAME}}}} акканты тыххæй",
        "passwordreset-emailtext-ip": "Чидæр (уæццæгæн ды, $1 IP адрисæй) æрдомдта дæ {{grammar:genitive|{{SITENAME}}}} ($4) пароль ногæй сæвæрын. Ацы архайæджы {{PLURAL:$3|аккаунт баст у|аккаунттæ баст сты}} ацы электрон посты адрисимæ:\n\n$2\n\n{{PLURAL:$3|Ацы рæстæгмæ пароль|Ацы рæстæгмæ паролтæ}} кусдзысты {{PLURAL:$5|иу бон|$5 боны}}.\nНыр ды хъуамæ бахизай системæмæ æмæ равзарай ног пароль. Кæд ай æндæр чидæр æрдомдта, кæнæ кæд дæ пароль æрхъуыды кодтай æмæ дæ нал фæды фæивай йæ, уæд дæ бон у мацæмæ дарай ацы фыстæг æмæ дарддæр архайай дæ зæронд паролæй.",
        "passwordreset-emailtext-user": "{{grammar:genitive|{{SITENAME}}}} архайæг $1 æрдомдта дæ {{grammar:genitive|{{SITENAME}}}} ($4) аккаунты пароль ногæй сæвæрын. Ацы архайæджы {{PLURAL:$3|аккаунт баст у|аккаунттæ баст сты}} ацы электрон посты адрисимæ:\n\n$2\n\n{{PLURAL:$3|Ацы рæстæгмæ пароль|Ацы рæстæгмæ паролтæ}} кусдзысты {{PLURAL:$5|иу бон|$5 боны}}.\nНыр ды хъуамæ бахизай системæмæ æмæ равзарай ног пароль. Кæд ай æндæр чидæр æрдомдта, кæнæ кæд дæ пароль æрхъуыды кодтай æмæ дæ нал фæды фæивай йæ, уæд дæ бон у мацæмæ дарай ацы фыстæг æмæ дарддæр архайай дæ зæронд паролæй.",
-       "passwordreset-emailelement": "Фæсномыг: $1\nРæстæгмæ пароль: $2",
+       "passwordreset-emailelement": "Фæсномыг: \n$1\n\nРæстæгмæ пароль: \n$2",
        "passwordreset-emailsent": "Ног пароль сæвæрыны фыстæг æрвыст æрцыд.",
        "passwordreset-emailsent-capture": "Ног пароль сæвæрыны фыстæг æрвыст æрцыд æмæ бындæр æвдыст у.",
        "passwordreset-emailerror-capture": "Ног пароль сæвæрыны фыстæг арæзт æрцыд æмæ бындæр æвдыст у. Фæлæ йæ {{grammar:allative|{{GENDER:$2|user}}}} арвитын нæ бантыстис: $1",
        "changeemail-throttled": "Æгæр бирæ фæлварыс бахизынмæ.\nДæ хорзæхæй, $1 фæлæуу ног фæлвæрды онг.",
        "resettokens": "Токентæ æппарын",
        "resettokens-no-tokens": "Æппаринаг токентæ нæй.",
-       "resettokens-legend": "Токентæ æппарын",
        "resettokens-tokens": "Токентæ:",
        "resettokens-token-label": "$1 (ныры мидис: $2)",
        "resettokens-done": "Токентæ æппæрст æрцыдысты.",
        "nmembers": "$1 {{PLURAL:$1|уæнг|уæнгы}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|уæнг|уæнджы}}",
        "nrevisions": "$1 {{PLURAL:$1|фæлтæр|фæлтæры}}",
-       "nviews": "$1 {{PLURAL:$1|æркаст|æркасты}}",
        "nimagelinks": "Архайд цæуы $1 {{PLURAL:$1|фарсы}}",
        "ntransclusions": "архайд цæуы $1 {{PLURAL:$1|фарсы}}",
        "specialpage-empty": "Нæй фæстиуæг.",
        "mailnologintext": "Фыстæгтæ æрвитынмæ хъуамæ [[Special:UserLogin|системæйæн дæхи бавдисай]] æмæ дæ бæлвырд электронон посты адрис [[Special:Preferences|ныффыссай]].",
        "emailuser": "Ацы архайæгæн электронон фыстæг рарвитт",
        "emailuser-title-notarget": "Архайæгæн фыстæг арвит",
-       "emailpage": "Электронон фыстæг йæм барвит",
        "noemailtitle": "Эл. посты адрис нæй.",
        "emailusername": "Фæсномыг:",
        "emailusernamesubmit": "Афтæ уæд",
index 8225de5..9a2588d 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} ਤੇ ਖਾਤੇ ਦੀ ਜਾਣਕਾਰੀ",
        "passwordreset-emailtext-ip": "ਕਿਸੇ ਨੇ (ਸ਼ਾਇਦ ਤੁਸੀਂ, IP ਪਤਾ $1 ਤੋਂ) {{SITENAME}}\n($4) ਲਈ ਖਾਤਾ ਤਫ਼ਸੀਲ ਯਾਦ-ਦਹਾਨੀ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ। ਇਹ {{PLURAL:\n$3|ਖਾਤਾ ਇਸ ਈ-ਮੇਲ ਪਤੇ ਨਾਲ਼ ਜੁੜਿਆ ਹੈ|ਖਾਤੇ ਇਸ ਈ-ਮੇਲ ਪਤੇ ਨਾਲ਼ ਜੁੜੇ ਹਨ}}:\n$2\n\nਇਹ ਆਰਜ਼ੀ ਪਾਸਵਰਡ\n{{PLURAL:$5|ਇੱਕ ਦਿਨ|$5 ਦਿਨਾਂ}} ਵਿਚ ਖ਼ਤਮ ਹੋ {{PLURAL:$3|ਜਾਵੇਗਾ|ਜਾਣਗੇ}}।\nਤੁਹਾਨੂੰ ਹੁਣੇ ਲਾਗਇਨ ਕਰਕੇ ਨਵਾਂ ਪਾਸਵਰਡ ਬਣਾਉਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੇ ਕਿਸੇ ਹੋਰ ਨੇ ਇਹ ਬੇਨਤੀ ਕੀਤੀ ਸੀ ਜਾਂ ਜੇ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਯਾਦ ਹੈ ਅਤੇ ਤੁਸੀਂ ਇਸਨੂੰ ਬਦਲਣਾ ਨਹੀਂ ਚਾਹੁੰਦੇ ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਕੇ ਆਪਣਾ ਪੁਰਾਣਾ ਪਾਸਵਰਡ ਵਰਤਣਾ ਜਾਰੀ ਰੱਖ ਸਕਦੇ ਹੋ।",
        "passwordreset-emailtext-user": "{{SITENAME}} 'ਤੇ User $1 ਨੇ ਤੁਹਾਡੇ {{SITENAME}} ($4) ਉਤਲੇ ਪਛਾਣ-ਸ਼ਬਦ ਨੂੰ ਮੁੜ-ਬਣਾਉਣ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ। ਇਸ ਈਮੇਲ ਪਤੇ ਨਾਲ਼ ਹੇਠ ਲਿਖੇ {{PLURAL:$3|ਖਾਤੇ|ਖਾਤਿਆਂ}} ਦਾ ਵਾਸਤਾ ਹੈ:\n\n$2\n\n{{PLURAL:$3|ਇਸ ਆਰਜ਼ੀ ਪਛਾਣ-ਸ਼ਬਦ|ਇਹਨਾਂ ਆਰਜ਼ੀ ਪਛਾਣ-ਸ਼ਬਦਾਂ}} ਦੀ ਮਿਆਦ {{PLURAL:$5|ਇੱਕ ਦਿਨ|$5 ਦਿਨਾਂ}} 'ਚ ਮੁੱਕ ਜਾਵੇਗੀ।\nਤੁਹਾਨੂੰ ਹੁਣੇ ਦਾਖ਼ਲ ਹੋ ਕੇ ਕੋਈ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਬਣਾ ਲੈਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੇਕਰ ਕਿਸੇ ਹੋਰ ਨੇ ਇਹ ਬੇਨਤੀ ਕੀਤੀ ਹੈ ਜਾਂ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਹਿਲਾ ਪਛਾਣ-ਸ਼ਬਦ ਯਾਦ ਆ ਗਿਆ ਹੈ ਅਤੇ ਹੁਣ ਤੁਸੀਂ ਉਹਨੂੰ ਬਦਲ਼ਨਾ ਨਹੀਂ ਲੋਚਦੇ ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰ ਕੇ ਆਪਣਾ ਪੁਰਾਣਾ ਪਛਾਣ-ਸ਼ਬਦ ਵਰਤਦੇ ਰਹਿ ਸਕਦੇ ਹੋ।",
-       "passwordreset-emailelement": "ਯੂਜ਼ਰ-ਨਾਂ: $1\nਆਰਜ਼ੀ ਪਾਸਵਰਡ: $2",
+       "passwordreset-emailelement": "ਯੂਜ਼ਰ-ਨਾਂ: \n$1\n\nਆਰਜ਼ੀ ਪਾਸਵਰਡ: \n$2",
        "passwordreset-emailsent": "ਇੱਕ ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਈ-ਮੇਲ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।",
        "passwordreset-emailsent-capture": "ਇੱਕ ਯਾਦ-ਦਹਾਨੀ ਈ-ਮੇਲ, ਜਿਹੜੀ ਕਿ ਹੇਠਾਂ ਦਿੱਸ ਰਹੀ ਹੈ, ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।",
        "passwordreset-emailerror-capture": "ਪਛਾਣ-ਸ਼ਬਦ ਮੁੜ ਬਣਾਉਣ ਵਾਸਤੇ ਈਮੇਲ ਤਿਆਰ ਹੋ ਗਈ ਸੀ, ਜੋ ਹੇਠਾਂ ਵਿਖਾਈ ਗਈ ਹੈ, ਪਰ ਇਹਨੂੰ {{GENDER:$2|ਵਰਤੋਂਕਾਰ}} ਵੱਲ ਨਹੀਂ ਘੱਲਿਆ ਜਾ ਸਕਿਆ: $1",
        "emailuser": "ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ",
        "emailuser-title-target": "ਇਹ {{GENDER:$1|ਯੂਜ਼ਰ}} ਨੂੰ ਈਮੇਲ ਭੇਜੋ",
        "emailuser-title-notarget": "ਵਰਤੋਂਕਾਰ ਨੂੰ ਈਮੇਲ ਕਰੋ",
-       "emailpage": "ਵਰਤੋਂਕਾਰ ਨੂੰ ਈਮੇਲ ਕਰੋ",
        "defemailsubject": "{{SITENAME}} ਈਮੇਲ",
        "usermaildisabled": "ਵਰਤੋਂਕਾਰ ਦੀ ਈ-ਮੇਲ ਬੰਦ ਹੈ",
        "usermaildisabledtext": "ਇਸ ਵਿਕੀ ’ਤੇ ਤੁਸੀਂ ਦੂਜੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਨਹੀਂ ਭੇਜ ਸਕਦੇ",
index 5e0e4a8..ec42bff 100644 (file)
        "passwordreset": "Paesswatt zerricksetze",
        "passwordreset-username": "Yuuser-Naame:",
        "passwordreset-email": "E-Poschd:",
-       "passwordreset-emailelement": "Yuusernaame: $1\nPaesswatt fer nau: $2",
+       "passwordreset-emailelement": "Yuusernaame: \n$1\n\nPaesswatt fer nau: \n$2",
        "changeemail-none": "(ken)",
        "changeemail-submit": "E-Poschd ennere",
        "bold_sample": "Wadde fett gmarrickt",
index 826921e..7127cc6 100644 (file)
        "createacct-benefit-body2": "{{PLURAL:$1|strona|strony|stron}}",
        "createacct-benefit-body3": "{{PLURAL:$1|aktywny użytkownik|aktywnych użytkowników}} w ostatnim miesiącu",
        "badretype": "Wprowadzone hasła różnią się między sobą.",
+       "usernameinprogress": "Tworzenie konta dla tej nazwy użytkownika jest już w toku.\nProszę czekać.",
        "userexists": "Wybrana przez Ciebie nazwa użytkownika jest już zajęta.\nWybierz inną nazwę użytkownika.",
        "loginerror": "Błąd logowania",
        "createacct-error": "Błąd tworzenia konta",
        "passwordreset-emailtitle": "Dane konta w {{GRAMMAR:MS.lp|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Ktoś (prawdopodobnie Ty, spod adresu IP $1) poprosił o zresetowanie twojego hasła w {{GRAMMAR:MS.lp{{SITENAME}}}} ($4). Z tym adresem e‐mailowym powiązane {{PLURAL:$3|jest konto użytkownika|są następujące konta użytkowników:}}\n\n$2\n\n{{PLURAL:$3|Tymczasowego hasła|Tymczasowych haseł}} można użyć w ciągu {{PLURAL:$5|jednego dnia|$5 dni}}.\nPowinieneś zalogować się i zmienić hasło na nowe. Jeśli to ktoś inny poprosił o wysłanie przypomnienia lub jeśli pamiętasz aktualne hasło i nie chcesz go zmieniać wystarczy, że zignorujesz tę wiadomość i będziesz nadal korzystać ze swojego starego hasła.",
        "passwordreset-emailtext-user": "Użytkownik $1 poprosił o zresetowanie twojego hasła w {{GRAMMAR:MS.lp{{SITENAME}}}} ($4). Z tym adresem e‐mailowym powiązane {{PLURAL:$3|jest konto użytkownika|są następujące konta użytkowników:}}\n\n$2\n\n{{PLURAL:$3|Tymczasowego hasła|Tymczasowych haseł}} można użyć w ciągu {{PLURAL:$5|jednego dnia|$5 dni}}.\nPowinieneś zalogować się i zmienić hasło na nowe. Jeśli to ktoś inny poprosił o wysłanie przypomnienia lub jeśli pamiętasz aktualne hasło i nie chcesz go zmieniać wystarczy, że zignorujesz tę wiadomość i będziesz nadal korzystać ze swojego starego hasła.",
-       "passwordreset-emailelement": "Nazwa użytkownika: $1\nTymczasowe hasło: $2",
+       "passwordreset-emailelement": "Nazwa użytkownika: \n$1\n\nTymczasowe hasło: \n$2",
        "passwordreset-emailsent": "E‐mail resetowania hasła został wysłany.",
        "passwordreset-emailsent-capture": "Wyświetlony poniżej e‐mail pozwalający na zresetowanie hasła został wysłany.",
        "passwordreset-emailerror-capture": "Poniżej wyświetlony e‐mail pozwalający na zresetowanie hasła został wygenerowany, ale nie udało się wysłać go do {{GENDER:$2|użytkownika|użytkowniczki}}: $1",
        "changeemail-password": "Twoje hasło:",
        "changeemail-submit": "Zmień e-mail",
        "changeemail-throttled": "Zbyt wiele razy próbowałeś zalogować się na to konto.\nOdczekaj $1, zanim ponowisz próbę.",
+       "changeemail-nochange": "Proszę wprowadzić inny nowy adres e-mail.",
        "resettokens": "Resetowanie tokenów",
        "resettokens-text": "Na tej stronie możesz zresetować tokeny, które umożliwiają dostęp do pewnych prywatnych danych związanych z Twoim kontem.\n\nNależy to zrobić, jeśli ktoś je poznał lub zdobył hasło do Twojego konta.",
        "resettokens-no-tokens": "Brak tokenów do zresetowania.",
        "rows": "Wiersze:",
        "columns": "Kolumny:",
        "searchresultshead": "Wyszukiwanie",
-       "stub-threshold": "Maksymalny (w bajtach) rozmiar strony oznaczanej jako <a href=\"#\" class=\"stub\">zalążek (stub)</a>:",
+       "stub-threshold": "Maksymalny rozmiar strony oznaczanej jako zalążek ($1):",
+       "stub-threshold-sample-link": "przykład",
        "stub-threshold-disabled": "Wyłączone",
        "recentchangesdays": "Liczba dni prezentowanych w ostatnich zmianach:",
        "recentchangesdays-max": "(maksymalnie $1 {{PLURAL:$1|dzień|dni}})",
        "imagetypemismatch": "Nowe rozszerzenie nazwy pliku jest innego typu niż zawartość",
        "imageinvalidfilename": "Nazwa pliku docelowego jest nieprawidłowa",
        "fix-double-redirects": "Zaktualizuj wszystkie przekierowania wskazujące na stary tytuł",
-       "move-leave-redirect": "Pozostaw przekierowanie pod dotychczasowym tytułem",
+       "move-leave-redirect": "Pozostaw przekierowanie pod dotychczasowym tytułem.",
        "protectedpagemovewarning": "'''UWAGA!''' Ponieważ strona została zabezpieczona, tylko użytkownicy z uprawnieniami administratora mogą zmienić jej nazwę.\nOstatni wpis z rejestru jest pokazany poniżej.",
        "semiprotectedpagemovewarning": "'''Uwaga!''' Ponieważ strona została zabezpieczona, tylko zarejestrowani użytkownicy mogą zmienić jej nazwę.\nOstatni wpis z rejestru jest pokazany poniżej.",
        "move-over-sharedrepo": "== Plik istnieje ==\n[[:$1]] istnieje we wspólnym repozytorium. Zmiana nazwy pliku na tę spowoduje przesłonięcie współdzielonego pliku.",
        "tooltip-ca-nstab-main": "Zobacz stronę treści",
        "tooltip-ca-nstab-user": "Zobacz stronę osobistą użytkownika",
        "tooltip-ca-nstab-media": "Zobacz stronę pliku",
-       "tooltip-ca-nstab-special": "To jest strona specjalna. Nie możesz jej edytować.",
+       "tooltip-ca-nstab-special": "To jest strona specjalna i nie można jej edytować.",
        "tooltip-ca-nstab-project": "Zobacz stronę projektu",
        "tooltip-ca-nstab-image": "Zobacz stronę grafiki",
        "tooltip-ca-nstab-mediawiki": "Zobacz komunikat systemowy",
index 26cf2d0..5f066f2 100644 (file)
        "actionthrottled": "Assion limità",
        "actionthrottledtext": "Për evité che 'd gent ò 'd màchine an carìo dla rumenta, st'assion-sì as peul nen fesse tròp ëd soèns, e chiel a l'ha arpetula tròpe vire. Ch'a sia gentil, ch'a preuva torna antra dontré minute.",
        "protectedpagetext": "Sta pàgina-sì a l'è stàita blocà për evité 'd modìfiche o d'àutre assion.",
-       "viewsourcetext": "A peul vardé e copié la sorgiss dë sta pàgina:",
-       "viewyourtext": "A peul vëdde e copié la sorgiss ëd '''soe modìfiche''' a costa pàgina-sì:",
+       "viewsourcetext": "A peul vardé e copié la sorgiss dë sta pàgina.",
+       "viewyourtext": "A peul vëdde e copié la sorgiss ëd <strong>soe modìfiche</strong> a costa pàgina-sì.",
        "protectedinterface": "Costa pàgina-sì a l'ha andrinta un cheicòs che a fa part dl'antërfacia dël programa che a deuvro tùit; donca a l'é proteta për evité che a-i rivo dle ròbe brute.\nPër gionté o modifiché dle tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/ translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
        "editinginterface": "<strong>Dossman!</strong> A l'é dapress ch'a modìfica na pàgina ch'as deuvra për generé ël test dl'antërfacia dël programa. \nLe modìfiche a sta pàgina a toco l'aparensa ëd l'antërfacia utent a tuti j'utent dzora a sta wiki.",
        "translateinterface": "Për gionté o modifiché le tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/ translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
        "createacct-benefit-body2": "{{PLURAL:$1|pàgina|pàgine}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contributor}} recent",
        "badretype": "Le doe ciav che a l'ha scrivù a resto diferente antra 'd lor.",
+       "usernameinprogress": "Na creassion ëd cont për së stranòm a l'é già an cors. Ch'a l'abia passiensa.",
        "userexists": "Lë stranòm anserì a l'é già dovrà.\nPër piasì ch'a serna në stranòm diferent.",
        "loginerror": "Eror ën rintrand ant ël sistema",
        "createacct-error": "Eror durant la creassion dël cont",
        "passwordreset-emailtitle": "Detaj dël cont ansima a {{SITENAME}}",
        "passwordreset-emailtext-ip": "Quaidun (a l'é bel fé ch'a sia chiel, da l'adrëssa IP $1) a l'ha ciamà na riampostassion ëd soa ciav për {{SITENAME}} ($4). {{PLURAL:$3|Ël cont utent sì-sota a l'é|Ij cont utent sì-sota a son}} \nassocià a st'adrëssa ëd pòsta eletrònica:\n\n$2\n\n{{PLURAL:$3|Costa ciav provisòria|Coste ciav provisòrie}} a scadran da-sì {{PLURAL:$5|un di|$5 di}}.\nA dovrìa intré ant ël sistema e serne na ciav neuva adess. Se quaidun d'àutr a l'ha fàit costa arcesta, o s'a l'é arcordasse soa ciav original, e a veul pa pi cangela, a peule ignoré ës mëssagi e continué a dovré soa veja ciav.",
        "passwordreset-emailtext-user": "L'utent $1 ansima a {{SITENAME}} a l'ha ciamà na riampostassion ëd soa ciav për {{SITENAME}} ($4). {{PLURAL:$3|Ël cont utent sì-sota a l'é|Ij cont utent sì-sota a son}} associà a st'adrëssa ëd pòsta eletrònica:\n\n$2\n\n{{PLURAL:$3|Costa ciav provisòria|Coste ciav provisòrie}} a scadran da-sì {{PLURAL:$5|un di|$5 di}}.\nA dovrìa intré ant ël sistema e serne na ciav neuva adess. Se quaidun d'àutr a l'ha fàit costa arcesta, o s'a l'é arcordasse soa ciav original, e a veul pa pi cangela, a peul ignoré ës mëssagi e continué a dovré soa veja ciav.",
-       "passwordreset-emailelement": "Stranòm: $1\nCiav provisòria: $2",
+       "passwordreset-emailelement": "Stranòm: \n$1\n\nCiav provisòria: \n$2",
        "passwordreset-emailsent": "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit spedì.",
        "passwordreset-emailsent-capture": "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit mandà, e a l'é mostrà sì-sota.",
        "passwordreset-emailerror-capture": "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit generà, e a l'é smonù sì-sota, ma la spedission a {{GENDER:$2|l'utent}} a l'é falìa: $1",
        "search-category": "(categorìa $1)",
        "search-file-match": "(a corëspond al contnù d'archivi)",
        "search-suggest": "Vorìi-lo pa dì: $1",
+       "search-rewritten": "Visualisassion dj'arzultà për $1. Sërché nopà $2.",
        "search-interwiki-caption": "Proget frej",
        "search-interwiki-default": "Arzultà da $1:",
        "search-interwiki-more": "(ëd pì)",
        "rows": "Righe:",
        "columns": "Colòne:",
        "searchresultshead": "Specifiché soe preferense d'arserca",
-       "stub-threshold": "Valor mìnim për j'<a href=\"#\" class=\"stub\">anliure a jë sbòss</a>:",
+       "stub-threshold": "Valor mìnim për buté an forma j'anliure dë sbòss ($1):",
+       "stub-threshold-sample-link": "esempi",
        "stub-threshold-disabled": "Disabilità",
        "recentchangesdays": "Vàire dì smon-e ant j'ùltime modìfiche:",
        "recentchangesdays-max": "(al pì $1 {{PLURAL:$1|di|di}})",
        "newpageletter": "N",
        "boteditletter": "t",
        "number_of_watching_users_pageview": "[tnùa sot-euj da {{PLURAL:$1|n'utent|$1 utent}}]",
-       "rc_categories": "Limité a le categorìe (che a jë scriva separand-je antra 'd lor con un \"|\")",
-       "rc_categories_any": "Qualsëssìa",
+       "rc_categories": "Limité a le categorìe (che a jë scriva separand-je antra 'd lor con un \"|\"):",
+       "rc_categories_any": "Un-a qualsëssìa ëd cole selessionà",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} apress ij cambi",
        "newsectionsummary": "/* $1 */ session neuva",
        "rc-enhanced-expand": "Mostré ij detaj",
        "uploaded-href-attribute-svg": "J'atribù <code>&lt;$1 $2=\"$3\"&gt;</code> con un bërsaj nen local (për esempi http://, javascript:, e via fòrt) a son nen përmëttù ant j'archivi SVG.",
        "uploaded-href-unsafe-target-svg": "href ver un bërsaj nen sigur <code>&lt;$1 $2=\"$3\"&gt;</code> trovà ant l'archivi SVG carià.",
        "uploaded-animate-svg": "Trovà na tichëtta «animate», ch'a podrìa modifiché ël href an dovrand l'atribù «from» <code>&lt;$1 $2=\"$3\"&gt;</code> ant l'archivi SVG carià.",
+       "uploaded-setting-event-handler-svg": "Ël posissionament dj'atribù ëd mansé a l'é blocà, <code>&lt;$1 $2=\"$3\"&gt;</code> trovà ant l'archivi SVG carià.",
+       "uploaded-setting-href-svg": "L’usage dla tichëtta «set» për gionté n'atribù «href» a l’element pare a l'é blocà.",
        "uploadscriptednamespace": "S'archivi SVG a conten në spassi nominal «$1» nen autorisà",
        "uploadinvalidxml": "L'XML ant l'archivi carià a l'ha nen podù esse analisà.",
        "uploadvirus": "St'archivi-sì a l'han andrinta un '''vìrus!''' Detaj: $1",
        "tooltip-pt-logout": "Seurte da",
        "tooltip-pt-createaccount": "I-j consejoma ëd creé un cont e ëd rintré ant ël sistema; però a l'é nen obligatòri",
        "tooltip-ca-talk": "Discussion ansima a sta pàgina ëd contnù.",
-       "tooltip-ca-edit": "A peul modifiché sa pàgina-sì. Për piasì, che as fasa na preuva anans che salvé.",
+       "tooltip-ca-edit": "Modifiché costa pàgina",
        "tooltip-ca-addsection": "Ancaminé na neuva session",
        "tooltip-ca-viewsource": "Sta pàgina-sì a l'é protegiùa.\nA peul visualisene la sorgiss",
        "tooltip-ca-history": "Veje version dla pàgina.",
        "tooltip-ca-nstab-main": "Vardé la pàgina ëd contnù.",
        "tooltip-ca-nstab-user": "Vardé la pàgina Utent.",
        "tooltip-ca-nstab-media": "Vardé la pàgina dël mojen",
-       "tooltip-ca-nstab-special": "Costa a l'é na pàgina special, a peul nen modifichela.",
+       "tooltip-ca-nstab-special": "Costa a l'é na pàgina special, e a peul nen esse modificà",
        "tooltip-ca-nstab-project": "Vardé la pàgina proteta.",
        "tooltip-ca-nstab-image": "Vardé la pàgina dl'archivi",
        "tooltip-ca-nstab-mediawiki": "Vardé ël mëssagi ëd sistema.",
        "spam_reverting": "Butà andaré a l'ùltima version che a l'avèissa pa andrinta dj'anliure a $1",
        "spam_blanking": "Pàgina dësvujdà, che tute le version a l'avìo andrinta dj'anliure a $1",
        "spam_deleting": "Scancelà, dagià che tute le revision a contnisìo dle liure a $1",
-       "simpleantispam-label": "Contròl contra la rumenta.\nCompilé '''NEN''' sòn!",
+       "simpleantispam-label": "Contròl contra la rumenta.\nCompilé <strong>NEN</strong> sòn!",
        "pageinfo-title": "Anformassion për «$1»",
        "pageinfo-not-current": "J'anformassion a peulo mach esse smonùe për la revision an cors.",
        "pageinfo-header-basic": "Anformassion ëd base",
index 8c10941..62313d8 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} دے اتے کھاتے دی معلومات:",
        "passwordreset-emailtext-ip": "کسے نے (خورے تساں  آئی پی پتے $1) تواڈے کھاتے دا ویروا منگیا اے {{SITENAME}} ($4) لئی۔ تھلے دتا گیا ورتنوالا {{PLURAL:$3|کھاتہ|کھاتے}} ایس ای-میل پتے نال جوڑ رکھدا اے:\n\n$2\n\n{{PLURAL:$3|اے عارضی کنجی|اے عارضی کنجیاں}} {{PLURAL:$5|اک دن|$5 دناں}} چ مک جاوے گی۔ تسیں لاگان ہوو تے اپنی اک نويں کنجی چنو. اگر کسے ہور نے اے کنجی والی چٹھی پیجی اے یا توانوں پرانی کنجی یاد آگئی اے تے تسیں پرانی کنجی نال ای کم چلانا چاندے او تے تسیں ایس سنیعے نوں پل جاؤ تے پرانی کنجی ای ورتو۔",
        "passwordreset-emailtext-user": "ورتنوالے $1 نے {{سائیٹناں}} تے تواڈے کھاتے بارے پچھیا اے {{SITENAME}} لئی ($4)۔ تھلے دتا گیا ورتن {{PLURAL:$3|کھاتہ|کھاتے}} ایس ای-میل نال جڑدا اے۔\n\n$2\n\n{{PLURAL:$3|ایہ عارضی کنجی|اے عارضی کنجیاں}} مک جائیگا {{PLURAL:$5|اک دن|$5 دن}}۔ تسیں ہن لاکان ہوو تے نویں کنجی چنو۔ اگر کسے ہور نے اے چٹھی پیجی یا توانوں اپنی پہلی کنجی یاد آگئی اے تے تسیں اونوں بدلنا نئیں چاندے تے تسیں ایس سنیعے نوں پھل جاؤ تے پرانی کنجی نال ای کم چلاؤ۔",
-       "passwordreset-emailelement": "ورتن ناں: $1\nعارضی کنجی: $2",
+       "passwordreset-emailelement": "ورتن ناں: \n$1\n\nعارضی کنجی: \n$2",
        "passwordreset-emailsent": "یاد کران واسطے اک ای-میل پیج دتی گئی اے۔",
        "passwordreset-emailsent-capture": "اک یاد کران والی ای-میل پیج دتی گئی اے، جیہڑی تھلے دسی گئی اے۔",
        "passwordreset-emailerror-capture": "اک یادکراؤ ای-میل بنائی گئی اے، جیہڑی کہ تھلے دسی گئی اے، پر ورتن والے تک پیجنا نئیں ہوسکیا:$1",
index c37ec0e..8f5e713 100644 (file)
        "badtitle": "ناسم سرليک",
        "badtitletext": "ستاسې د غوښتل شوي مخ سرليک سم نه وو، يا مو د سرليک ځای تش وو او يا هم د ژبو خپلمنځي تړنې څخه يا د ويکي گانو خپلمنځي سرليکونو څخه يو ناسم توری مو پکې کارولی وي.\nکېدای شي چې ستاسې په ورکړ شوي سرليک کې يو يا څو داسې توري وي چې د سرليک په توگه بايد و نه کارېږي.",
        "title-invalid-interwiki": "په سرليک کې يوه ويکي خپلمنځي تړنه ده",
+       "perfcached": "لاندينی اومتوک په حافظه کې ساتل شوی او کېدای شي اوسمهاله شوی نه وي.  اکثر بريد له مخې {{PLURAL:$1|يوه پايله|$1 پايلې}} په حافظه کې شته.",
        "querypage-no-updates": "د دې مخ اوسمهالېدنې ناچارن شوي.\nپه ښکاره توگه د دې ځای اومتوک به نه وي تازه شوي.",
        "viewsource": "سرچينه کتل",
        "viewsource-title": "د $1 سرچينه کتل",
        "passwordreset-capture": "د پايلې برېښليک کتل غواړې؟",
        "passwordreset-email": "برېښليک پته:",
        "passwordreset-emailtitle": "د {{SITENAME}} د گڼون څرگندنې",
-       "passwordreset-emailelement": "کارن-نوم: $1\nلنډمهاله پټنوم: $2",
+       "passwordreset-emailelement": "کارن-نوم: \n$1\n\nلنډمهاله پټنوم: \n$2",
        "passwordreset-emailsent": "د پټنوم بيا پرځای کېدنې لپاره برېښليک درولېږل شو.",
        "passwordreset-emailsent-capture": "د پټنوم بياپرځای کېدنې لپار مو يو برېښليک درولېږه، برېښليک په لاندې توگه ښودل شوی.",
        "changeemail": "برېښليک پته بدلول",
        "rows": "ليکې:",
        "columns": "ستنې:",
        "searchresultshead": "پلټل",
+       "stub-threshold-sample-link": "مخبېلگه",
        "stub-threshold-disabled": "ناچارن",
        "recentchangesdays": "د هغو ورځو شمېر وټاکی چې په وروستي بدلونو کې يې ليدل غواړی:",
        "recentchangesdays-max": "حد اکثر $1 {{PLURAL:$1|ورځ|ورځې}}",
        "upload-file-error": "کورنۍ ستونزه",
        "upload-misc-error": "د پورته کېدنې نامالومه تېروتنه",
        "upload-http-error": "د HTTP يوه ستونزه رامېنځ ته شوې: $1",
+       "upload-dialog-title": "دوتنه پورته کول",
+       "upload-dialog-error": "يوه ستونزه پېښه شوې",
+       "upload-dialog-warning": "يوه گواښنه رامېنځ ته شوه",
+       "upload-dialog-button-cancel": "ناگارل",
+       "upload-dialog-button-done": "ترسره شو",
+       "upload-dialog-button-save": "خوندي کول",
+       "upload-dialog-button-upload": "پورته کول",
+       "upload-dialog-label-select-file": "دوتنه ټاکل",
+       "upload-dialog-label-infoform-title": "ځانگړنې",
+       "upload-dialog-label-infoform-name": "نوم",
+       "upload-dialog-label-infoform-description": "څرگندونه",
+       "upload-dialog-label-usage-title": "کارېدنې",
+       "upload-dialog-label-usage-filename": "د دوتنې نوم",
        "backend-fail-notexists": "د $1 په نوم دوتنه نشته.",
        "backend-fail-delete": "د \"$1\" دوتنه ړنګه نه شوه.",
        "backend-fail-alreadyexists": "د $1 دوتنه له پخوا نه شته.",
        "tooltip-ca-nstab-main": "د مخ مېنځپانگه کتل",
        "tooltip-ca-nstab-user": "د کارن پاڼه کتل",
        "tooltip-ca-nstab-media": "د رسنۍ مخ کتل",
-       "tooltip-ca-nstab-special": "دا Ù\8aÙ\88 Ú\81اÙ\86Ú¯Ú\93Û\8c Ù\85Ø® Ø¯Û\8cØ\8c ØªØ§Ø³Û\90 Ù¾Ù\87 Ø¯Û\90 Ù\85Ø® Ú©Û\90 Ø³Ù\85Ù\88Ù\86 Ù\86Ù\87 Ø´Û\8c Ú©Ù\88Ù\84اÛ\8c.",
+       "tooltip-ca-nstab-special": "دا Ù\8aÙ\88 Ú\81اÙ\86Ú¯Ú\93Û\8c Ù\85Ø® Ø¯Û\8cØ\8c Ø§Ù\88 Ù¾Ù\87 Ø¯Û\90 Ù\85Ø® Ú©Û\90 Ø³Ù\85Ù\88Ù\86 Ù\86Ù\87 Ú©Û\90Ú\96Ù\8a.",
        "tooltip-ca-nstab-project": "د پروژې مخ کتل",
        "tooltip-ca-nstab-image": "د دوتنې مخ کتل",
        "tooltip-ca-nstab-mediawiki": "د غونډال پيغامونه کتل",
        "siteusers": "د {{SITENAME}} {{PLURAL:$2|کارن|کارنان}} $1",
        "anonusers": "د {{SITENAME}} {{PLURAL:$2|ورکنومی کارن|ورکنومي کارنان}} $1",
        "creditspage": "د دې مخ کرېډټونه",
-       "simpleantispam-label": "سپام-ضد څارنه.\nدا برخه <strong>مه </strong> ډکوئ!",
+       "simpleantispam-label": "سپام-ضد څارنه.\nدا برخه <strong>مه</strong> ډکوئ!",
        "pageinfo-title": "د \"$1\" مالومات",
        "pageinfo-header-basic": "بنسټيز مالومات",
        "pageinfo-header-edits": "د سمون پېښليک",
index d03c991..8bf1aae 100644 (file)
@@ -82,7 +82,8 @@
                        "Macofe",
                        "TheEduGobi",
                        "Araceletorres",
-                       "L"
+                       "L",
+                       "Walesson"
                ]
        },
        "tog-underline": "Sublinhar links:",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
        "actions": "Ações",
-       "namespaces": "Espaços nominais",
+       "namespaces": "Domínios",
        "variants": "Variantes",
        "navigation-heading": "Menu de navegação",
        "errorpagetitle": "Erro",
        "returnto": "Retornar para $1.",
        "tagline": "De {{SITENAME}}",
        "help": "Ajuda",
-       "search": "Pesquisar",
+       "search": "Pesquisa",
        "searchbutton": "Pesquisar",
        "go": "Ir",
        "searcharticle": "Ir",
        "history_short": "Histórico",
        "updatedmarker": "atualizado desde a minha última visita",
        "printableversion": "Versão para impressão",
-       "permalink": "Link permanente",
+       "permalink": "Ligação permanente",
        "print": "Imprimir",
        "view": "Ver",
        "view-foreign": "Ver no $1",
        "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",
        "articlepage": "Ver página de conteúdo",
        "copyrightpage": "{{ns:project}}:Direitos_de_autor",
        "currentevents": "Eventos atuais",
        "currentevents-url": "Project:Eventos atuais",
-       "disclaimers": "Exoneração de responsabilidade",
-       "disclaimerpage": "Project:Aviso_geral",
+       "disclaimers": "Termo de responsabilidade",
+       "disclaimerpage": "Project:Aviso geral",
        "edithelp": "Ajuda de edição",
        "helppage-top-gethelp": "Ajuda",
        "mainpage": "Página principal",
        "portal": "Portal comunitário",
        "portal-url": "Project:Portal comunitário",
        "privacy": "Política de privacidade",
-       "privacypage": "Project:Política_de_privacidade",
+       "privacypage": "Project:Política de privacidade",
        "badaccess": "Erro de permissão",
        "badaccess-group0": "Você não está autorizado a executar a ação requisitada.",
        "badaccess-groups": "A ação que você tentou executar está limitada a usuários {{PLURAL:$2|do grupo|de um dos seguintes grupos}}: $1.",
        "nstab-user": "Página d{{GENDER:{{BASEPAGENAME}}|o usuário|a usuária|e usuário(a)}}",
        "nstab-media": "Página de mídia",
        "nstab-special": "Página especial",
-       "nstab-project": "Página do projeto",
+       "nstab-project": "Página de projeto",
        "nstab-image": "Arquivo",
        "nstab-mediawiki": "Mensagem",
        "nstab-template": "Predefinição",
        "actionthrottled": "Ação controlada",
        "actionthrottledtext": "Como medida \"anti-spam\", você se encontra impedido de realizar esta operação muitas vezes em um curto espaço de tempo; você já excedeu esse limite.\nTente novamente em alguns minutos.",
        "protectedpagetext": "Esta página foi protegida contra novas edições ou ações relacionadas.",
-       "viewsourcetext": "Você pode ver e copiar o código desta página:",
-       "viewyourtext": "Pode ver e copiar o código fonte '''das suas edições''' nesta página:",
+       "viewsourcetext": "Você pode ver e copiar o código desta página.",
+       "viewyourtext": "Você pode ver e copiar o código fonte '''das suas edições''' a esta página.",
        "protectedinterface": "Esta página fornece texto de interface ao software deste wiki, se encontrando protegida para prevenir abusos.\n\nPara adicionar ou alterar traduções em todos os wikis, utilize o [//translatewiki.net/ translatewiki.net], projeto de traduções do MediaWiki.",
        "editinginterface": "'''Aviso:''' Você se encontra prestes a editar uma página que é utilizada para fornecer texto de interface ao software.\nAlterações nesta página irão afetar a aparência da interface de usuário para outros usuários deste wiki.\nPara alterar ou adicionar traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt-br translatewiki.net], um projeto destinado para a tradução do MediaWiki.",
        "translateinterface": "Para adicionar ou modificar traduções para todas as wikis, por favor use  [//translatewiki.net/ translatewiki.net], o projeto de localização do MediaWiki.",
-       "cascadeprotected": "Esta página foi protegida contra edições por estar incluída {{PLURAL:$1|na página listada|nas páginas listadas}} a seguir, ({{PLURAL:$1|página essa que está protegida|páginas essas que estão protegidas}} com a opção de \"proteção progressiva\" ativada):\n$2",
+       "cascadeprotected": "Esta página foi protegida contra edições porque é transcluída na seguinte {{PLURAL: $1, | página, que é | páginas, que estão protegidas}} com a \"cascata\" opção ativada: $2",
        "namespaceprotected": "Você não possui permissão para editar páginas no espaço nominal '''$1'''.",
        "customcssprotected": "Você não tem permissão para editar esta página CSS, porque ele contém configurações pessoais de outro usuário.",
        "customjsprotected": "Você não tem permissão para editar esta página de JavaScript, porque ele contém configurações pessoais de outro usuário.",
        "createacct-benefit-body2": "{{PLURAL:$1|página|páginas}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contribuidor|contribuidores}} recentes",
        "badretype": "As senhas que você digitou não são iguais.",
+       "usernameinprogress": "Uma criação da conta para este nome de usuário já está em andamento. Por favor, aguarde.",
        "userexists": "O nome de usuário fornecido já está em uso.\nEscolha um nome diferente.",
        "loginerror": "Erro de autenticação",
        "createacct-error": "Erro ao criar a conta",
        "passwordreset-emailtitle": "Detalhes da conta em {{SITENAME}}",
        "passwordreset-emailtext-ip": "Alguém (provavelmente você, a partir do endereço IP $1)\nsolicitou um lembrete dos seus detalhes de conta para {{SITENAME}} ($4).\n{{PLURAL:$3|A seguinte conta está associada|As seguintes contas estão associadas}} a este e-mail:\n\n$2\n\n{{PLURAL:$3|Esta senha temporária vai|Essas senhas temporárias vão}} expirar em {{PLURAL:$5|um dia|$5 dias}}.\nVocê deve efetuar login e escolher uma nova senha agora.\nSe você conseguir lembrar da senha, ignore este e-mail e continue\nusando sua senha anterior. Caso contrário, prossiga com as instruções\ndisponíveis no link.",
        "passwordreset-emailtext-user": "O usuário $1 da {{SITENAME}} pediu a recuperação dos detalhes da sua conta na {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta está associada|As seguintes contas estão associadas}} a este e-mail:\n\n$2\n\n{{PLURAL:$3|Esta senha temporária irá|Estas senhas temporárias irão}} expirar dentro de {{PLURAL:$5|um dia|$5 dias}}. Deve autenticar-se e escolher uma senha nova agora. Se este pedido não foi feito por si, ou se entretanto se recordou da sua senha original e já não deseja alterá-la, pode ignorar esta mensagem e continuar a usar a senha antiga.",
-       "passwordreset-emailelement": "Usuário: $1\nSenha temporária: $2",
+       "passwordreset-emailelement": "Usuário: \n$1\n\nSenha temporária: \n$2",
        "passwordreset-emailsent": "Foi enviado um e-mail de lembrete.",
        "passwordreset-emailsent-capture": "Foi enviado um e-mail de lembrete, que é mostrado abaixo.",
        "passwordreset-emailerror-capture": "Foi gerado um e-mail de recuperação da senha, conforme mostrado abaixo, mas o envio {{GENDER:$2|ao usuário|à usuária}} falhou. $1",
        "yourdiff": "Diferenças",
        "copyrightwarning": "Por favor, note que todas as suas contribuições em {{SITENAME}} são consideradas como lançadas nos termos da licença $2 (veja $1 para detalhes). Se não deseja que o seu texto seja inexoravelmente editado e redistribuído de tal forma, não o envie.<br />\nVocê está, ao mesmo tempo, garantindo-nos que isto é algo escrito por você mesmo ou algo copiado de uma fonte de textos em domínio público ou similarmente de teor livre.\n'''NÃO ENVIE TRABALHO PROTEGIDO POR DIREITOS AUTORAIS SEM A DEVIDA PERMISSÃO!'''",
        "copyrightwarning2": "Por favor, note que todas as suas contribuições em {{SITENAME}} podem ser editadas, alteradas ou removidas por outros contribuidores. Se você não deseja que o seu texto seja inexoravelmente editado, não o envie.<br />\nVocê está, ao mesmo tempo, a garantir-nos que isto é algo escrito por si, ou algo copiado de alguma fonte de textos em domínio público ou similarmente de teor livre (veja $1 para detalhes).\n'''NÃO ENVIE TRABALHO PROTEGIDO POR DIREITOS DE AUTOR SEM A DEVIDA PERMISSÃO!'''",
+       "editpage-cannot-use-custom-model": "O modelo de conteúdo desta página não pode ser alterado.",
        "longpageerror": "'''Erro: O texto que submeteu ocupa {{PLURAL:$1|um kilobyte|$1 kilobytes}}, que excede o máximo de {{PLURAL:$2|um kilobyte|$2 kilobytes}}.'''\nA página não pode ser salva.",
        "readonlywarning": "'''Aviso: O banco de dados foi bloqueado para manutenção, por isso você não poderá salvar a sua edição neste momento.'''\nTalvez você queira copiar o seu texto num editor externo e guardá-lo, para posterior envio.\n\nQuem bloqueou o banco de dados forneceu a seguinte explicação: $1",
        "protectedpagewarning": "'''Atenção: Esta página foi protegida para que apenas usuários com privilégios de administrador possam editá-la.'''\nA última entrada no histórico é fornecida abaixo como referência:",
        "semiprotectedpagewarning": "'''Nota:''' Esta página foi protegida, sendo que apenas usuários registrados poderão editá-la.\nA última entrada no histórico é fornecida abaixo para referência:",
-       "cascadeprotectedwarning": "'''Atenção:''' Esta página se encontra protegida; apenas {{int:group-sysop}} podem editá-la, uma vez que se encontra incluída {{PLURAL:$1|na seguinte página protegida|nas seguintes páginas protegidas}} com a \"proteção progressiva\":",
+       "cascadeprotectedwarning": "<strong> Aviso: </ strong> Esta página foi protegida para que somente os usuários com privilégios de administrador pode editá-lo porque ele é transcluída na seguinte protegido por cascata {{PLURAL: $1 | página | páginas}}:",
        "titleprotectedwarning": "'''Atenção: esta página foi protegida; [[Special:ListGroupRights|privilégios específicos]] são necessários para criá-la.'''\nA última entrada no histórico é fornecida abaixo como referência:",
        "templatesused": "{{PLURAL:$1|Predefinição usada|Predefinições usadas}} nesta página:",
        "templatesusedpreview": "{{PLURAL:$1|Predefinição usada|Predefinições usadas}} nesta previsão:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Objeto vazio",
        "content-json-empty-array": "Array vazia",
+       "duplicate-args-warning": "<strong> Aviso: </strong> [[:$1]] está chamando [[:$2]] com mais de um valor para o parâmetro \"$3\". Será utilizado apenas o último valor fornecido.",
        "duplicate-args-category": "Páginas que utilizam argumentos duplicados ao chamar predefinições",
        "duplicate-args-category-desc": "A pagina contem modelos que usam argumentos duplicados, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Aviso: Esta página contém muitas chamadas a funções do analisador \"parser\".\n\nDeveria ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento {{PLURAL:$1|há $1 chamada|existem $1 chamadas}}.",
        "search-section": "(seção $1)",
        "search-category": "(categoria $1)",
        "search-file-match": "(coincide com o conteúdo do arquivo)",
-       "search-suggest": "Você quis dizer: $1",
+       "search-suggest": "Você quis dizer: $1?",
+       "search-rewritten": "Mostrando resultados por $1. Pesquisar em vez de $2.",
        "search-interwiki-caption": "Projetos irmãos",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(mais)",
        "rows": "Linhas:",
        "columns": "Colunas:",
        "searchresultshead": "Pesquisar",
-       "stub-threshold": "Links para páginas de conteúdo aparecerão <a href=\"#\" class=\"stub\">desta forma</a> se elas possuírem menos de (bytes):",
+       "stub-threshold": "Limiar para a formatação ligação stub (US $1):",
+       "stub-threshold-sample-link": "amostra",
        "stub-threshold-disabled": "Desabilitado",
        "recentchangesdays": "Dias a apresentar nas mudanças recentes:",
        "recentchangesdays-max": "(máximo: $1 {{PLURAL:$1|dia|dias}})",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|$1 usuário|$1 usuários}} vigiando]",
-       "rc_categories": "Limite para categorias (separar com \"|\")",
-       "rc_categories_any": "Qualquer",
+       "rc_categories": "Limite para categorias (separar com \"|\"):",
+       "rc_categories_any": "Qualquer dos escolhidos",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} após alterações",
        "newsectionsummary": "/* $1 */ nova seção",
        "rc-enhanced-expand": "Exibir detalhes",
        "uploaddisabledtext": "O envio de arquivos encontra-se desativado.",
        "php-uploaddisabledtext": "O envio de arquivos via PHP está desativado.\nVerifique a configuração file_uploads.",
        "uploadscripted": "Este arquivo contém HTML ou código que pode ser erroneamente interpretado por um navegador web.",
+       "upload-scripted-pi-callback": "Não é possível fazer upload de um arquivo que contém a instrução de processamento XML-estilo.",
+       "uploaded-script-svg": "Elemento encontrado programável \"$1\" no arquivo SVG carregado.",
+       "uploaded-hostile-svg": "Encontrado CSS inseguro no elemento de estilo do arquivo SVG carregado.",
+       "uploaded-event-handler-on-svg": "Configuração de manipulador de eventos atribui <code> $1 = \"$2\" </ code> não é permitido em arquivos SVG.",
        "uploadscriptednamespace": "Este aruivo SVG contém um espaço nominal probido \"$1\"",
        "uploadinvalidxml": "O XML no arquivo enviado não pôde ser analisado.",
        "uploadvirus": "O arquivo contém vírus!\nDetalhes: $1",
        "upload-too-many-redirects": "A URL contém redirecionamentos demais",
        "upload-http-error": "Ocorreu um erro HTTP: $1",
        "upload-copy-upload-invalid-domain": "Não é possível realizar envios remotos neste domínio.",
+       "upload-dialog-button-cancel": "Cancelar",
+       "upload-dialog-button-done": "Feito",
+       "upload-dialog-button-save": "Salvar",
+       "upload-dialog-button-upload": "Enviar",
+       "upload-dialog-label-select-file": "Selecionar arquivo",
+       "upload-dialog-label-infoform-title": "Detalhes",
+       "upload-dialog-label-infoform-name": "Nome",
+       "upload-dialog-label-infoform-description": "Descrição",
+       "upload-dialog-label-usage-title": "uso",
+       "upload-dialog-label-usage-filename": "Nome do arquivo",
        "backend-fail-stream": "Não foi possível transmitir o arquivo  $1.",
        "backend-fail-backup": "Não foi possível fazer backup do arquivo  $1 .",
        "backend-fail-notexists": "O arquivo $1 não existe.",
        "unusedimages": "Arquivos não utilizados",
        "wantedcategories": "Categorias pedidas",
        "wantedpages": "Páginas pedidas",
-       "wantedpages-summary": "Lista de páginas não-existentes com mais links para elas, excluindo páginas que apenas têm redirecionamentos para elas. Para obter uma lista de páginas inexistentes com redirecionamentos para elas, veja [[{{#special: Brokenredirects}}]].",
+       "wantedpages-summary": "Lista de páginas não-existentes com mais links para eles, excluindo páginas que apenas têm redirecionamentos links para eles. Para obter uma lista de páginas não-existentes que têm redirecionamentos links para eles, veja [[{{#special: Brokenredirects}} | lista de redirecionamentos quebrados]].",
        "wantedpages-badtitle": "Título inválido no conjunto de resultados: $1",
        "wantedfiles": "Arquivos pedidos",
        "wantedfiletext-cat": "Os seguintes arquivos são usados, mas não existem. Arquivos de repositórios externos podem acabar sendo listados apesar de existirem. Esses falsos positivos aparecerão <del>riscados</del>. As páginas que incluem arquivos inexistentes são listadas em [[:$1]].",
        "booksources-text": "É exibida a seguir uma listagem de links para outros sites que vendem livros novos e usados e que possam possuir informações adicionais sobre os livros que você está pesquisando:",
        "booksources-invalid-isbn": "O número ISBN fornecido não parece ser válido; verifique se houve erros ao copiar da fonte original.",
        "specialloguserlabel": "Executor:",
-       "speciallogtitlelabel": "Destino (título ou usuário):",
+       "speciallogtitlelabel": "Alvo (título ou {{ns: user}}: nome de usuário para usuário):",
        "log": "Registros",
        "all-logs-page": "Todos os registros públicos",
        "alllogstext": "Exibição combinada de todos registros disponíveis para o {{SITENAME}}.\nVocê pode diminuir a lista escolhendo um tipo de registro, um nome de usuário (sensível a maiúsculas e minúsculas), ou uma página afetada (também sensível a maiúsculas e minúsculas).",
        "rollback-success": "Foram revertidas as edições de $1, com o conteúdo passando a estar como na última edição de $2.",
        "sessionfailure-title": "Erro de sessão",
        "sessionfailure": "Foram detetados problemas com a sua sessão;\nEsta ação foi cancelada como medida de proteção contra a intercepção de sessões.\nExperimente usar o botão \"Voltar\" e atualizar a página de onde veio e tente novamente.",
+       "changecontentmodel": "Mudar modelo de conteúdo de uma página",
+       "changecontentmodel-legend": "Mudar modelo de conteúdo",
        "changecontentmodel-title-label": "Título da página",
        "changecontentmodel-reason-label": "Motivo:",
        "logentry-contentmodel-change-revertlink": "reverter",
        "tooltip-pt-preferences": "Suas configurações",
        "tooltip-pt-watchlist": "Lista de alterações nas páginas que você está monitorando",
        "tooltip-pt-mycontris": "Listagem de suas contribuições",
-       "tooltip-pt-login": "Você é encorajado a autenticar-se, apesar disso não ser obrigatório.",
+       "tooltip-pt-login": "Você é encorajado a autenticar-se; no entanto, não é obrigatório",
        "tooltip-pt-logout": "Sair",
        "tooltip-pt-createaccount": "É recomendado que você crie uma conta e inicie uma seção; todavia, isto não é obrigatório",
        "tooltip-ca-talk": "Discussão sobre o conteúdo da página",
        "tooltip-n-mainpage-description": "Acessar a página principal",
        "tooltip-n-portal": "Sobre o projeto, o que se pode fazer e onde achar as coisas",
        "tooltip-n-currentevents": "Encontre informações sobre acontecimentos atuais",
-       "tooltip-n-recentchanges": "A lista de mudanças recentes desta wiki.",
+       "tooltip-n-recentchanges": "Uma lista de mudanças recentes nesta wiki",
        "tooltip-n-randompage": "Acessar uma página de forma aleatória",
-       "tooltip-n-help": "Lugar específico para obter ajuda quanto ao ambiente.",
+       "tooltip-n-help": "O lugar para informar-se",
        "tooltip-t-whatlinkshere": "Lista de todas as páginas que possuem links para esta",
        "tooltip-t-recentchangeslinked": "Mudanças recentes nas páginas para as quais esta possui links",
        "tooltip-feed-rss": "Feed RSS desta página",
        "spam_reverting": "Revertendo para a última versão que não contém links para $1",
        "spam_blanking": "Todas revisões contendo links para $1, limpando",
        "spam_deleting": "Eliminada por todas as suas edições conterem links para $1",
-       "simpleantispam-label": "Verificação contra spam\n'''NÃO''' preencha isto!",
+       "simpleantispam-label": "Verificação contra spam.\n<strong>Não</strong>  preencha isto!",
        "pageinfo-title": "Informações sobre \"$1\"",
        "pageinfo-not-current": "Desculpe-nos, não é possível fornecer esses dados para edições antigas.",
        "pageinfo-header-basic": "Informação básica",
        "special-characters-title-emdash": "travessão",
        "special-characters-title-minus": "sinal de menos",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
-       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
+       "mw-widgets-titleinput-description-redirect": "Direto para $1"
 }
index 6ed709b..64f1e09 100644 (file)
@@ -64,7 +64,8 @@
                        "Leon saudanha",
                        "Macofe",
                        "He7d3r",
-                       "Ti4goc"
+                       "Ti4goc",
+                       "Jkb8"
                ]
        },
        "tog-underline": "Sublinhar ligações:",
        "passwordreset-emailtitle": "Detalhes da conta na {{SITENAME}}",
        "passwordreset-emailtext-ip": "Alguém (provavelmente você, a partir do endereço IP $1) pediu a recuperação da palavra-passe no projeto {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de utilizador está associada|As seguintes contas de utilizador estão associadas}} a este correio eletrónico:\n\n$2\n\n{{PLURAL:$3|Esta palavra-passe temporária irá|Estas palavras-passes temporárias irão}} expirar dentro de {{PLURAL:$5|um dia|$5 dias}}.\nDeve autenticar-se e escolher uma palavra-passe nova agora. Se outra pessoa fez este pedido, ou se entretanto se recordou da sua palavra-passe original e já não deseja alterá-la, pode ignorar esta mensagem e continuar a usar a palavra-passe antiga.",
        "passwordreset-emailtext-user": "O utilizador $1 do projeto {{SITENAME}} pediu a recuperação da sua palavra-passe no projeto {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de utilizador está associada|As seguintes contas de utilizador estão associadas}} a este endereço de correio eletrónico:\n\n$2\n\n{{PLURAL:$3|Esta palavra-passe temporária irá|Estas palavras-passes temporárias irão}} expirar dentro de {{PLURAL:$5|um dia|$5 dias}}.\nDeve autenticar-se e escolher uma palavra-passe nova agora. Se outra pessoa fez este pedido, ou se entretanto se recordou da sua palavra-passe original e já não deseja alterá-la, pode ignorar esta mensagem e continuar a usar a palavra-passe antiga.",
-       "passwordreset-emailelement": "Utilizador(a): $1\nPalavra-passe temporária: $2",
+       "passwordreset-emailelement": "{{GENDER:$1|Utilizador|Utilizadora}}: \n$1\n\nPalavra-passe temporária: \n$2",
        "passwordreset-emailsent": "Foi enviado um correio eletrónico para recuperação da palavra-passe.",
        "passwordreset-emailsent-capture": "Foi enviado um correio eletrónico para recuperação da palavra-passe, que é mostrado abaixo.",
        "passwordreset-emailerror-capture": "Foi gerado um correio eletrónico para redefinição da palavra-passe, mostrado abaixo, mas o seu envio para {{GENDER:$2|o utilizador|a utilizadora}} falhou: $1",
        "changeemail-password": "A sua palavra-passe em {{SITENAME}}:",
        "changeemail-submit": "Alterar correio eletrónico",
        "changeemail-throttled": "Realizou demasiadas tentativas de início de sessão.\nAguarde $1 antes de tentar novamente, por favor.",
+       "changeemail-nochange": "Por favor insira um novo endereço de e-mail.",
        "resettokens": "Redefinir chaves",
        "resettokens-text": "Pode redefinir as chaves de acesso a certos dados privados associados à sua conta aqui.\n\nDeve fazê-lo se as divulgou acidentalmente a alguém ou se a sua conta tiver sido comprometida.",
        "resettokens-no-tokens": "Não há chaves para redefinir.",
        "rows": "Linhas:",
        "columns": "Colunas:",
        "searchresultshead": "Pesquisar",
-       "stub-threshold": "Limite para a formatação de <a href=\"#\" class=\"stub\">ligações para esboços</a> (bytes):",
+       "stub-threshold": "Limite para a formatação de ligações para esboços ($1):",
+       "stub-threshold-sample-link": "amostra",
        "stub-threshold-disabled": "Desativado",
        "recentchangesdays": "Dias a apresentar nas mudanças recentes:",
        "recentchangesdays-max": "Máximo: $1 {{PLURAL:$1|dia|dias}}",
        "unusedimages": "Ficheiros não utilizados",
        "wantedcategories": "Categorias desejadas",
        "wantedpages": "Páginas desejadas",
-       "wantedpages-summary": "Lista de páginas inexistentes com o maior número de ligações à elas, excluindo páginas que possuem apenas redirecionamentos à elas. Para obter uma lista de páginas inexistentes que possuam redirecionamento à elas, veja [[{{#special:BrokenRedirects}}|a lista de redirecionamentos quebrados]].",
+       "wantedpages-summary": "Lista de páginas inexistentes com o maior número de ligações a elas, excluindo páginas que possuem apenas redirecionamentos a elas. Para obter uma lista de páginas inexistentes que possuam redirecionamento a elas, veja [[{{#special:BrokenRedirects}}|a lista de redirecionamentos quebrados]].",
        "wantedpages-badtitle": "Título inválido no conjunto de resultados: $1",
        "wantedfiles": "Ficheiros desejados",
        "wantedfiletext-cat": "Os seguintes ficheiros são usados, mas não existem. Ficheiros de repositórios externos podem ser listados apesar de existirem. Tais falsos positivos aparecerão <del>riscados</del>. Adicionalmente, as páginas que incorporam ficheiros que não existem estão listadas em [[:$1]].",
        "booksources-text": "É apresentada abaixo uma lista de ligações para outros sítios na Internet que vendem livros novos e usados e talvez possuam informações adicionais sobre os livros que procura:",
        "booksources-invalid-isbn": "O número ISBN fornecido não parece ser válido; verifique a existência de erros ao copiar da fonte original.",
        "specialloguserlabel": "Executante:",
-       "speciallogtitlelabel": "Alvo (página ou utilizador):",
+       "speciallogtitlelabel": "Alvo (título ou página ou {{ns:user}}:nome de utilizador):",
        "log": "Registos",
        "all-logs-page": "Todos os registos públicos",
        "alllogstext": "Apresentação combinada de todos os registos disponíveis na wiki {{SITENAME}}.\nPode reduzir a lista escolhendo um tipo de registo, um nome de utilizador ou um título de página. Respeite maiúsculas e minúsculas.",
        "tooltip-n-mainpage-description": "Visitar a página principal",
        "tooltip-n-portal": "Sobre o projeto, o que se pode fazer e onde encontrar as coisas",
        "tooltip-n-currentevents": "Informação temática sobre acontecimentos atuais",
-       "tooltip-n-recentchanges": "A lista de mudanças recentes nesta wiki.",
+       "tooltip-n-recentchanges": "Uma lista de mudanças recentes nesta wiki",
        "tooltip-n-randompage": "Carregar página aleatória",
        "tooltip-n-help": "Um local reservado para auxílio.",
        "tooltip-t-whatlinkshere": "Lista de todas as páginas que contêm ligações para esta",
        "tooltip-ca-nstab-main": "Ver a página de conteúdo",
        "tooltip-ca-nstab-user": "Ver a página de utilizador",
        "tooltip-ca-nstab-media": "Ver a página de multimédia",
-       "tooltip-ca-nstab-special": "Esta é uma página especial, não pode ser editada.",
+       "tooltip-ca-nstab-special": "Esta é uma página especial e não pode ser editada.",
        "tooltip-ca-nstab-project": "Ver a página de projeto",
        "tooltip-ca-nstab-image": "Ver a página de ficheiro",
        "tooltip-ca-nstab-mediawiki": "Ver a mensagem de sistema",
        "tags-edit-success": "As alterações foram aplicadas com sucesso.",
        "tags-edit-failure": "As alterações não puderam ser aplicadas:\n$1",
        "tags-edit-nooldid-title": "Revisão de página inválida",
-       "tags-edit-nooldid-text": "Não foi especificada nenhuma revisão na qual será realizada esta acção, ou a revisão especificada não existe.",
+       "tags-edit-nooldid-text": "Não foi especificada nenhuma revisão na qual será realizada esta ação, ou a revisão especificada não existe.",
        "tags-edit-none-selected": "Por favor, selecione pelo menos uma etiqueta para adicionar ou remover.",
        "comparepages": "Comparar páginas",
        "compare-page1": "Página 1",
        "logentry-newusers-create2": "A conta de utilizador $3 foi criada por $1",
        "logentry-newusers-byemail": "A conta de utilizador $3 foi criada por $1 e a palavra-passe foi enviada por correio eletrónico",
        "logentry-newusers-autocreate": "A conta de utilizador $1 foi criada automaticamente",
-       "logentry-protect-move_prot": "$1 {{GENDER:$2|moveu}} as preferências de protecção de $4 para $3",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|moveu}} as preferências de proteção de $4 para $3",
        "logentry-rights-rights": "$1 modificou os privilégios do utilizador $3 de $4 para $5",
        "logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
        "logentry-rights-autopromote": "$1 foi automaticamente {{GENDER:$2|promovido|promovida}} de $4 a $5",
index 7ced5c2..e86c298 100644 (file)
                        "Macofe",
                        "FRacco",
                        "Robin0van0der0vliet",
-                       "TTO"
+                       "TTO",
+                       "J. 'mach' wust",
+                       "Ciencia Al Poder"
                ]
        },
        "sidebar": "{{notranslate}}",
        "tog-underline": "[[Special:Preferences]], tab 'Misc'. Offers user a choice how to underline links. {{Gender}}",
-       "tog-hideminor": "[[Special:Preferences]], tab 'Recent changes'. Offers user to hide minor edits in recent changes or not. {{Gender}}",
-       "tog-hidepatrolled": "Option in Recent changes tab of [[Special:Preferences]] (if [[mw:Manual:$wgUseRCPatrol|$wgUseRCPatrol]] is enabled). {{Gender}}",
+       "tog-hideminor": "[[Special:Preferences]], tab 'Recent changes'. Offers user to hide minor edits in recent changes or not. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-hidepatrolled": "Option in Recent changes tab of [[Special:Preferences]] (if [[mw:Manual:$wgUseRCPatrol|$wgUseRCPatrol]] is enabled). {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
        "tog-newpageshidepatrolled": "Toggle in [[Special:Preferences]], section \"Recent changes\" (if [[mw:Manual:$wgUseRCPatrol|$wgUseRCPatrol]] is enabled). {{Gender}}",
        "tog-extendwatchlist": "[[Special:Preferences]], tab 'Watchlist'. Offers user to show all applicable changes in watchlist (by default only the last change to a page on the watchlist is shown). {{Gender}}",
        "tog-usenewrc": "{{Gender}}\nUsed as label for the checkbox in [[Special:Preferences]], tab \"Recent changes\".\n\nOffers user to use alternative representation of [[Special:RecentChanges]] and watchlist.",
        "tog-fancysig": "In user preferences under the signature box.  {{Gender}}",
        "tog-uselivepreview": "{{Gender}}\nToggle option used in [[Special:Preferences]].\n\nLive preview is a feature to use edit preview without loading the page again.",
        "tog-forceeditsummary": "Toggle option used in [[Special:Preferences]] to force an edit ''{{msg-mw|summary}}''. {{Gender}}",
-       "tog-watchlisthideown": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide own edits from watchlist. {{Gender}}",
-       "tog-watchlisthidebots": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide bot edits from watchlist. {{Gender}}",
-       "tog-watchlisthideminor": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide minor edits from watchlist. {{Gender}}",
-       "tog-watchlisthideliu": "Option in tab 'Watchlist' of [[Special:Preferences]]. {{Gender}}",
-       "tog-watchlisthideanons": "Option in tab 'Watchlist' of [[Special:Preferences]]. {{Gender}}",
-       "tog-watchlisthidepatrolled": "Option in Watchlist tab of [[Special:Preferences]]. {{Gender}}",
+       "tog-watchlisthideown": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide own edits from watchlist. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-watchlisthidebots": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide bot edits from watchlist. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-watchlisthideminor": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide minor edits from watchlist. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-watchlisthideliu": "Option in tab 'Watchlist' of [[Special:Preferences]]. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-watchlisthideanons": "Option in tab 'Watchlist' of [[Special:Preferences]]. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-watchlisthidepatrolled": "Option in Watchlist tab of [[Special:Preferences]]. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
        "tog-ccmeonemails": "Option in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}. {{Gender}}",
        "tog-diffonly": "Toggle option used in [[Special:Preferences]]. {{Gender}}",
        "tog-showhiddencats": "Toggle option used in [[Special:Preferences]]. {{Gender}}",
        "editfont-monospace": "Option used in [[Special:Preferences]], tab Editing. {{Gender}}",
        "editfont-sansserif": "Option used in [[Special:Preferences]], tab Editing. {{Gender}}",
        "editfont-serif": "Option used in [[Special:Preferences]], tab Editing. {{Gender}}",
-       "sunday": "Name of the day of the week.",
-       "monday": "Name of the day of the week.",
-       "tuesday": "Name of the day of the week.",
-       "wednesday": "Name of the day of the week.",
-       "thursday": "Name of the day of the week.",
-       "friday": "Name of the day of the week.",
-       "saturday": "Name of the day of the week.",
+       "sunday": "Name of the day of the week.\n{{Identical|Sunday}}",
+       "monday": "Name of the day of the week.\n{{Identical|Monday}}",
+       "tuesday": "Name of the day of the week.\n{{Identical|Tuesday}}",
+       "wednesday": "Name of the day of the week.\n{{Identical|Wednesday}}",
+       "thursday": "Name of the day of the week.\n{{Identical|Thursday}}",
+       "friday": "Name of the day of the week.\n{{Identical|Friday}}",
+       "saturday": "Name of the day of the week.\n{{Identical|Saturday}}",
        "sun": "Abbreviation for Sunday, a day of the week.",
        "mon": "Abbreviation for Monday, a day of the week.",
        "tue": "Abbreviation for Tuesday, a day of the week.",
        "virus-scanfailed": "Used as error message. \"scan\" stands for \"virus scan\". Parameters:\n* $1 - exit code of virus scanner",
        "virus-unknownscanner": "Used as error message. This message is followed by the virus scanner name.",
        "logouttext": "Log out message. Parameters:\n* $1 - (Unused) an URL to [[Special:Userlogin]] containing <code>returnto</code> and <code>returntoquery</code> parameters",
-       "welcomeuser": "Text for a welcome heading that users see after registering a user account.\n\nParameters:\n* $1 - the username of the new user. See [[bugzilla:42215]]",
-       "welcomecreation-msg": "A welcome message users see after registering a user account, following a welcomeuser heading.\n\nParameters:\n* $1 - (Unused) the username of the new user.\n\nReplaces welcomecreation in 1.21wmf5, see [[bugzilla:42215]]",
+       "welcomeuser": "Text for a welcome heading that users see after registering a user account.\n\nParameters:\n* $1 - the username of the new user. See [[phab:T44215]]",
+       "welcomecreation-msg": "A welcome message users see after registering a user account, following a welcomeuser heading.\n\nParameters:\n* $1 - (Unused) the username of the new user.\n\nReplaces [[MediaWiki:welcomecreation|welcomecreation]] in 1.21wmf5, see [[phab:T44215]]",
        "yourname": "Since 1.22 no longer used in core, but used by some extensions.\n{{Identical|Username}}",
        "userlogin-yourname": "In user login & create account forms, label for username field.\n{{doc-important|<nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is '''NOT''' supported.}}\n\nSee examples: [[Special:UserLogin]] and [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n{{Identical|Username}}",
        "userlogin-yourname-ph": "Placeholder text in login & create account form field.\n\nSee example: [[Special:UserLogin]] and [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
        "changeemail-password": "Label for password field in [[Special:ChangeEmail]].",
        "changeemail-submit": "Submit button on [[Special:ChangeEmail]]",
        "changeemail-throttled": "Error message shown at [[Special:ChangeEmail]] after the user has tried to login with incorrect password too many times.\n\nThe user has to wait a certain time before trying to log in again.\n\nParameters:\n* $1 - the time to wait before the next login attempt. Automatically formatted using the following duration messages:\n** {{msg-mw|Duration-millennia}}\n** {{msg-mw|Duration-centuries}}\n** {{msg-mw|Duration-decades}}\n** {{msg-mw|Duration-years}}\n** {{msg-mw|Duration-weeks}}\n** {{msg-mw|Duration-days}}\n** {{msg-mw|Duration-hours}}\n** {{msg-mw|Duration-minutes}}\n** {{msg-mw|Duration-seconds}}\n\nThis is a protection against robots trying to find the password by trying lots of them.\nThe number of attempts and waiting time are configured via [[mw:Manual:$wgPasswordAttemptThrottle|$wgPasswordAttemptThrottle]].\nThis message is used in html.\n\nSee also:\n* {{msg-mw|Changepassword-throttled}}",
+       "changeemail-nochange": "Error message shown on [[Special:ChangeEmail]] if the old email address was entered in the new email address field.",
        "resettokens": "{{doc-special|ResetTokens}}\nIn this case \"token\" may be translated as \"key\", or similar.\n{{Identical|Reset token}}",
        "resettokens-summary": "{{ignored}}",
        "resettokens-text": "Text on [[Special:ResetTokens]].",
        "sectioneditnotsupported-text": "I think this is the text of an error message, which presumably appears when someone tries to edit a section, and section editing is disabled. Explanation of section editing on [[meta:Help:Section_editing#Section_editing|meta]].",
        "permissionserrors": "Used as title of error message.\n\nSee also:\n* {{msg-mw|loginreqtitle}}\n{{Identical|Permission error}}",
        "permissionserrorstext": "This message is \"without action\" version of {{msg-mw|Permissionserrorstext-withaction}}.\n\nParameters:\n* $1 - the number of reasons that were found why ''the action'' cannot be performed",
-       "permissionserrorstext-withaction": "This message is \"with action\" version of {{msg-mw|Permissionserrorstext}}.\n\nParameters:\n* $1 - the number of reasons that were found why the action cannot be performed\n* $2 - one of the action-* messages (for example {{msg-mw|action-edit}}) or other such messages tagged with {{tl|doc-action}} in their documentation\n\nPlease report at [[Support]] if you are unable to properly translate this message. Also see [[bugzilla:14246]] (now closed) for background.",
+       "permissionserrorstext-withaction": "This message is \"with action\" version of {{msg-mw|Permissionserrorstext}}.\n\nParameters:\n* $1 - the number of reasons that were found why the action cannot be performed\n* $2 - one of the action-* messages (for example {{msg-mw|action-edit}}) or other such messages tagged with {{tl|doc-action}} in their documentation\n\nPlease report at [[Support]] if you are unable to properly translate this message. Also see [[phab:T16246]] (now closed) for background.",
        "recreate-moveddeleted-warn": "Warning shown when creating a page which has already been deleted. See for example [[Test]].",
        "moveddeleted-notice": "Shown on top of a deleted page in normal view modus ([{{canonicalurl:Test}} example]).",
+       "moveddeleted-notice-recent": "Shown on top of a recently deleted page in normal view modus ([{{canonicalurl:Test}} example]).",
        "log-fulllog": "Used as link text.",
        "edit-hook-aborted": "Used as error message.\n\nSee also:\n* {{msg-mw|edit-gone-missing}}\n* {{msg-mw|edit-conflict}}\n* {{msg-mw|edit-no-change}}\n* {{msg-mw|edit-already-exists}}",
        "edit-gone-missing": "Used as error message.\n\nSee also:\n* {{msg-mw|edit-hook-aborted}}\n* {{msg-mw|edit-conflict}}\n* {{msg-mw|edit-no-change}}\n* {{msg-mw|edit-already-exists}}",
        "rows": "Used on [[Special:Preferences]], \"Editing\" section in the \"Size of editing window\" fieldset.\n{{Identical|Row}}",
        "columns": "Used on [[Special:Preferences]], \"Editing\" section in the \"Size of editing window\" fieldset.\n{{Identical|Column}}",
        "searchresultshead": "Replaced by {{msg-mw|prefs-searchoptions}}, though may still be used in some extensions. DEPRECATED.\n\n{{Identical|Search}}",
-       "stub-threshold": "Used in [[Special:Preferences]], tab \"Misc\".",
+       "stub-threshold": "Used in [[Special:Preferences]], \"Advanced options\" section. The setting allows the user to select a threshold value, in bytes, from a predefined list of options. Any links that lead to pages smaller than the threshold (\"stub links\") will be styled differently.\n\nParameters:\n* $1: the text of {{msg-mw|stub-threshold-sample-link}}, styled as a stub link",
+       "stub-threshold-sample-link": "Passed as a parameter to the {{msg-mw|stub-threshold}} message.",
        "stub-threshold-disabled": "Used in [[Special:Preferences]].\n{{Identical|Disabled}}",
        "recentchangesdays": "Used in [[Special:Preferences]], tab \"Recent changes\".",
        "recentchangesdays-max": "Shown as hint in [[Special:Preferences]], tab \"Recent changes\". Parameters:\n* $1 - number of days\nSee also:\n* {{msg-mw|Prefs-watchlist-days-max}}",
        "overwroteimage": "{{ignored}}This is a ''logentry'' message only used on IRC. $1 is the name of the file uploaded.",
        "uploaddisabled": "Title of the [[Special:Upload]] page when upload is disabled.\n\nSee also:\n* {{msg-mw|Copyuploaddisabled}}",
        "copyuploaddisabled": "See also:\n* {{msg-mw|Uploaddisabled}}",
-       "uploaddisabledtext": "Parameters:\n* $1 - (Optional) the name of the target file. See r22243 and [[bugzilla:8818|bug 8818]].",
+       "uploaddisabledtext": "Parameters:\n* $1 - (Optional) the name of the target file. See [[mw:Special:Code/MediaWiki/r22243|r22243]] and [[phab:T10818|T10818]].",
        "php-uploaddisabledtext": "This means that file uploading is disabled in PHP, not upload of PHP-files.",
        "uploadscripted": "Used as error message when uploading a file.\n\nSee also:\n* {{msg-mw|zip-wrong-format}}\n* {{msg-mw|uploadjava}}\n* {{msg-mw|uploadvirus}}",
        "upload-scripted-pi-callback": "Used as error message when uploading an SVG file that contains xml-stylesheet processing instruction.",
        "upload-warning-msg": "Used as warning body which is posted on the user talk page. Parameters:\n* $1 - the URL the file was uploaded from, when using upload-by-URL\n* $2 - the session key for the upload\nSee also:\n* {{msg-mw|Upload-warning-subj|subject}}",
        "upload-proto-error": "See also:\n* {{msg-mw|Upload-proto-error|title}}\n* {{msg-mw|Upload-proto-error-text|text}}",
        "upload-proto-error-text": "\"Remote upload\" is explained on [[w:Uploading_and_downloading#Remote_upload|Wikipedia]].\n\nSee also:\n* {{msg-mw|Upload-proto-error|title}}\n* {{msg-mw|Upload-proto-error-text|text}}",
-       "upload-file-error": "Unused on core [http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/specials/SpecialUpload.php?r1=53161&r2=53282].\n\nExtensions making use of it:\n*ImportFreeImages\n*SemanticForms\nSee also:\n* {{msg-mw|Upload-file-error|title}}\n* {{msg-mw|Upload-file-error-text|text}}\n{{Identical|Internal error}}",
+       "upload-file-error": "Unused on core [[mw:Special:Code/MediaWiki/53282]].\n\nExtensions making use of it:\n*ImportFreeImages\n*SemanticForms\nSee also:\n* {{msg-mw|Upload-file-error|title}}\n* {{msg-mw|Upload-file-error-text|text}}\n{{Identical|Internal error}}",
        "upload-file-error-text": "See also:\n* {{msg-mw|Upload-file-error|title}}\n* {{msg-mw|Upload-file-error-text|text}}",
        "upload-misc-error": "See also:\n* {{msg-mw|Upload-misc-error|title}}\n* {{msg-mw|Upload-misc-error-text|text}}",
        "upload-misc-error-text": "See also:\n* {{msg-mw|Upload-misc-error|title}}\n* {{msg-mw|Upload-misc-error-text|text}}",
        "listusers-summary": "{{notranslate}}\nThe summary displayed at the top of [[Special:Listusers]]. [[mw:Manual:Interface/Special pages summary|mw manual]].",
        "listusers-editsonly": "Option in [[Special:ListUsers]].",
        "listusers-creationsort": "Option in [[Special:ListUsers]].",
-       "listusers-desc": "Used as label for the checkbox.",
+       "listusers-desc": "Used as label for the checkbox on [[Special:ListUsers]].",
        "usereditcount": "Shown behind every username on [[Special:ListUsers]]. Parameters:\n* $1 - number of edits",
        "usercreated": "Used in [[Special:ListUsers]]. Parameters:\n* $1 - a date\n* $2 - a time\n* $3 - the name of the user, for use in GENDER",
        "newpages": "{{doc-special|NewPages}}\n{{Identical|New page}}",
        "autosumm-new": "The auto summary when creating a new page. $1 are the first X number of characters of the new page.",
        "autosumm-newblank": "The automatic edit summary when creating a blank page. This is not the same as blanking a page.",
        "autoblock_whitelist": "{{notranslate}}",
-       "size-bytes": "{{optional}}\nSize (of a page, typically) in bytes.",
+       "size-bytes": "Size (of a page, typically) in bytes.",
        "size-kilobytes": "{{optional}}\nSize (of a page, typically) in kibibytes (1 kibibyte = 1024 bytes).",
        "size-megabytes": "{{optional}}\nSize (of a file, typically) in mebibytes (1 mebibyte = 1024×1024 bytes).",
        "size-gigabytes": "{{optional}}\nSize (of a file, typically) in gibibytes (1 gibibyte = 1024×1024×1024 bytes).",
        "size-exabytes": "{{optional}}\nSize (of a file, typically) in exbibytes (1 exbibytes = 1024×1024×1024×1024×1024×1024 bytes).",
        "size-zetabytes": "{{optional}}\nSize (of a file, typically) in zebibytes (1 zebibytes = 1024×1024×1024×1024×1024×1024×1024 bytes).",
        "size-yottabytes": "{{optional}}\nSize (of a file, typically) in yobibytes (1 yobibytes = 1024×1024×1024×1024×1024×1024×1024×1024 bytes).",
-       "size-pixel": "{{optional}}\nSize (of a file, typically) in pixel.",
+       "size-pixel": "Size (of a file, typically) in pixel.",
        "size-kilopixel": "{{optional}}\nSize (of a file, typically) in kilopixel (1 kilopixel = 1000 pixel).",
        "size-megapixel": "{{optional}}\nSize (of a file, typically) in megapixel (1 megapixel = 1000×1000 pixel).",
        "size-gigapixel": "{{optional}}\nSize (of a file, typically) in gigapixel (1 gigapixel = 1000×1000×1000 pixel).",
        "logentry-move-move-noredirect": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "logentry-move-move_redir": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "logentry-move-move_redir-noredirect": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
-       "logentry-patrol-patrol": "{{Logentry|[[Special:Log/patrol]]}}\n* $4 - a formatted revision number, maybe linked to the diff.",
-       "logentry-patrol-patrol-auto": "{{Logentry|[[Special:Log/patrol]]}}\n* $4 - a formatted revision number, maybe linked to the diff.\n\"Automatically\" refers to users with autopatrol right who mark revisions automatically patrolled when editing.",
+       "logentry-patrol-patrol": "{{Logentry|[[Special:Log/patrol]]}}\n* $4 - a formatted revision number, maybe linked to the diff.\n\nSee also:\n* {{msg-mw|logentry-patrol-patrol-auto}}",
+       "logentry-patrol-patrol-auto": "{{Logentry|[[Special:Log/patrol]]}}\n* $4 - a formatted revision number, maybe linked to the diff.\n\"Automatically\" refers to users with autopatrol right who mark revisions automatically patrolled when editing.\n\nSee also:\n* {{msg-mw|logentry-patrol-patrol}}",
        "logentry-newusers-newusers": "The user (previously unregistered) has registered on the wiki, creating an account for self.\n----\n{{Logentry|[[Special:Log/newusers]]}}",
        "logentry-newusers-create": "{{Logentry|[[Special:Log/newusers]]}}\n\n$4 is the gender of the target user.",
        "logentry-newusers-create2": "{{Logentry|[[Special:Log/newusers]]}}\n\n$4 is the name of the user that was created.",
        "limitreport-postexpandincludesize-value": "Format for the \"Post-expand include size\" row in the limit report table. Parameters:\n* $1 - the usage (in bytes)\n* $2 - the maximum (in bytes)",
        "limitreport-templateargumentsize": "Label for the \"Template argument size\" row in the limit report table",
        "limitreport-templateargumentsize-value": "Format for the \"Template argument size\" row in the limit report table.\n\nParameters:\n* $1 - the usage (in bytes)\n* $2 - the maximum (in bytes)",
-       "limitreport-expansiondepth": "Label for the \"Highest expansion depth\" row in the limit report table",
+       "limitreport-expansiondepth": "Label for the \"Highest expansion depth\" row in the limit report table.\n\nIf \"highest depth\" is an oxymoron in your language, use \"deepest (depth)\" instead.",
        "limitreport-expansiondepth-value": "{{optional}}\nFormat for the \"Highest expansion depth\" row in the limit report table.\n\nParameters:\n* $1 - the depth\n* $2 - the maximum",
        "limitreport-expensivefunctioncount": "Label for the \"Expensive parser function count\" row in the limit report table",
        "limitreport-expensivefunctioncount-value": "{{optional}}\nFormat for the \"Expensive parser function count\" row in the limit report table.\n\nParameters:\n* $1 - the usage\n* $2 - the maximum",
index 7ec0ccb..de2d53b 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}}-paq rakiqunamanta willakuna",
        "passwordreset-emailtext-ip": "Pipas (qamchiki, $1 IP huchhayuq tiyaymanta) {{SITENAME}}-paq ($4)\nrakiqunaykipaq yaykuna rimata kutichinatam mañakurqan. Kay qatiq ruraqpa {{PLURAL:$3|rakiqunanmi|rakiqunankunam}}\nkay e-chaski imamaytayuq kachkan:\n\n$2\n\nKay mit'alla yaykuna {{PLURAL:$3|rimaqa|rimakunaqa}} kunanmanta {{PLURAL:$5|huk p'unchawpi|$5 p'unchawpi}} mawk'ayanqam.\nYaykuspayki musuq yaykuna rimaykitam akllankiman. Pi wakiykipas kayta mañakurqaptinqa,\nicha qam ñawpaq yaykuna rimaykita yuyaspayki manaña wakinchayta munaspaykiqa,\nkay willayta mana qhawaspa mana imatapas ruraspa ñawpaq yaykuna rimaykiwanmi llamk'ayta atinki.",
        "passwordreset-emailtext-user": "{{SITENAME}}-pi kaq $1 sutiyuq ruraqqa {{SITENAME}}-paq ($4)\nrakiqunaykipaq yaykuna rimata kutichinatam mañakurqan. Kay qatiq ruraqpa {{PLURAL:$3|rakiqunanmi|rakiqunankunam}}\nkay e-chaski imamaytayuq kachkan:\n\n$2\n\nKay mit'alla yaykuna {{PLURAL:$3|rimaqa|rimakunaqa}} kunanmanta {{PLURAL:$5|huk p'unchawpi|$5 p'unchawpi}} mawk'ayanqam.\nYaykuspayki musuq yaykuna rimaykitam akllankiman. Pi wakiykipas kayta mañakurqaptinqa,\nicha qam ñawpaq yaykuna rimaykita yuyaspayki manaña wakinchayta munaspaykiqa,\nkay willayta mana qhawaspa mana imatapas ruraspa ñawpaq yaykuna rimaykiwanmi llamk'ayta atinki.",
-       "passwordreset-emailelement": "Ruraqpa sutin: $1\nMit'alla yaykuna rima: $2",
+       "passwordreset-emailelement": "Ruraqpa sutin: \n$1\n\nMit'alla yaykuna rima: \n$2",
        "passwordreset-emailsent": "Yaykuna rimata kutichina e-chaskiqa kachasqañam.",
        "passwordreset-emailsent-capture": "Yaykuna rimata kutichina e-chaskiqa kachasqañam, kay qatiqpi rikunki.",
        "passwordreset-emailerror-capture": "{{GENDER:$2|}}Yaykuna rimata kutichina e-chaskiqa rurasqa karqan, imatachus kay qatiqpi rikunki, ichataq kachasqa kaptin pantasqam tukurqan: $1",
        "emailuser": "Kay ruraqman e-chaskita kachay",
        "emailuser-title-target": "Kay {{GENDER:$1|ruraqman}} e-chaskita kachay",
        "emailuser-title-notarget": "E-chaski kay ruraqman:",
-       "emailpage": "E-chaski kay ruraqman:",
        "emailpagetext": "Kay uranpi kaq hunt'ana p'anqatam llamk'achiyta atinki kay {{GENDER:$1|ruraqman}} e-chaskita kachanaykipaq.\nQampa [[Special:Preferences|allinkachinaykikunapi]] qillqakamachisqayki imamaytaqa paqarinqa kachasqayki e-chaskipi chaskiqpa kutichisunaykita atinanpaq.",
        "defemailsubject": "{{SITENAME}} p'anqamanta chaski \"$1\" sutiyuq ruraqmanta",
        "usermaildisabled": "Ruraqpa e-chaskinqa hark'asqam",
index 3ae9792..efc7a1f 100644 (file)
        "passwordreset-emailtitle": "Detagls davart il conto sn {{SITENAME}}",
        "passwordreset-emailtext-ip": "Insatgi (probablamain ti, da l'adressa IP $1) ha dumandà da redefinir il pled-clav per la pagina {{SITENAME}} ($4). \n{{PLURAL:$3|Il suandant conto d'utilisader è collià|Ils suandants contos d'utilisader èn colliads}} cun questa adressa d'e-mail:\n\n$2\n\n{{PLURAL:$3|Quest pled-clav temporar|Quests pleds-clav temporars}} èn valids {{PLURAL:$5|in di|$5 dis}}.\nTi duessas t'annunziar ussa e tscherner in nov pled-clav. Sch'enzatgi auter ha empustà quests novs pleds-clav u sche ti ta regordas puspè da tes pled-clav original e na vuls betg pli midar el, pos ti ignorar quest messadi e cuntinuar d'utilisar tes pled-clav original.",
        "passwordreset-emailtext-user": "L'utilisader $1 sin {{SITENAME}} ha dumandà da redefinir il pled-clav per {{SITENAME}} ($4). \n{{PLURAL:$3|Il suandant conto d'utilisader è collià|Ils suandants contos d'utilisader èn colliads}} cun questa adressa dad e-mail:\n\n$2\n\n{{PLURAL:$3|Quest pled-clav temporar|Quests pled-clav temporars}} èn valids {{PLURAL:$5|in di|$5 dis}}.\nTi duessas t'annunziar ussa e tscherner in nov pled-clav. Sche ti na levas betg quests novs pleds-clav u sche ti ta regordas puspè da tes pled-clav original e na vuls betg pli midar il pled-clav pos ti ignorar quest messadi e cuntinuar dad utilisar tes pled-clav original.",
-       "passwordreset-emailelement": "Num d'utilisader: $1\nPled-clav temporar: $2",
+       "passwordreset-emailelement": "Num d'utilisader: \n$1\n\nPled-clav temporar: \n$2",
        "passwordreset-emailsent": "In e-mail per redefinir il pled-clav è vegnì tramess.",
        "passwordreset-emailsent-capture": "In e-mail (sco mussà sutvart) per redefinir il pled-clav è vegnì tramess.",
        "passwordreset-emailerror-capture": "In e-mail (sco mussà sutvart) per redefinir il pled-clav è vegnì generà ma n'ha betg pudì envià a l'{{GENDER:$2|utilisader|utilisadra}}: $1",
        "emailuser": "Trametter in e-mail a quest utilisader",
        "emailuser-title-target": "Trametta in e-mail a {{GENDER:$1|quest utilisader|questa utilisadra}}",
        "emailuser-title-notarget": "Trametter in e-mail a l'utilisader",
-       "emailpage": "Trametter in e-mail a l'utilisader",
        "emailpagetext": "Ti pos utilisar il formular sutvart per trametter in'e-mail a {{GENDER:$1|quest utilisader|questa utilisadra}}.\nL'adressa dad e-mail che ti has endatà en [[Special:Preferences|tias preferenzas]] vegn inditgada sco speditur da l'e-mail, uschia {{GENDER:$1|ch'il retschavider|che la retschavidra}} po rispunder directamain a tai.",
        "defemailsubject": "{{SITENAME}} e-mail da l'utilisader \"$1\"",
        "usermaildisabled": "Trametter e-mails è deactivà",
index 0980b6f..b80552f 100644 (file)
        "passwordreset-emailtitle": "Detalii despre cont pe {{SITENAME}}",
        "passwordreset-emailtext-ip": "Cineva (probabil dumneavoastră, de la adresa IP $1) a solicitat resetarea parolei \npentru {{SITENAME}} ($4). {{PLURAL:$3|Următorul cont este asociat|Următoarele conturi sunt asociate}}\ncu această adresă de e-mail:\n\n$2\n\n{{PLURAL:$3|Această parolă temporară va|Aceste parole temporare vor}} expira {{PLURAL:$5|într-o zi|în $5 zile}}.\nAr trebui să vă autentificați și să schimbați parola acum. Dacă altcineva a făcut această cerere \nsau dacă v-ați reamintit parola inițială și nu mai doriți să o schimbați,\nputeți ignora acest mesaj, continuând să utilizați vechea parolă.",
        "passwordreset-emailtext-user": "Utilizatorul $1 de pe {{SITENAME}} a solicitat o resetare a parolei dumneavoastră pentru {{SITENAME}} ($4). Următorul utilizator are {{PLURAL:$3|contul asociat|conturile asociate}} cu această adresă de e-mail:\n\n$2\n\n{{PLURAL:$3|Această parolă temporară va|Aceste parole temporare vor}} expira {{PLURAL:$5|într-o zi|în $5 zile}}.\nAr trebui să vă autentificați și să alegeți acum o nouă parolă. Dacă altcineva a făcut această solicitare, ori dacă v-ați reamintit parola originală și nu mai doriți modificarea ei, puteți ignora acest mesaj, continuând cu vechea parolă.",
-       "passwordreset-emailelement": "Nume de utilizator: $1\nParolă temporară: $2",
+       "passwordreset-emailelement": "Nume de utilizator: \n$1\n\nParolă temporară: \n$2",
        "passwordreset-emailsent": "A fost trimis un e-mail de resetare a parolei.",
        "passwordreset-emailsent-capture": "Un mesaj de resetare a parolei a fost trimis, fiind afișat mai jos.",
        "passwordreset-emailerror-capture": "Un mesaj de resetare a parolei a fost generat (fiind afișat mai jos), dar trimiterea sa către {{GENDER:$2|utilizator}} a eșuat: $1",
        "rows": "Rânduri:",
        "columns": "Coloane:",
        "searchresultshead": "Parametri căutare",
-       "stub-threshold": "Valoarea minimă pentru un <a href=\"#\" class=\"stub\">ciot</a> (octeți):",
+       "stub-threshold": "Pragul pentru formatarea legăturilor către cioturi ($1):",
+       "stub-threshold-sample-link": "exemplu",
        "stub-threshold-disabled": "Dezactivat",
        "recentchangesdays": "Numărul de zile afișate în schimbări recente:",
        "recentchangesdays-max": "(maxim {{PLURAL:$1|o zi|$1 zile}})",
        "booksources-text": "Mai jos se află o listă de legături înspre alte situri care vând cărți noi sau vechi și care pot oferi informații suplimentare despre cărțile pe care le căutați:",
        "booksources-invalid-isbn": "Codul ISBN oferit nu este valid; verificați dacă a fost copiat corect de la sursa originală.",
        "specialloguserlabel": "Executant:",
-       "speciallogtitlelabel": "Destinație (titlu sau utilizator):",
+       "speciallogtitlelabel": "Destinație (titlu sau {{ns:user}}:numeutilizator pentru utilizator):",
        "log": "Jurnale",
        "all-logs-page": "Toate jurnalele publice",
        "alllogstext": "Afișare combinată a tuturor jurnalelor {{SITENAME}}.\nPuteți limita vizualizarea selectând tipul jurnalului, numele de utilizator sau pagina afectată.",
        "tooltip-ca-nstab-main": "Vedeți conținutul paginii",
        "tooltip-ca-nstab-user": "Vezi pagina de utilizator",
        "tooltip-ca-nstab-media": "Vezi pagina media",
-       "tooltip-ca-nstab-special": "Aceasta este o pagină specială, nu o puteți modifica direct.",
+       "tooltip-ca-nstab-special": "Aceasta este o pagină specială și nu poate fi modificată",
        "tooltip-ca-nstab-project": "Vezi pagina proiectului",
        "tooltip-ca-nstab-image": "Vezi pagina fişierului",
        "tooltip-ca-nstab-mediawiki": "Vedeți mesajul de sistem",
index 9f60825..6538d68 100644 (file)
        "passwordreset-emailtitle": "Dettaglie d'u cunde utende sus a {{SITENAME}}",
        "passwordreset-emailtext-ip": "Quacchedune (pò essere tu, da 'u 'ndirizze IP $1) ha richieste 'na mail pe arrecurdarse de le dettaglie d'u cunde sue pe {{SITENAME}} ($4). {{PLURAL:$3|'U cunde utende seguende jè|le cunde utinde seguende sonde}} associate cu st'indirizze e-mail:\n\n$2\n\n{{PLURAL:$3|Sta passuord temboranèe scade|Ste passuord temboranèe scadene}} 'mbrà {{PLURAL:$5|'nu sciurne|$5 sciurne}}.\nTu avissa trasè e scacchià 'na passuord nova. Ce quacchedun'otre ha fatte sta richieste, o ce tu t'è arrecurdate 'a passuord origgenale toje, e non g'a vuè ccu cange cchiù, tu puè ignorà stu messagge e condinuà ausanne 'a passuord vecchie.",
        "passwordreset-emailtext-user": "L'utende $1 sus a {{SITENAME}} ave richieste 'na mail pe arrecurdarse le dettaglie d'u cunde sue pe {{SITENAME}}\n($4). {{PLURAL:$3|'U cunde utende seguende jè|le cunde utinde seguende sonde}} associate cu st'indirizze e-mail:\n\n$2\n\n{{PLURAL:$3|Sta passuord temboranèe scade|Ste passuord temboranèe scadene}}  'mbrà {{PLURAL:$5|'nu sciurne|$5 sciurne}}.\nTu avissa trasè e scacchià 'na passuord nova. Ce quacchedun'otre ha fatte sta richieste, o ce tu t'è arrecurdate 'a passuord origgenale toje, e non g'a vuè ccu cange cchiù, tu puè ignorà stu messagge e condinuà ausanne 'a passuord vecchie.",
-       "passwordreset-emailelement": "Nome utende: $1<br />\nPassuord temboranèe: $2",
+       "passwordreset-emailelement": "Nome utende: \n$1\n\nPassuord temboranèe: \n$2",
        "passwordreset-emailsent": "'N'e-mail pe arrecurdarte ha state mannate.",
        "passwordreset-emailsent-capture": "'Na e-mail pe azzeramende d'a passuord ha state mannate, ca jè fatte vedè aqquà sotte.",
        "passwordreset-emailerror-capture": "'Na e-mail de azzeramende d'a passuord ha state generate, ca jè fatte vedè aqquà sotte, ma 'u 'nvie a {{GENDER:$2|l'utende}} ha fallite: $1",
        "changeemail-password": "'A passuord tue de {{SITENAME}}:",
        "changeemail-submit": "Cange e-mail",
        "changeemail-throttled": "Tu è pruvate troppe vote a trasè.\nPe piacere aspitte $1 apprime de pruvà arrete.",
+       "changeemail-nochange": "Pe piacere mitte 'n'otre indirizze email.",
        "resettokens": "Azzere le gettone",
        "resettokens-text": "Tu puè azzerà le gettone le quale te donne l'accesse a certe date private collegate cu 'u cunde tune aqquà.\n\nTu avissa farle ce pe sbaglie l'è condivise cu otre o ce 'u cunde tune ha state combromesse.",
        "resettokens-no-tokens": "Non ge stonne gettone de azzerà.",
        "rows": "Righe:",
        "columns": "Culonne:",
        "searchresultshead": "Cirche",
-       "stub-threshold": "Soglie pe <a href=\"#\" class=\"stub\">collegamende stub</a> de formattazione (byte):",
+       "stub-threshold": "Soglie pe collegamende stub de formattazione ($1):",
+       "stub-threshold-sample-link": "esembie",
        "stub-threshold-disabled": "Disabbilitate",
        "recentchangesdays": "Sciurne da fà vedè jndr'à le cangiaminde recende:",
        "recentchangesdays-max": "(massime $1 {{PLURAL:$1|sciurne|sciurne}})",
        "booksources-text": "Sotte stè 'na liste de collegaminde a otre site ca vennene libbre nuève e ausete e puà pure acchià cchiù 'mbormaziune sus a le libbre ca tu ste cirche:",
        "booksources-invalid-isbn": "L'ISBN ca è mise non ge pare ca ète corrette; verifiche ce è commesse quacche errore quanne ste cupiave quidde origginale.",
        "specialloguserlabel": "'Mblemendatore:",
-       "speciallogtitlelabel": "Destinazione (titole o utende):",
+       "speciallogtitlelabel": "Destinazione (titole o {{ns:user}}:nome de l'utende pe l'utende):",
        "log": "Archivije",
        "all-logs-page": "Tutte l'archivije pubbleche",
        "alllogstext": "Visualizzazione combinate de tutte le archivije disponibbele sus a {{SITENAME}}.\nTu puè restringere 'a viste selezionanne 'u tipe de archivije, 'u nome utende (senzibbile a le maiuscole), o le pàggene coinvolte (pure chiste senzibbile a le maiuscole).",
        "rollback-success": "Cangiaminde annullate da $1;\nturnate rete a l'urtema versione da $2.",
        "sessionfailure-title": "Sessione fallite",
        "sessionfailure": "Pare ca stonne probbleme cu 'a sessiona toje de collegamende;\nst'azione ha state scangellate pe precauzione condre a le 'ngasinaminde d'a sessione.\nPe piacere cazze \"rete\" e recareche 'a pàgene da addò tu è venute e pruève 'n'otra vote.",
+       "changecontentmodel": "Cange 'u modelle de condenute de 'na pàgene",
        "changecontentmodel-legend": "Cange 'u modelle de condenute",
        "changecontentmodel-title-label": "Titole d'a vôsce",
        "changecontentmodel-model-label": "Modelle de vôsce de condenute nuève",
        "tooltip-ca-nstab-main": "Vide 'a pàgene cu le condenute",
        "tooltip-ca-nstab-user": "Vide 'a pàgene de l'utende",
        "tooltip-ca-nstab-media": "Vide 'a pàgene de le media",
-       "tooltip-ca-nstab-special": "Queste jè 'na pàgena speciale, ca tu non ge puè cangià",
+       "tooltip-ca-nstab-special": "Queste ète 'na pàgena speciale, e non ge pò essere cangiate",
        "tooltip-ca-nstab-project": "Vide 'a pàgene d'u proggette",
        "tooltip-ca-nstab-image": "Vide 'a pàgene d'u fail",
        "tooltip-ca-nstab-mediawiki": "Vide le messàgge d'u sisteme",
        "htmlform-cloner-create": "Aggiunge 'n'otre",
        "htmlform-cloner-delete": "Live",
        "htmlform-cloner-required": "Almene 'nu valore l'a mettere.",
+       "htmlform-title-badnamespace": "[[:$1]] non ge stè jndr'à 'u namespace \"{{ns:$2}}\".",
        "htmlform-title-not-exists": "[[:$1]] non g'esiste.",
        "htmlform-user-not-exists": "<strong>$1</strong> non g'esiste.",
        "htmlform-user-not-valid": "<strong>$1</strong> non g'è 'nu nome utende valide.",
index 208e887..de75b96 100644 (file)
        "passwordreset-emailtitle": "Сведения об учётной записи {{SITENAME}}",
        "passwordreset-emailtext-ip": "Кто-то (возможно, вы, с IP-адреса $1) запросил сброс пароля к вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дня|$5 дней|1=один день}}.\nВы должны представиться системе и выбрать новый пароль. \nЕсли вы не делали этого запроса, или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
        "passwordreset-emailtext-user": "Участник $1 из проекта {{SITENAME}} запросил сброс пароля для вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дней|$5 дня|1=один день}}.\nВы должны представиться системе и выбрать новый пароль.\nЕсли вы не делали этого запроса или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
-       "passwordreset-emailelement": "Имя участника: $1\nВременный пароль: $2",
+       "passwordreset-emailelement": "Имя участника: \n$1\n\nВременный пароль: \n$2",
        "passwordreset-emailsent": "Отправлено электронное письмо с информацией о сбросе пароля.",
        "passwordreset-emailsent-capture": "Отправлено электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже.",
        "passwordreset-emailerror-capture": "Было создано электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже, однако его не удалось отправить {{GENDER:$2|участнику|участнице}} по следующей причине: $1",
        "changeemail-password": "Ваш пароль для проекта «{{SITENAME}}»:",
        "changeemail-submit": "Изменить адрес",
        "changeemail-throttled": "Вы сделали слишком много попыток представиться системе.\nПожалуйста, подождите $1 перед тем, как попробовать снова.",
+       "changeemail-nochange": "Пожалуйста, введите иной новый адрес электронной почты.",
        "resettokens": "Сбросить токены",
        "resettokens-text": "Вы можете сбросить токены, позволяющие получить доступ к некоторым личным данным, связанным с вашей учётной записью на этом сайте.\n\nВам необходимо сделать это, если вы случайно поделились ими с кем-то, или если ваша учётная запись была взломана.",
        "resettokens-no-tokens": "Нет токенов для сброса.",
        "session_fail_preview_html": "'''К сожалению, сервер не смог обработать вашу правку из-за потери данных сессии.'''\n\n''Так как {{SITENAME}} разрешает использовать чистый HTML, предварительный просмотр отключён в качестве меры предотвращения JavaScript-атак.''\n\n'''Если это добросовестная попытка редактирования, пожалуйста, попробуйте ещё раз.\nЕсли не получается повторная правка, попробуйте [[Special:UserLogout|завершить сеанс]] работы и заново представиться.'''",
        "token_suffix_mismatch": "'''Ваша правка была отклонена, так как ваша программа неправильно обрабатывает знаки пунктуации\nв окне редактирования. Правка была отменена для предотвращения искажения текста статьи.\nПодобные проблемы могут возникать при использовании анонимизирующих веб-прокси, содержащих ошибки.'''",
        "edit_form_incomplete": "'''Некоторые части формы редактирования не достигли сервера. Внимательно проверьте, что ваши правки не повреждены, и попробуйте ещё раз.'''",
-       "editing": "Редактирование $1",
+       "editing": "Редактирование: $1",
        "creating": "Создание страницы «$1»",
        "editingsection": "Редактирование: $1 (раздел)",
-       "editingcomment": "Редактирование $1 (новый раздел)",
+       "editingcomment": "Редактирование: $1 (новый раздел)",
        "editconflict": "Конфликт редактирования: $1",
        "explainconflict": "Пока вы редактировали эту страницу, кто-то внёс в неё изменения.\nВ верхнем окне для редактирования вы видите текущий текст страницы.\nВ нижнем окне находится ваш вариант.\nПеренесите сделанные вами изменения из нижнего окна в верхнее.\nПри нажатии на кнопку «{{int:savearticle}}» будет сохранён текст верхнего окна.",
        "yourtext": "Ваш текст",
        "rows": "Строк:",
        "columns": "Столбцов:",
        "searchresultshead": "Поиск",
-       "stub-threshold": "Порог для определения оформления <a href=\"#\" class=\"stub\">ссылок на заготовки</a> (в байтах):",
+       "stub-threshold": "Порог для определения оформления ссылок на заготовки ($1):",
+       "stub-threshold-sample-link": "пример",
        "stub-threshold-disabled": "Отключён",
        "recentchangesdays": "Количество дней, за которые показывать свежие правки:",
        "recentchangesdays-max": "(не более $1 {{PLURAL:$1|дня|дней}})",
        "booksources-text": "На этой странице приведён список ссылок на сайты, где вы, возможно, найдёте дополнительную информацию о книге. Это интернет-магазины и системы поиска в библиотечных каталогах.",
        "booksources-invalid-isbn": "Указанный номер ISBN, судя по всему, содержит ошибку. Пожалуйста, проверьте, что при переносе номера из первоисточника не возникло искажений.",
        "specialloguserlabel": "Исполнитель:",
-       "speciallogtitlelabel": "Цель (название или участник):",
+       "speciallogtitlelabel": "Цель (название или {{ns:user}}:имя участника):",
        "log": "Журналы",
        "all-logs-page": "Все доступные журналы",
        "alllogstext": "Общий список журналов сайта {{SITENAME}}.\nВы можете отфильтровать результаты по типу журнала, имени участника (учитывается регистр) или затронутой странице (также учитывается регистр).",
index 8946049..68cd2e9 100644 (file)
        "passwordreset-emailtitle": "Детайлы конта на {{SITENAME}}",
        "passwordreset-emailtext-ip": "Дахто (може Вы, з IP адресы $1) попросив о наставлїня нового гесла до вашого конта на {{grammar:6sg|{{SITENAME}}}} ($4). З тов адресов {{PLURAL:$3|є повязане слїдуюче конто|суть повязаны слїдуючі конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло стане неплатным|Тоты дочасны гесла стануть неплатныма}} {{PLURAL:$5|за день|за $5 днї|за $5 днїв}}.\nТеперь бы сьте ся мали приголосити і зволити собі нове гесло. Кідь тоту просьбу послав хтось другый або сьте собі на своє старе гесло спомянули і не хочете го змінити, можете тото повідомлїня іґноровати і дале хосновати старе гесло.",
        "passwordreset-emailtext-user": "{{gender:$1|Хоснователь|Хоснователька|Хоснователь}} $1 {{grammar:2sg|{{SITENAME}}}} {{gender:$1|попросив|попросила|попросив}} о наставлїня нового гесла до вашого\nконта на {{grammar:6sg|{{SITENAME}}}} ($4). З тов адресов {{PLURAL:$3|є повязане наступне конто|суть повязаны наступны конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло кінчить|Тоты дочасны гесла кінчать}} {{PLURAL:$5|о єден день|о $5 днї|о $5 днїв}}.\nТеперь бы сьте ся мали приголосити і зволити собі нове гесло. Кідь тоту пожадавку \nпослав дахто другый або сьте собі на своє старе гесло спомянули і не хочете го\nзмінити, можете тото повідомлїня іґноровати і надале хосновати старе гесло.",
-       "passwordreset-emailelement": "Імя хоснователя: $1\nДочасне гесло: $2",
+       "passwordreset-emailelement": "Імя хоснователя: \n$1\n\nДочасне гесло: \n$2",
        "passwordreset-emailsent": "Імейл з геслом быв посланый.",
        "passwordreset-emailsent-capture": "Быв выґенерованый імейл з геслом, што є вказаный ниже.",
        "passwordreset-emailerror-capture": "Быв выґенерованый імейл з геслом, котрый є указаный ниже, але ся го не вдало загнати {{GENDER:$2|хоснователёви|хосновательцї}}: $1",
        "emailuser": "Послати імейл тому хоснователёви",
        "emailuser-title-target": "Загнати імейл {{GENDER:$1|тому хоснователёви|тій хосновательцї}}",
        "emailuser-title-notarget": "Загнати імейл хоснователёви",
-       "emailpage": "Пошлийте е-пошту",
        "emailpagetext": "З ниже зображеным формуларём годно {{GENDER:$1|тому хоснователёви|тій хосновательцї}} загнати повідомлїня ел. поштов.\nАдреса ел. пошты, котру мате зазначену в [[Special:Preferences|наставлїня]],ся обявить як адреса одосылателя пошты, жебы вам адресат міг беспосереднё одповісти.",
        "defemailsubject": "{{SITENAME}}: лист од \"$1\"",
        "usermaildisabled": "Посыланя ел. пошты є выпнуте",
index 7853e83..c2a9b0b 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} इत्यत्र योजकविषये",
        "passwordreset-emailtext-ip": "कोऽपि (कदाचित् भवान्/भवती, $1 अन्तर्जालसंविदः (from IP)) {{SITENAME}}($4) जालस्थानस्य  कृते कूटशब्दपरिवर्तनस्य विनतिम् अकरोत् । निम्न{{PLURAL:$3|योजकः|योजकाः}} अनेन वि-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विनतिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
        "passwordreset-emailtext-user": "$1 योजकः {{SITENAME}}($4) जालस्थानस्य  कृते कूटशब्दपरिवर्तनस्य विनतिम् अकरोत् । निम्न{{PLURAL:$3|योजकः|योजकाः}} अनेन वि-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विज्ञप्तिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
-       "passwordreset-emailelement": "प्रयोक्तृनाम : $1\nअल्पकालीनकूटशब्दः : $2",
+       "passwordreset-emailelement": "प्रयोक्तृनाम : \n$1\n\nअल्पकालीनकूटशब्दः : \n$2",
        "passwordreset-emailsent": "परिवर्तितकूटशब्दस्य वि-पत्रं प्रेषितम् अस्ति ।",
        "passwordreset-emailsent-capture": "परिवर्तितकूटशब्दस्य वि-पत्रं प्रेषितम् अस्ति । तत् अधः द्रष्टुं शक्यते ।",
        "passwordreset-emailerror-capture": "परिवर्तितकूटशब्दस्य वि-पत्रं निर्मितम् अस्ति । तत् अधः द्रष्टुं शक्यते । परन्तु {{GENDER:$2|योजकाय}} प्रेषणकाले तत् निरस्तम् अभवत् : $1",
        "accmailtext": "[[User talk:$1|$1]] कृते अशृङ्खलितरीत्या (randomly) उत्पादितः कूटशब्दः $2 वि-पत्रसङ्केतं प्रति प्रेषितः अस्ति । <em>[[Special:ChangePassword|कूटशब्दः परिवर्त्यताम्]]</em> अत्र तत् परिर्तयितुं शक्यते ।",
        "newarticle": "(नूतनम्)",
        "newarticletext": "भवान्/भवती अनिर्मिते पृष्ठे अस्ति । \nपृष्ठं स्रष्टुम् अधः प्रदत्तायां पेटिकायां टङ्कनं प्रारभताम् (साहाय्यार्थं [$1 अत्र]) नुदतु ।\nभवान्/भवती यदि क्षतिकारणात् एतत् पृष्ठं प्रति आगच्छत्, तर्हि अस्य गवेषकस्य (browser) Back नुदतु ।",
-       "anontalkpagetext": "----\n<em>एतत् सम्भाषणपृष्ठम् अनामकयोजकेभ्यः अस्ति । एतत् तेभ्यः अनामकयोजकेभ्यः रचितमस्ति, यैः सदस्यता न प्राप्ता अस्ति तथा च अस्य पृष्ठस्य उपयोगं न कुर्वन्तः सन्ति ।</em>\nतेषां व्यक्तिगतसूचनां प्राप्तुमेव वयं तस्य/तस्याः अन्तर्जालसंविदः उपयोगं कुर्मः । केचन योजकाः स्वस्य अन्तर्जालसंविदम् अन्यान् योजकान् कथयन्ति । \nयद्यपि अनामकयोजकः अहं नास्मि, तथापि अयोग्यसूचनाः मम पार्श्वे आगच्छन्त्यः सन्ति इति यदि भवान्/भवती शङ्कते, तर्हि एतत् [[Special:UserLogin/signup|create an account]] एतत् [[Special:UserLogin|log in]] वा कृत्वा भविष्यस्य अनामकयोजकनां सन्देशेभ्यः स्वस्य रक्षणं करोतु ।",
+       "anontalkpagetext": "----\n<em>à¤\8fततà¥\8d à¤¸à¤®à¥\8dभाषणपà¥\83षà¥\8dठमà¥\8d à¤\85नामà¤\95यà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤\85सà¥\8dति à¥¤ à¤\8fततà¥\8d à¤¤à¥\87भà¥\8dयà¤\83 à¤\85नामà¤\95यà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤°à¤\9aितमसà¥\8dति, à¤¯à¥\88à¤\83 à¤¸à¤¦à¤¸à¥\8dयता à¤¨ à¤ªà¥\8dरापà¥\8dता à¤\85सà¥\8dति à¤¤à¤¥à¤¾ à¤\9a à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\89पयà¥\8bà¤\97à¤\82 à¤¨ à¤\95à¥\81रà¥\8dवनà¥\8dतà¤\83 à¤¸à¤¨à¥\8dति à¥¤</em>\nतà¥\87षाà¤\82 à¤µà¥\8dयà¤\95à¥\8dतिà¤\97तसà¥\82à¤\9aनाà¤\82 à¤ªà¥\8dरापà¥\8dतà¥\81मà¥\87व à¤µà¤¯à¤\82 à¤¤à¤¸à¥\8dय/तसà¥\8dयाà¤\83 à¤\85नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदà¤\83 à¤\89पयà¥\8bà¤\97à¤\82 à¤\95à¥\81रà¥\8dमà¤\83 à¥¤ à¤\95à¥\87à¤\9aन à¤¯à¥\8bà¤\9cà¤\95ाà¤\83 à¤¸à¥\8dवसà¥\8dय à¤\85नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदमà¥\8d à¤\85नà¥\8dयानà¥\8d à¤¯à¥\8bà¤\9cà¤\95ानà¥\8d à¤\95थयनà¥\8dति à¥¤ \nयदà¥\8dयपि à¤\85नामà¤\95यà¥\8bà¤\9cà¤\95à¤\83 à¤\85हà¤\82 à¤¨à¤¾à¤¸à¥\8dमि, à¤¤à¤¥à¤¾à¤ªà¤¿ à¤\85यà¥\8bà¤\97à¥\8dयसà¥\82à¤\9aनाà¤\83 à¤®à¤® à¤ªà¤¾à¤°à¥\8dशà¥\8dवà¥\87 à¤\86à¤\97à¤\9aà¥\8dà¤\9bनà¥\8dतà¥\8dयà¤\83 à¤¸à¤¨à¥\8dति à¤\87ति à¤¯à¤¦à¤¿ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤¶à¤\99à¥\8dà¤\95तà¥\87, à¤¤à¤°à¥\8dहि à¤\8fततà¥\8d [[Special:UserLogin/signup|create an account]] à¤\8fततà¥\8d [[Special:UserLogin|log in]] à¤µà¤¾ à¤\95à¥\83तà¥\8dवा à¤­à¤µà¤¿à¤·à¥\8dयसà¥\8dय à¤\85नामà¤\95यà¥\8bà¤\9cà¤\95ानाà¤\82 à¤¸à¤¨à¥\8dदà¥\87शà¥\87भà¥\8dयà¤\83 à¤¸à¥\8dवसà¥\8dय à¤°à¤\95à¥\8dषणà¤\82 à¤\95रà¥\8bतà¥\81 à¥¤",
        "noarticletext": "अस्मिन् पृष्ठे अधुना किमपि न विद्यते । [[Special:Search/{{PAGENAME}}|एषः शब्दः]] येषु पृष्ठेषु अन्तर्भवति, तानि पृष्ठानि अन्वेष्टुं शक्यन्ते । \n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  सम्बद्धेषु पृष्ठेषु अन्वेषणं]\n[{{fullurl:{{FULLPAGENAME}}|action=edit}} अस्य पृष्ठस्य सम्पादनं] वा  शक्यम्</span>.",
        "noarticletext-nopermission": "अस्मिन् पृष्ठे अधुना किमपि न विद्यते । [[Special:Search/{{PAGENAME}}|एषः शब्दः]] येषु पृष्ठेषु अन्तर्भवति, तानि पृष्ठानि अन्वेष्टुं शक्यन्ते । \n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  सम्बद्धेषु पृष्ठेषु अन्वेषणं]\n[{{fullurl:{{FULLPAGENAME}}|action=edit}} अस्य पृष्ठस्य सम्पादनं] वा  शक्यम्</span>.",
        "missing-revision": "\"{{FULLPAGENAME}}\" पृष्ठस्य संस्करणं #$1 नोपलभ्यम् ।\nयस्य पृष्ठस्य इतिहासे परिसन्धयः कालातीताः सन्ति, तेषु पृष्ठेषु एवं भवति ।\nअधिकसूचनाः अत्र प्राप्तुं शक्यते [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} अपाकृतानाम् आवलिः].",
index ee7c91b..a99505a 100644 (file)
        "createacct-benefit-body2": "{{PLURAL:$1|сирэй|сирэй}}",
        "createacct-benefit-body3": "кэнники {{PLURAL:$1|кыттааччы|кыттааччы}}",
        "badretype": "Киирии тылларыҥ сөп түбэспэтилэр.",
+       "usernameinprogress": "Бу аатынан бэлиэтэнии бара турар.\nБука диэн кэтэһэ түс.",
        "userexists": "Суруйбут аатыҥ бэлиэр баар.\nБука диэн, атын аатта тал.",
        "loginerror": "Ааккын система билбэтэ",
        "createacct-error": "Бэлиэтэнии кэмигэр алҕас таҕыста",
        "passwordreset-emailtitle": "{{SITENAME}} бырайыакка аатын туһунан",
        "passwordreset-emailtext-ip": "Ким эрэ (баҕар эн буолуо, бу IP-ттан $1)  {{SITENAME}} ($4) бырайыакка киирии тылы уларытар туһунан ыйытык биэрбит.\nБу электрон аадырыһы кытта бу {{PLURAL:$3|аат ситимнээх|ааттар ситимнээхтэр}}:\n\n$2\n\nБу быстах кэмҥэ аналлаах {{PLURAL:$3|киирии тыл|кирии тыллар}} {{PLURAL:$5|биир күн үлэлиэҕэ|$5 күн үлэлиэхтэрэ}}.\nЭн тиһиликкэ ааккын этэн саҥа киирии тылы киллэриэхтээххин.\nӨскө бу ыйытыгы ыыппатах буоллаххына, эбэтэр урукку киирии тылгын өйдөөн кэлбит буоллаххына \nбу биллэриини ааххайыа суоххун сөп.\nОччоҕо урукку киирии тылыҥ оннунан хаалыа.",
        "passwordreset-emailtext-user": "$1 диэн кыттааччы  {{SITENAME}} ($4) бырайыакка киирии тылгын уларытар туһунан ыйытык ыыппыт.\nБу электрон аадырыһы кытта бу {{PLURAL:$3|аат ситимнээх|ааттар ситимнээхтэр}}\n\n$2\n\nБу быстах кэмҥэ аналлаах {{PLURAL:$3|киирии тыл|кирии тыллар}} {{PLURAL:$5|биир күн үлэлиэҕэ|$5 күн үлэлиэхтэрэ}}.\nЭн тиһиликкэ ааккын этэн саҥа киирии тылы киллэриэхтээххин.\nӨскө бу ыйытыгы ыыппатах буоллаххына, эбэтэр урукку киирии тылгын өйдөөн кэлбит буоллаххына \nбу биллэриини ааххайыа суоххун сөп.\nОччоҕо урукку киирии тылыҥ оннунан хаалыа.",
-       "passwordreset-emailelement": "Кыттааччы: $1\nБыстах киирии тыл: $2",
+       "passwordreset-emailelement": "Кыттааччы: \n$1\n\nБыстах киирии тыл: \n$2",
        "passwordreset-emailsent": "Киирии тылы уларытар туһунан сурук барда.",
        "passwordreset-emailsent-capture": "Киирии тылы уларытар туһунан сурук аллара эмиэ көрдөрүлүннэ.",
        "passwordreset-emailerror-capture": "Манна киирии тылы уларытар туһунан сурук көрдөрүлүннэ. Ол эрэн сурук бу төрүөттэн $2 кыттааччыга сатаан барбата: $1",
        "rows": "Строкаалара:",
        "columns": "Колонкалара:",
        "searchresultshead": "Көрдөөһүн түмүгэ",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">омооннорго ыйынньыктары</a> оҥоруу боруога:",
+       "stub-threshold": "Омооннорго ыйынньыктары оҥоруу боруога ($1):",
+       "stub-threshold-sample-link": "холобур",
        "stub-threshold-disabled": "Арахсыбыт",
        "recentchangesdays": "Хас хонук иһинэн уларытыылары көрдөрөргө:",
        "recentchangesdays-max": "(улааппыта $1 күн)",
        "uploaded-href-unsafe-target-svg": "Хачайдаммыт SVG-билэҕэ кутталлаах сигэ көһүннэ <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "«Animate» тиэк көһүннэ, кини «from»-атрибут көмөтүнэн  <code>&lt;$1 $2=\"$3\"&gt;</code> хачайдаммыт SVG-билэҕэ сигэни уларытыан сөп.",
        "uploaded-setting-href-svg": "Төрүт элэмиэҥҥэ «href» атрибуту киллэрэр «set» тиэги туһанар бобуулаах.",
+       "uploaded-wrong-setting-svg": "«Set» тиэги аадырыс/дааннай/сценарий быһыытынан ханнык баҕарар атрибуукка эбии хааччахтаммыт. Угуллубут SVG-билэҕэ <code>&lt;set to=\"$1\"&gt;</code> конструкция көстүбүт.",
+       "uploaded-setting-handler-svg": "«Handler» атрибууту аадырыс/дааннай/скрипт көмөтүнэн быһаарар SVG хааччахтаммыт. Угуллубут SVG-билэҕэ <code>$1=\"$2\"</code> конструкция көстүбүт.",
        "uploaded-image-filter-svg": "Хачайдаммыт SVG-билэҕэ маннык URL-аадырыстаах ойуу сиидэтэ көстүбүт <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadscriptednamespace": "Бу SVG-билэ алҕастаах аат даллаах эбит: '$1'",
        "uploadinvalidxml": "Хачайдаммит билэҕэ XML анаалыстанар кыаҕа суох.",
index f3d1606..ce87370 100644 (file)
        "resetpass-submit-cancel": "Bạgi",
        "resetpass-temp-password": "Nit lạgit uku nambar:",
        "passwordreset": "Nãwãte oku nambar emme",
-       "passwordreset-legend": "Nãwãte oku nambar emme",
        "passwordreset-disabled": "Noa wikire amaḱ uku nambar nãwãte em lạgit subita do bando gea.",
        "passwordreset-username": "Beoharicaḱ ńutum:",
        "passwordreset-domain": "Ḍomen:",
        "passwordreset-capture-help": "Am do judi noa jacạy baksom lin lekhan, tobe nit lạgit́te em akan uku nambar são mit́ṭen e-mail ame uduḱama ar ona sãote beoharić ṭhen ona kuluḱa.",
        "passwordreset-email": "E-mail ṭhikạna:",
        "passwordreset-emailtitle": "{{SITENAME}} sayeṭre beoharićaḱ purạo thutiko",
-       "passwordreset-emailelement": "Beoharićaḱ ńutum: $1\nMit́ ghạṛi lạgit uku nambar: $2",
+       "passwordreset-emailelement": "Beoharićaḱ ńutum: \n$1\n\nMit́ ghạṛi lạgit uku nambar: \n$2",
        "passwordreset-emailsent": "Mitṭen disạ ruaṛ e-mail do kulena.",
        "passwordreset-emailsent-capture": "Mit́ṭen disạ ruaṛaḱ e-mail dokulena, oka do latarre ńeloḱ kana.",
        "passwordreset-emailerror-capture": "Disạ ruạṛ oco lạgit́te mit́ṭen e-mail tear hoelena, oka do latarre udugoḱkana, menkhan $1 beoharić ṭhen  ṭhen baṅ kul hoe akana.",
        "listgrouprights-addgroup-all": "Joto gaõtare ko soṅgekom",
        "listgrouprights-removegroup-all": "Joto gaõtaren ko ocoḱgiḍikom",
        "emailuser": "Nui beoharić e-mail emayme",
-       "emailpage": "E-mail beoharić",
        "noemailtitle": "E-mail ṭhikạna do banuḱa",
        "emailusername": "Beoharićaḱ ńutum:",
        "emailusernamesubmit": "Em",
index ee65cc4..3748b83 100644 (file)
                        "Taxandru"
                ]
        },
-       "tog-underline": "Sutalìnia sos ligòngios",
+       "tog-underline": "Sutalìnia sos ligàmenes",
        "tog-hideminor": "Cua is acontzos minores in sa pàgina de is ùrtimas mudàntzias",
        "tog-hidepatrolled": "Cua is mudas verificadas in is ùrtimos càmbios",
        "tog-newpageshidepatrolled": "Cua sas pàginas verificadas dae sa lista de sas pàginas noas",
-       "tog-extendwatchlist": "Ammània sa watchlist pro ammustrare totus sos càmbios, non sos prus reghentes ebbia",
+       "tog-extendwatchlist": "Ammània sa watchlist pro ammustrare totu sos càmbios, non sos prus reghentes ebbia",
        "tog-usenewrc": "Pone in pare sos càmbios de cada pàgina in sos ùrtimos càmbios e in sa watchlist",
        "tog-numberheadings": "Auto-numeratzione de sos tìtulos",
        "tog-showtoolbar": "Ammustra sa mustra de sa barra de sas ainas",
        "tog-editondblclick": "Càmbia pàginas cun duos click",
        "tog-editsectiononrightclick": "Abìlita su càmbiu de sas setziones cun click de dereta in sos tìtulos de sas setziones",
-       "tog-watchcreations": "Annanghe is pàginas chi apo creadu e is documentos chi apo carrigadu in sa lista de pàginas annotadas mea",
+       "tog-watchcreations": "Annanghe is pàginas chi apo creadu e is documentos chi apo carrigadu in sa lista mea de pàginas annotadas",
        "tog-watchdefault": "Annanghe pàginas e documentos chi apo cambiadu in sa lista de pàginas annotadas mea",
        "tog-watchmoves": "Annanghe pàginas e documentos chi apo mòvidu in sa lista de pàginas annotadas mea",
        "tog-watchdeletion": "Annanghe pàginas e documentos chi apo burradu in sa lista de pàginas annotadas mea",
        "tog-watchrollback": "Pone is pàginas innue apo fatu su rollback in is pàginas annotadas",
-       "tog-minordefault": "Marca comente minores pro difetu totus sos càmbios",
+       "tog-minordefault": "Marca comente minores pro difetu totu sos càmbios",
        "tog-previewontop": "Ammustra s'anteprima in subra de sa casella de càmbiu e no in suta",
        "tog-previewonfirst": "Ammustra s'anteprima pro sa prima muda",
        "tog-enotifwatchlistpages": "Imbia·mi una post.el. cando b'at àpidu unu càmbiu in una pàgina o in unu documentu de sa watchlist mea",
        "tog-enotifrevealaddr": "Faghe ischire s'indiritzu de sa post.el. mea in sas notìficas de sa post.els",
        "tog-shownumberswatching": "Ammustra su nùmeru de is impitadores chi ant annotadu sa pàgina",
        "tog-oldsig": "Firma atuale:",
-       "tog-fancysig": "Trata sa firma comente unu testu wiki (sena ligòngios automàticos)",
+       "tog-fancysig": "Trata sa firma comente unu testu wiki (sena ligàmenes automàticos)",
        "tog-uselivepreview": "Imprea sa funtzione \"anteprima bia\" (isperimentale)",
        "tog-forceeditsummary": "Averte·mi si su campu ogetu est bòidu",
-       "tog-watchlisthideown": "Cua sas mudas meas dae sa watclist",
+       "tog-watchlisthideown": "Cua sas modìficas meas dae sa watclist",
        "tog-watchlisthidebots": "Cua sas mudas de sos bots dae sa watchlist",
        "tog-watchlisthideminor": "Cua sos càmbios minores dae sa watchlist",
-       "tog-watchlisthideliu": "Cua is càmbios de is impitadores identificados dae sa lista de pàginas annotadas",
+       "tog-watchlisthideliu": "Cua is càmbios de is utentes identificados dae sa lista de pàginas annotadas",
        "tog-watchlisthideanons": "Cua is càmbios de is impitadores anònimos dae sa lista de pàginas annotadas",
        "tog-watchlisthidepatrolled": "Cua mudas verificadas dae sa watchlist",
-       "tog-ccmeonemails": "Imbia·mi sas còpias de is emails chi imbio a is àteros impitadores",
-       "tog-diffonly": "No ammustras su cuntènnidu de sa pàgina a pustis de sa bisura de is diferèntzias",
+       "tog-ccmeonemails": "Imbia·mi sas còpias de is post.els chi imbio a is àteros utentes",
+       "tog-diffonly": "No ammustras su cuntenutu de sa pàgina a pustis de sa bisura de is diferèntzias",
        "tog-showhiddencats": "Ammustra sas categorias cuadas",
        "tog-norollbackdiff": "Cua sa bisura de is diferèntzias a pustis de su rollback",
-       "tog-useeditwarning": "Averte·mi si lassu una pàgina cun càmbios sena de sarbare",
+       "tog-useeditwarning": "Averte·mi si lasso una pàgina cun modìficas sena sarvadas",
        "tog-prefershttps": "Imprea semper una lìnia segura candu fatzo s'intrada.",
        "underline-always": "Semper",
        "underline-never": "Mai",
        "underline-default": "Definitziones dae su navigadore tuo",
-       "editfont-style": "Istile de sos caràteres in s'àrea de càmbiu:",
+       "editfont-style": "Istile de sos caràteres in s'àrea de modìfica:",
        "editfont-default": "Definidu dae su navigadore",
        "editfont-monospace": "Caràtere monospàtziu",
        "editfont-sansserif": "Caràtere sena gràtzias",
        "category-empty": "''In custa categoria non ddu at peruna pàgina o documentu multimediale.''",
        "hidden-categories": "{{PLURAL:$1|Categoria cuada|Categorias cuadas}}",
        "hidden-category-category": "Categorias cuadas",
-       "category-subcat-count": "{{PLURAL:$2|Custa categoria cuntennet un'ùnica sutacategoria ammustrada in suta.|Custa categoria cuntenet {{PLURAL:$1|sa sutacategoria indicada|$1 sutacategorias indicadas}} in suta, dae $2 in totu.}}",
+       "category-subcat-count": "{{PLURAL:$2|Custa categoria cuntenet un'ùnica sutacategoria ammustrada in suta.|Custa categoria cuntenet {{PLURAL:$1|sa sutacategoria indicada|$1 sutacategorias inditadas}} in suta, dae $2 in totu.}}",
        "category-subcat-count-limited": "Custa categoria tenet {{PLURAL:$1|una sutacategoria, ammustrada|$1 sutacategorias, ammustradas}} in suta.",
        "category-article-count": "{{PLURAL:$2|Custa categoria cuntenet feti sa pàgina chi sighit.|Custa categoria cuntenet {{PLURAL:$1|sa pàgina indicada|is $1 pàginas indicadas}} in suta, dae unu totale de $2.}}",
        "category-article-count-limited": "{{PLURAL:$1|Sa pàgina chi sighit est|Is $1 pàginas chi sighint sunt}} in custa categoria.",
        "moredotdotdot": "Àteru…",
        "morenotlisted": "Sa lista no est cumpreta",
        "mypage": "Pàgina",
-       "mytalk": "Cuntierras mias",
+       "mytalk": "Cuntierras meas",
        "anontalk": "Cuntierras pro custu indiritzu IP",
        "navigation": "Navigatzione",
        "and": "&#32;e",
        "history_short": "Istòria",
        "updatedmarker": "atualizada dae s'ùrtima vìsita mea",
        "printableversion": "Versione de imprenta",
-       "permalink": "Ligòngiu permanente",
+       "permalink": "Ligàmene permanente",
        "print": "Imprenta",
        "view": "Ammustra",
        "view-foreign": "Ammustra in $1",
        "edit-local": "Càmbia sa descritzione locale",
        "create": "Crea",
        "create-local": "Annanghe descritzione locale",
-       "editthispage": "Càmbia custa pàgina",
+       "editthispage": "Modìfica custa pàgina",
        "create-this-page": "Crea custa pàgina",
        "delete": "Burra",
        "deletethispage": "Burra custa pàgina",
        "protect_change": "càmbia",
        "protectthispage": "Ampara custa pàgina",
        "unprotect": "Muda amparu",
-       "unprotectthispage": "Muda amparu de custa pàgina",
+       "unprotectthispage": "Càmbia amparu de custa pàgina",
        "newpage": "Pàgina noa",
        "talkpage": "Pàgina de cuntierra",
        "talkpagelinktext": "Cuntierra",
        "personaltools": "Ainas personales",
        "articlepage": "Càstia s'artìculu",
        "talk": "Cuntierras",
-       "views": "Bìsitas",
+       "views": "Vìsitas",
        "toolbox": "Ainas",
        "userpage": "Càstia sa pàgina impitadore",
        "projectpage": "Càstia sa pàgina meta",
        "jumptosearch": "chirca",
        "view-pool-error": "Tene passèntzia, sos servidores sunt càrrigos de traballu.\nIn medas chircant de castiare custa pàgina.\nPro praghere, torra a tenteare posca.\n\n$1",
        "generic-pool-error": "Tene passèntzia, sos servidores sunt càrrigos de traballu.\nIn medas chircant de castiare custa risorsa.\nPro praghere, torra a provare luego.",
-       "pool-timeout": "Timeout abetende pro s'arreu",
+       "pool-timeout": "Timeout isetende pro s'arreu",
        "pool-queuefull": "Sa coa pro su traballu de su protzessu est prena",
        "pool-errorunknown": "Faddina disconnota",
        "pool-servererror": "Su servìtziu de contadore de su protzessu no est disponìbile ($1).",
        "newmessageslinkplural": "{{PLURAL:$1|unu messàggiu nou|999=messàggios noos}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|ùrtima muda|999=ùrtimas mudàntzias}}",
        "youhavenewmessagesmulti": "Tenes messàgios noos in $1",
-       "editsection": "càmbia",
-       "editold": "càmbia",
+       "editsection": "modìfica",
+       "editold": "modìfica",
        "viewsourceold": "càstia testu codificadu",
-       "editlink": "càmbia",
+       "editlink": "modìfica",
        "viewsourcelink": "càstia testu codificadu",
        "editsectionhint": "Càmbia sa setzione: $1",
-       "toc": "Cuntènnidu",
+       "toc": "Cuntenutu",
        "showtoc": "ammustra",
        "hidetoc": "cua",
        "collapsible-collapse": "Serra e istringhe",
        "sort-descending": "Òrdine in falada",
        "sort-ascending": "Òrdine in artziada",
        "nstab-main": "Pàgina",
-       "nstab-user": "Pàgina impitadore",
+       "nstab-user": "Pàgina utente",
        "nstab-media": "Documentu multimediale",
        "nstab-special": "Pàgina ispetziale",
        "nstab-project": "Pàgina de servìtziu",
-       "nstab-image": "Documentu",
+       "nstab-image": "Archìviu",
        "nstab-mediawiki": "Messàgiu",
-       "nstab-template": "Template",
+       "nstab-template": "Modellu",
        "nstab-help": "Agiudu",
        "nstab-category": "Categoria",
        "nosuchaction": "No esistit custa atzione",
        "databaseerror-function": "Funtzione: $1",
        "databaseerror-error": "Faddina: $1",
        "laggedslavemode": "<strong>Atentzione:</strong> Sa pàgina podet non cuntènnere sos agiornamentos prus novos.",
-       "readonly": "Database bloccadu",
+       "readonly": "Database blocadu",
        "enterlockreason": "Inserta su motivu de su blocu, ispetzifichende su momentu probàbile chi su blocu at a acabbare",
        "readonlytext": "In custu momentu su database est bloccadu dae aciunturas e àteras modificas, probabilmente pro ordinaria manutentzione a su database, a pustis de custas at a èssere normale torra.\n\nS'amministradore chi dd'at bloccadu at donadu custa ispiegatzione: $1",
        "missing-article": "Su database no at agatadu su testu de una pàgina chi diat àere agatadu a suta de su nùmene \"$1\" $2.\n\nCustu a su sòlitu si verìficat cando bi est unu ligòngiu in s'istòria o in unu cunfrontu intre revisiones de una pàgina chi est istada fuliada.\n\nSi no est custu su casu, s'est agatada una faddina de su software.\nPro praghere signa s'acontèssidu a unu [[Special:ListUsers/sysop|amministradore]] ispetzifichende su URL de sa faddina.",
        "filerenameerror": "No est stadu possìbile re-numenare su file \"$1\" in \"$2\".",
        "filedeleteerror": "No est stadu possìbile cantzellare su file \"$1\".",
        "directorycreateerror": "Non si podet creare sa directory \"$1\".",
-       "filenotfound": "No est stadu possìbile agatare \"$1\".",
+       "filenotfound": "No est istadu possìbile a agatare \"$1\".",
        "unexpected": "Valore non previstu: \"$1\"=\"$2\".",
-       "formerror": "Errore: impossìbile imbiare su modellu",
+       "formerror": "Errore: impossìbile imbiare su modellu",
        "badarticleerror": "Operatzione non cunsentida pro custa pàgina.",
-       "cannotdelete": "No est stadu possìbile burrare sa pàgina o su file \"$1\".\nPodet èsser stadu burradu dae calicunu àteru.",
+       "cannotdelete": "No est istadu possìbile a burrare sa pàgina o su file \"$1\".\nPodet èsser stadu burradu dae calicunu àteru.",
        "cannotdelete-title": "Impossìbile burrare sa pàgina \"$1\"",
-       "delete-hook-aborted": "Sa burradura est istada annuddada dae su hook de s'estensione.\nNo est istadu datu acrarimentu.",
+       "delete-hook-aborted": "Sa burradura est istada annullada dae su hook de s'estensione.\nNo est istadu dadu acrarimentu.",
        "no-null-revision": "Non si podet creare una versione lulla pro sa pàgina \"$1\"",
        "badtitle": "Tìtulu malu",
        "badtitletext": "Su tìtulu de sa pàgina chi as pregontadu est bùidu, isballiadu, o iscritu in is cullegamentus inter-wiki a manera non currègia.\nPodet cuntènnere uno o unos cantos caràteres no ammìtidos pro is tìtulos.",
        "perfcached": "Is datos chi sighint sunt in sa memòria \"cache\" e podent èessere no agiornados. Unu màssimu de {{PLURAL:$1|unu resurtu est disponìbile|$1 resurtos sunt disponìbiles}} in sa memòria",
        "perfcachedts": "Is datos chi sighint sunt in sa memòria \"cache\", s'ùrtimu agiornamentu est de su $2 a is $3. Unu màssimu de {{PLURAL:$4|unu resurtu est disponìbile|$4 resurtos sunt disponìbiles}} in sa memòria",
        "querypage-no-updates": "Sos agiornamentos pro custa pàgina sunt temporaneamente sessadas.\nSos datos suos no ant a èssere agiornados.",
-       "viewsource": "Càstia mitza",
-       "viewsource-title": "Càstia sa mitza de $1",
+       "viewsource": "Càstia còdighe de orìgine",
+       "viewsource-title": "Càstia su còdighe de orìgine de $1",
        "actionthrottled": "Atzione rimandada",
        "actionthrottledtext": "Comente mesura de seguràntzia contra a s'ispam, non podes torrare a fàghere custa atzione tropu ispissu in unu tempus tropu curtzu, e tue as cabuladu custu lìmide.\nPro piaghere torra a proare a pustis de carchi minutos.",
        "protectedpagetext": "Custa pàgina est istada amparada pro nde prevenner su càmbiu o àteras fatas.",
        "exception-nologin-text": "Pro atzèdere a custa pàgina o atzione est netzessàriu a ti identificare.",
        "exception-nologin-text-manual": "Pro piaghere $1 pro pòder'atzèdere a custa pàgina o atzione.",
        "virus-badscanner": "Faddina de configuratzione: antivirus disconnotu: <em>$1</em>",
-       "virus-scanfailed": "scansione faddida (còdixe $1)",
+       "virus-scanfailed": "iscansione faddida (còdighe $1)",
        "virus-unknownscanner": "antivirus disconnotu:",
        "logouttext": "<strong>As acabadu sa sessione.</strong>\n\nTene contu ca is pàginas ki sunt giai abertas in àteras bentanas podent sighire a pàrrer comente cando fias identificadu, fintzas a cando non ddas renfriscas dae su browser tuo.",
-       "welcomeuser": "Benénnidu, $1!",
+       "welcomeuser": "Bene bènnidu, $1!",
        "welcomecreation-msg": "Su contu tuo est istadu creadu.\nSi boles podes cambiare is [[Special:Preferences|prefèntzias tuas]] pro {{SITENAME}}",
-       "yourname": "Nùmene impitadore:",
-       "userlogin-yourname": "Nùmene impitadore",
-       "userlogin-yourname-ph": "Inserta su nùmene impitadore tuo",
-       "createacct-another-username-ph": "Inserta su nùmene impitadore:",
+       "yourname": "Nùmene utente:",
+       "userlogin-yourname": "Nùmene utente",
+       "userlogin-yourname-ph": "Inseri su nùmene utente tuo",
+       "createacct-another-username-ph": "Inserta su nùmene utente:",
        "yourpassword": "Password:",
        "userlogin-yourpassword": "Password",
        "userlogin-yourpassword-ph": "Inserta sa password tua",
        "userlogin-resetpassword-link": "As ismentigadu sa password?",
        "userlogin-helplink2": "Agiudu pro s'atzessu",
        "userlogin-createanother": "Crea un àteru contu",
-       "createacct-emailrequired": "Indirutzu Email",
-       "createacct-emailoptional": "Indiritzu email (optzionale)",
-       "createacct-email-ph": "Inserta s'indiritzu email tuo",
-       "createacct-another-email-ph": "Inserta s'indiritzu email",
-       "createaccountmail": "Imprea una password a sorte e ispedidda a su indiritzu email ispetzificadu",
+       "createacct-emailrequired": "Indirutzu Post.el",
+       "createacct-emailoptional": "Indiritzu post.el (optzionale)",
+       "createacct-email-ph": "Inserta s'indiritzu post.el tuo",
+       "createacct-another-email-ph": "Inserta s'indiritzu post.el",
+       "createaccountmail": "Imprea una password a sorte e ispedidda a su indiritzu post.el ispetzificadu",
        "createacct-realname": "Nùmene beru (optzionale)",
        "createaccountreason": "Motivu:",
        "createacct-reason": "Motivu",
-       "createacct-reason-ph": "Proite ses creande un àteru contu",
+       "createacct-reason-ph": "Pro ite ses creende un àteru contu",
        "createacct-captcha": "Còmpudu de siguresa",
-       "createacct-imgcaptcha-ph": "Inserta su testu chi bides aissusu",
+       "createacct-imgcaptcha-ph": "Inseri su testu chi ses bidende in artu",
        "createacct-submit": "Crea su contu tuo",
        "createacct-another-submit": "Crea un àteru contu",
        "createacct-benefit-heading": "{{SITENAME}} est òpera de gente che tue.",
        "resetpass-expired": "Sa password tua est iscadida. Pro piaghere inserta una password noa pro intrare.",
        "resetpass-validity-soft": "Sa password password tua no est bàlida: $1\n\nPro piaghere issèbera una password noa como, o carca \"{{int:resetpass-submit-cancel}}\" pro lu fàghere prus a tardu.",
        "passwordreset": "Reseta sa password",
-       "passwordreset-legend": "Reseta sa password",
        "passwordreset-disabled": "Non si podent cambiare sas passwords in custa wiki.",
        "passwordreset-emaildisabled": "Is funtzionalidades de email sunt istadas disabilitadas in custa wiki.",
        "passwordreset-username": "Nùmene impitadore:",
        "passwordreset-domain": "Domìniu:",
-       "passwordreset-capture": "Ammustrare su cuntènnidu de sa email?",
+       "passwordreset-capture": "Ammustrare su cuntenutu de sa email?",
        "passwordreset-email": "Indiritzu email:",
        "passwordreset-emailtitle": "Particulares de s'impitadore in {{SITENAME}}",
-       "passwordreset-emailelement": "Nùmene impitadore: $1\nPassword temporànea: $2",
+       "passwordreset-emailelement": "Nùmene utente: \n$1\n\nPassword temporànea: \n$2",
        "changeemail": "Càmbia indiritzu email",
        "changeemail-oldemail": "Indiritzu email atuale:",
        "changeemail-newemail": "Indiritzu email nou:",
        "subject": "Tema/tìtulu:",
        "minoredit": "Custu est unu càmbiu minore",
        "watchthis": "Annota custa pàgina",
-       "savearticle": "Sarba sa pàgina",
+       "savearticle": "Sarva sa pàgina",
        "preview": "Antiprima",
        "showpreview": "Ammustra s'antiprima",
        "showdiff": "Ammustra is càmbios",
-       "anoneditwarning": "<strong>Atentzione:</strong> Non ses identificadu.\nS'indiritzu IP tuo at a èssere annòtidu si faghes unos cantos càmbios. Si <strong>idendificas</strong> tibe o <strong>[$2 creas unu contu]</strong>, is càmbios tuos ant a esser marcados cun su nùmene impitadore tuo, paris a àteros giuamentos.",
+       "anoneditwarning": "<strong>Atentzione:</strong> Non ses identificadu.\nS'indiritzu IP tuo at a èssere annotadudu si faghes unos cantos càmbios. Si <strong>identìficas</strong> tibe o <strong>[$2 creas unu contu]</strong>, is càmbios tuos ant a èssere marcados cun su nùmene utente tuo, paris a àteros giuamentos.",
        "anonpreviewwarning": "''Non ses identificadu. Sarvende s'indiritzu IP tuo at a èssere registradu in s'istòria de sa pàgina.''",
        "missingcommenttext": "Inserta unu cummentu inoghe suta.",
        "summary-preview": "Antiprima ogetu:",
        "postedit-confirmation-saved": "Su càmbiu tuo est istadu sarbadu.",
        "edit-already-exists": "No est possìbile creare una pàgina noa.\nEsistit giai.",
        "defaultmessagetext": "Testu de su messàgiu predeterminadu",
-       "invalid-content-data": "Datos de cuntènnidu invàlidos",
-       "content-not-allowed-here": "Cuntènnidu a manera \"$1\" no adduidu in sa pàgina [[$2]]",
+       "invalid-content-data": "Datos de cuntenutu invàlidos",
+       "content-not-allowed-here": "Cuntenutu a manera \"$1\" no adduidu in sa pàgina [[$2]]",
        "editwarning-warning": "S'essida dae custa pàgina diat pòdere cajonare sa pèrdida de totus sos càmbios chi as fatu.\nSi ses autentificadu, podes disabilitare custu avisu in sa setzione \"{{int:prefs-editing}}\" de sas preferèntzias tuas.",
        "editpage-notsupportedcontentformat-title": "Formadu de càbidu non suportadu",
        "content-model-wikitext": "wikitestu",
        "revdelete-selected-file": "{{PLURAL:$1|Versione seletzionada|Versiones seletzionadas}} de su documentu [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Acadessimentu de su registru seletzionadu|Acadessimentos de su registru seletzionadu}}:",
        "revdelete-hide-text": "Testu de sa versione",
-       "revdelete-hide-image": "Cua su cuntènnidu de su documentu",
+       "revdelete-hide-image": "Cua su cuntenutu de su documentu",
        "revdelete-hide-comment": "Modìfica s'ogetu",
        "revdelete-radio-same": "(non cambiare)",
        "revdelete-radio-set": "Cua",
        "difference-multipage": "(Diferèntzias intre pàginas)",
        "lineno": "Lìnia $1:",
        "compareselectedversions": "Cumpara versiones scioberadas",
-       "editundo": "annudda",
+       "editundo": "annulla",
        "diff-empty": "(Diferèntzia peruna)",
        "searchresults": "Resurtados de sa chirca",
        "searchresults-title": "Resurtados pro sa chirca de \"$1\"",
        "viewprevnext": "Càstia ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "<strong>Ddu est una pàgina tzerriada \"[[:$1]]\" in custa wiki.</strong> {{PLURAL:$2|0=|Càstia puru is àteros resurtados de sa chirca.}}",
        "searchmenu-new": "<strong>Crea sa pàgina \"[[:$1]]\" in custa wiki!</strong> {{PLURAL:$2|0=|Càstia fintzas sa pàgina agatada cun sa chirca tua|Càstia fintzas is resurtados de sa chirca}}",
-       "searchprofile-articles": "Pàginas de càbidos",
+       "searchprofile-articles": "Pàginas de cuntenutos",
        "searchprofile-images": "Multimèdia",
        "searchprofile-everything": "Totue",
        "searchprofile-advanced": "Avantzada",
        "right-undelete": "Restaurare una pàgina",
        "right-suppressionlog": "Càstia is registros privados",
        "right-siteadmin": "Bloccare e sbloccare su database",
-       "newuserlogpage": "Impitadores nous",
+       "newuserlogpage": "Utentes noos",
        "rightslog": "Deretos de is impitadores",
        "action-read": "lègher custa pàgina",
        "action-edit": "cambiare custa pàgina",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|dae s'ùrtima bisita}}",
        "enhancedrc-history": "istòria",
        "recentchanges": "Ùrtimas mudàntzias",
-       "recentchanges-legend": "Optziones subra ùrtimas mudàntzias",
+       "recentchanges-legend": "Optziones subra ùrtimos càmbios",
        "recentchanges-summary": "Sighi is ùrtimas mudàntzias a sa wiki in custa pàgina.",
        "recentchanges-feed-description": "Sighi is ùrtimas mudàntzias a sa wiki cun custu feed.",
-       "recentchanges-label-newpage": "Custu càmbiu at creadu una pàgina noa",
-       "recentchanges-label-minor": "Custu est unu càmbiu minore",
-       "recentchanges-label-bot": "Custu càmbiu est istadu fatu dae unu bot",
+       "recentchanges-label-newpage": "Custa modìfica at creadu una pàgina noa",
+       "recentchanges-label-minor": "Custa est una modìfica minore",
+       "recentchanges-label-bot": "Custa modìfica l'at fata unu bot",
        "recentchanges-label-unpatrolled": "Custu càmbiu no est istadu cumprobadu",
-       "recentchanges-label-plusminus": "Sa muda de sa mannesa de sa pàgina dae su nùmeru de bytes",
+       "recentchanges-label-plusminus": "Su càmbiu de sa mannària de sa pàgina dae su nùmeru de bytes",
        "recentchanges-legend-heading": "'''Legenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (càstia [[Special:NewPages|is pàginas noas]])",
        "rcnotefrom": "{{PLURAL:$5|Sa chi sighit est sa mudàntzia|Is chi sighint sunt is mudàntzias}} dae <strong>$3, $4</strong> (ammustradas fintzas a <strong>$1</strong>).",
-       "rclistfrom": "Ammustra mudàntzias dae $3 $2",
+       "rclistfrom": "Ammustra càmbios dae $3 $2",
        "rcshowhideminor": "$1 is càmbios minores",
        "rcshowhideminor-show": "Ammustra",
        "rcshowhideminor-hide": "Cua",
        "rcshowhidebots": "$1 is bots",
        "rcshowhidebots-show": "Ammustra",
        "rcshowhidebots-hide": "Cua",
-       "rcshowhideliu": "$1 is impitadores identificados",
+       "rcshowhideliu": "$1 is utentes identificados",
        "rcshowhideliu-show": "Ammustra",
        "rcshowhideliu-hide": "Cua",
-       "rcshowhideanons": "$1 is impitadores anònimos",
+       "rcshowhideanons": "$1 is utentes anònimos",
        "rcshowhideanons-show": "Ammustra",
        "rcshowhideanons-hide": "Cua",
        "rcshowhidepatr": "$1 càmbios cumprobados",
        "rcshowhidepatr-show": "Ammustra",
        "rcshowhidepatr-hide": "Cua",
-       "rcshowhidemine": "$1 is càmbios mios",
+       "rcshowhidemine": "$1 is modìficas meas",
        "rcshowhidemine-show": "Ammustra",
        "rcshowhidemine-hide": "Cua",
        "rclinks": "Ammustra is ùrtimas $1 mudàntzias fatas in is ùrtimas $2 dies<br />$3",
        "listfiles-latestversion": "Versione atuale",
        "listfiles-latestversion-yes": "Eja",
        "listfiles-latestversion-no": "No",
-       "file-anchor-link": "File",
-       "filehist": "Stòria de su file",
+       "file-anchor-link": "Archìviu",
+       "filehist": "Istòria de su file",
        "filehist-help": "Carca unu grupu data/ora pro castiare su file comente si presentada in su tempus indicadu.",
        "filehist-deleteall": "fùlia totu",
        "filehist-deleteone": "cantzella",
        "filehist-thumb": "Miniatura",
        "filehist-thumbtext": "Miniatura de sa versione de is $1",
        "filehist-nothumb": "Peruna miniatura",
-       "filehist-user": "Impitadore",
+       "filehist-user": "Utente",
        "filehist-dimensions": "Dimensiones",
        "filehist-filesize": "Mannesa de su file",
-       "filehist-comment": "Cummentu",
+       "filehist-comment": "Cumentu",
        "imagelinks": "Ligant a custu file",
        "linkstoimage": "{{PLURAL:$1|Sa pàgina chi sighit ligat|Is $1 pàginas chi sighint ligant}} a custu file:",
        "nolinkstoimage": "Peruna pàgina ligat a custu file.",
        "nlinks": "$1 {{PLURAL:$1|ligòngiu|ligòngios}}",
        "nmembers": "$1 {{PLURAL:$1|cumponente|cumponentes}}",
        "nrevisions": "$1 {{PLURAL:$1|revisione|revisiones}}",
-       "nviews": "$1 {{PLURAL:$1|bisura|bisuras}}",
        "lonelypages": "Pàginas burdas",
        "uncategorizedpages": "Pàginas chentza categoria",
        "uncategorizedcategories": "Categorias chentza categoria",
        "mailnologintext": "Depes èsser [[Special:UserLogin|identificadu (login)]] e àere registradu un'indiritzu email vàlidu in is [[Special:Preferences|preferèntzias tuas]] pro imbiare email a àteros impitadores.",
        "emailuser": "Imbia una email a custu impitadore",
        "emailuser-title-notarget": "Ispedi una email a s'impitadore",
-       "emailpage": "Ispedi una email a s'impitadore",
        "emailpagetext": "Imprea su mòdulu a suta pro ispedire una email a custu impitadore.\nS'indiritzu chi as insertadu in is [[Special:Preferences|preferèntzias impitadore tuas]] at a pàrrere comente su chi at ispedidu sa e-mail, pro fàghere sa manera chi su destinatàriu ti respundat deretu.",
        "defemailsubject": "Missada dae \"$1\", impitadore de {{SITENAME}}",
        "noemailtitle": "Perunu indiritzu e-mail",
        "created": "creada",
        "deletepage": "Fùlia pàgina",
        "confirm": "Cunfima",
-       "excontent": "su cuntènnidu fiat: '$1'",
-       "excontentauthor": "su cuntènnidu fiat: '$1' (e s'ùnicu contribudore fiat '[[Special:Contributions/$2|$2]]')",
+       "excontent": "su cuntenutu fiat: '$1'",
+       "excontentauthor": "su cuntenutu fiat: '$1' (e s'ùnicu contribudore fiat '[[Special:Contributions/$2|$2]]')",
        "delete-confirm": "Fùlia \"$1\"",
        "delete-legend": "Fuliare",
        "confirmdeletetext": "Ses acanta de burrare una pàgina cun totu su stòria sua.\nPro praxere, cunfirma ca est intentzione tua fàgher custu, ca connosches is cosseguèntzias de s'atzione tua, a ca custa est cunforma a is [[{{MediaWiki:Policy-url}}|lìnias polìticas]].",
        "undelete-search-submit": "Chirca",
        "undelete-show-file-submit": "Eja",
        "namespace": "Nùmene-logu:",
-       "invert": "Fùrria sa seletzione",
+       "invert": "Inverti sa seletzione",
        "namespace_association": "Nùmene-logu assotziadu",
        "blanknamespace": "(Printzipale)",
-       "contributions": "Contributos {{GENDER:$1|impitadore}}",
+       "contributions": "Cuntributos {{GENDER:$1|utente}}",
        "contributions-title": "Contributziones de $1",
        "mycontris": "Contributos mios",
        "contribsub2": "Pro {{GENDER:$3|$1}} ($2)",
        "blocklink": "arrea",
        "unblocklink": "sblocca",
        "change-blocklink": "tramuda s'arreu",
-       "contribslink": "contributos",
+       "contribslink": "cuntributos",
        "emaillink": "imbia email",
        "blocklogpage": "Bloccos de impitadores",
        "blocklogentry": "bloccau [[$1]] pro unu tempu de $2 $3",
        "move-page": "Movimentu de $1",
        "move-page-legend": "Movimentu pàgina",
        "movepagetext": "Cun custu mòdellu podes renumenare una pàgina, movende totu sa stòria sua a sa pàgina noa.\nSu tìtulu bèciu at a diventare una pàgina de reindiritzamentu a su tìtulu nou.\nPodes agiornare automaticamente is redirects ca ligant a su tìtulu originàriu.\nSi sèberas de no, assicura·ti de controllare pro [[Special:DoubleRedirects| reindiritzaduras dòpias]] o [[Special:BrokenRedirects|sballiadas]].\nSes responsàbile de t'assigurare ca is cullegamentos sighint a puntare  a ue depent puntare.\n\nAnnota ca sa pàgina <strong>non</strong> s'at a mòver si nde esistit giai un'àtera a su tìtulu nou, si no est ki siat bùida o cun sceti unu reindiritzamentu a sa bècia e siat chentza acontzos in antis. In casu de movimentu sballiadu, duncas, si podet torrare a su tìtulu bèciu, ma non podes subrascrìer una pàgina chi giai esistit.\n\n<strong>ATENTZIONE!</strong>\nUnu cambiamentu dràsticu podet creare problemas, mescamente a is pàginas prus populares;\npro praxere depes èsser seguru de àer cumpresu is cunsighèntzias prima de sighire a in antis.",
-       "movepagetalktext": "Sa pàgina cuntierras asotziada, chi esistit, at a èssere movida automaticamenti impare a sa pàgina base, '''a parte in custos casos''':\n* su movimentu de sa pàgina est intre namespaces diversos;\n* in currispondèntzia de su tìtulu nou esistit giai una pàgina de cuntierras (non bùida);\n* sa casella inoe in bàsciu no est istata sceberada.\n\nIn custos casos, si cheres, depes mòvere a manu su cuntènnidu de sa pàgina.",
+       "movepagetalktext": "Sa pàgina cuntierras asotziada, chi esistit, at a èssere movida automaticamenti impare a sa pàgina base, '''a parte in custos casos''':\n* su movimentu de sa pàgina est intre namespaces diversos;\n* in currispondèntzia de su tìtulu nou esistit giai una pàgina de cuntierras (non bùida);\n* sa casella inoe in bàsciu no est istata sceberada.\n\nIn custos casos, si cheres, depes mòvere a manu su cuntenutu de sa pàgina.",
        "movearticle": "Move sa pàgina",
        "movenologintext": "Depes èsser unu impitadore registradu e [[Special:UserLogin|identificadu]] pro pòder mòver una pàgina",
        "newtitle": "Tìtulu nou:",
        "allmessages-language": "Limba:",
        "allmessages-filter-submit": "Bae",
        "allmessages-filter-translate": "Tradui",
-       "thumbnail-more": "Amannia",
+       "thumbnail-more": "Ismànnia",
        "thumbnail_error": "Faddina creande sa miniatura: $1",
        "import-interwiki-sourcewiki": "Wiki de orìgine:",
        "import-interwiki-sourcepage": "Pàgina de orìgine:",
        "importstart": "Importande is pàginas...",
        "import-revision-count": "$1 {{PLURAL:$1|revisione|revisiones}}",
        "importlogpage": "Importatziones",
-       "tooltip-pt-userpage": "Sa pàgina impitadore tua",
+       "tooltip-pt-userpage": "Sa pàgina utente tua",
        "tooltip-pt-mytalk": "Sa pàgina de is cuntierras tuas",
        "tooltip-pt-preferences": "Is preferèntzias chi podes seberare",
        "tooltip-pt-watchlist": "Lista de is pàginas annotadas dae tue pro is mudàntzias",
        "tooltip-pt-mycontris": "Sa lista de is contributos mios",
        "tooltip-pt-login": "Sa registratzione est cussigiada; mancari chi non siat obligatoria",
        "tooltip-pt-logout": "Essida (log out)",
-       "tooltip-ca-talk": "Cuntierras a propòsitu de su cuntestu de sa pàgina",
-       "tooltip-ca-edit": "Podes modificare custa pàgina.\nPro praghere, prima de sarbare càstia s'antiprima",
-       "tooltip-ca-addsection": "Incumentza una setzione noa",
+       "tooltip-ca-talk": "Cuntierras a propòsitu de su cuntenutu de sa pàgina",
+       "tooltip-ca-edit": "Podes modificare custa pàgina.\nPro praghere, in antis de sarvare càstia s'anteprima",
+       "tooltip-ca-addsection": "Incumintza una setzione noa",
        "tooltip-ca-viewsource": "Sa pàgina est bardada.\nPodes castiare sa mitza sua",
        "tooltip-ca-history": "Versiones coladas de custa pàgina",
        "tooltip-ca-protect": "Barda custa pàgina",
        "tooltip-ca-delete": "Burra custa pàgina",
        "tooltip-ca-move": "Move custa pàgina (càmbia su tìtulu)",
-       "tooltip-ca-watch": "Annota custa pàgina pro is mudàntzias",
+       "tooltip-ca-watch": "Annota custa pàgina pro is càmbios",
        "tooltip-ca-unwatch": "Rimove custa pàgina dae sa lista de pàginas annotadas tua",
-       "tooltip-search": "Chirca in intru de {{SITENAME}}",
-       "tooltip-search-go": "Bae a una pàgina cun su nùmene indicadu, si esistit",
+       "tooltip-search": "Chirca in intro de {{SITENAME}}",
+       "tooltip-search-go": "Bae a una pàgina cun su nùmene inditadu, si esistit",
        "tooltip-search-fulltext": "Chirca custu testu in is pàginas",
-       "tooltip-p-logo": "Bìsita sa pàgina base",
+       "tooltip-p-logo": "Vìsita sa pàgina base",
        "tooltip-n-mainpage": "Bìsita sa pàgina base",
        "tooltip-n-mainpage-description": "Bìsita sa pàgina base",
        "tooltip-n-portal": "Descritzione de su progetu, ite podes fàgher, a innue agatas is cosas",
        "tooltip-n-currentevents": "Informatziones subra acadessimentos atuales",
-       "tooltip-n-recentchanges": "Lista de is ùrtimas mudàntzias in su giassu",
+       "tooltip-n-recentchanges": "Lista de is ùrtimos càmbios in su giassu",
        "tooltip-n-randompage": "Càrriga una pàgina a sorte",
        "tooltip-n-help": "Pàginas de agiudu",
        "tooltip-t-whatlinkshere": "Lista de totu is pàginas chi ligant a custa",
-       "tooltip-t-recentchangeslinked": "Lista de is ùrtimas mudàntzias de is pàginas ki ligant a custa",
+       "tooltip-t-recentchangeslinked": "Lista de is ùrtimos càmbios de is pàginas ki ligant a custa",
        "tooltip-feed-rss": "RSS feed pro custa pàgina",
        "tooltip-feed-atom": "Atom feed pro custa pàgina",
-       "tooltip-t-contributions": "Càstia sa lista de is contributos de custu impitadore",
+       "tooltip-t-contributions": "Càstia sa lista de is cuntributos de custu utente",
        "tooltip-t-emailuser": "Ispedi una email a custu impitadore",
        "tooltip-t-upload": "Càrriga documentu multimediale",
        "tooltip-t-specialpages": "Lista de is pàginas ispetziales",
        "tooltip-t-print": "Versione de custa pàgina pro s'imprenta",
-       "tooltip-t-permalink": "Ligòngiu permanente a custa versione de sa pàgina",
-       "tooltip-ca-nstab-main": "Càstia su cuntènnidu de sa pàgina",
-       "tooltip-ca-nstab-user": "Càstia sa pàgina impitadore",
+       "tooltip-t-permalink": "Ligàmene permanente a custa versione de sa pàgina",
+       "tooltip-ca-nstab-main": "Càstia su cuntenutu de sa pàgina",
+       "tooltip-ca-nstab-user": "Càstia sa pàgina utente",
        "tooltip-ca-nstab-special": "Custa est una pàgina ispetziale, non si podet modificare",
        "tooltip-ca-nstab-project": "Càstia sa pàgina de servìtziu",
        "tooltip-ca-nstab-image": "Càstia sa pàgina de su file",
        "tooltip-watch": "Annota custa pàgina pro is mudàntzias",
        "tooltip-recreate": "Torra a creare sa pàgina mancari siat stada fuliada",
        "tooltip-upload": "Cumentza a carrigare",
-       "tooltip-rollback": "\"Rollback\" annudda is mudàntzias de custa pàgina fatas dae s'ùrtimu contribudore",
+       "tooltip-rollback": "\"Rollback\" annulla is modìficas de custa pàgina fatas dae s'ùrtimu cuntribudore",
        "tooltip-undo": "\"Annudda\" fùrriat custu càmbiu e aberit su mòdulu de càmbiu comente antiprima.\nPodes annànghere unu motivu in s'ogetu.",
        "tooltip-preferences-save": "Sarba preferèntzias",
        "tooltip-summary": "Inserta unu resumu curtzu",
        "pageinfo-default-sort": "Critèriu de ordinamentu predefinidu",
        "pageinfo-length": "Longària de sa pàgina (in bytes)",
        "pageinfo-article-id": "ID pàgina",
-       "pageinfo-language": "Limba de su cuntènnidu de sa pàgina",
-       "pageinfo-content-model": "Modellu de su cuntènnidu de sa pàgina",
+       "pageinfo-language": "Limba de su cuntenutu de sa pàgina",
+       "pageinfo-content-model": "Modellu de su cuntenutu de sa pàgina",
        "pageinfo-robot-policy": "Inditzizatzione pro is robots",
        "pageinfo-robot-index": "Adduida",
        "pageinfo-firstuser": "Creadore de sa pàgina",
        "yesterday-at": "Eris a is $1",
        "bad_image_list": "Su formadu est su chi sighit:\n\nBenint consideradas isceti is listas punnadas (lìnias chi incumentzant cun *).\nSu primu ligòngiu in cada una lìnia depet èssere unu ligòngiu a unu documentu malu (o indesideradu).\nIs ligòngios chi sighint in sa matessi lìnia sunt cunsiderados comente etzetziones (est a nàrrere, pàginas in ue si podet usare su documentu).",
        "metadata": "Metadatos",
-       "metadata-help": "Custu file cuntènnit informatziones annuntiles, probabilmente annúnghedas dae sa fotocamera o dae su scannerizadore impreadu pro ddu creare o ddu digitalizare. Si su file est istadu mudadu, unos cantos particulares podent non currispòndere a sa realidade.",
+       "metadata-help": "Custu file cuntenet informatziones annuntiles, probabilmente annantas dae sa fotocamera o dae s'iscansionadore impreadu pro ddu creare o ddu digitalizare. Si su file est istadu modificadu, unos cantos particulares podent non currispòndere a sa realidade.",
        "metadata-expand": "Ammustra particulares",
        "metadata-collapse": "Cua particulares",
-       "metadata-fields": "Is campus de is metadatos de imàgine listados in custu messàgiu ant a èssere ammustrados in sa pàgina de s'immàgine candu sa tabella de is metadatos est presentada in forma breve. Pro impostatzione predefinida, is àteros campos ant a èssere cuaos.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Is campos de is metadatos de imàgine listados in custu messàgiu ant a èssere ammustrados in sa pàgina de s'immàgine candu sa tabella de is metadatos est presentada in forma breve. Pro impostatzione predefinida, is àteros campos ant a èssere cuaos.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-artist": "Autore",
        "exif-exposuretime-format": "$1 s ($2)",
        "exif-fnumber-format": "f/$1",
index c44e0d6..e4bc1dc 100644 (file)
                        "Macofe"
                ]
        },
-       "tog-underline": "Suttalinia li lijami:",
+       "tog-underline": "Suttalìnia li lijami:",
        "tog-hideminor": "Ammuccia li canciamenti nichi nta l'ùrtimi canciamenti",
-       "tog-hidepatrolled": "Ammuccia li mudìfichi battugghiati nta l'ùrtimi canciamenti",
+       "tog-hidepatrolled": "Ammuccia li canciamenti virificati nta l'ùrtimi canciamenti",
        "tog-newpageshidepatrolled": "Ammuccia li pàggini battugghiati di l'alencu dî pàggini cchiu' novi",
-       "tog-extendwatchlist": "Ammustra tutti i canciamenti ntâ lista taliata, nun sulu u cchiu' ricenti",
-       "tog-usenewrc": "Raggruppa li canciamenti pi' pàggina ntâ lista dî canciamenti ricenti e ntâ lista taliata",
+       "tog-extendwatchlist": "Ammustra tutti li canciamenti ntâ lista taliata, nun sulu lu cchiù ricenti",
+       "tog-usenewrc": "Raggruppa li canciamenti pi pàggina ntâ lista dî canciamenti ricenti e ntâ lista taliata",
        "tog-numberheadings": "Nummirazzioni autumàtica dî tìtuli di paràgrafu",
-       "tog-showtoolbar": "Ammustra la barra dî strumenta pû canciamentu",
+       "tog-showtoolbar": "Ammustra la barra dî strummenta pû canciamentu",
        "tog-editondblclick": "Duppiu click pi canciari l'artìculu",
-       "tog-editsectiononrightclick": "Attiva lu canciamentu di na sizzioni quannu si clicca cu' buttuni drittu supra a lu so tìtulu",
-       "tog-watchcreations": "Agghiunci li pàggini chi' creu e li file chi' càrricu â me lista taliata",
-       "tog-watchdefault": "Agghiunci li pàggini e li file chi' canciu â me lista taliata",
-       "tog-watchmoves": "Agghiunci li pàggini e li file chi' spostu â me lista taliata",
-       "tog-watchdeletion": "Agghiunci li pàggini e li file chi' cancellu â me lista taliata",
-       "tog-watchrollback": "Agghiunci li pàggini unni fici nu canciu n'arreri â me lista taliata",
-       "tog-minordefault": "Marca ogni' canciamentu comu nicu pi' mpustazzioni pridifinuta",
+       "tog-editsectiononrightclick": "Attiva lu canciamentu di na sizzioni quannu si clicca cu buttuni drittu supra a lu sò tìtulu",
+       "tog-watchcreations": "Agghiunci li pàggini chi creu e li file chi càrricu â mè lista taliata",
+       "tog-watchdefault": "Agghiunci li pàggini e li file chi canciu â mè lista taliata",
+       "tog-watchmoves": "Agghiunci li pàggini e li file chi spostu â mè lista taliata",
+       "tog-watchdeletion": "Agghiunci li pàggini e li file chi cancellu â mè lista taliata",
+       "tog-watchrollback": "Agghiunci li pàggini unni fici nu canciu n'arreri â mè lista taliata",
+       "tog-minordefault": "Marca ogni canciamentu comu nicu pi mpustazzioni pridifinuta",
        "tog-previewontop": "Ammustra l'antiprima avanti dâ casedda di canciamentu",
        "tog-previewonfirst": "Ammustra l'antiprima ô primu canciamentu",
-       "tog-enotifwatchlistpages": "Mànnami nu missàggiu di posta elittrònica quannu na pàggina o nu file dâ me lista taliata subbìsciunu canciamenti",
-       "tog-enotifusertalkpages": "Mànnami nu missaggiu di posta elettrònica quannu la me pàggina di discussioni veni canciata",
+       "tog-enotifwatchlistpages": "Mànnami nu missaggiu di posta elittrònica quannu na pàggina o nu file dâ mè lista taliata subbìscinu canciamenti",
+       "tog-enotifusertalkpages": "Mànnami nu missaggiu di posta elettrònica quannu la mè pàggina di discussioni veni canciata",
        "tog-enotifminoredits": "Mànnami nu missaggiu di posta elittrònica macari pi li canciamenti nichi di pàggini e file",
-       "tog-enotifrevealaddr": "Ammustra lu me nnirizzu di posta elittrònica ntê missaggi di nutifica",
-       "tog-shownumberswatching": "Ammustra lu nùmmiru di utenti ca talìunu la pàggina",
+       "tog-enotifrevealaddr": "Ammustra lu mè nnirizzu di posta elittrònica ntê missaggi di nutìfica",
+       "tog-shownumberswatching": "Ammustra lu nùmmiru d'utenti ca talìanu la pàggina",
        "tog-oldsig": "Firma attuali:",
-       "tog-fancysig": "Intèrpitra la firma comu wikitestu (senza liami automaticu)",
+       "tog-fancysig": "Ntèrprita la firma comu wikitestu (senza liami automàticu)",
        "tog-uselivepreview": "Attiva l'antiprima in diretta",
-       "tog-forceeditsummary": "Dumanna cunfirma siddu lu riassuntu dûn canciamentu è vacanti",
-       "tog-watchlisthideown": "Ammuccia li me canciamenti ntâ lista taliata",
+       "tog-forceeditsummary": "Addumanna cunferma siddu lu riassuntu dûn canciamentu è vacanti",
+       "tog-watchlisthideown": "Ammuccia li mè canciamenti ntâ lista taliata",
        "tog-watchlisthidebots": "Ammuccia li canciamenti dî bot ntâ lista taliata",
        "tog-watchlisthideminor": "Ammuccia li canciamenti nichi ntâ lista taliata",
        "tog-watchlisthideliu": "Ammuccia li canciamenti di l'utilizzatura riggistrati ntâ lista taliata",
        "tog-watchlisthideanons": "Ammuccia li canciamenti di l'utilizzatura anònimi ntâ lista taliata",
-       "tog-watchlisthidepatrolled": "Ammuccia li mudìfichi battugghiati ntâ lista taliata",
+       "tog-watchlisthidepatrolled": "Ammuccia li canciamenti virificati ntâ lista taliata",
        "tog-ccmeonemails": "Mànnami na copia dî missaggi spiduti a l'àutri utenti",
        "tog-diffonly": "Nun ammustrari lu cuntinutu dî pàggini sutta dî cunfrunti tra virsioni",
        "tog-showhiddencats": "Ammustra li catigurìi ammucciati",
        "tog-norollbackdiff": "Nun ammustrari u cunfruntu tra virsioni doppu aviri fattu nu canciu n'arreri",
        "tog-useeditwarning": "Avvèrtimi quannu mi nni vaju di na pàggina cu' canciamenti nun sarvati",
-       "tog-prefershttps": "Adòpira sempri na cunnissioni sicura quannu si' trasutu",
+       "tog-prefershttps": "Adòpira sempri na cunnissioni sicura quannu trasisti",
        "underline-always": "Sempri",
        "underline-never": "Mai",
        "underline-default": "Mpustazzioni pridifinuta dâ peddi o dû browser",
@@ -85,7 +85,7 @@
        "may_long": "Maiu",
        "june": "Giugnu",
        "july": "Giugnettu",
-       "august": "Aùstu",
+       "august": "Austu",
        "september": "Sittèmmiru",
        "october": "Uttùviru",
        "november": "Nuvèmmiru",
        "may-date": "$1 di maiu",
        "june-date": "$1 di giugnu",
        "july-date": "$1 di giugnettu",
-       "august-date": "$1 di aùstu",
+       "august-date": "$1 d'austu",
        "september-date": "$1 di sittèmmiru",
        "october-date": "$1 di uttùviru",
        "november-date": "$1 di nuvèmmiru",
        "category_header": "Pàggini ntâ catigurìa \"$1\"",
        "subcategories": "Suttacatigurìi",
        "category-media-header": "File multimidiali ntâ catigurìa \"$1\"",
-       "category-empty": "<em>Sta catigurìa pi' com'ora nun cunteni nudda pàggina e nuddu file multimidiali.</em>",
+       "category-empty": "<em>Sta catigurìa pi com'ora nun cunteni nudda pàggina e nuddu file multimidiali.</em>",
        "hidden-categories": "{{PLURAL:$1|Catigurìa ammucciata|Catigurìi ammuciati}}",
        "hidden-category-category": "Catigurìi ammucciati",
        "category-subcat-count": "{{PLURAL:$2|Sta catigurìa cunteni na sula suttacatigurìa, nnicata ccà sutta.|Sta catigurìa cunteni {{PLURAL:$1|la suttacatigurìa|li $1 suttacatigurìi nnicati}} ccà sutta, sùpira nu tutali di $2.}}",
        "qbbrowse": "Sfogghia",
        "qbedit": "Cancia",
        "qbpageoptions": "Opzioni pàggina",
-       "qbmyoptions": "Li me pàggini",
+       "qbmyoptions": "Li mè pàggini",
        "faq": "Dumanni cumuni",
        "faqpage": "Project:Dumanni comuni",
        "actions": "Azzioni",
        "variants": "Varianti",
        "navigation-heading": "Menù di navigazzioni",
        "errorpagetitle": "Erruri",
-       "returnto": "Ritorna a' $1.",
+       "returnto": "Torna a $1.",
        "tagline": "Di {{SITENAME}}",
        "help": "Guida",
-       "search": "Arriscedi",
-       "searchbutton": "Va cerca",
+       "search": "Arricerca",
+       "searchbutton": "Va arricerca",
        "go": "Trova",
        "searcharticle": "Vai",
        "history": "Crunuluggìa dâ pàggina",
        "permalink": "Liami pirmanenti",
        "print": "Stampa",
        "view": "Talìa",
-       "view-foreign": "Talìa supra a' $1",
+       "view-foreign": "Talìa supra a $1",
        "edit": "Cancia",
        "edit-local": "Cancia la discrizzioni lucali",
        "create": "Crea",
        "unprotect": "Cancia la prutizzioni",
        "unprotectthispage": "Cancia la prutizzioni di sta pàggina",
        "newpage": "Pàggina nova",
-       "talkpage": "Discussioni supra a' sta pàggina",
+       "talkpage": "Discussioni supra a sta pàggina",
        "talkpagelinktext": "Discussioni",
        "specialpage": "Pàggina spiciali",
        "personaltools": "Strumenta pirsunali",
        "articlepage": "Vidi l'artìculu",
        "talk": "Discussioni",
        "views": "Vìsiti",
-       "toolbox": "Strumenta",
+       "toolbox": "Strummenta",
        "userpage": "Talìa la pàggina di l'utenti",
        "projectpage": "Talìa la pàggina di sirvizziu",
        "imagepage": "Talìa la pàggina dû file",
        "redirectedfrom": "(Rimannu a' pàrtiri di $1)",
        "redirectpagesub": "Pàggina di rimannu",
        "redirectto": "Rimanna a:",
-       "lastmodifiedat": "Sta pàggina fu' canciata l'ùltima vota a li $2 di lu $1.",
-       "viewcount": "Sta pàggina hâ statu liggiuta {{PLURAL:$1|na vota|$1 voti}}.",
+       "lastmodifiedat": "Sta pàggina fu canciata l'ùrtima vota a li $2 di lu $1.",
+       "viewcount": "Sta pàggina fu liggiuta {{PLURAL:$1|na vota|$1 voti}}.",
        "protectedpage": "Pàggina prutetta",
-       "jumpto": "Vai a':",
+       "jumpto": "Vai a:",
        "jumptonavigation": "navigazzioni",
        "jumptosearch": "cerca",
-       "view-pool-error": "Nni dispiaci, ma li server nta stu mumentu sunnu troppu carrichi.\nTroppi utenti stannu circannu di taliari sta pàggina.\nPi' favuri spetta n'anticchia prima di pruvari n'autra vota a taliari sta pàggina.\n\n$1",
-       "generic-pool-error": "Nni dispiaci, ma li server nta stu mumentu sunnu troppu càrrichi.\nTroppi utenti stannu circannu di taliari sta risorsa.\nPi' favuri spetta n'anticchia prima di pruvari n'autra vota a taliari sta risorsa.",
+       "view-pool-error": "Ni dispiaci, ma li server nta stu mumentu sunnu troppu càrrichi.\nTroppi utenti stannu circannu di taliari sta pàggina.\nPi favuri aspetta n'anticchia prima di pruvari n'àutra vota a taliari sta pàggina.\n\n$1",
+       "generic-pool-error": "Ni dispiaci, ma li server nta stu mumentu sunnu troppu càrrichi.\nTroppi utenti stannu circannu di taliari sta risorsa.\nPi favuri aspetta n'anticchia prima di pruvari n'àutra vota a taliari sta risorsa.",
        "pool-timeout": "Tempu scadutu aspittannu lu sbloccu",
        "pool-queuefull": "La cuda dû pool è china",
        "pool-errorunknown": "Erruri scanusciutu",
        "badaccess-groups": "La funzioni addumannata è risirvata a l'utenti ca appartèninu {{PLURAL:$2|ô gruppu|a unu dî gruppi siquenti}}: $1.",
        "versionrequired": "È nicissaria la virsioni $1 dû software MediaWiki",
        "versionrequiredtext": "P'usari sta pàggina ci voli la virsioni $1 dû software MediaWiki. Talìa [[Special:Version|sta pàggina]]",
-       "ok": "Va' bonu",
+       "ok": "Va bonu",
        "retrievedfrom": "Estrattu di \"$1\"",
-       "youhavenewmessages": "Ricivisti $1 ($2).",
-       "youhavenewmessagesfromusers": "Ricivisti $1 di {{PLURAL:$3|n'autru utenti|$3 utenti}} ($2).",
-       "youhavenewmessagesmanyusers": "Ricivisti $1 di tanti utenti ($2).",
+       "youhavenewmessages": "Arricivisti $1 ($2).",
+       "youhavenewmessagesfromusers": "Arricivisti $1 di {{PLURAL:$3|n'àutru utenti|$3 utenti}} ($2).",
+       "youhavenewmessagesmanyusers": "Arricivisti $1 di tanti utenti ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|nu missaggiu novu|999=missaggi novi}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|ùrtimu canciamentu|999=ùrtimi canciamenti}}",
-       "youhavenewmessagesmulti": "Ricivisti missaggi novi supra a' $1",
+       "youhavenewmessagesmulti": "Arricivisti missaggi novi supra a $1",
        "editsection": "cancia",
        "editold": "cancia",
-       "viewsourceold": "talìa u surgenti",
+       "viewsourceold": "talìa la surgenti",
        "editlink": "cancia",
-       "viewsourcelink": "talìa u surgenti",
+       "viewsourcelink": "talìa la surgenti",
        "editsectionhint": "Cancia la sizzioni $1",
        "toc": "Ìnnici",
        "showtoc": "ammustra",
        "hidetoc": "ammuccia",
        "collapsible-collapse": "Strinci",
-       "collapsible-expand": "Llarga",
+       "collapsible-expand": "Allarga",
        "confirmable-confirm": "Si' {{GENDER:$1|sicuru|sicura}}?",
        "confirmable-yes": "Sì",
        "confirmable-no": "No",
        "page-rss-feed": "Feed RSS di \"$1\"",
        "page-atom-feed": "Feed Atom di \"$1\"",
        "red-link-title": "$1 (la pàggina nun esisti)",
-       "sort-descending": "Òrdina a' scìnniri",
-       "sort-ascending": "Òrdina a' nchianari",
+       "sort-descending": "Òrdina dicriscennu",
+       "sort-ascending": "Òrdina criscennu",
        "nstab-main": "Pàggina",
        "nstab-user": "Pàggina di l'utenti",
        "nstab-media": "Pàggina dû file multimidiali",
        "databaseerror-error": "Erruri: $1",
        "laggedslavemode": "Accura: La pàggina putissi nun ripurtari l'aggiurnamenti cchiù ricenti.",
        "readonly": "Basi di dati bluccata",
-       "enterlockreason": "Spiega lu mutivu dû bloccu, spicificannu na stima di quannu veniravi livatu.",
-       "readonlytext": "Com'ad ora la basi di dati è bluccata e nun sunnu pussìbbili junti o canciamenti; lu mutivu prubbabbili è la manutinzioni ordinària, finuta la quali la basi di dati turniravi normali.\n\nL'amministraturi chi la bluccau desi sta spiegazzioni: $1",
-       "missing-article": "La basi di dati nun attruvau lu testu di na pàggina ch'avìssi avutu a' attruvari, cu' nomu \"$1\" $2.\n\nSta cosa di sòlitu succedi quannu s'arrichiama, a' pàrtiri di na crunuluggìa o di nu cunfruntu tra virsioni, nu liami a na pàggina chi' fu' cancillata.\n\nSi' nun è accussì, po' èssiri ca scupristi nu bug ntô software.\nPi' favuri signala stu fattu a' n'[[Special:ListUsers/sysop|amministraturi]], spicificannu l'URL.",
+       "enterlockreason": "Spiega lu mutivu dû bloccu, spicificannu na stima di quannu veni livatu.",
+       "readonlytext": "Com'a ora la basi di dati è bluccata e nun sunnu pussìbbili junti o canciamenti; lu mutivu prubbàbbili è la manutinzioni ordinaria, finuta la quali la basi di dati torna nurmali.\n\nL'amministraturi chi la bluccau desi sta spigazzioni: $1",
+       "missing-article": "La basi di dati nun attruvau lu testu di na pàggina c'avissi avutu a attruvari, cu nomu \"$1\" $2.\n\nSta cosa di sòlitu succedi quannu s'arrichiama, a pàrtiri di na crunuluggìa o di nu cunfruntu tra virsioni, nu liami a na pàggina chi fu cancillata.\n\nSi nun è accussì, pò èssiri ca scupristi nu bug ntô software.\nPi favuri signala stu fattu a n'[[Special:ListUsers/sysop|amministraturi]], spicificannu l'URL.",
        "missingarticle-rev": "(№ di virsioni: $1)",
        "missingarticle-diff": "(Diff: $1, $2)",
-       "readonly_lag": "La basi di dati fu' bluccata autumaticamenti nta mentri ca li server di basi di dati slave si sincrunìzzanu cu' chiddu master",
+       "readonly_lag": "La basi di dati fu bluccata autumaticamenti ntô mentri ca li server di basi di dati slave si sincrunìzzanu cu chiddu master",
        "internalerror": "Erruri nternu",
        "internalerror_info": "Erruri nternu: $1",
        "internalerror-fatal-exception": "Eccizzioni fatali di tipu \"$1\"",
-       "filecopyerror": "Nun fu' pussìbbili cupiari lu file \"$1\" nta \"$2\".",
-       "filerenameerror": "Nun fu' pussìbbili canciari lu nomu dû file di \"$1\" a' \"$2\".",
+       "filecopyerror": "Nun fu pussìbbili cupiari lu file \"$1\" nta \"$2\".",
+       "filerenameerror": "Nun fu pussìbbili canciari lu nomu dû file di \"$1\" a \"$2\".",
        "filedeleteerror": "Nun fu pussìbbili cancillari lu file \"$1\".",
        "directorycreateerror": "Nun fu pussìbbili criari la cartella \"$1\".",
        "directoryreadonlyerror": "La cartella \"$1\" è a' sula littura.",
        "directorynotreadableerror": "La cartella \"$1\" nun è liggìbbili.",
-       "filenotfound": "Nun fu pussìbbili truvari lu file \"$1\".",
+       "filenotfound": "Nun fu pussìbbili attruvari lu file \"$1\".",
        "unexpected": "Valuri nun privistu: \"$1\"=\"$2\".",
        "formerror": "Erruri: Nun fu pussìbbili mannari lu mòdulu.",
-       "badarticleerror": "St'opirazzioni nun è cunsintuta nta sta pàggina.",
-       "cannotdelete": "Nun fu' pussìbbili cancillari la pàggina o lu file \"$1\".\nPutissi aviri statu già cancillatu di quarchidun'autru.",
+       "badarticleerror": "St'opirazzioni nun è cunzintuta nta sta pàggina.",
+       "cannotdelete": "Nun fu pussìbbili cancillari la pàggina o lu file \"$1\".\nPutissi aviri statu già cancillatu di quarchidun'àutru.",
        "cannotdelete-title": "Nun è pussìbbili cancillari la pàggina \"$1\"",
-       "delete-hook-aborted": "Cancillazzioni annullata di n'hook.\nNun desi nudda spiegazzioni.",
-       "no-null-revision": "Non fu' pussibbili criari na virsioni nulla pâ paggina \"$1\"",
+       "delete-hook-aborted": "Cancillazzioni annullata di n'hook.\nNun desi nudda spigazzioni.",
+       "no-null-revision": "Nun fu pussìbbili criari na virsioni nulla pâ paggina \"$1\"",
        "badtitle": "Tìtulu nun bonu",
-       "badtitletext": "Lu tìtulu di pàggina addumannatu nun era vàlidu, era vacanti, o vinìa dûn lijami intir-linguìsticu o intir-wiki malu fattu.\nPutissi cuntèniri unu o cchiu' ssai caràttiri chi' nun su' cunsintuti ntê tìtula.",
+       "badtitletext": "Lu tìtulu di pàggina addumannatu nun era vàlidu, era vacanti, o vinìa dûn lijami nterlinguìsticu o nterwiki malu fattu.\nPutissi cuntèniri unu o chiossai caràttiri chi nun sù cunzintuti ntê tìtuli.",
        "title-invalid-empty": "Lu tìtulu addumannatu pâ pàggina è vacanti o puru cunteni sulu lu nomu dûn namespace.",
        "title-invalid-utf8": "Lu tìtulu addumannatu pâ pàggina cunteni na siguenza UTF-8 nun vàlida.",
        "title-invalid-interwiki": "Lu tìtulu addumannatu pâ pàggina cunteni ligami interwiki, ca ntê tìtula nun si ponnu adupirari.",
-       "title-invalid-talk-namespace": "Lu tìtulu addumannatu pâ pàggina srifirisci a na pàggina di discussioni ca nun esisti.",
+       "title-invalid-talk-namespace": "Lu tìtulu addumannatu pâ pàggina s'arrifirisci a na pàggina di discussioni ca nun esisti.",
        "title-invalid-characters": "Lu tìtulu addumannatu pâ pàggina cunteni caràttiri nun vàlidi: \"$1\".",
-       "title-invalid-relative": "Lu tìtulu havi un caminu rilativu. Li tìtuli di pàggina rilativi (./, ../) nun sunnu boni, picchì spissu nun si ponnu arruvari pi' menzu dî browser di l'utenti.",
-       "title-invalid-magic-tilde": "Lu tìtulu addumannatu pâ pàggina cunteni na siguenza maggica di tildi nun vàlida(<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "Lu tìtulu addumannatu pâ pàggina è troppu longu. Nun havi a' èssiri cchiu' longu di {{PLURAL:$1|byte}} sutta cudìfica UTF-8.",
-       "title-invalid-leading-colon": "Lu tìtulu addumannatu pâ pàggina cunteni nu signu di du punti ô principiu, chi' nun è vàlidu.",
+       "title-invalid-relative": "Lu tìtulu havi un caminu rilativu. Li tìtuli di pàggina rilativi (./, ../) nun sunnu boni, pirchì spissu nun si ponnu arrivari pi menzu dî browser di l'utenti.",
+       "title-invalid-magic-tilde": "Lu tìtulu addumannatu pâ pàggina cunteni na siguenza màggica di tildi nun vàlida(<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Lu tìtulu addumannatu pâ pàggina è troppu longu. Nun havi a èssiri cchiù longu di {{PLURAL:$1|byte}} sutta cudìfica UTF-8.",
+       "title-invalid-leading-colon": "Lu tìtulu addumannatu pâ pàggina cunteni nu signu di dui punti ô principiu, chi nun è vàlidu.",
        "perfcached": "Li dati ca sèquinu sunnu stratti di na ''cache'' e putissiru nun èssiri aggiurnati. Ntâ ''cache'' {{PLURAL:$1|capi un risultatu|càpunu $1 risultati}} massimu.",
        "perfcachedts": "Li dati ca sèquinu sunnu stratti di na ''cache'', e furu aggiurnati l'ultima vota ô $1. Ntâ ''cache'' {{PLURAL:$4|capi un risultatu|capunu $4 risultati}} massimu.",
        "querypage-no-updates": "L'aggiurnamenti dâ pàggina sunnu timpuraniamenti suspisi. Li dati 'n chidda cuntinuti nun vèninu aggiurnati.",
        "actionthrottledtext": "Comu misura di sicurezza contru lu spam, l'esecuzioni di alcuni azzionu è limitata a nu nùmmuru massimu di voti ni nu determinatu piriudu du tempu, limiti ca ni stu casu fu supiratu. Si prega di ripruvari tra qualchi minutu.",
        "protectedpagetext": "Sta pàggina fu bluccata pi privèniri canciamenti o autri opirazzioni.",
        "viewsourcetext": "Poi taliari e cupiari lu còdici surgenti di sta pàggina.",
-       "viewyourtext": "Poi taliari e cupiari lu còdici surgenti dî <strong>to canciamenti</strong> nti sta pàggina.",
+       "viewyourtext": "Poi taliari e cupiari lu còdici surgenti dî <strong>tò canciamenti</strong> nti sta pàggina.",
        "protectedinterface": "Sta pàggina cunteni un elementu ca fà parti dâ nterfaccia utenti dû software eggh'è  prutetta p'evitari pussìbbili abbusi. Pi jùnciri o canciari li traduzzioni pi tutti li wiki usari [//translatewiki.net/translatewiki.net] lu pruggettu di lucalizzazzioni di Mediawiki.",
        "editinginterface": "<strong>Accura:</strong> Lu testu di sta pàggina fà parti di l'interfaccia utenti dû situ.\nTutti li canciamenti appurtati a sta pàggina si riflèttinu supra li missaggi visualizzati pi tutti l'utenti di sta wiki.",
        "translateinterface": "Pi' agghiunciri o canciari traduzzioni pi' tutti i wiki, pi' favuri adupirati [//translatewiki.net/ translatewiki.net], lu pruggettu di lucalizzazzioni di MediaWiki.",
-       "cascadeprotected": "Sta pàggina è prutetta dî canciamenti pirchì veni trasclusa {{PLURAL:$1|ntâ pàggina siquenti, ca fu' prutiggiuta|ntê pàggini siquenti, ca foru prutiggiuti}} cu' l'opzioni «a' cascata»:\n$2",
+       "cascadeprotected": "Sta pàggina è prutetta dî canciamenti pirchì veni nclusa {{PLURAL:$1|ntâ pàggina siquenti, ca fu prutiggiuta|ntê pàggini siquenti, ca foru prutiggiuti}} cu l'opzioni «a cascata»:\n$2",
        "namespaceprotected": "Nun hai lu pirmissu pi canciari li pàggini ntô namespace '''$1'''.",
        "customcssprotected": "Nun hai lu pirmissu pi' canciari sta pàggina CSS picchì cunteni i mpustazzioni pirsunali di n'autru utenti.",
        "customjsprotected": "Nun hai lu pirmissu pi' canciari sta pàggina JavaScript picchì cunteni i mpustazzioni pirsunali di n'autru utenti.",
        "createacct-yourpasswordagain-ph": "Nzirisci la password attorna",
        "remembermypassword": "Arricorda la password supra stu computer (pi ô massimu $1 {{PLURAL:$1|jornu|jorna}})",
        "userlogin-remembermypassword": "Mantènimi culligatu",
-       "userlogin-signwithsecure": "Adopira na cunnissioni sicura",
+       "userlogin-signwithsecure": "Adòpira na cunnissioni sicura",
        "yourdomainname": "Lu to duminiu:",
        "password-change-forbidden": "Nun poi canciari li password nta sta wiki.",
        "externaldberror": "S'havi virificatu n'erruri cû server d'autinticazzioni sternu, oppuru nun si disponi di l'auturizzazzioni nicissari p'aggiurnari lu propiu accessu sternu.",
        "userlogout": "Nesci",
        "notloggedin": "Nun trasutu",
        "userlogin-noaccount": "Nun hai nu cuntu?",
-       "userlogin-joinproject": "Scrìviti a' {{SITENAME}}",
+       "userlogin-joinproject": "Scrìviti a {{SITENAME}}",
        "nologin": "Nun hai nu cuntu? $1.",
        "nologinlink": "Crea nu cuntu",
        "createaccount": "Criazzioni dûn cuntu",
        "userlogin-resetlink": "Ti scurdasti li dittagghî pâ trasuta?",
        "userlogin-resetpassword-link": "Ti scurdasti la password?",
        "userlogin-helplink2": "Ajutu pâ trasuta",
-       "userlogin-loggedin": "Già trasìsti comu {{GENDER:$1|$1}}.\nAdòpira lu mòdulu ccassutta pi' tràsiri comu n'autru utenti.",
+       "userlogin-loggedin": "Già trasisti comu {{GENDER:$1|$1}}.\nAdòpira lu mòdulu ccassutta pi tràsiri comu n'àutru utenti.",
        "userlogin-createanother": "Crea n'autru cuntu",
        "createacct-emailrequired": "Nnirizzu di posta elittrònica",
        "createacct-emailoptional": "Nnirizzu di posta elittrònica (facurtativu)",
        "createacct-benefit-body1": "{{PLURAL:$1|cuntribbutu|cuntribbuti}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pàggina|pàggini}}",
        "createacct-benefit-body3": "{{PLURAL:$1|cuntribbuturi ricenti|cuntribbutura ricenti}}",
-       "badretype": "Li password chi' mittisti nun currispùnnunu tra d'iddi.",
+       "badretype": "Li password chi mittisti nun currispùnninu tra d'iddi.",
+       "usernameinprogress": "Un cuntu cu stu nomu utenti già si sta criannu.\nPi favuri aspetta.",
        "userexists": "Lu nomu utenti nziritu è già usatu.\nTi prijamu pirciò di vuliri scègghîri nu nomu utenti diffirenti.",
        "loginerror": "Erruri ntâ trasuta",
        "createacct-error": "Erruri ntâ criazzioni dû cuntu",
-       "createaccounterror": "Nun fu pussìbbili criari u cuntu: $1",
+       "createaccounterror": "Nun fu pussìbbili criari lu cuntu: $1",
        "nocookiesnew": "Lu cuntu utenti fu' criatu, ma nun si' trasutu.\n{{SITENAME}} adòpira li cookie pi' gistiri li trasuti.\nTu hai i cookie disattivati.\nPi' favuri attìvili, e appoi trasi chî to nomu utenti e password novi.",
        "nocookieslogin": "{{SITENAME}} adòpira li cookie pi' gistiri li trasuti.\nTu hai i cookie disattivati.\nPi' favuri attìvili e prova n'autra vota.",
        "nocookiesfornew": "Lu cuntu utenti nun fu' criatu, picchì nun pòttimu cunfirmari la so orìggini.\nAssicuriti chi' hai i ''cookie'' attivati, ricarrica sta pàggina e prova n'autra vota.",
        "noname": "Nun spicificasti nu nomu utenti vàlidu.",
        "loginsuccesstitle": "Trasuta rinisciuta",
        "loginsuccess": "<strong>Ora si' trasutu nta {{SITENAME}} comu \"$1\".</strong>",
-       "nosuchuser": "Nun è riggistratu nuddu utenti di nomu \"$1\".\nLi nomi di l'utenti fannu diffirenza tra majusculi e minusculi.\nCuntrolla chi' scrivisti lu nomu bonu, o puru [[Special:UserLogin/signup|crea un cuntu novu]].",
-       "nosuchusershort": "Nun è riggistratu nuddu utenti di nomu \"$1\".\nCuntrolla chi' scrivisti u nomu bonu.",
+       "nosuchuser": "Nun è riggistratu nuddu utenti di nomu \"$1\".\nLi nomi di l'utenti fannu diffirenza tra maiùsculi e minùsculi.\nCuntrolla chi scrivisti lu nomu bonu, o puru [[Special:UserLogin/signup|crea un cuntu novu]].",
+       "nosuchusershort": "Nun è riggistratu nuddu utenti di nomu \"$1\".\nCuntrolla chi scrivisti lu nomu bonu.",
        "nouserspecified": "Hâ' spicificari un nomu utenti.",
        "login-userblocked": "St'utenti è bluccatu. Nun è pussìbbili di tràsiri.",
        "wrongpassword": "La password chi' mittisti nun è giusta.\nPi' favuri prova n'àutra vota.",
        "wrongpasswordempty": "La password chi' mittisti era vacanti.\nPi' favuri prova n'àutra vota.",
        "passwordtooshort": "I password hannu a' èssiri longhi almenu {{PLURAL:$1|1 caràttiri|$1 caràttiri}}.",
-       "passwordtoolong": "Li password non pònnu èssiri cchiu' longhi di {{PLURAL:$1|1 caràttiri|$1 caràttiri}}.",
+       "passwordtoolong": "Li password nun ponnu èssiri cchiù longhi di {{PLURAL:$1|1 caràttiri|$1 caràttiri}}.",
        "password-name-match": "La tò password havi a' èssiri diversa dû tò nomu utenti.",
        "password-login-forbidden": "L'usu di stu nomu utenti e password fu' pruibbitu.",
        "mailmypassword": "Azzera la password",
        "eauthentsent": "Nu missaggiu e-mail di cunfirma fu' spidutu a lu nnirizzu nnicatu.\nPrima chi' ponnu èssiri mannati autri missaggi e-mail a' stu cuntu, è nicissariu sèquiri li struzzioni ca vi sunnu scritti, 'n modu di cunfirmari di èssiri li liggìttimi prupietarî di lu cuntu.",
        "throttled-mailpassword": "Nu missaggiu e-mail di azziramentu dâ password già havi statu mannatu nta {{PLURAL:$1|l'ultima ura|l'ultimi $1 uri}}. Pi' privèniri abbusi, si po' mannari nu missaggiu e-mail di azziramentu dâ password na vota sula ogni {{PLURAL:$1|ura|$1 uri}}.",
        "mailerror": "Erruri nta lu mannu dû missaggiu: $1",
-       "acct_creation_throttle_hit": "Visitaturi di sta wiki cû to stissu nnirizzu IP già hannu criatu {{PLURAL:$1|un cuntu|$1 cunti}} nta sta jurnata, chi' è lu massimu pirmissu pi' stu pirìudu di tempu.\nPi' ciò, com'ad ora li visitaturi ca usunu stu nnirizzu IP nun ponnu criari autri cunti.",
-       "emailauthenticated": "Lu to nnirizzu di posta elittrònica fu' cunfirmatu lu $2 ê $3.",
-       "emailnotauthenticated": "Lu to nnirizzu di posta elittrònica ancora nun havi statu cunfirmatu.\nNun ti sarrannu mannati missaggi di posta elittrònica pi' sti funzioni.",
-       "noemailprefs": "Innicari nu nnirizzu di posta elittrònica p'attivari sti funzioni.",
+       "acct_creation_throttle_hit": "Visitaturi di sta wiki cû tò stissu nnirizzu IP già criaru {{PLURAL:$1|un cuntu|$1 cunti}} nta sta jurnata, chi è lu màssimu pirmissu pi stu pirìudu di tempu.\nPirciò, com'a ora li visitaturi ca ùsanu stu nnirizzu IP nun ponnu criari àutri cunti.",
+       "emailauthenticated": "Lu tò nnirizzu di posta elittrònica fu cunfirmatu lu $2 ê $3.",
+       "emailnotauthenticated": "Lu tò nnirizzu di posta elittrònica ancora nun fu cunfirmatu.\nNun ti sunnu mannati missaggi di posta elittrònica pi sti funzioni.",
+       "noemailprefs": "Nnicari nu nnirizzu di posta elittrònica p'attivari sti funzioni.",
        "emailconfirmlink": "Cunfirmari lu to nnirizzu di posta elittrònica",
-       "invalidemailaddress": "Lu nnirizzu di posta elittrònica nun pò èssiri accittatu picchì pari chi havi un furmatu nun vàlidu.\nPi favuri nzirisci nu nnirizzu vàlidu o puru svacanta la casedda.",
+       "invalidemailaddress": "Lu nnirizzu di posta elittrònica nun pò èssiri accittatu pirchì pari chi havi un furmatu nun vàlidu.\nPi favuri nzirisci nu nnirizzu vàlidu o puru svacanta la casedda.",
        "cannotchangeemail": "Li nnirizzi di posta elittrònica nun ponnu èssiri canciati nta sta wiki.",
        "emaildisabled": "Stu situ nun po' mannari missaggi di posta elittrònica.",
        "accountcreated": "Cuntu criatu",
        "accountcreatedtext": "Fu' criatu un cuntu novu pi' l'utenti [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|msg]]).",
-       "createaccount-title": "Criazzioni di nu cuntu pi' {{SITENAME}}",
+       "createaccount-title": "Criazzioni di nu cuntu pi {{SITENAME}}",
        "createaccount-text": "Qualcuno criau n'accessu a {{SITENAME}} ($4) a nomu di $2, associatu cu stu ndirizzu di posta elettronica. La password pi l'utenti \"$2\" è mpustata a \"$3\". È opportunu trasiri quantu prima e canciari la password subbutu.\n\nSi l'accessu fu criatu pi sbagghiu, si può gnurari stu missaggiu.",
        "login-throttled": "Hai fattu troppi tintativi di trasuta.\nPi' favuri spetta $1 prima di pruvari n'autra vota.",
        "login-abort-generic": "La trasuta nun arriniscìu - Annullata",
        "pt-createaccount": "Crea un cuntu novu",
        "pt-userlogout": "Nesci",
        "php-mail-error-unknown": "Erruri scanusciutu ntâ funzioni mail() dû PHP.",
-       "user-mail-no-addy": "Si pruvàu a' mannari nu missaggiu di posta elittrònica senza nu nnirizzu di posta elittrònica.",
-       "user-mail-no-body": "Si pruvàu a' mannari nu missaggiu di posta elittrònica cûn corpu vacanti o troppu curtu p'aviri significatu.",
+       "user-mail-no-addy": "Si pruvau a mannari nu missaggiu di posta elittrònica senza nu nnirizzu di posta elittrònica.",
+       "user-mail-no-body": "Si pruvau a mannari nu missaggiu di posta elittrònica cûn corpu vacanti o troppu curtu p'aviri significatu.",
        "changepassword": "Cancia la password",
-       "resetpass_announce": "Pi' cumplitari la trasuta, hâ' mpustari na password nova.",
+       "resetpass_announce": "Pi cumplitari la trasuta, hai a mpustari na password nova.",
        "resetpass_text": "<!-- Agghiunci lu testu ccà -->",
        "resetpass_header": "Canciamentu dâ password",
        "oldpassword": "Password vecchia:",
        "newpassword": "Password nova:",
        "retypenew": "Scrivi n'àutra vota la password:",
        "resetpass_submit": "Mposta la password e trasi",
-       "changepassword-success": "La to password fu canciata!",
-       "changepassword-throttled": "Hai fattu troppi tintativi di trasuta.\nPi' favuri spetta $1 prima di pruvari n'autra vota.",
+       "changepassword-success": "La tò password fu canciata!",
+       "changepassword-throttled": "Facisti troppi tintativi di trasuta.\nPi favuri aspetta $1 prima di pruvari n'àutra vota.",
        "resetpass_forbidden": "Li password nun si ponnu canciari",
        "resetpass-no-info": "Pi tràsiri nta sta pàggina hà' èssiri riggistratu.",
        "resetpass-submit-loggedin": "Cancia la password",
        "resetpass-submit-cancel": "Annulla",
-       "resetpass-wrong-oldpass": "La password timpurania o attuali nun è giusta.\nPo' èssiri ca già riniscisti a' canciari la tò password, o puru ca già nn'addumannasti n'autra timpurania ancora.",
+       "resetpass-wrong-oldpass": "La password timpurània o attuali nun è giusta.\nPo èssiri ca già arriniscisti a canciari la tò password, o puru ca già nn'addumannasti n'àutra timpurània ancora.",
        "resetpass-recycled": "Pi' favuri cancia a to password a' na cosa diffirenti dâ to password attuali.",
-       "resetpass-temp-emailed": "Trasisti cûn codici timpuraniu mannatu pi' posta elittrònica.\nPi' cumplitari a trasuta, hâ' mpustari na password nova cca:",
-       "resetpass-temp-password": "Password timpurania:",
+       "resetpass-temp-emailed": "Trasisti cûn codici timpuràniu mannatu pi posta elittrònica.\nPi cumplitari la trasuta, hai a mpustari na password nova ccà:",
+       "resetpass-temp-password": "Password timpurània:",
        "resetpass-abort-generic": "U canciu dâ password fu' annullatu di n'estinsioni.",
        "resetpass-expired": "A to password scadìu. Pi' favuri mposta na password nova pi' trasiri.",
        "resetpass-expired-soft": "A to password scadìu e s'havi a' azzirari. Pi' favuri scegghî na password nova ora, o puru clicca \"{{int:resetpass-submit-cancel}}\" p'azziràrila n'autra vota.",
        "resetpass-validity-soft": "A to password nun è vàlida: $1\n\nPi' favuri scegghî na password nova ora, o puru clicca \"{{int:resetpass-submit-cancel}}\" p'azziràrila n'autra vota.",
        "passwordreset": "Azziramentu dâ password",
-       "passwordreset-text-one": "Jinchi stu mòdulu pi' ricèviri na password timpurania pi' posta elittrònica.",
-       "passwordreset-text-many": "{{PLURAL:$1|Jinchi unu dî campi pi' ricèviri na password timpurania pi' posta elittrònica.}}",
+       "passwordreset-text-one": "Jinchi stu mòdulu p'arricèviri na password timpurània pi posta elittrònica.",
+       "passwordreset-text-many": "{{PLURAL:$1|Jinchi unu dî campi p'arricèviri na password timpurània pi posta elittrònica.}}",
        "passwordreset-disabled": "L'azziramentu dî password fu disattivatu nta sta wiki.",
        "passwordreset-emaildisabled": "Li funzionalità di e-mail furu disattivati nta sta wiki.",
        "passwordreset-username": "Nomu utenti:",
        "passwordreset-domain": "Duminiu:",
        "passwordreset-capture": "Ammustrari u missaggiu e-mail chi' veni cumpostu?",
-       "passwordreset-capture-help": "Si attivi sta casedda, u missaggiu e-mail (câ password timpurania) veni ammustratu a' tia sparti chi' veni mannatu a' l'utenti.",
+       "passwordreset-capture-help": "Si attivi sta casedda, lu missaggiu e-mail (câ password timpurània) veni ammustratu a tìa sparti chi veni mannatu a l'utenti.",
        "passwordreset-email": "Nnirizzu di posta elittrònica:",
        "passwordreset-emailtitle": "Dittagghî dû cuntu supra a' {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Quarchidunu (prubbabilmenti tu, di l'innirizzu IP $1) fici dumanna pi' l'azziramentu dâ to password pi' {{SITENAME}} ($4). {{PLURAL:$3|U siguenti cuntu utenti è assuciatu|I siguenti cunti utenti su' assuciati}} cu' stu nnirizzu di posta elittrònica:\n\n$2\n\n{{PLURAL:$3|Sta password timpurania|Sti password timpuranii}} scàdunu tra {{PLURAL:$5|un jornu|$5 jorna}}.\nOra tu avissi a' tràsiri e scègghîri na password nova. Si' fu' quarchidun'autru a' fari sta richiesta e nun tu, o si' ti ricurdasti a to password origginali e nâ voi canciari cchiu', poi gnurari stu missaggiu e cuntinuari a' adupirari a to password vecchia.",
-       "passwordreset-emailtext-user": "L'utenti $1 supra a' {{SITENAME}} fici dumanna pi' l'azziramentu dâ to password pi' {{SITENAME}} ($4). {{PLURAL:$3|U siguenti cuntu utenti è assuciatu|I siguenti cunti utenti su' assuciati}} cu' stu nnirizzu di posta elittrònica:\n\n$2\n\n{{PLURAL:$3|Sta password timpurania|Sti password timpuranii}} scàdunu tra {{PLURAL:$5|un jornu|$5 jorna}}.\nOra tu avissi a' tràsiri e scègghîri na password nova. Si' fu' quarchidun'autru a' fari sta richiesta e nun tu, o si' ti ricurdasti a to password origginali e nâ voi canciari cchiu', poi gnurari stu missaggiu e cuntinuari a' adupirari a to password vecchia.",
-       "passwordreset-emailelement": "Nomu utenti: $1\nPassword timpurania: $2",
-       "passwordreset-emailsent": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu' mannatu.",
-       "passwordreset-emailsent-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu' mannatu, cû cuntinutu chi' si po' taliari ccassutta.",
-       "passwordreset-emailerror-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu' cumpilatu, cû cuntinutu chi' si po' taliari ccassutta, però a so spidizzioni a' l'utenti {{GENDER:$2|user}} nun riniscìu: $1",
+       "passwordreset-emailtext-ip": "Quarchidunu (prubbabbilmenti tu, dô nnirizzu IP $1) fici n'addumannata pi l'azziramentu dâ tò password pi {{SITENAME}} ($4). {{PLURAL:$3|Lu cuntu utenti siguenti è assuciatu|Li cunti utenti siguenti sù assuciati}} cu stu nnirizzu di posta elittrònica:\n\n$2\n\n{{PLURAL:$3|Sta password timpurània|Sti password timpurànii}} scàdinu tra {{PLURAL:$5|un jornu|$5 jorna}}.\nOra tu avissi a tràsiri e scègghiri na password nova. Si fu quarchidun'àutru a fari st'addumannata e nun tu, o si t'arricurdasti la tò password origginali e nun la voi canciari cchiù, poi gnurari stu missaggiu e cuntinuari a adupirari la tò password vecchia.",
+       "passwordreset-emailtext-user": "L'utenti $1 supra a {{SITENAME}} fici n'addumannata pi l'azziramentu dâ tò password pi {{SITENAME}} ($4). {{PLURAL:$3|Lu cuntu utenti siguenti è assuciatu|Li cunti utenti siguenti sù assuciati}} cu stu nnirizzu di posta elittrònica:\n\n$2\n\n{{PLURAL:$3|Sta password timpurània|Sti password timpurànii}} scàdinu tra {{PLURAL:$5|un jornu|$5 jorna}}.\nOra tu avissi a tràsiri e scègghiri na password nova. Si fu quarchidun'àutru a fari st'addumannata e nun tu, o si t'arricurdasti la tò password origginali e nun la voi canciari cchiù, poi gnurari stu missaggiu e cuntinuari a adupirari la tò password vecchia.",
+       "passwordreset-emailelement": "Nomu utenti: \n$1\n\nPassword timpurania: \n$2",
+       "passwordreset-emailsent": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu mannatu.",
+       "passwordreset-emailsent-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu mannatu, cû cuntinutu chi si pò taliari ccassutta.",
+       "passwordreset-emailerror-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu cumpilatu, cû cuntinutu chi si pò taliari ccassutta, pirò la sò spidizzioni a l'utenti {{GENDER:$2|user}} nun arriniscìu: $1",
        "changeemail": "Canciu dû nnirizzu di posta elittrònica",
-       "changeemail-text": "Jinchi stu mòdulu pi' canciari u to nnirizzu di posta elittrònica. Hâ' nziriri a to password pi' cunfirmari stu canciamentu.",
+       "changeemail-text": "Jinchi stu mòdulu pi canciari lu tò nnirizzu di posta elittrònica. Hai a nziriri la tò password pi cunfirmari stu canciamentu.",
        "changeemail-no-info": "Hâ' jèssiri trasutu p'aviri accessu direttu a' sta pàggina.",
        "changeemail-oldemail": "Nnirizzu di posta elittrònica attuali:",
        "changeemail-newemail": "Nnirizzu di posta elittrònica novu:",
        "resettokens-no-tokens": "Nun ci su' token di azzirari.",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (valuri attuali: $2)",
-       "resettokens-watchlist-token": "Token pû feed web (Atom/RSS) dî [[Special:Watchlist|canciamenti ê pàggini ntâ to lista taliata]]",
+       "resettokens-watchlist-token": "Token pû feed web (Atom/RSS) dî [[Special:Watchlist|canciamenti ê pàggini ntâ tò lista taliata]]",
        "resettokens-done": "I token furu azzirati.",
        "resettokens-resetbutton": "Azzera i token scigghiuti",
        "bold_sample": "Grassettu",
        "link_sample": "Tìtulu dû lijami",
        "link_tip": "Lijami di dintra",
        "extlink_sample": "http://www.example.com tìtulu dâ lijami",
-       "extlink_tip": "Lijami di fora (ricurdàrisi lu prifissu http://)",
+       "extlink_tip": "Lijami di fora (arricurdàrisi lu prifissu http://)",
        "headline_sample": "Ntistazzioni",
        "headline_tip": "Suttantistazzioni",
        "nowiki_sample": "Nzirisci ccà lu testu nun furmattatu",
        "image_sample": "Asempiu.jpg",
        "image_tip": "File ncurpuratu",
        "media_sample": "Asempiu.ogg",
-       "media_tip": "Lijami a' file",
-       "sig_tip": "A to firma cu' data e ura",
-       "hr_tip": "Linia urizzuntali (usari cu' giudizziu)",
+       "media_tip": "Lijami a file",
+       "sig_tip": "La tò firma cu data e ura",
+       "hr_tip": "Lìnia urizzuntali (usari cu giudizziu)",
        "summary": "Riassuntu:",
        "subject": "Oggettu/ntistazzioni:",
        "minoredit": "Chistu è nu canciamentu nicu",
        "preview": "Antiprima",
        "showpreview": "Ammustra l'antiprima",
        "showdiff": "Ammustra li canciamenti",
-       "blankarticle": "<strong>Accura:</strong> La pàggina chi' stai criannu è vacanti.\nSi' clicchi \"{{int:savearticle}}\" n'autra vota, la pàggina veni criata senza nuddu cuntinutu.",
+       "blankarticle": "<strong>Accura:</strong> La pàggina chi stai criannu è vacanti.\nSi clicchi \"{{int:savearticle}}\" n'àutra vota, la pàggina veni criata senza nuddu cuntinutu.",
        "anoneditwarning": "<strong>Accura:</strong> Nun si' trasutu. Lu to nnirizzu IP diventa visìbbili pubblicamenti quannu fai nu canciamentu. Si' <strong>[$1 trasi]</strong> o puru <strong>[$2 crei nu cuntu]</strong>, li canciamenti chi' fai vènunu attribbuiti ô to nomu utenti, sparti di autri vantaggi.",
        "anonpreviewwarning": "''Nun trasisti comu utiliggaturi loggatu. Sarbannu, lu tò nnirizzu IP veni arriggistratu ntâ storia dî canciamenti.''",
        "missingsummary": "'''Accura:''' Nun hà statu spicificatu l'uggettu di stu canciamentu. Primennu di novu '''Sarva''' lu canciamentu veni sarvatu cu l'uggettu vacanti.",
-       "selfredirect": "<strong>Accura:</strong> Stai rimannannu sta pàggina a' idda stissa.\nPo' èssiri chi' spicificasti na distinazzioni sbagghiata pû rimannu, o puru chi' stai canciannu a pàggina sbagghiata.\nSi' clicchi \"{{int:savearticle}}\" n'autra vota, u rimannu veni criatu u stissu.",
+       "selfredirect": "<strong>Accura:</strong> Stai rimannannu sta pàggina a idda stissa.\nPo èssiri chi spicificasti na distinazzioni sbagghiata pû rimannu, o puru chi stai canciannu la pàggina sbagghiata.\nSi clicchi \"{{int:savearticle}}\" n'àutra vota, lu rimannu veni criatu lu stissu.",
        "missingcommenttext": "Nziriri un cummentu ccà sutta.",
        "missingcommentheader": "<strong>Accura:</strong> Nun havi statu spicificatu l'oggettu/ntistazzioni di stu cummentu. Primennu di novu \"{{int:savearticle}}\", lu canciamentu veni sarvatu senza avìrinni.",
        "summary-preview": "Antiprima dû riassuntu:",
        "subject-preview": "Antiprima di l'oggettu/ntistazzioni:",
-       "previewerrortext": "Mmattìu n'erruri nta l'ammustrari li to canciamenti.",
+       "previewerrortext": "Ammattìu n'erruri nta l'ammustrari li tò canciamenti.",
        "blockedtitle": "L'utenti è bluccatu",
        "blockedtext": "'''Stu nomu d'utenti o nnirizzu IP havi statu bluccatu.'''\n\nLu bloccu fu fattu di $1. Lu mutivu dû bloccu è: ''$2''.\n\n* Accuminzata dû bloccu: $8\n* Fini dû bloccu: $6\n* Ntirvallu dû bloccu: $7\n\nPoi cuntattari a $1 o a n'àutru [[{{MediaWiki:Grouppage-sysop}}|amministraturi]] pi discùtiri dû bloccu.\n\nNun poi usari la carattirìstica 'manna n'email a st'utenti' siddu nun è spicificatu nu nnirizzu email vàlidu nta li toi [[Special:Preferences|prifirenzi]] e siddu nun hai statu bluccatu di l'usari.\n\nLu tò nnirizzu IP attuali è $3, e lu nùmmiru ID dû bloccu è #$5.\n\nSpicìfica tutti li dittagghi pricidenti nta quarsiasi addumannata di chiarimenti.",
        "autoblockedtext": "Lu tò nnirizzu IP hà statu bluccatu automaticamenti pirchì fu usatu di n'àutru utenti, chi fu bluccatu di $1.\nLu mutivu è chistu:\n\n:''$2''\n\n* Accuminzata dû bloccu: $8\n* Fini dû bloccu: $6\n* Ntirvallu dû bloccu: $7\n\nPoi cuntattari a $1 o a n'àutru [[{{MediaWiki:Grouppage-sysop}}|amministraturi]] pi discùtiri dû bloccu.\n\nNun poi usari la carattirìstica 'manna n'email a st'utenti' siddu nun è spicificatu nu nnirizzu email vàlidu ntra li tòi [[Special:Preferences|prifirenzi]] e siddu nun fusti bluccatu di l'usari.\n\nLu tò nnirizzu IP attuali è $3, e l'ID dû bloccu è $5.\nPi favuri nclùdilu nta tutti li dumanni chi fai.",
        "blockednoreason": "nuddu mutivu datu",
-       "whitelistedittext": "Pi' favuri $1 pi' canciari li pàggini.",
-       "confirmedittext": "Hâ' cunvalidari lu to nnirizzu di posta elittrònica avanti di putiri canciari li pàggini.\nPi' favuri mposta e cunvàlida lu nnirizzu passannu dî [[Special:Preferences|to prifirenzi]].",
-       "nosuchsectiontitle": "La sizzioni nun fu truvata",
-       "nosuchsectiontext": "Pruvasti a canciari na sizzioni chi' nun esisti.\nForsi ca fu' spustata o cancillata na mentri ca stàvutu taliannu la pàggina.",
-       "loginreqtitle": "S'havi a' tràsiri",
+       "whitelistedittext": "Pi favuri $1 pi canciari li pàggini.",
+       "confirmedittext": "Hai a cunvalidari lu tò nnirizzu di posta elittrònica avanti di putiri canciari li pàggini.\nPi favuri mposta e cunvàlida lu nnirizzu passannu dî [[Special:Preferences|tò prifirenzi]].",
+       "nosuchsectiontitle": "La sizzioni nun fu attruvata",
+       "nosuchsectiontext": "Pruvasti a canciari na sizzioni chi nun esisti.\nForsi ca fu spustata o cancillata ntô mentri ca stàvitu taliannu la pàggina.",
+       "loginreqtitle": "S'havi a tràsiri",
        "loginreqlink": "trasi",
-       "loginreqpagetext": "Pi' favuri $1 pi' taliari autri pàggini.",
+       "loginreqpagetext": "Pi favuri $1 pi taliari àutri pàggini.",
        "accmailtitle": "Password mannata",
        "accmailtext": "Na password ginirata casualmenti pi' [[User talk:$1|$1]] fu' spiduta a $2. Si po' canciari di la pàggina di <em>[[Special:ChangePassword|canciamentu dâ password]]</em> comu unu trasi.",
        "newarticle": "(Novu)",
-       "newarticletext": "Siguisti na lijami a' na pàggina ch'ancora nun esisti.\nPi' criari sta pàggina, accumenza a' scrìviri ccassutta (talìa la [$1 pàggina d'ajutu] p'aviri majuri nfurmazzioni).\nSi' agghicasti cca pi' sbagghiu, carca lu buttuni <strong>n' arreri</strong> dû to browser.",
+       "newarticletext": "Siguisti na lijami a na pàggina c'ancora nun esisti.\nPi criari sta pàggina, accumenza a scrìviri ccassutta (talìa la [$1 pàggina d'aiutu] p'aviri maiuri nfurmazzioni).\nSi agghicasti ccà pi sbagghiu, carca lu buttuni <strong>n arreri</strong> dû tò browser.",
        "anontalkpagetext": "----''Chista è la pàggina di discussioni di n’utenti anònimu, ca nun criau ancora n’accessu o ca nun l’usa.\nP’idintificàrilu è pirciò nicissariu usari lu nùmmiru di lu sò nnirizzu IP.\nLi nnirizzi IP ponnu pirò èssiri spartuti di cchiù utenti.\nSiddu sî n’utenti anònimu e riteni ca li cummenti prisenti nta sta pàggina nun si rifirìscinu a tia, [[Special:UserLogin/signup|crea n’accessu novu]] o [[Special:UserLogin|trasi]] cu chiddu ca già hai p’evitari d’èssiri cunfusu cu àutri utenti anònimi ‘n futuru.''",
        "noarticletext": "Nta stu mumentu la pàggina addumannata è vacanti. È pussìbbili [[Special:Search/{{PAGENAME}}|circari stu tìtulu]] nta l'àutri pàggini dû situ oppuru <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|action=edit}} circari ntê riggistra culligati] oppuru [{{fullurl:{{FULLPAGENAME}}|action=edit}} canciari la pàggina ora]</span>.",
        "noarticletext-nopermission": "Nta stu mumentu la pàggina addumannata è vacanti. È pussibbili [[Special:Search/{{PAGENAME}}|circari stu titulu]] nti àutri pàggini dû situ o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} circari ntê riggistra culligati]</span>, ma nun hai li pirmissa pi criari sta pàggina.",
-       "missing-revision": "A virsioni #$1 dâ paggina ntitulata \"{{FULLPAGENAME}}\" nun esisti.\n\nStu fattu di sòlitu succedi quannu si segui na lijami di crunuluggìa versu na pàggina chi' fu' cancillata.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+       "missing-revision": "A virsioni #$1 dâ paggina ntitulata \"{{FULLPAGENAME}}\" nun esisti.\n\nStu fattu di sòlitu succedi quannu si segui na lijami di crunuluggìa versu na pàggina chi fu cancillata.\nSi ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
        "userpage-userdoesnotexist": "L'account \"<nowiki>$1</nowiki>\" nun currispunni a n'utenti riggistratu. Virificari si si voli criari o canciari sta pàggina.",
        "userpage-userdoesnotexist-view": "U cuntu utenti \"$1\" nun è riggistratu.",
-       "blocked-notice-logextract": "St'utenti pi' com'ora è bluccatu.\nComu rifirimentu ccassutta cc'è l'ùltima vuci dû riggìstru dî blocchi:",
-       "clearyourcache": "<strong>Nota:</strong> Doppu aviri sarvatu, po' giuvari cancillari la ''cache'' dû propiu browser pi' vìdiri li canciamenti.\n* <strong>Firefox / Safari:</strong> Cliccari <em>Ricarica</em> mantinnennu primutu lu tastu dî majùsculi, o puru prèmiri o <em>Ctrl-F5</em> o <em>Ctrl-R</em> (<em>⌘-R</em> ntôn Mac)\n* <strong>Google Chrome:</strong> Prèmiri <em>Ctrl-Maiusc-R</em> (<em>⌘-Maiusc-R</em> ntôn Mac)\n* <strong>Internet Explorer:</strong> Cliccari <em>Aggiorna</em> mantinennu primutu lu tastu <em>Ctrl</em>, o puru prèmiri <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Svacantari la ''cache'' dû menù <em>Strumenti → Preferenze</em>",
+       "blocked-notice-logextract": "St'utenti pi com'ora è bluccatu.\nComu rifirimentu ccassutta c'è l'ùrtima vuci dû riggistru dî blocchi:",
+       "clearyourcache": "<strong>Nota:</strong> Doppu aviri sarvatu, pò aggiuvari cancillari la ''cache'' dû propiu browser pi vìdiri li canciamenti.\n* <strong>Firefox / Safari:</strong> Cliccari <em>Ricarica</em> mantinnennu primutu lu tastu dî maiùsculi, o puru prèmiri o <em>Ctrl-F5</em> o <em>Ctrl-R</em> (<em>⌘-R</em> ntôn Mac)\n* <strong>Google Chrome:</strong> Prèmiri <em>Ctrl-Maiusc-R</em> (<em>⌘-Maiusc-R</em> ntôn Mac)\n* <strong>Internet Explorer:</strong> Cliccari <em>Aggiorna</em> mantinennu primutu lu tastu <em>Ctrl</em>, o puru prèmiri <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Svacantari la ''cache'' dû menù <em>Strumenti → Preferenze</em>",
        "usercssyoucanpreview": "<strong>Cunsigghiu:</strong> Adòpira u buttuni \"{{int:showpreview}}\" pi' pruvari u to CSS novu prima di sarvàrilu.",
        "userjsyoucanpreview": "<strong>Cunsigghiu:</strong> Adòpira u buttuni \"{{int:showpreview}}\" pi' pruvari u to JavaScript novu prima di sarvàrilu.",
        "usercsspreview": "'''Arricorda ca stai sulu visualizzannu n'antiprima dû tò CSS pirsunali.'''\n'''Nun hà ancora statu sarvatu!'''",
        "userinvalidcssjstitle": "'''Accura:''' Nun esisti arcuna skin cu nomu \"$1\". S'arricorda ca li pàggini pi li .css e .js pirsunalizzati hannu la nizziali dû tìtulu minùscula, p'asempiu {{ns:user}}:Asempiu/vector.js e nun {{ns:user}}:Asempiu/Vector.css.",
        "updated": "(Aggiurnatu)",
        "note": "<strong>Nota:</strong>",
-       "previewnote": "<strong>Ricòrditi ca chista è sulu n'antiprima.</strong>\nLi to canciamenti ancora nun foru sarvati!",
+       "previewnote": "<strong>Arricòrdati ca chista è sulu n'antiprima.</strong>\nLi tò canciamenti ancora nun foru sarvati!",
        "continue-editing": "Vai a' l'aria di mudìfica",
-       "previewconflict": "St'antiprima currispunni a lu testu prisenti ntâ casedda di canciamentu cchiu' supra e rapprisenta la pàggina comu cumpariravi siddu scegghî di sarvàrila.",
-       "session_fail_preview": "<strong>Purtroppu nun hà statu pussìbbili sarvari li tò canciamenti pirchì li dati dâ sissioni hannu jutu pirduti.</strong>\nPi' favuri prova n'autra vota.\nSiddu ancora nun funziona, prova a' [[Special:UserLogout|nèsciri]] e tràsiri n'autra vota.",
+       "previewconflict": "St'antiprima currispunni a lu testu prisenti ntâ casedda di canciamentu cchiù supra e rapprisenta la pàggina comu cumparisci siddu scegghi di sarvàrila.",
+       "session_fail_preview": "<strong>Purtroppu nun fu pussìbbili sarvari li tò canciamenti pirchì li dati dâ sissioni foru pirduti.</strong>\nPi favuri prova n'àutra vota.\nSiddu ancora nun funziona, prova a [[Special:UserLogout|nèsciri]] e tràsiri n'àutra vota.",
        "session_fail_preview_html": "'''Semu spiacenti, nun hà statu pussìbbili elabburari lu canciamentu pirchì hannu jutu pirduti li dati rilativi â sissioni.'''\n\n''Poichì nta stu situ è abbilitatu l'usu di HTML senza limitazzioni, l'antiprima nun veni visualizzata; si tratta di na misura di sicurizza contra l'attacchi JavaScript.''\n\n'''Siddu chistu è nu tintativu liggìttimu di canciamentu, arriprova. Siddu lu prubbrema pirsisti, si pò pruvari a [[Special:UserLogout|sculligàrisi]] e effittuari n'accessu novu.'''",
        "token_suffix_mismatch": "'''Lu canciamentu nun fu sarvatu pirchì lu client ammustrau di gèstiri 'n modu sbagghiatu li caràttiri di puntiggiatura nta lu token assuciatu a iddu. P'evitari na curruzzioni pussìbbili dô testu dâ pàggina, fu rifiutatu tuttu lu canciamentu. Sta situazzioni pò virificàrisi, certi voti, quannu s'adòpiranu arcuni sirvizza di proxy anònimi via web chi prisèntanu bug.'''",
        "edit_form_incomplete": "<strong>Quarchi' parti dû mòdulu pâ mudìfica nun arrivau ô ''server''; cuntrolla bonu chi' tutti i to canciamenti su' ntatti e prova n'autra vota.</strong>",
        "editing": "Canciamentu di $1",
        "creating": "Criazzioni di $1",
        "editingsection": "Canciamentu di $1 (sizzioni)",
-       "editingcomment": "Canciamentu di $1 (nova sizzioni)",
+       "editingcomment": "Canciamentu di $1 (sizzioni nova)",
        "editconflict": "Cunflittu d'edizzioni: $1",
        "explainconflict": "N'àutru utenti havi sarvatu na virsioni nova dâ pàggina mentri stavi effittuannu li canciamenti.\nLa casella di canciamentu supiriuri cunteni lu testu dâ pàggina attuarmenti online, accussì comu hà statu aggiurnatu di l'àutru utenti.\nLa virsioni cu li tò canciamenti è mmeci ripurtata ntâ casella di canciamentu nfiriuri.\nSiddu addisìi cunfirmàrili, hai a ripurtari li tò canciamenti ntô testu asistenti (casella supiriuri).\nPrimennu lu pulsanti '{{int:savearticle}}', veni sarvatu '''sulu''' lu testu cuntinutu ntâ casella di canciamentu supiriuri.",
        "yourtext": "Lu tò testu",
        "storedversion": "La virsioni mimurizzata",
-       "nonunicodebrowser": "<strong>Accura: Lu to browser nun supporta bonu l'Unicode.</strong>\nFu' attivata na contramisura pi' cunsintìriti di canciari li pàggini in sicurizza: li caràttiri nun-ASCII spuntirannu nta la casedda di mudìfica comu còdici esadicimali.",
+       "nonunicodebrowser": "<strong>Accura: Lu tò browser nun supporta bonu l'Unicode.</strong>\nFu attivata na contramisura pi cunzintìriti di canciari li pàggini n sicurizza: li caràttiri nun-ASCII spùntanu nta la casedda di canciamentu comu còdici esadicimali.",
        "editingold": "'''Accura: si sta canciannu na virsioni nun aggiurnata dâ pàggina.<br /> Siddu si scegghi di sarvàrila, tutti li canciamenti appurtati doppu sta rivisioni vannu pirduti.'''",
        "yourdiff": "Diffirenzi",
-       "copyrightwarning": "Pi' favuri nota ca tutti li cuntribbuti mannati a' {{SITENAME}} s'hannu a' cunsiddirari sutta â licenza d'usu $2 (talìa $1 pî dittagghî).\nSi' nun voi ca li to testi vènunu mudificati senza nuddu riguardu e ridistribbuùti a' vogghia, allura nê mannari cca.<br />\nMannannu lu to testu nni dichiari sparti chi' lu scrivisti tu pirsunalmenti, o puru ca lu cupiasti di na fonti di pùbblicu duminiu o analugamenti lìbbira.\n<strong>Nun mannari matiriali cupertu di drittu d'auturi senza auturizzazzioni!</strong>",
-       "copyrightwarning2": "Pi' favuri nota ca tutti li cuntribbuti mannati a' {{SITENAME}} ponnu vèniri canciati, altirati o cancillati di l'autri participanti.\nSi' nun voi ca li to testi vènunu mudificati senza nuddu riguardu, allura nê mannari cca.<br />\nMannannu lu to testu nni dichiari sparti ca lu scrivisti tu pirsunalmenti, o puru ca lu cupiasti di na fonti di pùbblicu duminiu o analugamenti lìbbira (talìa $1 pi' majuri dittagghî).\n<strong>Nun mannari matiriali cupertu di drittu d'auturi senza auturizzazzioni!</strong>",
-       "editpage-cannot-use-custom-model": "Lu mudellu dû cuntinutu di sta pàggina nun si po’ canciari.",
-       "longpageerror": "<strong>Erruri: Lu testu ca hai suttamisu è longu {{PLURAL:$1|un kilobyte|$1 kilobyte}}, cchiù' ssai dû màssimu ca è di {{PLURAL:$2|un kilobyte|$2 kilobyte}}.</strong>\nNun si po' sarvari.",
-       "readonlywarning": "<strong>Accura: Lu database è fermu pi manutinzioni, pirciò nun poi sarvari li tò canciamenti nta stu mumentu.</strong>\nLa cosa megghia è fari un copia e ncodda dû testu nta n'àutru prugramma e sarvàrilu pi quannu lu database torna accissìbbili.\n\nL'amministraturi ca bluccau lu database desi sta spiegazzioni: $1",
-       "protectedpagewarning": "<strong>Accura: Sta pàggina fu' prutetta a' manera chi' sulu l'utenti cu' privileggi d'amministraturi a ponnu canciari.</strong>\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
-       "semiprotectedpagewarning": "<strong>Nota:</strong> Sta pàggina fu' prutetta a' manera chi' sulu l'utenti riggistrati la ponnu canciari.\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
-       "cascadeprotectedwarning": "<strong>Accura:</strong> Sta pàggina fu' bluccata di manera ca sulu l'utenti cu' privileggi di amministraturi la ponnu canciari, pirchì veni trasclusa {{PLURAL:$1|nta siquenti pàggina ca è prutiggiuta|ntê siquenti pàggini ca sunnu prutiggiuti}} a' cascata:",
-       "titleprotectedwarning": "<strong>Accura: Sta pàggina fu' prutetta a' manera chi' giuvunu [[Special:ListGroupRights|privileggi spicìfici]] pi' criàrila.</strong>\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
+       "copyrightwarning": "Pi favuri nota ca tutti li cuntribbuti mannati a {{SITENAME}} s'hannu a cunziddirari sutta â licenza d'usu $2 (talìa $1 pî dittagghî).\nSi nun voi ca li tò testi vèninu canciati senza nuddu riguardu e ridistribbuuti a vogghia, allura nun li mannari ccà.<br />\nMannannu lu tò testu dichiari chi lu scrivisti tu pirsunalmenti, o puru ca lu cupiasti di na fonti di pùbblicu duminiu o analugamenti lìbbira.\n<strong>Nun mannari matiriali cupertu di drittu d'auturi senza auturizzazzioni!</strong>",
+       "copyrightwarning2": "Pi favuri nota ca tutti li cuntribbuti mannati a {{SITENAME}} ponnu vèniri canciati, altirati o cancillati di l'àutri participanti.\nSi nun voi ca li tò testi vèninu canciati senza nuddu riguardu, allura nun li mannari ccà.<br />\nMannannu lu tò testu dichiari ca lu scrivisti tu pirsunalmenti, o puru ca lu cupiasti di na fonti di pùbblicu duminiu o analugamenti lìbbira (talìa $1 pi maiuri dittagghî).\n<strong>Nun mannari matiriali cupertu di drittu d'auturi senza auturizzazzioni!</strong>",
+       "editpage-cannot-use-custom-model": "Lu mudellu dû cuntinutu di sta pàggina nun si pò canciari.",
+       "longpageerror": "<strong>Erruri: Lu testu ca suttamittisti è longu {{PLURAL:$1|un kilobyte|$1 kilobyte}}, cchiossai dû màssimu chi è di {{PLURAL:$2|un kilobyte|$2 kilobyte}}.</strong>\nNun si pò sarvari.",
+       "readonlywarning": "<strong>Accura: Lu database è fermu pi manutinzioni, pirciò nun poi sarvari li tò canciamenti nta stu mumentu.</strong>\nLa cosa megghia è fari un copia e ncodda dû testu nta n'àutru prugramma e sarvàrilu pi quannu lu database torna accissìbbili.\n\nL'amministraturi ca bluccau lu database desi sta spigazzioni: $1",
+       "protectedpagewarning": "<strong>Accura: Sta pàggina fu prutetta di manera chi sulu l'utenti cu privileggi d'amministraturi la ponnu canciari.</strong>\nPi rifirimentu, ccassutta è arripurtata l'ùrtima vuci dû riggistru:",
+       "semiprotectedpagewarning": "<strong>Nota:</strong> Sta pàggina fu prutetta di manera chi sulu l'utenti riggistrati la ponnu canciari.\nPi rifirimentu, ccassutta è arripurtata l'ùrtima vuci dû riggistru:",
+       "cascadeprotectedwarning": "<strong>Accura:</strong> Sta pàggina fu bluccata di manera ca sulu l'utenti cu privileggi di amministraturi la ponnu canciari, pirchì veni nclusa {{PLURAL:$1|ntâ pàggina  siquenti ca è prutiggiuta|ntê pàggini siquenti ca sunnu prutiggiuti}} a cascata:",
+       "titleprotectedwarning": "<strong>Accura: Sta pàggina fu prutetta di manera c'aggiùvanu [[Special:ListGroupRights|privileggi spicìfici]] pi criàrila.</strong>\nPi rifirimentu, ccassutta è ripurtata l'ùrtima vuci dû riggistru:",
        "templatesused": "{{PLURAL:$1|Template adupiratu|Template adupirati}} nta sta pàggina:",
        "templatesusedpreview": "{{PLURAL:$1|Template adupiratu|Template adupirati}} nta st'antiprima:",
        "templatesusedsection": "{{PLURAL:$1|Template adupiratu|Template adupirati}} nta sta sizzioni:",
        "template-protected": "(prutettu)",
        "template-semiprotected": "(semiprutettu)",
-       "hiddencategories": "Sta pàggina apparteni a' {{PLURAL:$1|na catigurìa ammucciata|$1 catigurìi ammucciati}}:",
+       "hiddencategories": "Sta pàggina apparteni a {{PLURAL:$1|na catigurìa ammucciata|$1 catigurìi ammucciati}}:",
        "edittools": "<!-- Chistu testu cumpari sutta li moduli di canciu e carricamentu. -->",
-       "nocreatetext": "{{SITENAME}} limitau la pussibbilitati di criari pàggini novi.\nPoi turnari 'n arreri e canciari na pàggina già esistenti, o puru [[Special:UserLogin|tràsiri o criari nu cuntu novu]].",
-       "nocreate-loggedin": "Nun hai lu pirmissu pi' criari pàggini novi.",
-       "sectioneditnotsupported-title": "Nun è suppurtatu lu canciamentu pi' sizzioni",
-       "sectioneditnotsupported-text": "Nta sta pàggina nun è suppurtatu lu canciamentu pi' sizzioni.",
+       "nocreatetext": "{{SITENAME}} limitau la pussibbilitati di criari pàggini novi.\nPoi turnari n arreri e canciari na pàggina già esistenti, o puru [[Special:UserLogin|tràsiri o criari nu cuntu novu]].",
+       "nocreate-loggedin": "Nun hai lu pirmissu pi criari pàggini novi.",
+       "sectioneditnotsupported-title": "Nun è suppurtatu lu canciamentu pi sizzioni",
+       "sectioneditnotsupported-text": "Nta sta pàggina nun è suppurtatu lu canciamentu pi sizzioni.",
        "permissionserrors": "Erruri di pirmissu",
-       "permissionserrorstext": "Nun hai lu pirmissu di fari sta cosa, pi' {{PLURAL:$1|chistu motivu|chisti mutivi}}:",
-       "permissionserrorstext-withaction": "Nun hai lu pirmissu di $2, pi' {{PLURAL:$1|chistu mutivu|chisti mutivi}}:",
+       "permissionserrorstext": "Nun hai lu pirmissu di fari sta cosa, pi {{PLURAL:$1|stu mutivu|sti mutivi}}:",
+       "permissionserrorstext-withaction": "Nun hai lu pirmissu di $2, pi {{PLURAL:$1|stu mutivu|sti mutivi}}:",
        "recreate-moveddeleted-warn": "'''Accura: stai pi criari na pàggina chi fu cancillata 'n passatu.'''\n\nAccuràtivi ch'è uppurtunu cuntinuari a canciari sta pàggina.\nL'alencu dî cancillazzioni e spustamenti rilativi veni ripurtatu ccà pi cummudità:",
        "moveddeleted-notice": "Sta pàggina fu scancillata. La lista di li scancillazzioni e spustamenti veni ammustrata di sècutu pi nfurmazzioni.",
-       "log-fulllog": "Talìa lu riggìstru cumpletu",
-       "edit-hook-aborted": "Canciamentu annullatu di n'hook.\nNun desi nudda spiegazzioni.",
-       "edit-gone-missing": "Nun si po' aggiurnari la pàggina.\nPari ca fu cancillata.",
+       "log-fulllog": "Talìa lu riggistru cumpletu",
+       "edit-hook-aborted": "Canciamentu annullatu di n'hook.\nNun desi nudda spigazzioni.",
+       "edit-gone-missing": "Nun si pò aggiurnari la pàggina.\nPari ca fu cancillata.",
        "edit-conflict": "Cunflittu d'edizzioni.",
-       "edit-no-change": "La to mudìfica fu' gnurata pirchì nun foru appurtati canciamenti ntô testu.",
+       "edit-no-change": "Lu tò canciamentu fu gnuratu pirchì nun foru appurtati canciamenti ntô testu.",
        "postedit-confirmation-created": "La pàggina fu criata.",
        "postedit-confirmation-restored": "La pàggina fu ripristinata.",
-       "postedit-confirmation-saved": "Lu to canciamentu fu sarvatu.",
-       "edit-already-exists": "Nun fu' pussìbbili criari na pàggina nova.\nGià esisti.",
+       "postedit-confirmation-saved": "Lu tò canciamentu fu sarvatu.",
+       "edit-already-exists": "Nun fu pussìbbili criari na pàggina nova.\nGià esisti.",
        "defaultmessagetext": "Testu dû missaggiu pridifinutu",
        "content-failed-to-parse": "Anàlisi sintàttica dû cuntinutu $2 pû mudellu $1 nun rinisciuta: $3",
        "invalid-content-data": "Dati nun vàlidi ntô cuntinutu",
        "content-model-javascript": "JavaScript",
        "content-json-empty-object": "Oggettu vacanti",
        "content-json-empty-array": "Vitturi vacanti",
-       "duplicate-args-warning": "<strong>Accura:</strong> [[:$1]] sta' chiamannu [[:$2]] cu' cchiu' ssai dûn valuri comu paràmitru \"$3\". Sarravi adupiratu sulu l'ùrtimu valuri spicificatu.",
+       "duplicate-args-warning": "<strong>Accura:</strong> [[:$1]] sta chiamannu [[:$2]] cu cchiossai dûn valuri comu paràmitru \"$3\". E' adupiratu sulu l'ùrtimu valuri spicificatu.",
        "duplicate-args-category": "Pàggini chi' cuntènunu chiamati a' template cu' argumenti duplicati",
        "duplicate-args-category-desc": "A pàggina cunteni chiamati a' template chi' adòpirunu argumenti duplicati, comu <code><nowiki>{{pippu|plutu=1|plutu=2}}</nowiki></code> o <code><nowiki>{{pippu|plutu|1=papirinu}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Accura: Sta pàggina cunteni troppi chiamati ê parser functions.\n\nAvissi a èssiri menu di $2, ô mumentu ci {{PLURAL:$1|nn'è $1|nni sunnu $1}}.",
        "post-expand-template-inclusion-category": "Pàggini unni la diminsioni dê template nclusi supira lu limiti cunsintutu",
        "post-expand-template-argument-warning": "Attenzioni: Sta pàggina cunteni almenu n'argomentu di nu template ca havi na diminsioni troppu rossa pi essiri espansu. St'argomenti verrannu omessi.",
        "post-expand-template-argument-category": "Pàggini ca cuntèninu template cu argumenti mancanti",
-       "parser-template-loop-warning": "Rilivatu un cìrculu di di Template: [[$1]]",
-       "parser-template-recursion-depth-warning": "Passatu u lìmiti di funnu pâ ricursioni di template ($1)",
+       "parser-template-loop-warning": "Rilivatu un cìrculu di lu Template: [[$1]]",
+       "parser-template-recursion-depth-warning": "Passatu lu lìmiti di funnu pâ ricursioni di template ($1)",
        "language-converter-depth-warning": "Passatu u lìmiti di funnu dû cunvirtituri di lingua ($1)",
        "node-count-exceeded-category": "Pàggini unni fu' passatu u nùmmiru màssimu di gruppi",
        "node-count-exceeded-category-desc": "A pàggina passa u nùmmiru massimu di gruppi.",
        "undo-summary": "Annullatu lu canciamentu $1 di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussioni]])",
        "undo-summary-username-hidden": "Annullata a virsioni $1 fatta di n'utenti ammucciatu",
        "cantcreateaccounttitle": "Mpussìbbili criari un cuntu",
-       "cantcreateaccount-text": "La criazzioni di cunti a' pàrtiri di stu nnirizzu IP (<strong>$1</strong>), fu' bluccata di [[User:$3|$3]].\n\nLa spiegazzioni data di $3 è <em>$2</em>",
-       "cantcreateaccount-range-text": "La criazzioni di cunti a' pàrtiri dî nnirizzi IP nta l'intirvallu '''$1''', chi' cumprenni u to nnirizzu IP ('''$4'''), fu' bluccata di [[User:$3|$3]].\n\nLa spiegazzioni data di $3 è ''$2''",
-       "viewpagelogs": "Talìa li riggìstra di sta pàggina",
-       "nohistory": "Nun cc'è crunuluggìa dî canciamenti pi' sta pàggina.",
+       "cantcreateaccount-text": "La criazzioni di cunti a pàrtiri di stu nnirizzu IP (<strong>$1</strong>), fu bluccata di [[User:$3|$3]].\n\nLa spigazzioni data di $3 è <em>$2</em>",
+       "cantcreateaccount-range-text": "La criazzioni di cunti a pàrtiri dî nnirizzi IP ntô ntervallu '''$1''', chi cumprenni lu tò nnirizzu IP ('''$4'''), fu bluccata di [[User:$3|$3]].\n\nLa spigazzioni data di $3 è ''$2''",
+       "viewpagelogs": "Talìa li riggistri di sta pàggina",
+       "nohistory": "Nun c'è crunuluggìa dî canciamenti pi sta pàggina.",
        "currentrev": "Virsioni currenti",
        "currentrev-asof": "Virsioni currenti ô $1",
        "revisionasof": "Virsioni dû $1",
        "revision-info": "Virsioni dû $1 di {{GENDER:$6|$2}}$7",
-       "previousrevision": "← Virsioni cchiu' vecchia",
-       "nextrevision": "Virsioni cchiu' nova →",
-       "currentrevisionlink": "Ùltima virsioni",
+       "previousrevision": "← Virsioni cchiù vecchia",
+       "nextrevision": "Virsioni cchiù nova →",
+       "currentrevisionlink": "Ùrtima virsioni",
        "cur": "curr",
        "next": "pròssimu",
        "last": "pric",
        "page_first": "prima",
        "page_last": "ùrtima",
-       "histlegend": "Pû cunfruntu tra virsioni: scègghîri li caseddi currispunnenti ê virsioni di cunfruntari e carcari Invio o lu buttuni ô funnu.<br />\nLegenda: <strong>({{int:cur}})</strong> = cunfruntari cu la virsioni currenti, <strong>({{int:last}})</strong> = cunfruntari cu la virsioni avanti d'idda, <strong>{{int:minoreditletter}}</strong> = canciamentu nicu",
+       "histlegend": "Pû cunfruntu tra virsioni: scègghiri li caseddi currispunnenti ê virsioni di cunfruntari e carcari Invio o lu buttuni ô funnu.<br />\nLiggenna: <strong>({{int:cur}})</strong> = cunfruntari cu la virsioni currenti, <strong>({{int:last}})</strong> = cunfruntari cu la virsioni avanti d'idda, <strong>{{int:minoreditletter}}</strong> = canciamentu nicu",
        "history-fieldset-title": "Scurri ntâ crunuluggìa",
        "history-show-deleted": "Sulu chiddi cancillati",
        "histfirst": "i cchiu' vecchî",
        "historysize": "({{PLURAL:$1|1 byte|$1 byte}})",
        "historyempty": "(vacanti)",
        "history-feed-title": "Crunuluggìa dî canciamenti",
-       "history-feed-description": "Crunuluggìa dî canciamenti a' sta pàggina nta sta wiki",
+       "history-feed-description": "Crunuluggìa dî canciamenti a sta pàggina nta sta wiki",
        "history-feed-item-nocomment": "$1 lu $2",
-       "history-feed-empty": "La pàggina chi' dumannasti nun esisti.\nPo' aviri statu cancillata dâ wiki, o puru canciata di nomu.\nProva a' [[Special:Search|circari ntâ wiki]] siddu cci sunnu pàggini novi chi' ti ponnu ntirissari.",
+       "history-feed-empty": "La pàggina chi addumannasti nun esisti.\nPò aviri statu cancillata dâ wiki, o puru canciatu lu sò nomu.\nProva a [[Special:Search|circari ntâ wiki]] siddu ci sunnu pàggini novi chi ti ponnu ntirissari.",
        "history-edit-tags": "Cancia l'etichetti dî virsioni scigghiuti",
        "rev-deleted-comment": "(riassuntu dû canciamentu rimossu)",
-       "rev-deleted-user": "(nomu utenti rimossu)",
+       "rev-deleted-user": "(nomu utenti cancillatu)",
        "rev-deleted-event": "(dittagghî dû riggistru rimossi)",
        "rev-deleted-user-contribs": "[nomu utenti o nnirizzu IP rimossi - canciamentu ammucciatu ntê cuntribbuti]",
        "rev-deleted-text-permission": "Sta virsioni dâ pàggina hà statu '''cancillata'''.\nCunzurtari lu [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log di cancillazzioni] pi ultiriuri dittagghi.",
        "rev-suppressed-text-permission": "Sta virsioni dâ pàggina fu' <strong>supprimuta</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
-       "rev-deleted-text-unhide": "Sta virsioni dâ pàggina fu' <strong>cancillata</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].\nAncora poi [$1 taliari sta virsioni] si' voi prucèdiri.",
-       "rev-suppressed-text-unhide": "Sta virsioni dâ pàggina fu' <strong>supprimuta</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].\nAncora poi [$1 taliari sta virsioni] si' voi prucèdiri.",
-       "rev-deleted-text-view": "Sta virsioni dâ pàggina fu' <strong>cancillata</strong>.\nTu ancora a poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
-       "rev-suppressed-text-view": "Sta virsioni dâ pàggina fu' <strong>supprimuta</strong>.\nTu ancora a poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
-       "rev-deleted-no-diff": "Nun si po' taliari stu cunfruntu tra virsioni pirchì na revisioni fu <strong>cancillata</strong>.\nSi ponnu a' vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
-       "rev-suppressed-no-diff": "Non poi taliari sta diffirenza picchì una dî virsioni fu' <strong>cancillata</strong>.",
-       "rev-deleted-unhide-diff": "Una dî virsioni di sta diffirenza fu' <strong>cancillata</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].\nAncora poi [$1 taliari sta diffirenza] si' voi prucèdiri.",
-       "rev-suppressed-unhide-diff": "Una dî virsioni di sta diffirenza fu' <strong>supprimuta</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].\nAncora poi [$1 taliari sta diffirenza] si' voi prucèdiri.",
-       "rev-deleted-diff-view": "Una dî virsioni di sta diffirenza fu' <strong>cancillata</strong>.\nTu sta diffirenza ancora a poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
-       "rev-suppressed-diff-view": "Una dî virsioni di sta diffirenza fu' <strong>supprimuta</strong>.\nTu sta diffirenza ancora la poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
+       "rev-deleted-text-unhide": "Sta virsioni dâ pàggina fu <strong>cancillata</strong>.\nSi ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].\nAncora poi [$1 taliari sta virsioni] si voi prucèdiri.",
+       "rev-suppressed-text-unhide": "Sta virsioni dâ pàggina fu <strong>supprimuta</strong>.\nSi ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].\nAncora poi [$1 taliari sta virsioni] si voi prucèdiri.",
+       "rev-deleted-text-view": "Sta virsioni dâ pàggina fu <strong>cancillata</strong>.\nTu ancora la poi taliari; si ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+       "rev-suppressed-text-view": "Sta virsioni dâ pàggina fu <strong>supprimuta</strong>.\nTu ancora la poi taliari; si ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
+       "rev-deleted-no-diff": "Nun si pò taliari stu cunfruntu tra virsioni pirchì na rivisioni fu <strong>cancillata</strong>.\nSi ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+       "rev-suppressed-no-diff": "Nun poi taliari sta diffirenza pirchì una dî virsioni fu <strong>cancillata</strong>.",
+       "rev-deleted-unhide-diff": "Una dî virsioni di sta diffirenza fu <strong>cancillata</strong>.\nSi ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].\nAncora poi [$1 taliari sta diffirenza] si voi prucèdiri.",
+       "rev-suppressed-unhide-diff": "Una dî virsioni di sta diffirenza fu <strong>supprimuta</strong>.\nSi ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].\nAncora poi [$1 taliari sta diffirenza] si voi prucèdiri.",
+       "rev-deleted-diff-view": "Una dî virsioni di sta diffirenza fu <strong>cancillata</strong>.\nTu sta diffirenza ancora la poi taliari; si ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+       "rev-suppressed-diff-view": "Una dî virsioni di sta diffirenza fu <strong>supprimuta</strong>.\nTu sta diffirenza ancora la poi taliari; si ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
        "rev-delundel": "cancia la visibbilità",
        "rev-showdeleted": "ammustra",
        "revisiondelete": "Cancella o annulla la cancillazzioni di virsioni",
        "revdelete-nooldid-title": "Virsioni oggettu nun vàlida",
-       "revdelete-nooldid-text": "O nun spicificasti nudda virsioni comu oggettu di sta funzioni, o la virsioni chi' spicificasti nun esisti, o puru stai pruvannu a' ammucciari la virsioni currenti.",
+       "revdelete-nooldid-text": "O nun spicificasti nudda virsioni comu oggettu di sta funzioni, o la virsioni chi spicificasti nun esisti, o puru stai pruvannu a ammucciari la virsioni currenti.",
        "revdelete-no-file": "Lu file spicificatu nun esisti.",
-       "revdelete-show-file-confirm": "Si' sicuru chi' voi talìari na virsioni cancillata dû file \"<nowiki>$1</nowiki>\" dû $2 ê $3?",
+       "revdelete-show-file-confirm": "Sî sicuru chi voi talìari na virsioni cancillata dû file \"<nowiki>$1</nowiki>\" dû $2 ê $3?",
        "revdelete-show-file-submit": "Sì",
        "revdelete-selected-text": "{{PLURAL:$1|Virsioni scigghiuta|Virsioni scigghiuti}} di [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Virsioni dû file scigghiuta|Virsioni dû file scigghiuti}} di [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Eventu dû riggistru silizziunatu|Eventi dû riggistru silizziunati}}:",
        "revdelete-text-text": "I virsioni cancillati spuntirannu ancora ntâ crunuluggìa dâ pàggina, però parti dû so cuntinutu sarannu inaccissìbbili ô pùbblicu.",
        "revdelete-text-file": "I virsioni di file cancillati spuntirannu ancora ntâ crunuluggìa dû file, però parti dû so cuntinutu sarannu inaccissìbbili ô pùbblicu.",
-       "logdelete-text": "L'eventi cancillati spuntirannu ancora ntê riggistra, però parti dû so cuntinutu sarannu inaccissìbbili ô pùbblicu.",
-       "revdelete-text-others": "L'autri amministratura purrannu ancora aviri accessu ô cuntinutu ammucciatu e annullàrinni la cancillazzioni, a' menu chi' nun si pònunu autri ristrizzioni ancora.",
+       "logdelete-text": "L'eventi cancillati spùntanu ancora ntê riggistri, pirò parti dû sò cuntinutu nun sunnu accissìbbili ô pùbblicu.",
+       "revdelete-text-others": "L'àutri amministratura ponnu ancora aviri accessu ô cuntinutu ammucciatu e annullàrinni la cancillazzioni, a menu chi nun si pòninu àutri ristrizzioni ancora.",
        "revdelete-confirm": "Pi' favuri cunfirma chi' hai ntinzioni di fari sta cosa, chi' capisci quali su' i so cunsiguenzi, e chi' stai prucidennu ntô rispettu dî [[{{MediaWiki:Policy-url}}|linî guida]].",
        "revdelete-suppress-text": "A supprissioni s'avissi a' adupirari <strong>sulu</strong> nta sti casi:\n* nfurmazzioni putenzialmenti diffamatorî\n* nfurmazzioni pirsunali inuppurtuni\n*: <em>nnirizzi di casa, nùmmira di tilèfunu, còdici fiscali, etc.</em>",
        "revdelete-legend": "Mposta li limitazzioni siquenti supra li virsioni cancillati:",
        "revdelete-submit": "Àpplica {{PLURAL:$1|â virsioni scigghiuta|ê virsioni scigghiuti}}",
        "revdelete-success": "Visibbilitati dâ virsioni mpustata currittamenti.",
        "revdelete-failure": "A visibbilitati dâ virsioni nun potti èssiri mpustata:\n$1",
-       "logdelete-success": "Visibbilitati di l'eventu mpustata currittamenti.",
+       "logdelete-success": "Visibbilità di l'eventu mpustata currettamenti.",
        "logdelete-failure": "'''La visibilità dû eventu nun po essiri impustata:'''\n$1",
        "revdel-restore": "cancia la visibbilità",
        "pagehist": "Crunuluggìa dâ pàggina",
        "deletedhist": "Crunuluggìa cancillata",
-       "revdelete-hide-current": "Erruri ammucciannu l'elimentu a' data $1 $2: È la virsioni currenti.\nNun si po' ammucciari.",
+       "revdelete-hide-current": "Erruri ammucciannu l'elimentu a data $1 $2: È la virsioni currenti.\nNun si pò ammucciari.",
        "revdelete-show-no-access": "Impussibili ammustrari l'oggettu cu data $1 $2 in quantu fu identificatu comu \"riservatu\" e nun si disponi di lu rilativu accessu.",
        "revdelete-modify-no-access": "Impussibili canciari l'oggettu cu data $1 $2 in quantu fu identificatu comu \"riservatu\" e nun si disponi di lu rilativu accessu.",
        "revdelete-modify-missing": "Impossibili canciari l'oggettu cu ID $1 in quantu nun è presenti nô database.",
        "revdelete-no-change": "'''Attenzioni:''' l'oggettu cu data $1 $2 aveva già l'impostazioni di visibilità richiesti.",
        "revdelete-concurrent-change": "Impussibili canciari l'oggettu cu data $1 $2 in quantu lu sò statu fu canciatu da n'autru utenti mentri si tintava lu canciamentu.\nCuntrolla lu log.",
-       "revdelete-only-restricted": "Erruri ntô mmucciamentu di l'elimentu datatu $2,$1: Non si ponnu livari elimenti dâ vista di l'amministratura senza puru scègghîri una di l'autri opzioni di visibbilitati.",
+       "revdelete-only-restricted": "Erruri nta l'ammucciamentu di l'elimentu datatu $2,$1: Nun si ponnu livari elimenti dâ vista di l'amministratura senza puru scègghiri una di l'àutri opzioni di visibbilità.",
        "revdelete-reason-dropdown": "* Mutivi cchiu' cumuni pâ cancillazzioni\n** Viulazzioni dû drittu d'auturi\n** Cummenti o nfurmazzioni pirsunali inuppurtuni\n** Nomu utenti inuppurtunu\n** Nfurmazzioni putenzialmenti diffamatorî",
        "revdelete-otherreason": "Autru/ultiriuri mutivu:",
        "revdelete-reasonotherlist": "Àutru mutivu",
        "revdelete-edit-reasonlist": "Cancia li mutivazioni pi la cancillazzioni",
        "revdelete-offender": "Auturi dâ virsioni:",
        "suppressionlog": "Riggistru dî supprissioni",
-       "suppressionlogtext": "Ccassutta cc'è n'elencu dî cancillazzioni e dî blocchi chi' cumpòrtunu l'ammucciata di cuntinutu a' l'occhî di l'amministratura.\nSi po' cunsultari la [[Special:BlockList|lista dî blocchi]] pi' canùsciri li furbanna e li blocchi in viguri pi' com'ora.",
+       "suppressionlogtext": "Ccassutta c'è n'elencu dî cancillazzioni e dî blocchi chi cumpòrtanu l'ammucciata di cuntinutu a l'occhî di l'amministratura.\nSi pò cunzurtari la [[Special:BlockList|lista dî blocchi]] pi canùsciri li furbanna e li blocchi n viguri pi com'ora.",
        "mergehistory": "Junciuta dî crunuluggìi",
-       "mergehistory-header": "Sta pàggina fa' jùnciri li crunuluggìi di du pàggini, abbuccannu li virsioni di na pàggina surgenti nta na pàggina cchiu' nova.\nAssicùriti ca stu canciamentu mantiniràvi la cuntinuità storica di la pàggina.",
+       "mergehistory-header": "Sta pàggina fa jùnciri li crunuluggìi di dui pàggini, abbuccannu li virsioni di na pàggina surgenti nta na pàggina cchiù nova.\nAssicùrati ca stu canciamentu manteni la cuntinuità stòrica dâ pàggina.",
        "mergehistory-box": "Junci li storii di dui pàggini:",
        "mergehistory-from": "Pàggina d'orìggini:",
        "mergehistory-into": "Pàggina di distinazioni:",
-       "mergehistory-list": "Crunuluggìa chi' si po' jùnciri",
-       "mergehistory-merge": "Si pònnu jùnciri li virsioni di [[:$1]] nnicati ccassutta â crunuluggìa di [[:$2]].\nAdòpira la culonna chî buttuni di opzioni pi' jùnciri sulu li virsioni fatti nfina â data e l'ura spicificati.\nGuàrditi ca s'adòpiri lijami di navigazzioni la culonna veni azzirata.",
+       "mergehistory-list": "Crunuluggìa chi si pò jùnciri",
+       "mergehistory-merge": "Si ponnu jùnciri li virsioni di [[:$1]] nnicati ccassutta â crunuluggìa di [[:$2]].\nAdòpira la culonna chî buttuna d'opzioni pi jùnciri sulu li virsioni fatti nfina â data e l'ura spicificati.\nGuàrdati ca s'adòpiri lijami di navigazzioni la culonna veni azzirata.",
        "mergehistory-go": "Vidi li canciamenti ca ponnu èssiri junciuti",
        "mergehistory-submit": "Junci li virsioni",
        "mergehistory-empty": "Nudda virsioni di jùnciri.",
-       "mergehistory-success": "$3 {{PLURAL:$3|virsioni di [[:$1]] fu' junciuta|$3 virsioni di [[:$1]] furu junciuti}} â crunuluggìa di [[:$2]].",
-       "mergehistory-fail": "Nun fu' pussìbbili jùnciri li crunuluggìi, pi' favuri cuntrolla n'autra vota li paràmitri chi' spicìficunu li pàggini e li dati.",
-       "mergehistory-fail-toobig": "Nun fu' pussìbbili jùnciri li crunuluggìi picchì s'avìssuru a' spustari cchiu' ssai virsioni dû limiti chi' è $1.",
+       "mergehistory-success": "$3 {{PLURAL:$3|virsioni di [[:$1]] fu junciuta|$3 virsioni di [[:$1]] foru junciuti}} â crunuluggìa di [[:$2]].",
+       "mergehistory-fail": "Nun fu pussìbbili jùnciri li crunuluggìi, pi favuri cuntrolla n'àutra vota li paràmitri chi spicìficanu li pàggini e li dati.",
+       "mergehistory-fail-toobig": "Nun fu pussìbbili jùnciri li crunuluggìi pirchì s'avìssiru a spustari cchiossai virsioni dû lìmiti chi è $1.",
        "mergehistory-no-source": "La pàggina d'orìggini $1 nun esisti.",
        "mergehistory-no-destination": "La pàggina di distinazzioni $1 nun esisti.",
-       "mergehistory-invalid-source": "La pàggina d'orìggini havi a' aviri nu tìtulu vàlidu.",
-       "mergehistory-invalid-destination": "La pàggina di distinazzioni havi a' aviri nu tìtulu vàlidu.",
-       "mergehistory-autocomment": "Junciuta la crunuluggìa di [[:$1]] a' chidda di [[:$2]]",
-       "mergehistory-comment": "Junciuta la crunuluggìa di [[:$1]] a' chidda di [[:$2]]: $3",
+       "mergehistory-invalid-source": "La pàggina d'orìggini havi a aviri nu tìtulu vàlidu.",
+       "mergehistory-invalid-destination": "La pàggina di distinazzioni havi a aviri nu tìtulu vàlidu.",
+       "mergehistory-autocomment": "Junciuta la crunuluggìa di [[:$1]] a chidda di [[:$2]]",
+       "mergehistory-comment": "Junciuta la crunuluggìa di [[:$1]] a chidda di [[:$2]]: $3",
        "mergehistory-same-destination": "Li pàggini d'orìggini e di distinazioni nun ponnu èssiri la stissa",
        "mergehistory-reason": "Mutivu:",
-       "mergelog": "Riggìstru dî junciuti",
+       "mergelog": "Riggistru dî junciuti",
        "revertmerge": "Annulla la junciuta",
-       "mergelogpagetext": "Appressu veni ammustrata na lista dî junciuti cchiu' ricenti dâ crunuluggìa di na pàggina cu' chidda di n'autra.",
+       "mergelogpagetext": "Appressu veni ammustrata na lista dî junciuti cchiù ricenti dâ crunuluggìa di na pàggina cu chidda di n'àutra.",
        "history-title": "Crunuluggìa dî canciamenti di \"$1\"",
        "difference-title": "Cunfruntu tra virsioni di \"$1\"",
        "difference-title-multipage": "Cunfruntu tra dî pàggini \"$1\" e \"$2\"",
        "diff-multi-sameuser": "({{PLURAL:$1|Na diffirenza minzana|$1 diffirenzi minzani}} dû stissu utenti nun {{PLURAL:$1|mustrata|mustrati}})",
        "diff-multi-otherusers": "({{PLURAL:$1|Na diffirenza minzana|$1 diffirenzi minzani}} di {{PLURAL:$2|n'autru utenti|autri $2 utenti}} nun {{PLURAL:$1|mustrata|mustrati}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Na diffirenza minzana|$1 diffirenzi minzani}} di cchiu' ssai di {{PLURAL:$2|n'autru utenti|autri $2 utenti}} nun {{PLURAL:$1|mustrata|mustrati}})",
-       "difference-missing-revision": "{{PLURAL:$2|Na virsioni|$2 virsioni}} di sta diffirenza ($1) {{PLURAL:$2|nun fu' truvata|nun furu truvati}}.\n\nStu fattu di sòlitu succedi quannu si segui nu lijami di diffirenza versu na pàggina chi' fu' cancillata.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
-       "searchresults": "Risurtati dâ risciduta",
-       "searchresults-title": "Risurtati dâ risciduta di \"$1\"",
+       "difference-missing-revision": "{{PLURAL:$2|Na virsioni|$2 virsioni}} di sta diffirenza ($1) {{PLURAL:$2|nun fu attruvata|nun foru attruvati}}.\n\nStu fattu di sòlitu succedi quannu si segui nu lijami di diffirenza versu na pàggina chi fu cancillata.\nSi ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+       "searchresults": "Risurtati di l'arricerca",
+       "searchresults-title": "Risurtati di l'arricerca di \"$1\"",
        "titlematches": "Currispunnenzi ntê tìtuli dî pàggini",
        "textmatches": "Currispunnenzi ntô testu dî pàggini",
        "notextmatches": "Nudda currispunnenza ntô testu dî pàggini",
        "prevn": "li pricidenti {{PLURAL:$1|$1}}",
        "nextn": "li pròssimi {{PLURAL:$1|$1}}",
-       "prev-page": "pàggina arreti",
+       "prev-page": "pàggina pricidenti",
        "next-page": "pàggina appressu",
        "prevn-title": "{{PLURAL:$1|Risultatu pricidenti|$1 risultati pricedenti}}",
        "nextn-title": "{{PLURAL:$1|Risultatu successivu|$1 risultata successivi}}",
        "searchprofile-images": "File Multimidiali",
        "searchprofile-everything": "Tuttu",
        "searchprofile-advanced": "Avanzata",
-       "searchprofile-articles-tooltip": "Cerca nta $1",
+       "searchprofile-articles-tooltip": "Arricerca nta $1",
        "searchprofile-images-tooltip": "Cerca file",
        "searchprofile-everything-tooltip": "Cerca unnegghiè (puru ntî pàggini di discussioni)",
        "searchprofile-advanced-tooltip": "Cerca ntê namespace pirsunalizzati",
        "search-category": "(catigurìa $1)",
        "search-file-match": "(currispunnenza ntô cuntinutu dûn file)",
        "search-suggest": "Forsi circavutu: $1",
-       "search-rewritten": "Sunnu ammustrati li risurtati pi’ $1. Nveci cerca $2.",
+       "search-rewritten": "Sunnu ammustrati li risurtati pi $1. Mmeci cerca $2.",
        "search-interwiki-caption": "Pruggetti frati",
        "search-interwiki-default": "Risultati di $1:",
        "search-interwiki-more": "(cchiù)",
        "searchrelated": "currilati",
        "searchall": "tutti",
        "showingresults": "Ammustra nzinu a {{PLURAL:$1|'''1''' risurtatu|'''$1''' risurtati}} a pàrtiri dô nùmmuru '''$2'''.",
-       "showingresultsinrange": "Ccassutta {{PLURAL:$1|è ammustratu <strong>1</strong> risultatu|sunnu ammustrati <strong>$1</strong> risultati}} nta l'intirvallu di #<strong>$2</strong> a' #<strong>$3</strong>.",
+       "showingresultsinrange": "Ccassutta {{PLURAL:$1|è ammustratu <strong>1</strong> risultatu|sunnu ammustrati <strong>$1</strong> risurtati}} nta lu ntirvallu di #<strong>$2</strong> a #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Risultatu <strong>$1</strong> di <strong>$3</strong>|Risultati <strong>$1 - $2</strong> di <strong>$3</strong>}}",
        "search-nonefound": "La circata nun desi nuddu risurtatu.",
        "powersearch-legend": "Ricerca avanzata",
        "powersearch-ns": "Cerca ntê namespace:",
-       "powersearch-togglelabel": "Scègghîli:",
+       "powersearch-togglelabel": "Scegghi:",
        "powersearch-toggleall": "Tutti",
        "powersearch-togglenone": "Nuddu",
-       "powersearch-remember": "Ricòrditi la scelta pî risciduti futuri",
+       "powersearch-remember": "Arricòrdati la scigghiuta pi l'arricerchi futuri",
        "search-external": "Ricerca sterna",
        "searchdisabled": "La circata nterna di {{SITENAME}} hà statu disabbilitata. Nta stu mentri, poi usari la circata supra Google o supra àutri muturi di circata. Accura ca li sò ìnnici dê cuntinuti di {{SITENAME}} ponnu nun èssiri aggiurnati.",
        "search-error": "Mmattìu n'erruri duranti a risciduta: $1",
        "prefs-rc": "Ùrtimi canciamenti",
        "prefs-watchlist": "Lista taliata",
        "prefs-editwatchlist": "Cancia la lista taliata",
-       "prefs-editwatchlist-label": "Cancia li vuci dâ to lista taliata:",
-       "prefs-editwatchlist-edit": "Talìa e leva tìtuli dâ to lista taliata",
+       "prefs-editwatchlist-label": "Cancia li vuci dâ tò lista taliata:",
+       "prefs-editwatchlist-edit": "Talìa e leva tìtuli dâ tò lista taliata",
        "prefs-editwatchlist-raw": "Cancia la lista taliata comu testu",
-       "prefs-editwatchlist-clear": "Svacanta la to lista taliata",
-       "prefs-watchlist-days": "Nùmmiru di jorna a' ammustrari ntâ lista taliata:",
+       "prefs-editwatchlist-clear": "Svacanta la tò lista taliata",
+       "prefs-watchlist-days": "Nùmmiru di jorna a ammustrari ntâ lista taliata:",
        "prefs-watchlist-days-max": "Màssimu $1 {{PLURAL:$1|jornu|jorna}}",
-       "prefs-watchlist-edits": "Nùmmiru di canciamenti a' ammustrari ntâ lista taliata estinnuta:",
+       "prefs-watchlist-edits": "Nùmmiru di canciamenti a ammustrari ntâ lista taliata stinnuta:",
        "prefs-watchlist-edits-max": "Nùmmiru màssimu: 1000",
-       "prefs-watchlist-token": "Token dâ me lista taliata:",
+       "prefs-watchlist-token": "Token dâ mè lista taliata:",
        "prefs-misc": "Varî",
        "prefs-resetpass": "Cancia password",
        "prefs-changeemail": "Cancia nnirizzu di posta elittrònica",
        "prefs-editing": "Canciamentu",
        "rows": "Righi:",
        "columns": "Culonni:",
-       "searchresultshead": "Risciduta",
-       "stub-threshold": "Valuri minimu pî <a href=\"#\" class=\"stub\">liami a li stub</a>:",
+       "searchresultshead": "Arricerca",
+       "stub-threshold": "Sogghia pi furmattari na liami comu bozza ($1):",
+       "stub-threshold-sample-link": "esempiu",
        "stub-threshold-disabled": "Disattivatu",
-       "recentchangesdays": "Nùmmiru di jorna a' ammustrari nta l'ùrtimi cancaiamenti:",
+       "recentchangesdays": "Nùmmiru di jorna a ammustrari nta l'ùrtimi canciamenti:",
        "recentchangesdays-max": "(màssimu $1 {{PLURAL:$1|jornu|jorna}})",
-       "recentchangescount": "Nùmmiru di canciamenti a' ammustrari comu mpustazzioni pridifinuta:",
-       "prefs-help-recentchangescount": "Si rifirisci a' l'ùrtimi canciamenti, li crunuluggìi e li riggistra.",
-       "prefs-help-watchlist-token2": "Chista è la chiavi sigreta pû feed web dâ to lista taliata.\nCu è jè ch'a canusci po' lèggiri la to lista taliata, dunca nâ diffunniri.\nSi' ti giuva, [[Special:ResetTokens|la poi azzirari]].",
-       "savedprefs": "Li to prifirenzi foru sarvati.",
+       "recentchangescount": "Nùmmiru di canciamenti a ammustrari comu mpustazzioni pridifinuta:",
+       "prefs-help-recentchangescount": "S'arrifirisci a l'ùrtimi canciamenti, li crunuluggìi e li riggistri.",
+       "prefs-help-watchlist-token2": "Chista è la chiavi sigreta pû feed web dâ tò lista taliata.\nCuegghiè chi la canusci pò lèggiri la tò lista taliata, dunca nun la diffùnniri.\nSi t'aggiuva, [[Special:ResetTokens|la poi azzirari]].",
+       "savedprefs": "Li tò prifirenzi foru sarvati.",
        "timezonelegend": "Fusu urariu:",
        "localtime": "Ura lucali:",
        "timezoneuseserverdefault": "Adòpira l'ura pridifinuta dâ wiki ($1)",
        "timezoneuseoffset": "Àutru (spicificari diffirenza)",
        "servertime": "Ura dû server:",
-       "guesstimezone": "Pigghia chidda dû to browser",
+       "guesstimezone": "Pigghia chidda dû tò browser",
        "timezoneregion-africa": "Àfrica",
        "timezoneregion-america": "Amèrica",
        "timezoneregion-antarctica": "Antàrtidi",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Ocèanu Innianu",
        "timezoneregion-pacific": "Ocèanu Pacìficu",
-       "allowemail": "Cunzenti la ricizzioni di posta elittrònica di l'autri utenti",
+       "allowemail": "Cunzenti la ricizzioni di posta elittrònica di l'àutri utenti",
        "prefs-searchoptions": "Risciduta",
        "prefs-namespaces": "Namespace",
        "default": "pridifinutu",
        "prefs-custom-css": "CSS pirsunalizzatu",
        "prefs-custom-js": "JavaScript pirsunalizzatu",
        "prefs-common-css-js": "CSS/JavaScript cunnivisu tra tutti li peddi:",
-       "prefs-reset-intro": "Poi adupirari sta pàggina pi' azzirari li to prifirenzi a' chiddi pridifinuti dû situ.\nSt'opirazzioni nun si po' annullari doppu ch'è fatta.",
+       "prefs-reset-intro": "Poi adupirari sta pàggina p'azzirari li tò prifirenzi a chiddi pridifinuti dû situ.\nSt'opirazzioni nun si pò annullari doppu ch'è fatta.",
        "prefs-emailconfirm-label": "Cunvàlida dâ posta elittrònica:",
        "youremail": "Nnirizzu di posta elittrònica:",
        "username": "{{GENDER:$1|Nomu utenti}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membru|Membra}} {{PLURAL:$1|dû gruppu|dî gruppi}}:",
-       "prefs-registration": "Data dâ riggistrazioni:",
+       "prefs-registration": "Data dâ riggistrazzioni:",
        "yourrealname": "Nomu veru:",
        "yourlanguage": "Lingua:",
        "yourvariant": "Varianti dâ lingua pû cuntinutu:",
-       "prefs-help-variant": "L'ortugrafìa o varianti dâ lingua chi' prifirisci pi' mmustrari lu cuntinutu dî pàggini di sta wiki.",
+       "prefs-help-variant": "L'ortugrafìa o varianti dâ lingua chi prifirisci p'ammustrari lu cuntinutu dî pàggini di sta wiki.",
        "yournick": "Firma nova:",
-       "prefs-help-signature": "Li cummenta ntê pàggini di discussioni s'avìssiru a' firmari cu' \"<nowiki>~~~~</nowiki>\", ca veni cunvirtutu ntâ to firma cu' appressu la data.",
+       "prefs-help-signature": "Li cummenti ntê pàggini di discussioni s'avìssiru a firmari cu \"<nowiki>~~~~</nowiki>\", ca veni cunvirtutu ntâ tò firma cu appressu la data.",
        "badsig": "Firma grezza nun vàlida.\nCuntrolla l'etichetti HTML.",
-       "badsiglength": "La to firma è troppu longa.\nNun havi a' èssiri cchiu' longa di $1 {{PLURAL:$1|caràttiri|caràttiri}}.",
+       "badsiglength": "La tò firma è troppu longa.\nNun havi a èssiri cchiù longa di $1 {{PLURAL:$1|caràttiri|caràttiri}}.",
        "yourgender": "Comu prifirisci èssiri discrivutu?",
-       "gender-unknown": "Quannu ti mmuntùa, si’ po’, lu prugramma adupiriràvi lu gèniri grammaticali neutru",
-       "gender-male": "N'auturi di pàggini dâ wiki",
-       "gender-female": "N'autrici di pàggini dâ wiki",
-       "prefs-help-gender": "Mpustari sta prifirenza è facultativu.\nU software adòpira u so valuri pi' parrari cu' tia, e di tia a' l'autri, facennu usu dû gèniri grammaticali currettu.\nSta nfurmazzioni sarravi pùbblica.",
+       "gender-unknown": "Quannu t'ammintua, si pò, lu prugramma adòpira lu gèniri grammaticali nèutru",
+       "gender-male": "È riggistratu supra {{SITENAME}}",
+       "gender-female": "È riggistrata supra {{SITENAME}}",
+       "prefs-help-gender": "Mpustari sta prifirenza è facultativu.\nLu software adòpira lu sò valuri pi parrari cu tìa, e di tìa a l'àutri, facennu usu dû gèniri grammaticali currettu.\nSta nfurmazzioni è pùbblica.",
        "email": "Nnirizzu di posta elittrònica",
-       "prefs-help-realname": "Lu nomu veru è facultativu.\nSiddu scegghî di furnìrilu, veni adupiratu pi' dàriti crèditu dû tò travagghiu.",
-       "prefs-help-email": "Lu nnirizzu di posta elittrònica è facultativu, ma po' giuvari p'azzirari la password, ntô casu chi' tâ scordi.",
-       "prefs-help-email-others": "Poi videmma scègghîri di pirmèttiri ca l'autri ti cuntàttanu pi' posta elittrònica a' pàrtiri dî lijami chi' si tròvanu ntê to pàggini d'utenti o di discussioni.\nLu tò nnirizzu nun veni rivilatu quannu l'àutri utenti ti cuntàttunu.",
+       "prefs-help-realname": "Lu nomu veru è facultativu\nSiddu scegghi di furnìrilu, veni adupiratu pi' dàriti crèditu dû tò travagghiu.",
+       "prefs-help-email": "Lu nnirizzu di posta elittrònica è facultativu, ma pò aggiuvari p'azzirari la password, ntô casu chi ti la scordi.",
+       "prefs-help-email-others": "Poi videmma scègghiri di pirmèttiri ca l'àutri ti cuntàttanu pi posta elittrònica a pàrtiri dî lijami chi s'attròvanu ntê tò pàggini d'utenti o di discussioni.\nLu tò nnirizzu nun veni rivilatu quannu l'àutri utenti ti cuntàttanu.",
        "prefs-help-email-required": "Lu nnirizzu di posta elittrònica è obbligatoriu.",
        "prefs-info": "Nfurmazzioni essinziali",
-       "prefs-i18n": "Intirnazziunalizzazioni",
+       "prefs-i18n": "Ntirnazziunalizzazzioni",
        "prefs-signature": "Firma",
        "prefs-dateformat": "Furmatu dâ data",
        "prefs-timeoffset": "Diffirenza d'urariu",
        "saveusergroups": "Sarva li gruppi di l'utenti",
        "userrights-groupsmember": "Membru di:",
        "userrights-groupsmember-auto": "Membru implìcitu di:",
-       "userrights-groups-help": "Poi canciari li gruppi unni è assignatu l'utenti:\n* Na casedda scigghiuta voli diri chi' l'utenti fa' parti dû gruppu.\n* Na casedda nun scigghiuta voli diri chi' l'utenti nun fa' parti dû gruppu.\n* Lu sìmmulu * voli diri chi' nun si po' cchiu' luvari l'utenti dûn gruppu na vota chi' fu' agghiunciutu, o vici versa.",
+       "userrights-groups-help": "Poi canciari li gruppi unni è assignatu l'utenti:\n* Na casedda scigghiuta voli diri chi l'utenti fa parti dû gruppu.\n* Na casedda nun scigghiuta voli diri chi l'utenti nun fa parti dû gruppu.\n* Lu sìmmulu * voli diri chi nun si pò cchiù livari l'utenti dûn gruppu na vota chi fu agghiunciutu, o vici versa.",
        "userrights-reason": "Mutivu:",
-       "userrights-no-interwiki": "Nun hai lu pirmissu di canciari li dritti di l'utenti nta l'autri wiki.",
+       "userrights-no-interwiki": "Nun hai lu pirmissu di canciari li dritti di l'utenti nta l'àutri wiki.",
        "userrights-nodatabase": "La basi di dati $1 nun esisti o nun è lucali.",
-       "userrights-nologin": "Hâ' [[Special:UserLogin|tràsiri]] cûn cuntu d'amministraturi pi' putiri assignari li dritti di l'utenti.",
-       "userrights-notallowed": "Nun hai lu pirmissu di agghiùnciri o livàri diritti a' l'utenti.",
-       "userrights-changeable-col": "Gruppi chi' si ponnu canciari",
-       "userrights-unchangeable-col": "Gruppi chi' nun si ponnu canciari",
-       "userrights-conflict": "Cunflittu di canciamentu dî dritti di l'utenti! Pi' favuri cuntrolla e cunfirma li to canciamenti.",
-       "userrights-removed-self": "Riniscisti a' livàriti li to stissi dritti. Pi' chistu, nun hai cchiu' l'accessu a' sta pàggina.",
+       "userrights-nologin": "Hai a [[Special:UserLogin|tràsiri]] cûn cuntu d'amministraturi pi putiri assignari li dritti di l'utenti.",
+       "userrights-notallowed": "Nun hai lu pirmissu di agghiùnciri o livari dritti a l'utenti.",
+       "userrights-changeable-col": "Gruppi chi si ponnu canciari",
+       "userrights-unchangeable-col": "Gruppi chi nun si ponnu canciari",
+       "userrights-conflict": "Cunflittu di canciamentu dî dritti di l'utenti! Pi favuri cuntrolla e cunferma li tò canciamenti.",
+       "userrights-removed-self": "Arriniscisti a livàriti li tò stissi dritti. Pi chistu, nun hai cchiù l'accessu a sta pàggina.",
        "group": "Gruppu:",
        "group-user": "Utenti",
        "group-autoconfirmed": "Utenti autu-cunfirmati",
        "grouppage-suppress": "{{ns:project}}:Supravisura",
        "right-read": "Lèggiri pàggini",
        "right-edit": "Canciari pàggini",
-       "right-createpage": "Criari pàggini (chi' nun sunnu di discussioni)",
+       "right-createpage": "Criari pàggini (chi nun sunnu di discussioni)",
        "right-createtalk": "Criari pàggini di discussioni",
        "right-createaccount": "Criari cunti novi di l'utenti",
        "right-minoredit": "Marcari canciamenti comu nichi",
        "right-move": "Spustari pàggini",
-       "right-move-subpages": "Spustari pàggini chî so suttapàggini",
+       "right-move-subpages": "Spustari pàggini chî sò suttapàggini",
        "right-move-rootuserpages": "Spustari pàggini ràdica di l'utenti",
        "right-move-categorypages": "Spustari pàggini di catigurìa",
        "right-movefile": "Spustari file",
-       "right-suppressredirect": "Nun criari rimanni ô postu dâ pàggina origginali quannu si spostunu pàggini",
+       "right-suppressredirect": "Nun criari rimanni ô postu dâ pàggina origginali quannu si spòstanu pàggini",
        "right-upload": "Carricari file",
        "right-reupload": "Suprascrìviri file esistenti",
        "right-reupload-own": "Suprascrìviri file esistenti carricati dû stissu utenti",
        "right-reupload-shared": "Suprascrìviri lucalmenti file prisenti ntô dipòsitu cunnivisu",
        "right-upload_by_url": "Carricari file partennu di n'URL",
-       "right-purge": "Svacantari la cache dû situ di na pàggina senza cunfirma",
+       "right-purge": "Svacantari la cache dû situ di na pàggina senza cunferma",
        "right-autoconfirmed": "Nun èssiri suggettu ê lìmiti basati supra a' l'IP",
        "right-bot": "Èssiri trattatu comu nu prucessu autumàticu",
        "right-nominornewtalk": "Nun fari pàrtiri l'avvisu di misaggiu novu quannu si fannu canciamenti nichi ntê pàggini di discussioni",
-       "right-apihighlimits": "Avìri limiti cchiu' auti pi' li ntirrugazzioni a' menzu API",
-       "right-writeapi": "Aduprirari l'API in scrittura",
+       "right-apihighlimits": "Aviri lìmiti cchiù àuti pi li ntirrugazzioni a menzu API",
+       "right-writeapi": "Adupirari l'API n scrittura",
        "right-delete": "Cancillari pàggini",
        "right-bigdelete": "Cancillari pàggini cu la crunuluggìa longa",
        "right-deletelogentry": "Cancillari e annullari la cancillazzioni di vuci di riggistru spicìfichi",
        "right-deleterevision": "Cancillari e annullari la cancillazzioni di virsioni spicìfichi dî pàggini",
-       "right-deletedhistory": "Vìdiri vuci dâ crunuluggìa cancillati, senza dû so testu assuciatu",
+       "right-deletedhistory": "Vìdiri vuci dâ crunuluggìa cancillati, senza dû sò testu assuciatu",
        "right-deletedtext": "Vìdiri lu testu cancillatu e li canciamenti tra dî virsioni cancillati",
        "right-browsearchive": "Circari pàggini cancillati",
        "right-undelete": "Annullari la cancillazzioni di pàggini",
-       "right-suppressrevision": "Vìdiri, ammucciari e ammustrari virsioni spicìfichi di pàggini di quali utenti è jè",
-       "right-viewsuppressed": "Vìdiri virsioni ammucciati a' quali utenti è jè",
-       "right-suppressionlog": "Taliari li riggistra privati",
-       "right-block": "Bluccari autri utenti pi' nun fàricci fari canciamenti",
-       "right-blockemail": "Bluccari n'utenti pi' nun fàricci mannari posta elittrònica",
-       "right-hideuser": "Bluccari nu nomu utenti, ammucciannulu ô pùbblicu",
+       "right-suppressrevision": "Vìdiri, ammucciari e ammustrari virsioni spicìfichi di pàggini d'utenti qualegghiè",
+       "right-viewsuppressed": "Vìdiri virsioni ammucciati a utenti qualegghiè",
+       "right-suppressionlog": "Taliari li riggistri privati",
+       "right-block": "Bluccari àutri utenti pi nun fàricci fari canciamenti",
+       "right-blockemail": "Bluccari n'utenti pi nun fàricci mannari posta elittrònica",
+       "right-hideuser": "Bluccari nu nomu utenti, ammucciànnulu ô pùbblicu",
        "right-ipblock-exempt": "Sautari li blocchi di IP, autumàtici e di ntirvalli di IP",
        "right-proxyunbannable": "Sautari li blocchi autumàtici dî proxy",
        "right-unblockself": "Sbluccàrisi iddu stissu",
-       "right-protect": "Canciari li liveddi di prutizzioni e mudificari pàggini prutetti a' cascata",
-       "right-editprotected": "Canciari pàggini cu' prutizzioni \"{{int:protect-level-sysop}}\"",
-       "right-editsemiprotected": "Canciari pàggini cu' prutizzioni \"{{int:protect-level-autoconfirmed}}\"",
+       "right-protect": "Canciari li liveddi di prutizzioni e canciari pàggini prutetti a cascata",
+       "right-editprotected": "Canciari pàggini cu prutizzioni \"{{int:protect-level-sysop}}\"",
+       "right-editsemiprotected": "Canciari pàggini cu prutizzioni \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Canciari u mudellu di cuntinutu di na pàggina",
        "right-editinterface": "Canciari la ntirfaccia utenti",
-       "right-editusercssjs": "Canciari li file CSS e JavaScript di l'autri utenti",
+       "right-editusercssjs": "Canciari li file CSS e JavaScript di l'àutri utenti",
        "right-editusercss": "Canciari li file CSS di l'àutri utenti",
        "right-edituserjs": "Canciari li file JavaScript di l'àutri utenti",
        "right-editmyusercss": "Canciari li file CSS dû propiu utenti",
        "right-editmyuserjs": "Canciari li file JavaScript dû propiu utenti",
        "right-viewmywatchlist": "Taliari la propia lista taliata",
-       "right-editmywatchlist": "Canciari la propia lista taliata. Nota chi' certi azzioni cci ponnu agghiùnciri pàggini macari senza di stu drittu.",
-       "right-viewmyprivateinfo": "Taliari li propî dati risirvati (ad esempiu lu nnirizzu di posta elittrònica e lu nomu veru)",
-       "right-editmyprivateinfo": "Canciari li propî dati risirvati (ad esempiu lu nnirizzu di posta elittrònica e lu nomu veru)",
+       "right-editmywatchlist": "Canciari la propia lista taliata. Nota chi certi azzioni ci ponnu agghiùnciri pàggini macari senza di stu drittu.",
+       "right-viewmyprivateinfo": "Taliari li propî dati risirvati (p'esempiu lu nnirizzu di posta elittrònica e lu nomu veru)",
+       "right-editmyprivateinfo": "Canciari li propî dati risirvati (p'esempiu lu nnirizzu di posta elittrònica e lu nomu veru)",
        "right-editmyoptions": "Canciari li propî prifirenzi",
-       "right-rollback": "Canciari lestu n'arreri li mudìfichi di l'ùltimu utenti chi' canciau na certa pàggina",
+       "right-rollback": "Canciari lestu n'arreri li canciamenti di l'ùrtimu utenti chi canciau na certa pàggina",
        "right-markbotedits": "Marcari li canciamenti n'arreri comu fatti dî bot",
-       "right-noratelimit": "Nun èssiri suggettu ô limiti di azzioni",
-       "right-import": "Mpùrtari pàggini di autri wiki",
-       "right-importupload": "Mpùrtari pàggini di nu carricamentu di file",
-       "right-patrol": "Marcari li canciamenti di l'autri utenti comu battugghiati",
-       "right-autopatrol": "Marcari autumaticamenti li propî canciamenti comu battugghiati",
-       "right-patrolmarks": "Vìdiri li marcaturi di battugghia nta l'ùrtimi canciamenti",
-       "right-unwatchedpages": "Vìdiri na lista dî pàggini chi' nuddu talìa",
+       "right-noratelimit": "Nun èssiri suggettu ô lìmiti d'azzioni",
+       "right-import": "Mpurtari pàggini d'àutri wiki",
+       "right-importupload": "Mporta pàggini di nu carricamentu di file",
+       "right-patrol": "Marcari li canciamenti di l'àutri utenti comu virificati",
+       "right-autopatrol": "Marcari autumaticamenti li propî canciamenti comu virificati",
+       "right-patrolmarks": "Vìdiri li marcaturi di virìfica nta l'ùrtimi canciamenti",
+       "right-unwatchedpages": "Vìdiri na lista dî pàggini chi nuddu talìa",
        "right-mergehistory": "Jùnciri la crunuluggìa dî pàggini",
        "right-userrights": "Canciari tutti li dritti di l'utenti",
-       "right-userrights-interwiki": "Canciari li dritti di l'utenti di autri wiki",
+       "right-userrights-interwiki": "Canciari li dritti di l'utenti dutri wiki",
        "right-siteadmin": "Bluccari e sbluccari la basi di dati",
        "right-override-export-depth": "Espurtari pàggini cu li pàggini culligati nfina ô quintu liveddu",
-       "right-sendemail": "Mannari missaggi di posta elittrònica a' l'autri utenti",
+       "right-sendemail": "Mannari missaggi di posta elittrònica a l'àutri utenti",
        "right-passwordreset": "Taliari li missaggi di posta elittrònica d'azziramentu dî password",
        "right-managechangetags": "Criari e cancillari [[Special:Tags|etichetti]] dâ basi di dati",
        "right-applychangetags": "Appizzari [[Special:Tags|etichetti]] ntê propî canciamenti",
-       "right-changetags": "Agghiùnciri e livari a' piaciri [[Special:Tags|etichetti]] dî virsioni e dî vuci di riggistru",
+       "right-changetags": "Agghiùnciri e livari a piaciri [[Special:Tags|etichetti]] dî virsioni e dî vuci di riggistru",
        "newuserlogpage": "Riggistru di l'utenti novi",
        "newuserlogpagetext": "Chistu è nu riggistru di li criazzioni di utenti novi.",
        "rightslog": "Riggistru dî dritti di l'utenti",
        "action-history": "taliari la crunuluggìa di sta pàggina",
        "action-minoredit": "marcari stu canciamentu comu nicu",
        "action-move": "spustari sta pàggina",
-       "action-move-subpages": "spustari sta pàggina e li so suttapàggini",
+       "action-move-subpages": "spustari sta pàggina e li sò suttapàggini",
        "action-move-rootuserpages": "spustari li pàggini ràdica di l'utenti",
        "action-move-categorypages": "spustari pàggini di catigurìa",
        "action-movefile": "spustari stu file",
        "action-reupload": "suprascrìviri stu file esistenti",
        "action-reupload-shared": "suprascrivìri stu file prisenti ntô dipòsitu cunnivisu",
        "action-upload_by_url": "carricari stu file di n'URL",
-       "action-writeapi": "adupirari l'API pi' scrìviri",
+       "action-writeapi": "adupirari l'API pi scrìviri",
        "action-delete": "cancillari sta pàggina",
        "action-deleterevision": "cancillari sta virsioni",
        "action-deletedhistory": "taliari la crunuluggìa cancillata di sta pàggina",
        "action-browsearchive": "circari pàggini cancillati",
        "action-undelete": "annullari la cancillazzioni di sta pàggina",
        "action-suppressrevision": "rivìdiri e ripristinari sta virsioni ammucciata",
-       "action-suppressionlog": "vìdiri stu riggìstru privatu",
-       "action-block": "bluccari st'utenti pi' nun fàricci fari canciamenti",
-       "action-protect": "canciari li livedda di prutizzioni di sta pàggina",
-       "action-rollback": "canciari lestu n'arreri li mudìfichi di l'ùltimu utenti chi' canciau na certa pàggina",
+       "action-suppressionlog": "vìdiri stu riggistru privatu",
+       "action-block": "bluccari st'utenti pi nun fàricci fari canciamenti",
+       "action-protect": "canciari li liveddi di prutizzioni di sta pàggina",
+       "action-rollback": "canciari lestu n'arreri li canciamenti di l'ùrtimu utenti chi canciau na certa pàggina",
        "action-import": "mpurtari pàggini di n'àutra wiki",
        "action-importupload": "mpurtari pàggini di nu carricamentu di file",
-       "action-patrol": "marcari li canciamenti di l'autri utenti comu battugghiati",
-       "action-autopatrol": "marcari li tò canci comu battugghiati",
-       "action-unwatchedpages": "vìdiri la lista dî pàggini chi' nuddu talìa",
+       "action-patrol": "marcari li canciamenti di l'àutri utenti comu virificati",
+       "action-autopatrol": "marcari li tò canci comu virificati",
+       "action-unwatchedpages": "vìdiri la lista dî pàggini chi nuddu talìa",
        "action-mergehistory": "jùnciri la crunuluggìa di sta pàggina",
        "action-userrights": "canciari tutti li dritti di l'utenti",
-       "action-userrights-interwiki": "canciari li dritti di l'utenti supra a autri wiki",
+       "action-userrights-interwiki": "canciari li dritti di l'utenti supra a àutri wiki",
        "action-siteadmin": "bluccari e sbluccari la basi di dati",
        "action-sendemail": "mannari missaggi di posta elittrònica",
-       "action-editmywatchlist": "canciari la to lista taliata",
-       "action-viewmywatchlist": "taliari la to lista taliata",
-       "action-viewmyprivateinfo": "taliari li to nfurmazzioni risirvati",
-       "action-editmyprivateinfo": "canciari li to nfurmazzioni risirvati",
+       "action-editmywatchlist": "canciari la tò lista taliata",
+       "action-viewmywatchlist": "taliari la tò lista taliata",
+       "action-viewmyprivateinfo": "taliari li tò nfurmazzioni risirvati",
+       "action-editmyprivateinfo": "canciari li tò nfurmazzioni risirvati",
        "action-editcontentmodel": "canciari lu mudellu di cuntinutu di na pàggina",
        "action-managechangetags": "criari e cancillari etichetti dâ basi di dati",
-       "action-applychangetags": "appizzari etichetti ntê to canciamenti",
-       "action-changetags": "agghiùnciri e livari a' piaciri etichetti dî virsioni e dî vuci di riggistru",
+       "action-applychangetags": "appizzari etichetti ntê tò canciamenti",
+       "action-changetags": "agghiùnciri e livari a piaciri etichetti dî virsioni e dî vuci di riggistru",
        "nchanges": "$1 {{PLURAL:$1|canciamentu|canciamenti}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|di l'ùltima vìsita}}",
        "enhancedrc-history": "crunuluggìa",
        "recentchanges": "Ùrtimi canciamenti",
-       "recentchanges-legend": "Opzioni pi' l'ùrtimi canciamenti",
-       "recentchanges-summary": "Sta pàggina prisenta li canciamenti cchiu' ricenti ê cuntinuti dâ wiki.",
-       "recentchanges-noresult": "Nuddu canciamentu ntô pirìudu spicificatu currispunni a' sti criteria.",
-       "recentchanges-feed-description": "Stu feed prisenta li canciamenti cchiu' ricenti ê cuntinuti dâ wiki.",
+       "recentchanges-legend": "Opzioni pi l'ùrtimi canciamenti",
+       "recentchanges-summary": "Sta pàggina prisenta li canciamenti cchiù ricenti ê cuntinuti dâ wiki.",
+       "recentchanges-noresult": "Nuddu canciamentu ntô pirìudu spicificatu currispunni a sti criteri.",
+       "recentchanges-feed-description": "Stu feed prisenta li canciamenti cchiù ricenti ê cuntinuti dâ wiki.",
        "recentchanges-label-newpage": "Stu canciamentu criau na pàggina nova",
        "recentchanges-label-minor": "Chistu è nu canciamentu nicu",
        "recentchanges-label-bot": "Stu canciamentu fu fattu di nu bot",
-       "recentchanges-label-unpatrolled": "Stu canciamentu ancora nun havi statu battugghiatu",
+       "recentchanges-label-unpatrolled": "Stu canciamentu ancora nun fu virificatu",
        "recentchanges-label-plusminus": "La grannizza dâ pàggina canciau di stu nùmmiru di byte",
        "recentchanges-legend-heading": "'''Legenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (talìa puru [[Special:NewPages|la lista dî pàggini novi]])",
-       "rcnotefrom": "Ccassutta {{PLURAL:$5|cc'è lu canciamentu|cci su' li canciamenti}} a' pàrtiri dû <strong>$3, $4</strong> (nn'havi ammustrati nfina a' <strong>$1</strong>).",
-       "rclistfrom": "Ammustra li canciamenti novi a' pàrtiri dû $3 $2",
+       "rcnotefrom": "Ccassutta {{PLURAL:$5|c'è lu canciamentu|ci sù li canciamenti}} a pàrtiri dû <strong>$3, $4</strong> (nn'havi ammustrati nfina a <strong>$1</strong>).",
+       "rclistfrom": "Ammustra li canciamenti novi a pàrtiri dû $3 $2",
        "rcshowhideminor": "$1 li canciamenti nichi",
        "rcshowhideminor-show": "Ammustra",
        "rcshowhideminor-hide": "Ammuccia",
        "rcshowhideanons": "$1 l'utenti anònimi",
        "rcshowhideanons-show": "Ammustra",
        "rcshowhideanons-hide": "Ammuccia",
-       "rcshowhidepatr": "$1 li canciamenti battugghiati",
+       "rcshowhidepatr": "$1 li canciamenti virificati",
        "rcshowhidepatr-show": "Ammustra",
        "rcshowhidepatr-hide": "Ammuccia",
-       "rcshowhidemine": "$1 li me canciamenti",
+       "rcshowhidemine": "$1 li mè canciamenti",
        "rcshowhidemine-show": "Ammustra",
        "rcshowhidemine-hide": "Ammuccia",
        "rclinks": "Ammustra l'ùrtimi $1 canciamenti nta l'ùrtimi $2 jorna <br />$3",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[taliata di {{PLURAL:$1|nu utenti|$1 utenti}}]",
-       "rc_categories": "Lìmita a li catigurìi (siparati di \"|\")",
-       "rc_categories_any": "Quali è jè",
+       "rc_categories": "Lìmita a li catigurìi (spartuti cu «|»)",
+       "rc_categories_any": "Qualegghiè tra chiddi scigghiuti",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} appressu dû canciamentu",
        "newsectionsummary": "/* $1 */ sizzioni nova",
        "rc-enhanced-expand": "Ammustra li dittagghî",
        "recentchangeslinked-title": "Canciamenti culligati a \"$1\"",
        "recentchangeslinked-summary": "Chista pàggina spiciali ammustra li canciamenti cchiù ricenti ê pàggini culligati a chidda spicificata. Li pàggini taliati ni la tou [[Special:Watchlist|lista taliata]] sunu evidenziati 'n '''grassettu'''.",
        "recentchangeslinked-page": "Nomu dâ pàggina:",
-       "recentchangeslinked-to": "Ammustra sulu li canciamenti ê pàggini culligati a' chidda spicificata",
+       "recentchangeslinked-to": "Ammustra sulu li canciamenti ê pàggini culligati a chidda spicificata",
        "upload": "Càrrica nu file",
        "uploadbtn": "Càrrica",
        "reuploaddesc": "Annulla lu carricamentu e torna a lu mòdulu dî carricamenti",
        "upload-tryagain": "Manna la discrizzioni canciata dû file",
        "uploadnologin": "Nun trasutu",
        "uploadnologintext": "Hâ' $1 pi' putiri carricari file.",
-       "upload_directory_missing": "La cartella dî carricamenti ($1) nun esisti lu server web nun riniscìu a' criàrila.",
+       "upload_directory_missing": "La cartella dî carricamenti ($1) nun esisti lu server web nun arriniscìu a criàrila.",
        "upload_directory_read_only": "La cartella dî carricamenti ($1) nun è scrivìbbili dû server web.",
        "uploaderror": "Erruri ntô carricamentu",
-       "upload-recreate-warning": "<strong>Accura: Nu file cu' ddu nomu fu' cancillatu o spustatu.</strong>\n\nPi' cummudità ccassutta cci su' li riggistra dî cancillazzioni e dî spustamenti di sta pàggina:",
+       "upload-recreate-warning": "<strong>Accura: Nu file cu ddu nomu fu cancillatu o spustatu.</strong>\n\nPi cummudità ccassutta ci sù li riggistri dî cancillazzioni e dî spustamenti di sta pàggina:",
        "uploadtext": "Usa lu mòdulu ccà sutta pi carricari file novi. Pi vìdiri o circari li file già carricati, talìa lu [[Special:FileList|log dî file carricati]]. Carricamenti di file e di virsioni novi di file sunnu riggistrati ntô [[Special:Log/upload|log di l'upload]], li cancillazzioni di file sunnu\nriggistrati [[Special:Log/delete|ccà]].\n\nPi nziriri nu file nta na pàggina, fai nu lijami accussì:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' p'usari la virsioni ntera dû file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testu altirnativu]]</nowiki></code>''' p'usari na virsioni làrica 200 pixel nziruta nta nu box, alliniata a manu manca e cu 'testu altirnativu' comu didascalìa\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' pi culligari direttamenti a lu file senza vidìrilu.",
-       "upload-permitted": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|cunsintutu|cunsintuti}}: $1.",
-       "upload-preferred": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|cunsigghiatu|cunsigghiati}}: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|cunzintutu|cunzintuti}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|cunzigghiatu|cunzigghiati}}: $1.",
        "upload-prohibited": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|pruibbutu|pruibbuti}}: $1.",
        "uploadlogpage": "Riggistru dî file carricati",
-       "uploadlogpagetext": "Ccà sutta cc'è la lista di l'ùrtimi file carricati.\nTalìa la [[Special:NewFiles|gallarìa dî file novi]] pûn risucuntu cchiu' visuali.",
+       "uploadlogpagetext": "Ccà sutta c'è la lista di l'ùrtimi file carricati.\nTalìa la [[Special:NewFiles|jallarìa dî file novi]] pûn risucuntu cchiù visuali.",
        "filename": "Nomu dû file",
        "filedesc": "Discrizzioni",
        "fileuploadsummary": "Discrizzioni:",
        "filestatus": "Statu dû drittu d'auturi:",
        "filesource": "Fonti:",
        "ignorewarning": "Gnora l'avvisu e sarva lu file lu stissu",
-       "ignorewarnings": "Gnora l'avvirtimenti eventuali",
-       "minlength1": "Li nomi dî file hannu a' èssiri fatti di almenu na lìttra.",
-       "illegalfilename": "Lu nomu dû file \"$1\" cunteni caràttiri chi' nun su' cunsintuti ntê tìtuli dî pàggini.\nPi' favuri cancia nomu ô file e prova e càrriculu n'autra vota.",
-       "filename-toolong": "Li nomi dî file nun ponnu èssiri cchiù' longhi di 240 byte.",
-       "badfilename": "Lu nomu dû file fu' canciatu nta \"$1\".",
+       "ignorewarnings": "Gnora l'avvirtimenti evintuali",
+       "minlength1": "Li nomi dî file hannu a èssiri fatti d'armenu na littra.",
+       "illegalfilename": "Lu nomu dû file \"$1\" cunteni caràttiri chi nun sù cunzintuti ntê tìtuli dî pàggini.\nPi favuri cancia nomu ô file e prova e càrricalu n'àutra vota.",
+       "filename-toolong": "Li nomi dî file nun ponnu èssiri cchiù longhi di 240 byte.",
+       "badfilename": "Lu nomu dû file fu canciatu nta \"$1\".",
        "filetype-mime-mismatch": "L'estinsioni dû file, \".$1\", nun currispunni ô tipu MIME rilivatu ntô file ($2).",
        "filetype-badmime": "Nun è cunzintutu di carricari file di tipu MIME \"$1\".",
-       "filetype-bad-ie-mime": "Nun si po' carricari stu file pirchì Internet Explorer lu canuscissi comu \"$1\", ca è nu tipu di file nun cunsintutu e ca putissi èssiri piriculusu.",
-       "filetype-unwanted-type": "<strong>\".$1\"</strong> è nu tipu di file nun vulutu.\n{{PLURAL:$3|Lu tipu di file cunsigghiatu è|Li tipi di file cunsigghiati sunnu}} $2.",
+       "filetype-bad-ie-mime": "Nun si pò carricari stu file pirchì Internet Explorer lu canuscissi comu \"$1\", ca è nu tipu di file nun cunzintutu e ca putissi èssiri piriculusu.",
+       "filetype-unwanted-type": "<strong>\".$1\"</strong> è nu tipu di file nun vulutu.\n{{PLURAL:$3|Lu tipu di file cunzigghiatu è|Li tipi di file cunzigghiati sunnu}} $2.",
        "filetype-banned-type": "<strong>\".$1\"</strong> {{PLURAL:$4|nun è un tipu di file cunsintutu|nun su' tipi di file cunsintuti}}.\n{{PLURAL:$3|U tipu di file cunsintutu è|I tipi di file cunsintuti su'}} $2.",
-       "filetype-missing": "Lu file nun havi estinsioni (ad esempiu \".jpg\").",
-       "empty-file": "Lu file chi' mannasti era vacanti.",
-       "file-too-large": "Lu file chi' mannasti era troppu grossu.",
+       "filetype-missing": "Lu file nun havi stinzioni (p'esempiu \".jpg\").",
+       "empty-file": "Lu file chi mannasti era vacanti.",
+       "file-too-large": "Lu file chi mannasti era troppu grossu.",
        "filename-tooshort": "Lu nomu dû file è troppu curtu.",
        "filetype-banned": "Stu tipu di file è sbannutu.",
        "verification-error": "Stu file nun passau â virìfica.",
-       "hookaborted": "Lu canciamentu chi' stavi pruvannu a' fari fu' annullatu di n'estinsioni.",
-       "illegal-filename": "Stu nomu dû file nun è cunsintutu.",
+       "hookaborted": "Lu canciamentu chi stavi pruvannu a fari fu annullatu di n'estinzioni.",
+       "illegal-filename": "Stu nomu dû file nun è cunzintutu.",
        "overwrite": "Suprascrìviri nu file chi' già esisti nun è cunsintutu.",
-       "unknown-error": "Mmattìu n'erruri scanusciutu.",
+       "unknown-error": "Ammattìu n'erruri scanusciutu.",
        "tmp-create-error": "Nun fu pussìbbili criari u file timpuraniu.",
        "tmp-write-error": "Erruri ntâ scrittura dû file timpuraniu.",
-       "large-file": "Si raccumanna di nun passari la grannizza di $1 p'ognin file; stu file è granni $2.",
-       "largefileserver": "Stu file è cchiu' grossu di quantu lu server è cunfiguratu a' accittari.",
-       "emptyfile": "Lu file chi' carricasti pari vacanti.\nChistu putissi èssiri pruvucatu di nu sbagghiu ntô nomu dû file.\nCuntrolla ca pi' davera voi carricari stu file.",
+       "large-file": "Si raccumanna di nun passari la grannizza di $1 p'ogni file; stu file è granni $2.",
+       "largefileserver": "Stu file è cchiù grossu di quantu lu server è cunfiguratu a accittari.",
+       "emptyfile": "Lu file chi carricasti pari vacanti.\nChistu putissi èssiri pruvucatu di nu sbagghiu ntô nomu dû file.\nCuntrolla ca pi daveru voi carricari stu file.",
        "windows-nonascii-filename": "Sta wiki nun supporta i nomi di file cu' caràttiri spiciali.",
        "fileexists": "Nu file cu' stu nomu già esisti, pi' favuri cuntrolla <strong>[[:$1]]</strong> si' nun si' {{GENDER:|sicuru|sicura}} ch'u voi canciari.\n[[$1|thumb]]",
-       "filepageexists": "La pàggina dâ discrizzioni di stu file fu' ggià criata ô nnirizzu <strong>[[:$1]]</strong>, ma pi' com'ora nun c'è nuddu file cu' stu nomu.\nLu riassuntu chi' immetti nun cumpariravi ntâ pàggina dâ discrizzioni.\nPi' fàrilu cumpàriri, avirrai a' mudificari a' manu dda pàggina.\n[[$1|thumb]]",
+       "filepageexists": "La pàggina dâ discrizzioni di stu file fu già criata ô nnirizzu <strong>[[:$1]]</strong>, ma pi com'ora nun c'è nuddu file cu stu nomu.\nLu riassuntu chi nzirisci nun cumpari ntâ pàggina dâ discrizzioni.\nPi fàrilu cumpàriri, hai a canciari a manu dda pàggina.\n[[$1|thumb]]",
        "fileexists-extension": "Nu file cûn nomu simili già esisti: [[$2|thumb]]\n* Nomu dû file carricannu: <strong>[[:$1]]</strong>\n* Nomu dû file esistenti: <strong>[[:$2]]</strong>\nForsi voi scègghîri un nomu cchiù' distintivu?",
        "fileexists-thumbnail-yes": "Lu file carricato sembra èssiri lu risurtatu di n'antiprima ''(thumbnail)''. [[$1|thumb]]\nVirificari, pi cunfruntu, lu file <strong>[[:$1]]</strong>.\nSiduu si tratta dâ stissa mmagini, nte dimenzioni urigginali, nun è nicissariu carricara àutri antiprimi.",
        "file-thumbnail-no": "Lu nomu dô file accumenza cu <strong>$1</strong>.\nPari quinni èssiri lu risurtatu di n'antiprima ''(thumbnail)''.\nSiddu si disponi dâ mmàggini ntâ risuluzzioni urigginali, si prega di carricàrila. 'N casu cuntrariu, si prega di canciari lu nomu dô file.",
        "file-exists-duplicate": "Stu file è na copia duppiuni {{PLURAL:$1|dû|dî}} file ccà di sècutu:",
        "file-deleted-duplicate": "Nu file lu stissu comu a chistu file ([[:$1]]) vinni scanciallatu prima di ora. S'aviss'a cuntrullari la stòria e lu picchì dâ scancillazzioni dû file prima di ri-caricàrilu.",
        "file-deleted-duplicate-notitle": "Nu file idènticu a' chistu hâ statu cancillatu, e u tìtulu fu supprimutu.\nTu avissi a' dumannari a' quarchidunu chi' havi a pussibbilità di vìdiri u cuntinutu dû file suppressu di valutari a situazzioni, prima di prucèdiri a' carricàrilu n'autra vota.",
-       "uploadwarning": "Avvirtimentu pû carricamentu",
-       "uploadwarning-text": "Cancia ccassutta la discrizzioni dû file e prova n'autra vota.",
+       "uploadwarning": "Avvisu pû carricamentu",
+       "uploadwarning-text": "Cancia ccassutta la discrizzioni dû file e prova n'àutra vota.",
        "savefile": "Sarva lu file",
        "uploaddisabled": "Li carricamenti sunnu disattivati.",
-       "copyuploaddisabled": "Lu carricamentu pi' menzu di URL è disattivatu.",
+       "copyuploaddisabled": "Lu carricamentu pi menzu d'URL è disattivatu.",
        "uploaddisabledtext": "Li carricamenti dî file sunnu disattivati.",
-       "php-uploaddisabledtext": "Li carricamenti dî file sunnu disattivati ntô PHP.\nPi' favuri cuntrolla la mpustazzioni file_uploads.",
-       "uploadscripted": "Stu file cunteni còdici HTML o di script, ca putissi èssiri ntirpitratu erruniamenti d'un browser web.",
-       "upload-scripted-pi-callback": "Nun si ponnu carricari file ca cuntènunu l'istruzzioni di prucessu xml-stylesheet.",
-       "uploaded-script-svg": "Futruvatu n'elimentu prugrammàbbili \"$1\" ntô file SVG carricatu.",
-       "uploaded-hostile-svg": "Futruvatu còdici CSS risicusu nta l'elimentu style dû file SVG carricatu.",
-       "uploaded-event-handler-on-svg": "Nun è cunsintutu di mpustari l'attribbuti gistura di eventi <code>$1=\"$2\"</code> ntê file SVG.",
-       "uploaded-href-attribute-svg": "Nun sunnu cunsintuti l'attribbuti href <code>&lt;$1 $2=\"$3\"&gt;</code> cu na distinazzioni ca nun è lucali (ad esempiu http://, javascript:, etc) ntê file SVG.",
-       "uploaded-href-unsafe-target-svg": "Futruvatu n'href cu na distinazzioni risicusa <code>&lt;$1 $2=\"$3\"&gt;</code> ntô file SVG carricatu.",
-       "uploaded-animate-svg": "Futruvata n'etichetta \"animate\" ca purrìa canciari href, adupirannu l'attribbutu \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code>, ntô file SVG carricatu.",
-       "uploaded-setting-event-handler-svg": "Lu mpustari l'attribbuti dî gistura di l'eventi veni bluccatu; futruvatu <code>&lt;$1 $2=\"$3\"&gt;</code> ntô file SVG carricatu.",
-       "uploaded-setting-href-svg": "L'adupirari l'etichetta \"set\" p'agghiùnciri n'attribbutu \"href\" a' l'elimentu ginituri veni bluccatu.",
-       "uploaded-wrong-setting-svg": "L'adupirari l'etichetta \"set\" p'agghiùnciri na distinazzioni rimota/data/script a n'attribbutu quali è jè, è bluccatu. Fu' truvatu <code>&lt;set to=\"$1\"&gt;</code> ntô file SVG carricatu.",
-       "uploaded-setting-handler-svg": "Lu còdici SVG ca mposta l'attribbutu \"handler\" a na distinazzioni rimota/data/script veni bluccatu. Futruvatu <code>$1=\"$2\"</code> ntô file SVG carricatu.",
-       "uploaded-remote-url-svg": "Lu còdici SVG ca mposta n'attribbutu style quali è jè versu di n'URL rimota veni bluccatu. Fu' truvatu <code>$1=\"$2\"</code> ntô file SVG carricatu.",
-       "uploaded-image-filter-svg": "Fu' truvatu nu filtru di mmàggini cu' URL <code>&lt;$1 $2=\"$3\"&gt;</code> ntô file SVG carricatu.",
+       "php-uploaddisabledtext": "Li carricamenti dî file sunnu disattivati ntô PHP.\nPi favuri cuntrolla la mpustazzioni file_uploads.",
+       "uploadscripted": "Stu file cunteni còdici HTML o di script, ca putissi èssiri ntirpitratu erroniamenti d'un browser web.",
+       "upload-scripted-pi-callback": "Nun si ponnu carricari file ca cuntèninu li struzzioni di prucessu xml-stylesheet.",
+       "uploaded-script-svg": "Fu attruvatu n'elimentu prugrammàbbili \"$1\" ntô file SVG carricatu.",
+       "uploaded-hostile-svg": "Fu attruvatu còdici CSS risicusu nta l'elimentu style dû file SVG carricatu.",
+       "uploaded-event-handler-on-svg": "Nun è cunzintutu di mpustari l'attribbuti gistura d'eventi <code>$1=\"$2\"</code> ntê file SVG.",
+       "uploaded-href-attribute-svg": "Nun sunnu cunzintuti l'attribbuti href <code>&lt;$1 $2=\"$3\"&gt;</code> cu na distinazzioni ca nun è lucali (p'esempiu http://, javascript:, etc) ntê file SVG.",
+       "uploaded-href-unsafe-target-svg": "Fu attruvatu n'href cu na distinazzioni risicusa <code>&lt;$1 $2=\"$3\"&gt;</code> ntô file SVG carricatu.",
+       "uploaded-animate-svg": "Fu attruvata n'etichetta \"animate\" ca purrìa canciari href, adupirannu l'attribbutu \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code>, ntô file SVG carricatu.",
+       "uploaded-setting-event-handler-svg": "Lu mpustari l'attribbuti dî gistura di l'eventi veni bluccatu; fu attruvatu <code>&lt;$1 $2=\"$3\"&gt;</code> ntô file SVG carricatu.",
+       "uploaded-setting-href-svg": "L'adupirari l'etichetta \"set\" p'agghiùnciri n'attribbutu \"href\" a l'elimentu ginituri veni bluccatu.",
+       "uploaded-wrong-setting-svg": "L'adupirari l'etichetta \"set\" p'agghiùnciri na distinazzioni rimota/data/script a n'attribbutu qualegghiè, è bluccatu. Fu attruvatu <code>&lt;set to=\"$1\"&gt;</code> ntô file SVG carricatu.",
+       "uploaded-setting-handler-svg": "Lu còdici SVG ca mposta l'attribbutu \"handler\" a na distinazzioni rimota/data/script veni bluccatu. Fu attruvatu <code>$1=\"$2\"</code> ntô file SVG carricatu.",
+       "uploaded-remote-url-svg": "Lu còdici SVG ca mposta n'attribbutu style qualegghiè versu di n'URL rimota veni bluccatu. Fu attruvatu <code>$1=\"$2\"</code> ntô file SVG carricatu.",
+       "uploaded-image-filter-svg": "Fu attruvatu nu filtru di mmàggini cu URL <code>&lt;$1 $2=\"$3\"&gt;</code> ntô file SVG carricatu.",
        "uploadscriptednamespace": "Stu file SVG cunteni nu namespace nun cunsintutu, \"$1\".",
        "uploadinvalidxml": "L'XML ntô file carricatu nun potti èssiri analizzatu sintatticamenti.",
        "uploadvirus": "Lu file cunteni un virus!\nDittagghî: $1",
-       "uploadjava": "Stu file è n'archiviu ZIP chi' cunteni nu file .class Java.\nCarricari file Java nun è cunsintutu picchì pirmèttunu d'aggirari li ristrizzioni di sicurezza.",
+       "uploadjava": "Stu file è n'archiviu ZIP chi cunteni nu file .class Java.\nCarricari file Java nun è cunzintutu pirchì pirmèttinu d'aggirari li ristrizzioni di sicurizza.",
        "upload-source": "File surgenti",
        "sourcefilename": "Nomu dû file surgenti:",
        "sourceurl": "URL surgenti:",
        "filewasdeleted": "Nu file cu stu nomu hà statu già carricatu e cancillatu n passatu. Virificari $1 prima di carricàrilu di novu.",
        "filename-bad-prefix": "Lu nomu dô file chi stai carricannu ncigna cu '''\"$1\"''', chi è nu nomu non descrittivu assignatu, di solitu, automaticamenti dê màchini fotugràfici diggitali. Pi favuri scegghia nu nomu cchiù descrtittivu pi lu tò file.",
        "filename-prefix-blacklist": " #<!-- dassa sta lìnia comu è già --> <pre>\n# Chista di sèquitu è la sintassi:\n#   * Tutti li scritti a pàrtiri dô carattiri \"#\" sugnu commenti\n#   * Tutti li lìnii non vacanti sugnu prefissi pi tipici nomi di file assignati automaticamenti dê màchini fotugràfici diggitali\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # arcuni cellulari\nIMG # genericu\nJD # Jenoptik\nMGP # Pentax\nPICT # arcuni\n #</pre> <!-- dassa sta lìnia comu è già -->",
-       "upload-success-subj": "Carricamentu rinisciutu",
-       "upload-success-msg": "Lu to carricamentu di [$2] riniscìu. Ccà cc'è lu file carricatu: [[:{{ns:file}}:$1]]",
+       "upload-success-subj": "Carricamentu arrinisciutu",
+       "upload-success-msg": "Lu tò carricamentu di [$2] arriniscìu. Ccà c'è lu file carricatu: [[:{{ns:file}}:$1]]",
        "upload-failure-subj": "Prubblema ntô carricamentu",
        "upload-failure-msg": "Mmattìu un prubblema ntô to carricamentu di [$2]:\n\n$1",
        "upload-warning-subj": "Avvirtimentu pû carricamentu",
        "upload-proto-error": "Protucollu erratu",
        "upload-proto-error-text": "Pi l'upload rimotu è nicissariu spicificari URL ca nìzzianu cu <code>http://</code> oppuru <code>ftp://</code>.",
        "upload-file-error": "Erruri nternu",
-       "upload-file-error-text": "S'hâ' virificatu n'erruri nternu duranti la criazzioni dûn file timpuraniu supra ô server.\nPi' favuri cuntatta n'[[Special:ListUsers/sysop|amministraturi di sistema]].",
+       "upload-file-error-text": "Si virificau n'erruri nternu duranti la criazzioni dûn file timpuràniu supra ô server.\nPi favuri cuntatta n'[[Special:ListUsers/sysop|amministraturi di sistema]].",
        "upload-misc-error": "Erruri nun idintificatu pi l'upload",
        "upload-misc-error-text": "S'hà virificatu un erruri nun idintificatu duranti lu carricamentu dû file. Virificari ca la URL è curretta e accissìbbili e pruvari di novu. Siddu lu prubbrema pirsisti, cuntattari un amministraturi di sistema.",
        "upload-too-many-redirects": "L'URL cuntineva troppi redirect",
-       "upload-http-error": "Mmattìu n'erruri HTTP: $1",
-       "upload-copy-upload-invalid-domain": "Lu carricamentu di copî nun è cunsintutu di stu duminiu.",
+       "upload-http-error": "Ammattìu n'erruri HTTP: $1",
+       "upload-copy-upload-invalid-domain": "Lu carricamentu di copî nun è cunzintutu di stu duminiu.",
+       "upload-dialog-title": "Carricamentu dûn file",
+       "upload-dialog-error": "Ammattìu n'erruri",
+       "upload-dialog-warning": "Ammattìu n'avvisu",
+       "upload-dialog-button-cancel": "Annulla",
+       "upload-dialog-button-done": "Finutu",
+       "upload-dialog-button-save": "Sarva",
+       "upload-dialog-button-upload": "Càrrica",
+       "upload-dialog-label-select-file": "Scegghi lu file",
+       "upload-dialog-label-infoform-title": "Dittagghî",
+       "upload-dialog-label-infoform-name": "Nomu",
+       "upload-dialog-label-infoform-description": "Discrizzioni",
+       "upload-dialog-label-usage-title": "Usu",
+       "upload-dialog-label-usage-filename": "Nomu dû file",
        "backend-fail-stream": "Nun fu pussìbbili trasmèttiri lu file \"$1\".",
        "backend-fail-backup": "Nun fu' pussìbbili fari na copia di riserva dû file \"$1\".",
        "backend-fail-notexists": "Lu file $1 nun esisti.",
-       "backend-fail-hashes": "Nun fu' pussìbbili ottèniri l'hash dî file pi' fari lu cunfruntu.",
+       "backend-fail-hashes": "Nun fu pussìbbili ottèniri l'hash dî file pi fari lu cunfruntu.",
        "backend-fail-notsame": "Già esisti un file nun idènticu a' \"$1\".",
        "backend-fail-invalidpath": "\"$1\" nun è un caminu d'archiviazzioni vàlidu.",
        "backend-fail-delete": "Nun fu pussìbbili cancillari lu file \"$1\".",
-       "backend-fail-describe": "Nun fu' pussìbbili canciari li metadati dû file \"$1\".",
+       "backend-fail-describe": "Nun fu pussìbbili canciari li metadati dû file \"$1\".",
        "backend-fail-alreadyexists": "Lu file \"$1\" già esisti.",
-       "backend-fail-store": "Nun fu' pussìbbili mimurizzari lu file \"$1\" nta \"$2\".",
-       "backend-fail-copy": "Nun fu' pussìbbili cupiari lu file \"$1\" nta \"$2\".",
-       "backend-fail-move": "Nun fu' pussìbbili spustari lu file \"$1\" nta \"$2\".",
-       "backend-fail-opentemp": "Nun fu pussìbbili àpriri lu file timpuraniu.",
+       "backend-fail-store": "Nun fu pussìbbili mimurizzari lu file \"$1\" nta \"$2\".",
+       "backend-fail-copy": "Nun fu pussìbbili cupiari lu file \"$1\" nta \"$2\".",
+       "backend-fail-move": "Nun fu pussìbbili spustari lu file \"$1\" nta \"$2\".",
+       "backend-fail-opentemp": "Nun fu pussìbbili gràpiri lu file timpuràniu.",
        "backend-fail-writetemp": "Nun fu' pussìbbili scrìviri ntô file timpuraniu.",
-       "backend-fail-closetemp": "Nun fu pussìbbili chiùdiri lu file timpuraniu.",
-       "backend-fail-read": "Nun fu' pussìbbili lèggiri lu file \"$1\".",
+       "backend-fail-closetemp": "Nun fu pussìbbili chiùdiri lu file timpuràniu.",
+       "backend-fail-read": "Nun fu pussìbbili lèggiri lu file \"$1\".",
        "backend-fail-create": "Nun fu pussìbbili scrìviri lu file \"$1\".",
-       "backend-fail-maxsize": "Nun fu' pussìbbili scrìviri lu file \"$1\" picchì è cchiu' grossu di {{PLURAL:$2|un byte|$2 byte}}.",
-       "backend-fail-readonly": "U backend di mimurizzazzioni \"$1\" pi' com'ora è a' sula littura. La spiegazzioni data è: \"<em>$2</em>\"",
-       "backend-fail-synced": "Lu file \"$1\" si trova nta nu statu incoerenti tra dî backend di mimurizzazzioni interni.",
-       "backend-fail-connect": "Nun fu' pussìbbili culligàrisi ô backend di mimurizzazzioni \"$1\".",
-       "backend-fail-internal": "Mmattìu n'erruri scanusciutu ntô backend di mimurizzazzioni \"$1\".",
-       "backend-fail-contenttype": "Nun fu' pussìbbili ditirminari lu tipu di cuntinutu dû file di mimurizzari nta \"$1\".",
-       "backend-fail-batchsize": "U backend di mimurizzazzioni ricivìu na nfurnata di {{PLURAL:$1|una opirazzioni|$1 opirazzioni}} tra file; però lu so lìmiti è di {{PLURAL:$2|na sula opirazzioni|$2 opirazzioni}}.",
-       "backend-fail-usable": "Nun fu' pussìbbili lèggiri o scrìviri lu file \"$1\" pi' causa di pirmissi nsufficienti o cartelli/cuntinituri mancanti.",
+       "backend-fail-maxsize": "Nun fu pussìbbili scrìviri lu file \"$1\" pirchì è cchiù grossu di {{PLURAL:$2|un byte|$2 byte}}.",
+       "backend-fail-readonly": "Lu backend di mimurizzazzioni \"$1\" pi com'ora è n littura sula. La spigazzioni data è: \"<em>$2</em>\"",
+       "backend-fail-synced": "Lu file \"$1\" s'attrova nta nu statu nun cuerenti tra dî backend di mimurizzazzioni nterni.",
+       "backend-fail-connect": "Nun fu pussìbbili culligàrisi ô supportu di mimurizzazzioni \"$1\".",
+       "backend-fail-internal": "Si virificau n'erruri scanusciutu ntô supportu di mimurizzazzioni \"$1\".",
+       "backend-fail-contenttype": "Nun fu pussìbbili ditirminari lu tipu di cuntinutu dû file di mimurizzari nti \"$1\".",
+       "backend-fail-batchsize": "Lu backend di mimurizzazzioni arricivìu na nfurnata di {{PLURAL:$1|una opirazzioni|$1 opirazzioni}} tra file; pirò lu sò lìmiti è di {{PLURAL:$2|na sula opirazzioni|$2 opirazzioni}}.",
+       "backend-fail-usable": "Nun fu pussìbbili lèggiri o scrìviri lu file \"$1\" a càusa di pirmissi nzufficienti o cartelli/cuntinituri ammancanti.",
        "filejournal-fail-dbconnect": "Nun fu' pussìbbili culligàrisi â basi di dati giurnali dû backend di mimurizzazzioni \"$1\".",
-       "filejournal-fail-dbquery": "Nun fu' pussìbbili aggiurnari la basi di dati giurnali dû backend di mimurizzazzioni \"$1\".",
+       "filejournal-fail-dbquery": "Nun fu pussìbbili aggiurnari la basi di dati giurnali dû backend di mimurizzazzioni \"$1\".",
        "lockmanager-notlocked": "Nun fu' pussìbbili sbluccari \"$1\"; nun è bluccatu.",
-       "lockmanager-fail-closelock": "Nun fu' pussìbbili chiùdiri lu file di bloccu di \"$1\".",
-       "lockmanager-fail-deletelock": "Nun fu' pussìbbili cancillari lu file di bloccu di \"$1\".",
+       "lockmanager-fail-closelock": "Nun fu pussìbbili chiùdiri lu file di bloccu di \"$1\".",
+       "lockmanager-fail-deletelock": "Nun fu pussìbbili cancillari lu file di bloccu di \"$1\".",
        "lockmanager-fail-acquirelock": "Nun fu' pussìbbili pigghiari pussèssu dû bloccu di \"$1\".",
-       "lockmanager-fail-openlock": "Nun fu' pussìbbili àpriri lu file di bloccu di \"$1\".",
-       "lockmanager-fail-releaselock": "Nun fu' pussibbili arrènniri lu bloccu di \"$1\".",
+       "lockmanager-fail-openlock": "Nun fu pussìbbili gràpiri lu file di bloccu di \"$1\".",
+       "lockmanager-fail-releaselock": "Nun fu pussibbili arrènniri lu bloccu di \"$1\".",
        "lockmanager-fail-db-bucket": "Nun fu' pussìbbili cuntattàri abbastanza basi di dati di bloccu ntô bucket $1.",
-       "lockmanager-fail-db-release": "Nun fu' pussìbbili arrènniri li blocchi dâ basi di dati $1.",
+       "lockmanager-fail-db-release": "Nun fu pussìbbili arrènniri li blocchi dâ basi di dati $1.",
        "lockmanager-fail-svr-acquire": "Nun fu' pussìbbili pigghiari pussessu dî blocchi dû server $1.",
-       "lockmanager-fail-svr-release": "Nun fu' pussìbbili arrènniri li blocchi dû server $1.",
+       "lockmanager-fail-svr-release": "Nun fu pussìbbili arrènniri li blocchi dû server $1.",
        "zip-file-open-error": "Mmattìu n'erruri nta l'apirtura dû file pî cuntrolli di ZIP.",
        "zip-wrong-format": "Lu file spicificatu nun era nu file ZIP.",
-       "zip-bad": "Lu file è nu file ZIP chi' è ruinatu o è illiggìbbili pi' quarchi' n'autru mutivu.\nNun si po' cuntrullari bona la so sicurizza.",
-       "zip-unsupported": "Lu file è nu file ZIP chi' cunteni carattirìstichi ZIP chi' nun su' suppurtati dâ MediaWiki.\nNun si po' cuntrullari bona la so sicurizza.",
+       "zip-bad": "Lu file è nu file ZIP chi è ruinatu o nun è liggìbbili pi quarchi n'àutru mutivu.\nNun si pò cuntrullari bona la sò sicurizza.",
+       "zip-unsupported": "Lu file è nu file ZIP chi cunteni carattirìstichi ZIP chi nun sù suppurtati dâ MediaWiki.\nNun si pò cuntrullari bona la sò sicurizza.",
        "uploadstash": "Ammucciàgghia dî carricamenti",
-       "uploadstash-summary": "Sta pàggina duna accessu ê file chi' furu carricati, o si stannu carricannu, però ancora nun hannu statu pubblicati ntâ wiki. Sti file nun su' visìbbili a' nuddu sparti di cu li carricau.",
+       "uploadstash-summary": "Sta pàggina duna accessu ê file chi foru carricati, o si stannu carricannu, pirò ancora nun foru pubblicati ntâ wiki. Sti file nun sù visìbbili a nuddu sparti di cui li carricau.",
        "uploadstash-clear": "Cancella li file nta l'ammucciagghia",
        "uploadstash-nofiles": "Nun hai nuddu file nta l'ammucciagghia.",
-       "uploadstash-badtoken": "St'azzioni nun riniscìu, forsi picchì li to cridinziali di mudìfica scaderu. Prova n'autra vota.",
-       "uploadstash-errclear": "La cancillazzioni dî file nun riniscìu.",
+       "uploadstash-badtoken": "St'azzioni nun arriniscìu, forsi pirchì li tò cridinziali di canciamentu scaderu. Prova n'àutra vota.",
+       "uploadstash-errclear": "La cancillazzioni dî file nun arriniscìu.",
        "uploadstash-refresh": "Aggiorna la lista dî file",
        "invalid-chunk-offset": "Offset ntô chunk nun vàlidu",
        "img-auth-accessdenied": "Accessu nigatu",
-       "img-auth-nopathinfo": "Variàbbili PATH_INFO mancanti.\nLu to server nun è mpustatu pi' passari sta nfurmazzioni.\nPurrìa èssiri basatu supra a' CGI e nun po' suppurtari img_auth.\nTalìa https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
-       "img-auth-notindir": "Lu caminu dumannatu nun è ntâ cartella cunfigurata pî carricamenti.",
-       "img-auth-badtitle": "Nun fu' pussìbbili custruiri nu tìtulu vàlidu a' pàrtiri di \"$1\".",
+       "img-auth-nopathinfo": "Variàbbili PATH_INFO ammancanti.\nLu tò server nun è mpustatu pi passari sta nfurmazzioni.\nPurrìa èssiri basatu supra a CGI e nun pò suppurtari img_auth.\nTalìa https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+       "img-auth-notindir": "Lu caminu addumannatu nun è ntâ cartella cunfigurata pî carricamenti.",
+       "img-auth-badtitle": "Nun fu pussìbbili custruiri nu tìtulu vàlidu a pàrtiri di \"$1\".",
        "img-auth-nologinnWL": "Nun si' trasutu e \"$1\" nun è ntâ lista janca.",
        "img-auth-nofile": "Lu file \"$1\" nun esisti.",
        "img-auth-isdir": "Stai pruvannu a' accèdiri a' na cartella, \"$1\".\nE' cunsintutu l'accessu sulu ê file.",
        "http-invalid-scheme": "L'URL cu' schema \"$1\" nun su' suppurtati.",
        "http-request-error": "A richiesta HTTP fallìu pi' causa di n'erruri scanusciutu.",
        "http-read-error": "Erruri di littura HTTP.",
-       "http-timed-out": "La richiesta HTTP scadìu.",
+       "http-timed-out": "L'addumannata HTTP scadìu.",
        "http-curl-error": "Erruri ntô scarricamentu di l'URL: $1",
-       "http-bad-status": "Mmattìu nu prubblema duranti la richiesta HTTP: $1 $2",
-       "upload-curl-error6": "Nun fu pussìbbili ragghiùnciri l'URL",
-       "upload-curl-error6-text": "Nun fu' pussìbbili ragghiùnciri l'URL ca spicificasti.\nCuntrolla megghiu ca l'URL è scritta bona e ca lu situ chi' la servi funziona.",
+       "http-bad-status": "Ammattìu nu prubblema duranti l'addumannata HTTP: $1 $2",
+       "upload-curl-error6": "Nun fu pussìbbili jùnciri l'URL",
+       "upload-curl-error6-text": "Nun fù pussìbbili jùnciri l'URL ca spicificasti.\nCuntrolla megghiu ca l'URL è scritta bona e ca lu situ chi la servi funziona.",
        "upload-curl-error28": "Tempu scadutu pû carricamentu",
-       "upload-curl-error28-text": "Lu situ rimotu cci stesi troppu tempu a' rispùnniri.\nPi' favuri cuntrolla ca lu situ funziona, aspetta un pocu e ppoi prova n'autra vota.\nPoi cunsiddirari di pruvari ntôn mumentu quannu c'è cchiu' picca tràficu.",
+       "upload-curl-error28-text": "Lu situ rimotu ci stesi troppu tempu a arrispùnniri.\nPi favuri cuntrolla ca lu situ funziona, aspetta un pocu e appoi prova n'àutra vota.\nPoi cunziddirari di pruvari ntôn mumentu quannu c'è cchiù picca tràficu.",
        "license": "Licenza d'usu:",
        "license-header": "Licenza",
        "nolicense": "Nudda spicificata",
        "licenses-edit": "Cancia l'opzioni dâ licenza",
        "license-nopreview": "(Antiprima nun dispunìbbili)",
-       "upload_source_url": "(lu file chi' scigghîsti di n'URL vàlida e pubblicamenti accissìbbili)",
-       "upload_source_file": "(lu file chi' scigghîsti supra ô to computer)",
+       "upload_source_url": "(lu file chi scigghisti di n'URL vàlida e pubblicamenti accissìbbili)",
+       "upload_source_file": "(lu file chi scigghisti supra ô tò computer)",
        "listfiles-delete": "cancella",
        "listfiles-summary": "Sta pàggina spiciali ammustra tutti li file carricati.",
        "listfiles_search_for": "Ricerca dâ mmàggini di nomu:",
-       "listfiles-userdoesnotexist": "Nun cc'è riggistratu un cuntu a' nomu di l'utenti \"$1\".",
+       "listfiles-userdoesnotexist": "Nun c'è riggistratu un cuntu a nomu di l'utenti \"$1\".",
        "imgfile": "file",
        "listfiles": "Alencu dî file",
        "listfiles_thumb": "Miniatura",
        "listfiles_size": "Grannizza",
        "listfiles_description": "Discrizzioni",
        "listfiles_count": "Virsioni",
-       "listfiles-show-all": "Includi li virsioni vecchî dî mmàggini",
+       "listfiles-show-all": "Ncludi li virsioni vecchî dî mmàggini",
        "listfiles-latestversion": "Virsioni attuali",
        "listfiles-latestversion-yes": "Sì",
        "listfiles-latestversion-no": "No",
        "file-anchor-link": "File",
        "filehist": "Crunuluggìa dû file",
-       "filehist-help": "Clicca na data/ura pi' vìdiri lu file comu si prisintava tannu.",
+       "filehist-help": "Clicca na data/ura pi vìdiri lu file comu si prisintava tannu.",
        "filehist-deleteall": "cancella tuttu",
        "filehist-deleteone": "cancella",
        "filehist-revert": "riprìstina",
        "filehist-comment": "Cummentu",
        "imagelinks": "Usu dû file",
        "linkstoimage": "{{PLURAL:$1|La pàggina siquenti richiàma|Li $1 pàggini siquenti richiàmanu}} stu file:",
-       "linkstoimage-more": "Cci su' cchiu' ssai di $1 {{PLURAL:$1|pàggina|pàggini}} ca richiàmunu stu file.\nLa lista ccassutta ammustra sulu {{PLURAL:$1|la prima pàggina|li primi $1 pàggini}}.\nSi po' puru a' vìdiri [[Special:WhatLinksHere/$2|na lista cumpleta]].",
+       "linkstoimage-more": "Ci sù cchiossai di $1 {{PLURAL:$1|pàggina|pàggini}} ca richiàmanu stu file.\nLa lista ccassutta ammustra sulu {{PLURAL:$1|la prima pàggina|li primi $1 pàggini}}.\nSi pò puru vìdiri [[Special:WhatLinksHere/$2|na lista cumpleta]].",
        "nolinkstoimage": "Nudda pàggina richiama stu file.",
-       "morelinkstoimage": "Ammustra [[Special:WhatLinksHere/$1|autri lijami]] versu di stu file.",
+       "morelinkstoimage": "Ammustra [[Special:WhatLinksHere/$1|àutri lijami]] versu di stu file.",
        "linkstoimage-redirect": "$1 (rimannu ô file) $2",
-       "duplicatesoffile": "{{PLURAL:$1|Stu|Sti $1}} file {{PLURAL:$1|è nu dupppiuni|sunnu duppiuni}} di st'autru file ([[Special:FileDuplicateSearch/$2|cchiù dittagli]]):",
-       "sharedupload": "Stu file veni di $1 e purrìa èssiri adupiratu di autri pruggetti.",
-       "sharedupload-desc-there": "Stu file veni di $1 e purrìa èssiri adupiratu di autri pruggetti.\nTalìari la so [$2 pàggina di discrizzioni] pi' autri nfurmazzioni.",
-       "sharedupload-desc-here": "Stu file veni di $1 e purrìa èssiri adupiratu di autri pruggetti.\nAppressu veni ammustrata la discrizioni prisenti ntâ so [$2 pàggina di discrizzioni].",
-       "sharedupload-desc-edit": "Stu file veni di $1 e purrìa èssiri adupiratu di autri pruggetti.\nForsi ti cunveni canciari la so discrizzioni ntâ so [$2 pàggina di discrizzioni] dda.",
-       "sharedupload-desc-create": "Stu file veni di $1 e purrìa èssiri adupiratu di autri pruggetti.\nForsi ti cunveni canciari a so discrizzioni ntâ so [$2 pàggina di discrizzioni] dda.",
-       "filepage-nofile": "Nun esisti nuddu file cu' stu nomu.",
-       "filepage-nofile-link": "Nun esisti nuddu file cu' stu nomu, però [$1 lu poi carricari].",
+       "duplicatesoffile": "{{PLURAL:$1|Stu|Sti $1}} file {{PLURAL:$1|è nu dupppiuni|sunnu duppiuni}} di st'àutru file ([[Special:FileDuplicateSearch/$2|cchiù dittagghi]]):",
+       "sharedupload": "Stu file veni di $1 e purrìa èssiri adupiratu di àutri pruggetti.",
+       "sharedupload-desc-there": "Stu file veni di $1 e purrìa èssiri adupiratu di àutri pruggetti.\nTalìari la sò [$2 pàggina di discrizzioni] p'àutri nfurmazzioni.",
+       "sharedupload-desc-here": "Stu file veni di $1 e purrìa èssiri adupiratu di àutri pruggetti.\nAppressu veni ammustrata la discrizioni prisenti ntâ sò [$2 pàggina di discrizzioni].",
+       "sharedupload-desc-edit": "Stu file veni di $1 e purrìa èssiri adupiratu di àutri pruggetti.\nForsi ti cunveni canciari la sò discrizzioni ntâ sò [$2 pàggina di discrizzioni] ddà.",
+       "sharedupload-desc-create": "Stu file veni di $1 e purrìa èssiri adupiratu di àutri pruggetti.\nForsi ti cunveni canciari la sò discrizzioni ntâ sò [$2 pàggina di discrizzioni] ddà.",
+       "filepage-nofile": "Nun esisti nuddu file cu stu nomu.",
+       "filepage-nofile-link": "Nun esisti nuddu file cu stu nomu, pirò [$1 lu poi carricari].",
        "uploadnewversion-linktext": "Càrrica na virsioni nova di stu file",
        "shared-repo-from": "di $1",
        "shared-repo": "nu dipòsitu cunnivisu",
        "filerevert-badversion": "Nun esistanu virsiona locali pricidenti dô file cû timestamp richiestu.",
        "filedelete": "Cancella $1",
        "filedelete-legend": "Cancella lu file",
-       "filedelete-intro": "Stai cancillannu lu file <strong>[[Media:$1|$1]]</strong> cu' tutta la so crunuluggìa.",
+       "filedelete-intro": "Stai cancillannu lu file <strong>[[Media:$1|$1]]</strong> cu tutta la sò crunuluggìa.",
        "filedelete-intro-old": "Stai cancillannu la virsioni di <strong>[[Media:$1|$1]]</strong> dû [$4 $2 ê $2].",
        "filedelete-comment": "Mutivu:",
        "filedelete-submit": "Cancella",
        "filedelete-success": "Lu file <strong>$1</strong> fu cancillatu.",
-       "filedelete-success-old": "La virsioni dû file <strong>[[Media:$1|$1]]</strong> dû $2 ê $3 fu' cancillata.",
+       "filedelete-success-old": "La virsioni dû file <strong>[[Media:$1|$1]]</strong> dû $2 ê $3 fu cancillata.",
        "filedelete-nofile": "<strong>$1</strong> nun esisti.",
-       "filedelete-nofile-old": "Nun cc'è archiviata nudda virsioni di <strong>$1</strong> chi' havi l'attribbuta spicificati.",
-       "filedelete-otherreason": "Autru o ultiriuri mutivu:",
-       "filedelete-reason-otherlist": "Autru mutivu",
-       "filedelete-reason-dropdown": "*Mutivi cchiu' cumuni pâ cancillazzioni\n** Viulazzioni dû drittu d'auturi\n** File duppiuni",
+       "filedelete-nofile-old": "Nun c'è archiviata nudda virsioni di <strong>$1</strong> chi havi l'attribbuti spicificati.",
+       "filedelete-otherreason": "Àutru o ultiriuri mutivu:",
+       "filedelete-reason-otherlist": "Àutru mutivu",
+       "filedelete-reason-dropdown": "*Mutivi cchiù cumuni pâ cancillazzioni\n** Viulazzioni dû drittu d'auturi\n** File duppiuni",
        "filedelete-edit-reasonlist": "Cancia li mutivi dâ cancillazzioni",
-       "filedelete-maintenance": "La cancillazzioni e lu riprìstinu dî file su' timpuraniamenti disattivati duranti la manutinzioni.",
-       "filedelete-maintenance-title": "Impussìbbili cancillari lu file",
-       "mimesearch": "Risciduta pi' tipu MIME",
+       "filedelete-maintenance": "La cancillazzioni e lu riprìstinu dî file sù timpuraniamenti disattivati duranti la manutinzioni.",
+       "filedelete-maintenance-title": "Mpussìbbili cancillari lu file",
+       "mimesearch": "Arricerca pi tipu MIME",
        "mimesearch-summary": "Sta pàggina cunzenti di filtrari li file 'n basi a lu tipu MIME. Nziriri la stringa di ricerca ntâ forma tipu/suttatipu o tipu/*, p'asempiu <code>image/jpeg</code>.",
        "mimetype": "Tipu MIME:",
        "download": "scàrrica",
        "unwatchedpages": "Pàggini nun taliati",
        "listredirects": "Alencu di tutti li rimanni",
        "listduplicatedfiles": "Lista dî file cu' duppiuni",
-       "listduplicatedfiles-summary": "Chista è na lista dî file unni la virsioni cchiu' nova è nu duppiuni dâ virsioni cchiu' nova di quarchi' autru file. Sulu li file lucali su' pigghiati a' cunsiddirazzioni.",
+       "listduplicatedfiles-summary": "Chista è na lista dî file unni la virsioni cchiù nova è nu duppiuni dâ virsioni cchiù nova di quarchi àutru file. Sulu li file lucali sù pigghiati a cunziddirazzioni.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] havi [[$3|{{PLURAL:$2|nu duppiuni|$2 duppiuna}}]].",
        "unusedtemplates": "Template nun usati",
-       "unusedtemplatestext": "Sta pàggina elenca tutti li pàggini nto namespace {{ns:template}} ca nun sunnu nclusi nta nudda autra pàggina.\nPrima di cancillàrili è megghiu cuntrullari ca nun hannu autri lijami ca cci tràsunu.",
-       "unusedtemplateswlh": "autri lijami",
+       "unusedtemplatestext": "Sta pàggina elenca tutti li pàggini ntô namespace {{ns:template}} ca nun sunnu nclusi nta nudda àutra pàggina.\nPrima di cancillàrili è megghiu cuntrullari ca nun hannu àutri lijami ca ci tràsinu.",
+       "unusedtemplateswlh": "àutri lijami",
        "randompage": "Na pàggina a' muzzu",
        "randompage-nopages": "Nun cci su' pàggini {{PLURAL:$2|nta stu namespace|nta sti namespace}}: $1.",
        "randomincategory": "Na pàggina a' muzzu nta na catigurìa",
        "randomincategory-legend": "Pàggina a' muzzu nta na catigurìa",
        "randomincategory-submit": "Vai",
        "randomredirect": "Nu rimannu a' muzzu",
-       "randomredirect-nopages": "Nun cc'è nuddu rimannu ntô namespace \"$1\".",
+       "randomredirect-nopages": "Nun c'è nuddu rimannu ntô namespace \"$1\".",
        "statistics": "Statìstichi",
        "statistics-header-pages": "Statìstichi dî pàggini",
        "statistics-header-edits": "Statìstichi dî canciamenti",
        "statistics-header-users": "Statìstichi di l'utenti",
-       "statistics-header-hooks": "Autri statìstichi",
+       "statistics-header-hooks": "Àutri statìstichi",
        "statistics-articles": "Pàggini di cuntinutu",
        "statistics-pages": "Pàggini",
-       "statistics-pages-desc": "Tutti li pàggini dâ wiki, cu' puru chiddi di discussioni, li rimanni, etc.",
+       "statistics-pages-desc": "Tutti li pàggini dâ wiki, cu puru chiddi di discussioni, li rimanni, ecc.",
        "statistics-files": "File carricati",
        "statistics-edits": "Pàggini canciati di quannu {{SITENAME}} fu armatu",
-       "statistics-edits-average": "Media dî canciamenti pi' pàggina",
+       "statistics-edits-average": "Media dî canciamenti pi pàggina",
        "statistics-users": "[[Special:ListUsers|Utenti]] riggistrati",
        "statistics-users-active": "Utenti attivi",
-       "statistics-users-active-desc": "Utenti ch'hannu fattu quarchi' azzioni {{PLURAL:$1|nta l'ùltimu jornu|nta l'ùltimi $1 jorna}}",
+       "statistics-users-active-desc": "Utenti ca fìciru quarchi azzioni {{PLURAL:$1|nta l'ùrtimu jornu|nta l'ùrtimi $1 jorna}}",
        "pageswithprop": "Pàggini cu na prupietà di pàggina",
        "pageswithprop-legend": "Pàggini cu na prupietà di pàggina",
-       "pageswithprop-text": "Sta pàggina elenca li pàggini chi' adòpirunu na particulari prupietà di pàggina.",
+       "pageswithprop-text": "Sta pàggina elenca li pàggini chi adòpiranu na particulari prupità di pàggina.",
        "pageswithprop-prop": "Nomu dâ prupietà:",
        "pageswithprop-submit": "Vai",
-       "pageswithprop-prophidden-long": "valuri tistuali longu dâ prupietà ammucciatu ($1)",
-       "pageswithprop-prophidden-binary": "valuri binariu dâ prupietà ammucciatu ($1)",
+       "pageswithprop-prophidden-long": "valuri tistuali longu dâ prupità ammucciatu ($1)",
+       "pageswithprop-prophidden-binary": "valuri binariu dâ prupità ammucciatu ($1)",
        "doubleredirects": "Rimanni duppî",
-       "doubleredirectstext": "Sta pàggina alenca li pàggini chi' rimànnunu ad autri pàggini di rimannu.\nOgnin riga cunteni lijami versu lu primu e versu lu secunnu rimannu, sparti dâ distinazzioni dû secunnu rimannu, ca di sòlitu è la pàggina \"giusta\" unni avissi a' puntari macari lu primu rimannu.\nLi rimanni <del>sbarrati</del> hannu statu cunsati.",
+       "doubleredirectstext": "Sta pàggina elenca li pàggini chi rimànnanu a àutri pàggini di rimannu.\nOgni riga cunteni lijami versu lu primu e versu lu secunnu rimannu, sparti dâ distinazzioni dû secunnu rimannu, ca di sòlitu è la pàggina \"giusta\" unni avissi a puntari macari lu primu rimannu.\nLi rimanni <del>sbarrati</del> foru cunzati.",
        "double-redirect-fixed-move": "[[$1]] fu spustata.\nFu aggiurnata autumaticamenti e ora rimanna a [[$2]].",
-       "double-redirect-fixed-maintenance": "Cunsatu autumaticamenti nu rimannu duppiu di [[$1]] a' [[$2]] ntôn sirvizzu di manutinzioni.",
-       "double-redirect-fixer": "Cunsaturi dî rimanni",
+       "double-redirect-fixed-maintenance": "Cunzatu autumaticamenti nu rimannu duppiu di [[$1]] a [[$2]] ntôn sirvizzu di manutinzioni.",
+       "double-redirect-fixer": "Cunzaturi dî rimanni",
        "brokenredirects": "Rimanni rutti",
-       "brokenredirectstext": "Li rimanni siguenti pùntanu a' pàggini ca nun esìstinu:",
+       "brokenredirectstext": "Li rimanni siguenti pùntanu a pàggini ca nun esìstinu:",
        "brokenredirects-edit": "cancia",
        "brokenredirects-delete": "cancella",
-       "withoutinterwiki": "Pàggini senza lijami intir-linguìstici",
-       "withoutinterwiki-summary": "Li pàggini siguenti nun hannu lijami versu dî virsioni nta l'autri lingui.",
+       "withoutinterwiki": "Pàggini senza lijami nterlinguìstici",
+       "withoutinterwiki-summary": "Li pàggini siguenti nun hannu lijami versu dî virsioni nta l'àutri lingui.",
        "withoutinterwiki-legend": "Prifissu",
        "withoutinterwiki-submit": "Ammustra",
        "fewestrevisions": "Pàggini cu' cchiu' picca virsioni",
        "nrevisions": "$1 {{PLURAL:$1|rivisioni|rivisioni}}",
        "nimagelinks": "Adupiratu nta $1 {{PLURAL:$1|pàggina|pàggini}}",
        "ntransclusions": "adupiratu nta $1 {{PLURAL:$1|pàggina|pàggini}}",
-       "specialpage-empty": "Nun cci su' risultati pi' stu rennicuntu.",
+       "specialpage-empty": "Nun ci sù risurtati pi stu rennicuntu.",
        "lonelypages": "Pàggini òrfani",
-       "lonelypagestext": "Li pàggini ccassutta nun hannu lijami ca vèninu d'autri pàggini e nun su' trasclusi nta autri pàggini di {{SITENAME}}.",
+       "lonelypagestext": "Li pàggini ccassutta nun hannu lijami ca vèninu d'àutri pàggini e nun sù nclusi nta àutri pàggini di {{SITENAME}}.",
        "uncategorizedpages": "Pàggini nun catigurizzati",
        "uncategorizedcategories": "Catigurìi nun catigurizzati",
        "uncategorizedimages": "File nun catigurizzati",
        "unusedimages": "File nun usati",
        "wantedcategories": "Catigurìi addumannati",
        "wantedpages": "Pàggini addumannati",
-       "wantedpages-summary": "Elencu dî pàggini ca nun esìstunu però hannu lu maggiuri nùmmiru di ligami versu d'iddi, lassannu stari li pàggini chi' comu ligami versu d'iddi hannu sulu rimanni. P'aviri n'elencu dî pàggini ca nun esìstunu però hannu rimanni versu d'iddi, talìa [[{{#special:BrokenRedirects}}|l'elencu dî rimanni rutti]].",
-       "wantedpages-badtitle": "Tìtulu nun vàlidu ntô gruppu di risultati: $1",
+       "wantedpages-summary": "Elencu dî pàggini ca nun esìstinu pirò hannu lu maiuri nùmmiru di ligami versu d'iddi, lassannu stari li pàggini chi comu ligami versu d'iddi hannu sulu rimanni. P'aviri n'elencu dî pàggini ca nun esìstinu pirò hannu rimanni versu d'iddi, talìa [[{{#special:BrokenRedirects}}|l'elencu dî rimanni rutti]].",
+       "wantedpages-badtitle": "Tìtulu nun vàlidu ntô gruppu di risurtati: $1",
        "wantedfiles": "File addumannati",
-       "wantedfiletext-cat": "Li file ccassutta su' richiamati però nun esìstunu. Ntâ lista cci ponnu èssiri macari li file chi' stannu nta dipòsiti esterni, cu' tuttu chi' esìstunu. Sti fausi pusitivi sarrannu <del>sbarrati</del>. Sparti, li pàggini chi' nclùdunu file chi' nun esìstunu su' elincati nta [[:$1]].",
-       "wantedfiletext-cat-noforeign": "Li file ccassutta su' richiamati però nun esìstunu. Sparti, li pàggini chi' nclùdunu file chi' nun esìstunu su' elincati nta [[:$1]].",
-       "wantedfiletext-nocat": "Li file ccassutta su' richiamati però nun esìstunu. Ntâ lista cci ponnu èssiri macari li file chi' stannu nta dipòsiti esterni, cu' tuttu chi' esìstunu. Sti fausi pusitivi sarrannu <del>sbarrati</del>.",
-       "wantedfiletext-nocat-noforeign": "Li file ccassutta su' richiamati però nun esìstunu.",
+       "wantedfiletext-cat": "Li file ccassutta sù richiamati pirò nun esìstinu. Ntâ lista ci ponnu èssiri macari li file chi stannu nta dipòsiti esterni, cu tuttu chi esìstinu. Sti fàusi pusitivi sunnu <del>sbarrati</del>. Sparti, li pàggini chi nclùdinu file chi nun esìstinu sù elincati nta [[:$1]].",
+       "wantedfiletext-cat-noforeign": "Li file ccassutta sù richiamati pirò nun esìstinu. Sparti, li pàggini chi nclùdinu file chi nun esìstinu sù elincati nta [[:$1]].",
+       "wantedfiletext-nocat": "Li file ccassutta sù richiamati pirò nun esìstinu. Ntâ lista ci ponnu èssiri macari li file chi stannu nta dipòsiti esterni, cu tuttu chi esìstinu. Sti fàusi pusitivi sunnu <del>sbarrati</del>.",
+       "wantedfiletext-nocat-noforeign": "Li file ccassutta sù richiamati pirò nun esìstinu.",
        "wantedtemplates": "Template addumannati",
-       "mostlinked": "Pàggini cchiu' culligati",
-       "mostlinkedcategories": "Catigurìi Pcchiu' culligati",
-       "mostlinkedtemplates": "Pàggini cchiu' trasclusi",
-       "mostcategories": "Pàggini cu' cchiu' ssai catigurìi",
-       "mostimages": "File cchiu' culligati",
+       "mostlinked": "Pàggini cchiù culligati",
+       "mostlinkedcategories": "Catigurìi cchiù culligati",
+       "mostlinkedtemplates": "Pàggini cchiù nclusi",
+       "mostcategories": "Pàggini cu cchiossai catigurìi",
+       "mostimages": "File cchiù culligati",
        "mostinterwikis": "Pàggini cu' cchiu' ssai interwiki",
-       "mostrevisions": "Pàggini cu' cchiu' ssai virsioni",
+       "mostrevisions": "Pàggini cu cchiossai virsioni",
        "prefixindex": "Ìnnici secunnu un prifissu",
        "prefixindex-namespace": "Tutti li pàggini cûn prifissu (namespace $1)",
        "prefixindex-strip": "Leva li prifissi nta l'elencu",
        "shortpages": "Pàggini curti",
        "longpages": "Pàggini longhi",
        "deadendpages": "Pàggini senza nisciuta",
-       "deadendpagestext": "Li pàggini siguenti sunnu privi di lijami versu autri pàggini di {{SITENAME}}.",
+       "deadendpagestext": "Li pàggini siguenti sunnu privi di lijami versu àutri pàggini di {{SITENAME}}.",
        "protectedpages": "Pàggini prutetti",
-       "protectedpages-indef": "Sulu prutizzioni a' tempu innitirminatu",
-       "protectedpages-summary": "Sta pàggina elenca li pàggini già esistenti chi' comu ad ora su' prutetti. Pi' na lista dî tìtuli prutetti, chî quali vèni pruibbutu criari pàggini novi, talìa [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
-       "protectedpages-cascade": "Sulu prutizzioni a' cascata",
+       "protectedpages-indef": "Sulu prutizzioni nfiniti",
+       "protectedpages-summary": "Sta pàggina elenca li pàggini già esistenti chi comu a ora sù prutetti. Pi na lista dî tìtuli prutetti, chî quali vèni pruibbutu criari pàggini novi, talìa [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+       "protectedpages-cascade": "Sulu prutizzioni a cascata",
        "protectedpages-noredirect": "Ammuccia li rimanni",
-       "protectedpagesempty": "Pi' com'ora nun cc'è nudda pàggina prutetta cu' sti paràmitri.",
+       "protectedpagesempty": "Pi com'ora nun c'è nudda pàggina prutetta cu sti paràmitri.",
        "protectedpages-timestamp": "Data e ura",
        "protectedpages-page": "Pàggina",
        "protectedpages-expiry": "Scadenza",
        "protectedpages-unknown-timestamp": "Scanusciuti",
        "protectedpages-unknown-performer": "Utenti scanusciutu",
        "protectedtitles": "Tìtuli prutetti",
-       "protectedtitles-summary": "Sta pàggina elenca li tìtuli prutetti, chî quali vèni pruibbutu criari pàggini novi. Pi' na lista dî pàggini già esistenti chi' su' prutetti, talìa [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
-       "protectedtitlesempty": "Pi' com'ora nun cc'è nuddu tìtulu prutettu cu' sti paràmitri.",
+       "protectedtitles-summary": "Sta pàggina elenca li tìtuli prutetti, chî quali vèni pruibbutu criari pàggini novi. Pi na lista dî pàggini già esistenti chi sù prutetti, talìa [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitlesempty": "Pi com'ora nun c'è nuddu tìtulu prutettu cu sti paràmitri.",
        "listusers": "Lista di l'utenti",
        "listusers-editsonly": "Ammustra sulu l'utenti ca hannu cuntribbuti",
-       "listusers-creationsort": "Òrdina pi' data di criazzioni",
-       "listusers-desc": "Òrdina a' scìnniri",
-       "usereditcount": "$1 {{PLURAL:$1|cuntribbutu|cuntribbuta}}",
+       "listusers-creationsort": "Òrdina pi data di criazzioni",
+       "listusers-desc": "Òrdina a scìnniri",
+       "usereditcount": "$1 {{PLURAL:$1|cuntribbutu|cuntribbuti}}",
        "usercreated": "{{GENDER:$3|Criatu}} lu $1 ê $2",
        "newpages": "Pàggini novi",
        "newpages-username": "Utenti:",
        "ancientpages": "Pàggini cchiu' vecchî",
        "move": "Sposta",
        "movethispage": "Sposta sta pàggina",
-       "unusedimagestext": "Li file ccassutta esìstunu però nun sunnu ncurpurati nta nudda pàggina.\nAccura: autri siti web ponnu aviri lijami versu dûn file pi' menzu di URL diretti; li file addupirati a' sta manera putìssiru èssiri elincati ccassutta macari si' si nni fa' usu.",
-       "unusedcategoriestext": "Li siguenti pàggini di catigurìi esìstunu, però nudda autra pàggina o catigurìa nni fa' usu.",
+       "unusedimagestext": "Li file ccassutta esìstinu pirò nun sunnu ncurpurati nta nudda pàggina.\nAccura: àutri siti web ponnu aviri lijami versu dûn file pi menzu di URL diretti; li file addupirati a sta manera putìssiru èssiri elincati ccassutta macari si si nni fa usu.",
+       "unusedcategoriestext": "Li pàggini di catigurìi siguenti esìstinu, pirò nudda àutra pàggina o catigurìa nni fa usu.",
        "notargettitle": "Nudda distinazzioni",
        "notargettext": "Nun spicificasti na pàggina o puru n'utenti comu distinazzioni di st'opirazzioni.",
        "nopagetitle": "La pàggina di distinazzioni nun esisti",
        "nopagetext": "La pàggina ca spicificasti comu distinazzioni nun esisti.",
-       "pager-newer-n": "{{PLURAL:$1|1 cchiu' novu|$1 cchiu' novi}}",
-       "pager-older-n": "{{PLURAL:$1|1 cchiu' vecchî|$1 cchiu' vecchî}}",
+       "pager-newer-n": "{{PLURAL:$1|1 cchiù novu|$1 cchiù novi}}",
+       "pager-older-n": "{{PLURAL:$1|1 cchiù vecchî|$1 cchiù vecchî}}",
        "suppress": "Supravisuri",
        "querypage-disabled": "Sta pàggina spiciali fu' disattivata pi' mutivi di pristazzioni.",
-       "apihelp": "Guida a' l'API",
+       "apihelp": "Guida a l'API",
        "apihelp-no-such-module": "Mòdulu \"$\" nun truvatu.",
        "booksources": "Fonti libbrarî",
-       "booksources-search-legend": "Ricerca di fonti libbrarî",
+       "booksources-search-legend": "Arricerca di fonti libbrarî",
        "booksources-isbn": "Còdici ISBN:",
-       "booksources-search": "Va cerca",
-       "booksources-text": "Ccassutta cc'è n'elencu di lijami versu autri siti ca vìnninu libbra novi e usati, e ponnu aviri majuri nfurmazzioni a' prupòsitu dî libbra ca stai circannu:",
-       "booksources-invalid-isbn": "Lu còdici ISBN chi' spicificasti nun pari bonu; cuntrolla si' nun cci furu sbagghî di ricupiatura.",
+       "booksources-search": "Va arricerca",
+       "booksources-text": "Ccassutta c'è n'elencu di lijami versu àutri siti ca vìnninu libbra novi e usati, e ponnu aviri maiuri nfurmazzioni a prupòsitu dî libbra ca stai circannu:",
+       "booksources-invalid-isbn": "Lu còdici ISBN chi spicificasti nun pari bonu; cuntrolla si nun ci foru sbagghî di ricupiatura.",
        "specialloguserlabel": "Fattu di l'utenti:",
-       "speciallogtitlelabel": "Oggettu (tìtulu o utenti):",
-       "log": "Riggistra",
-       "all-logs-page": "Tutti li riggistra pubblici",
-       "alllogstext": "Prisintazzioni cumminata di tutti li riggistra dispunìbbili di {{SITENAME}}.\nPoi ristrìnciri la visuali silizziunannu nu tipu di riggistru, l'utenti ca fici l'azzioni (cuntunu majusculi e minusculi), o la pàggina ntirissata (cuntunu majusculi e minusculi puru).",
+       "speciallogtitlelabel": "Oggettu (tìtulu o {{ns:user}}:nomuutenti):",
+       "log": "Riggistri",
+       "all-logs-page": "Tutti li riggistri pùbblici",
+       "alllogstext": "Prisintazzioni cumminata di tutti li riggistri dispunìbbili di {{SITENAME}}.\nPoi ristrìnciri la visuali silizziunannu nu tipu di riggistru, l'utenti ca fici l'azzioni (cùntanu maiùsculi e minùsculi), o la pàggina ntirissata (cùntanu maiùsculi e minùsculi puru).",
        "logempty": "Nudda vuci currispunnenti ntô riggistru.",
        "log-title-wildcard": "Attrova tituli chi ncignanu cu",
        "showhideselectedlogentries": "Cancia la visibbilità dî vuci di riggistru scigghiuti",
        "allarticles": "Tutti li pàggini",
        "allinnamespace": "Tutti li pàggini dû namespace $1",
        "allpagessubmit": "Vai",
-       "allpagesprefix": "Ammustra li pàggini chi' accumènzanu cu':",
-       "allpagesbadtitle": "Lu tìtulu di pàggina spicificatu nun era vàlidu o avìa nu prifissu intir-linguìsticu o intir-wiki.\nPutissi cuntèniri unu o cchiu' ssai caràttiri chi' nun su' cunsintuti ntê tìtula.",
-       "allpages-bad-ns": "Lu namespace \"$1\" nun asisti supra a' {{SITENAME}}.",
+       "allpagesprefix": "Ammustra li pàggini chi accumènzanu cu:",
+       "allpagesbadtitle": "Lu tìtulu di pàggina spicificatu nun era vàlidu o avìa nu prifissu nterlinguìsticu o inter-wiki.\nPutissi cuntèniri unu o cchiossai caràttiri chi nun sù cunzintuti ntê tìtuli.",
+       "allpages-bad-ns": "Lu namespace \"$1\" nun esisti supra a {{SITENAME}}.",
        "allpages-hide-redirects": "Ammuccia li rimanni",
-       "cachedspecial-viewing-cached-ttl": "Stai taliannu na virsioni ntâ ''cache'' di sta pàggina, chi' po' èssiri vecchia nfinu a' $1.",
-       "cachedspecial-viewing-cached-ts": "Stai taliannu na virsioni ntâ ''cache'' di sta pàggina, chi' purrìa nun èssiri pirfittamenti aggiurnata.",
-       "cachedspecial-refresh-now": "Va talìa la cchiu' nova.",
+       "cachedspecial-viewing-cached-ttl": "Stai taliannu na virsioni ntâ ''cache'' di sta pàggina, chi pò èssiri vecchia nfinu a $1.",
+       "cachedspecial-viewing-cached-ts": "Stai taliannu na virsioni ntâ ''cache'' di sta pàggina, chi purrìa nun èssiri pirfettamenti aggiurnata.",
+       "cachedspecial-refresh-now": "Va talìa la cchiù nova.",
        "categories": "Catigurìi",
        "categoriespagetext": "{{PLURAL:$1|La catigurìa ccassutta cunteni|Li catigurìi ccassutta cuntèninu}} pàggini o file multimidiali.\nLi [[Special:UnusedCategories|catigurìi vacanti]] nun sunnu ammustrati ccà.\nTalìa macari li [[Special:WantedCategories|catigurìi addumannati]].",
-       "categoriesfrom": "Ammustra li catigurìi a' pàrtiri di:",
-       "special-categories-sort-count": "òrdina pi' cuntìggiu",
+       "categoriesfrom": "Ammustra li catigurìi a pàrtiri di:",
+       "special-categories-sort-count": "òrdina pi cuntiggiu",
        "special-categories-sort-abc": "ordina alfabbeticamenti",
-       "deletedcontributions": "Cuntribbuta di l'utenti cancillati",
-       "deletedcontributions-title": "Cuntribbuta di l'utenti cancillati",
-       "sp-deletedcontributions-contribs": "cuntribbuta",
-       "linksearch": "Risciduta dî lijami di fora",
-       "linksearch-pat": "Esprissioni di risciduta:",
+       "deletedcontributions": "Cuntribbuti di l'utenti cancillati",
+       "deletedcontributions-title": "Cuntribbuti di l'utenti cancillati",
+       "sp-deletedcontributions-contribs": "cuntribbuti",
+       "linksearch": "Arricerca dî lijami di fora",
+       "linksearch-pat": "Sprissioni d'arricerca:",
        "linksearch-ns": "Namespace:",
-       "linksearch-ok": "Arriscedi",
-       "linksearch-text": "Si ponnu adupirari li caràttiri matta, ad esempiu \"*.wikipedia.org\".\nCci voli almenu nu duminiu di primu liveddu, ad esempiu \"*.org\".<br />\n{{PLURAL:$2|Protucollu suppurtatu|Protucolli suppurtati}}: $1 (è pridifinutu http:// si' nun si nni spicìfica)",
+       "linksearch-ok": "Arricerca",
+       "linksearch-text": "Si ponnu adupirari li metacaràttiri, p'esempiu \"*.wikipedia.org\".\nCi voli armenu nu duminiu di primu liveddu, p'esempiu \"*.org\".<br />\n{{PLURAL:$2|Protucollu suppurtatu|Protucolli suppurtati}}: $1 (è pridifinutu http:// si nun si nni spicìfica)",
        "linksearch-line": "$1 è culligatu dâ pàggina $2",
-       "linksearch-error": "Li caràttiri matta ponnu appariri sulu ô principiu dû nomu host.",
-       "listusersfrom": "Ammustra l'utenti a' pàrtiri di:",
+       "linksearch-error": "Li metacaràttiri ponnu appariri sulu ô principiu dû nomu host.",
+       "listusersfrom": "Ammustra l'utenti a pàrtiri di:",
        "listusers-submit": "Ammustra",
        "listusers-noresult": "Nuddu utenti attruvatu.",
        "listusers-blocked": "(bluccatu)",
        "activeusers": "Lista di l'utenti attivi",
        "activeusers-intro": "Chista è na lista di l'utenti chi' fìciru na quarchi' attività {{PLURAL:$1|nta l'ùltimu jornu|nta l'ùltimi $1 jorna}}.",
        "activeusers-count": "$1 {{PLURAL:$1|azziòni|azziòna}} nta {{PLURAL:$3|l'ùltimu jornu|l'ùltimi $3 jorna}}",
-       "activeusers-from": "Ammustra l'utenti a' pàrtiri di:",
+       "activeusers-from": "Ammustra l'utenti a pàrtiri di:",
        "activeusers-hidebots": "Ammuccia li bot",
        "activeusers-hidesysops": "Ammuccia l'amministratura",
-       "activeusers-noresult": "Nuddu utenti truvatu.",
+       "activeusers-noresult": "Nuddu utenti attruvatu.",
        "listgrouprights": "Dritti di gruppa d'utenti",
-       "listgrouprights-summary": "Ccà sutta sunnu elincati li gruppa d'utenti difinuti nta sta wiki, cu li so dritti d'accessu.\nCci ponnu èssiri [[{{MediaWiki:Listgrouprights-helppage}}|autri nfurmazzioni]] a' prupòsitu di ciascunu drittu.",
-       "listgrouprights-key": "Legenda:\n* <span class=\"listgrouprights-granted\">Drittu cuncidutu</span>\n* <span class=\"listgrouprights-revoked\">Drittu rivucatu</span>",
+       "listgrouprights-summary": "Ccà sutta sunnu elincati li gruppa d'utenti difinuti nta sta wiki, cu li sò dritti d'accessu.\nCi ponnu èssiri [[{{MediaWiki:Listgrouprights-helppage}}|àutri nfurmazzioni]] a prupòsitu d'ognidunu drittu.",
+       "listgrouprights-key": "Liggenna:\n* <span class=\"listgrouprights-granted\">Drittu cuncidutu</span>\n* <span class=\"listgrouprights-revoked\">Drittu rivucatu</span>",
        "listgrouprights-group": "Gruppu",
        "listgrouprights-rights": "Dritti",
        "listgrouprights-helppage": "Help:Diritti dô gruppu",
-       "listgrouprights-members": "(elencu di cu nni fa' parti)",
+       "listgrouprights-members": "(elencu di cui nni fa parti)",
        "listgrouprights-addgroup": "Agghiùnciri {{PLURAL:$2|ô gruppu|ê gruppa}}: $1",
-       "listgrouprights-removegroup": "Livari{{PLURAL:$2|dû gruppu|dî gruppa}}: $1",
-       "listgrouprights-addgroup-all": "Agghiùnciri a' tutti li gruppa",
+       "listgrouprights-removegroup": "Livari {{PLURAL:$2|dû gruppu|dî gruppa}}: $1",
+       "listgrouprights-addgroup-all": "Agghiùnciri a tutti li gruppa",
        "listgrouprights-removegroup-all": "Livari di tutti li gruppa",
        "listgrouprights-addgroup-self": "Agghiùncirisi {{PLURAL:$2|ô gruppu|ê gruppa}}: $1",
        "listgrouprights-removegroup-self": "Livàrisi {{PLURAL:$2|dû gruppu|dî gruppa}}: $1",
-       "listgrouprights-addgroup-self-all": "Agghiùncirisi a' tutti li gruppa",
+       "listgrouprights-addgroup-self-all": "Agghiùncirisi a tutti li gruppa",
        "listgrouprights-removegroup-self-all": "Livàrisi di tutti li gruppa",
-       "listgrouprights-namespaceprotection-header": "Ristrizzioni pi' namespace",
+       "listgrouprights-namespaceprotection-header": "Ristrizzioni pi namespace",
        "listgrouprights-namespaceprotection-namespace": "Namespace",
-       "listgrouprights-namespaceprotection-restrictedto": "Dritti chi' cunsentunu a' l'utenti di fari canciamenti",
+       "listgrouprights-namespaceprotection-restrictedto": "Dritti chi cunzèntinu a l'utenti di fari canciamenti",
        "trackingcategories": "Catigurìi di tracciamentu",
        "trackingcategories-summary": "Sta pàggina elenca i catigurìi di tracciamèntu chi' vènunu jincuti autumaticamenti dû software MediaWiki. I so nomi si ponnu canciari mudificannu i missaggi di sistema currispunnenti ntô namespace {{ns:8}}.",
        "trackingcategories-msg": "Catigurìa di tracciamentu",
        "trackingcategories-name": "Nomu dû missaggiu",
        "trackingcategories-desc": "Criterî pâ nclusioni ntâ catigurìa",
-       "noindex-category-desc": "Sta pàggina nun veni innicizzata dî robot picchì cunteni la palora màggica <code><nowiki>__NOINDEX__</nowiki></code> e sta nta nu namespace unni sta marcatura è cunsintuta.",
-       "index-category-desc": "Sta pàggina cunteni la palora màggica <code><nowiki>__INDEX__</nowiki></code> (e sta nta nu namespace unni sta marcatura è cunsintuta), e pi' chistu veni innicizzata dî robot quannu nurmalmenti nô sarrìa.",
-       "post-expand-template-inclusion-category-desc": "La grannizza di sta pàggina passa <code>$wgMaxArticleSize</code> appressu a' l'espansioni di tutti li template, dunca certi template nun furu espannuti.",
+       "noindex-category-desc": "Sta pàggina nun veni nnicizzata dî robot pirchì cunteni la palora màggica <code><nowiki>__NOINDEX__</nowiki></code> e sta nta nu namespace unni sta marcatura è cunzintuta.",
+       "index-category-desc": "Sta pàggina cunteni la palora màggica <code><nowiki>__INDEX__</nowiki></code> (e sta nta nu namespace unni sta marcatura è cunzintuta), e pi chistu veni nnicizzata dî robot quannu nurmalmenti nun lu fussi.",
+       "post-expand-template-inclusion-category-desc": "La grannizza di sta pàggina passa <code>$wgMaxArticleSize</code> appressu a l'espanzioni di tutti li template, dunca certi template nun foru espannuti.",
        "post-expand-template-argument-category-desc": "Sta pàggina veni cchiu' granni di <code>$wgMaxArticleSize</code> appressu chi' s'espànni l'argumentu dûn template (quarchi' cosa nta parèntisi graffi tripli, comu <code>{{{Pippu}}}</code>).",
        "expensive-parserfunction-category-desc": "Sta pàggina adòpira troppi funzioni di l'analizzaturi sintatticu custusi (comu <code>#ifexist</code>). Talìa [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
-       "broken-file-category-desc": "Sta pàggina cunteni nu lijami a' file ruttu (nu lijami pi' ncurpurari nu file chi' nun esisti).",
-       "hidden-category-category-desc": "Sta catigurìa cunteni <code><nowiki>__HIDDENCAT__</nowiki></code> ntô corpu dâ so pàggina, cosa chi' nâ fa' spuntari comu mpustazzioni pridifinuta dintra dû riquatru dî lijami ê catigurìi ntê pàggini.",
+       "broken-file-category-desc": "Sta pàggina cunteni nu lijami a file ruttu (nu lijami pi ncurpurari nu file chi nun esisti).",
+       "hidden-category-category-desc": "Sta catigurìa cunteni <code><nowiki>__HIDDENCAT__</nowiki></code> ntô corpu dâ sò pàggina, cosa chi nun la fa spuntari comu mpustazzioni pridifinuta dintra dû riquatru dî lijami ê catigurìi ntê pàggini.",
        "trackingcategories-nodesc": "Nudda discrizzioni dispunìbbili.",
        "trackingcategories-disabled": "Sta catigurìa è disattivata",
-       "mailnologin": "Nuddu nnirizzu pi' mannari",
-       "mailnologintext": "Hâ' [[Special:UserLogin|tràsiri]] e aviri riggistratu nu nnirizzu di posta elittrònica vàlidu ntê to [[Special:Preferences|prifirenzi]] pi' putiri mannari posta elittrònica a' l'àutri utenti.",
-       "emailuser": "Manna nu missaggiu di posta elittrònica a' st'utenti",
-       "emailuser-title-target": "Mannari nu missaggiu di posta elittrònica a' {{GENDER:$1|stu utenti|sta utenti}}",
-       "emailuser-title-notarget": "Mannari nu missaggiu di posta elittrònica a' n'utenti",
-       "emailpagetext": "Poi adupirari lu mòdulu ccassutta pi' mannari nu missaggiu di posta elittrònica a' {{GENDER:$1|stu utenti|sta utenti}}.\nLu nnirizzu di posta elittrònica ca mittisti ntê [[Special:Preferences|prifirenzi dû to utenti]] và a' cumpàriri comu mittenti dû missaggiu, di manera ca lu distinatariu ti pò arrispùnniri dirittamenti.",
+       "mailnologin": "Nuddu nnirizzu pi mannari",
+       "mailnologintext": "Hai a [[Special:UserLogin|tràsiri]] e aviri riggistratu nu nnirizzu di posta elittrònica vàlidu ntê tò [[Special:Preferences|prifirenzi]] pi putiri mannari posta elittrònica a l'àutri utenti.",
+       "emailuser": "Manna nu missaggiu di posta elittrònica a st'utenti",
+       "emailuser-title-target": "Mannari nu missaggiu di posta elittrònica a {{GENDER:$1|st'utenti|st'utenti}}",
+       "emailuser-title-notarget": "Mannari nu missaggiu di posta elittrònica a n'utenti",
+       "emailpagetext": "Poi adupirari lu mòdulu ccassutta pi mannari nu missaggiu di posta elittrònica a {{GENDER:$1|st'utenti|st'utenti}}.\nLu nnirizzu di posta elittrònica ca mittisti ntê [[Special:Preferences|prifirenzi dû tò utenti]] va a cumpàriri comu mittenti dû missaggiu, di manera ca lu distinatariu ti pò arrispùnniri direttamenti.",
        "defemailsubject": "Missaggiu di {{SITENAME}} di l'utenti \"$1\"",
-       "usermaildisabled": "Missaggi di posta elittrònica a' l'utenti disattivati",
-       "usermaildisabledtext": "Nta sta wiki nun si ponnu mannari missaggi di posta elittrònica a' l'autri utenti",
+       "usermaildisabled": "Missaggi di posta elittrònica a l'utenti disattivati",
+       "usermaildisabledtext": "Nta sta wiki nun si ponnu mannari missaggi di posta elittrònica a l'àutri utenti",
        "noemailtitle": "Nuddu nnirizzu di posta elittrònica",
-       "noemailtext": "St'utenti nun havi spicificatu nu nnirizzu di posta elittrònica vàlidu.",
-       "nowikiemailtext": "St'utenti scigghìu di nun ricèviri missaggi di posta elittrònica di l'autri utenti.",
+       "noemailtext": "St'utenti nun spicificau nu nnirizzu di posta elittrònica vàlidu.",
+       "nowikiemailtext": "St'utenti scigghìu di nun arricèviri missaggi di posta elittrònica di l'àutri utenti.",
        "emailnotarget": "Spicificatu comu distinatariu un nomu utenti nun esistenti o nun vàlidu.",
        "emailtarget": "Metti lu nomu utenti dû distinatariu",
        "emailusername": "Nomu utenti:",
        "emailusernamesubmit": "Manna",
-       "email-legend": "Manna posta elittrònica a n'autru utenti di {{SITENAME}}",
+       "email-legend": "Manna posta elittrònica a n'àutru utenti di {{SITENAME}}",
        "emailfrom": "Di:",
        "emailto": "A:",
        "emailsubject": "Uggettu:",
        "emailmessage": "Missaggiu:",
        "emailsend": "Manna",
        "emailccme": "Mànnami na copia dû missaggiu.",
-       "emailccsubject": "Copia dû missaggiu ca mannasti a' $1: $2",
+       "emailccsubject": "Copia dû missaggiu ca mannasti a $1: $2",
        "emailsent": "Missaggiu di posta elittrònica mannatu",
-       "emailsenttext": "Lu to missaggiu di posta elittrònica fu' mannatu.",
-       "emailuserfooter": "Stu missaggiu fu' mannatu di $1 a' $2 pi' menzu dâ funzioni \"{{int:emailuser}}\" supra a' {{SITENAME}}.",
+       "emailsenttext": "Lu tò missaggiu di posta elittrònica fu mannatu.",
+       "emailuserfooter": "Stu missaggiu fu mannatu di $1 a $2 pi menzu dâ funzioni \"{{int:emailuser}}\" supra a {{SITENAME}}.",
        "usermessage-summary": "Lassatu nu missaggiu di sistema.",
        "usermessage-editor": "Missaggeri di sistema",
        "watchlist": "Lista taliata",
-       "mywatchlist": "La me lista taliata",
+       "mywatchlist": "La mè lista taliata",
        "watchlistfor2": "Di $1, $2",
-       "nowatchlist": "Nun hai nudda vuci ntâ to lista taliata.",
-       "watchlistanontext": "Pi' vìdiri e canciari li vuci dâ to lista taliata hâ' tràsiri.",
-       "watchnologin": "Nun hai trasutu",
+       "nowatchlist": "Nun hai nudda vuci ntâ tò lista taliata.",
+       "watchlistanontext": "Pi vìdiri e canciari li vuci dâ tò lista taliata hai a tràsiri.",
+       "watchnologin": "Nun trasisti",
        "addwatch": "Agghiunci â lista taliata",
-       "addedwatchtext": "La pàggina «[[:$1]]» e la so pàggina di discussioni furu agghiunciuti â to [[Special:Watchlist|lista taliata]].",
-       "addedwatchtext-short": "La pàggina \"$1\" fu' agghiunciuta â to lista taliata.",
+       "addedwatchtext": "La pàggina «[[:$1]]» e la sò pàggina di discussioni foru agghiunciuti â tò [[Special:Watchlist|lista taliata]].",
+       "addedwatchtext-short": "La pàggina \"$1\" fu agghiunciuta â tò lista taliata.",
        "removewatch": "Leva dâ lista taliata",
-       "removedwatchtext": "La pàggina «[[:$1]]» e la so pàggina di discussioni furu livati dâ to [[Special:Watchlist|lista taliata]].",
-       "removedwatchtext-short": "La pàggina \"$1\" fu' livata dâ to lista taliata.",
+       "removedwatchtext": "La pàggina «[[:$1]]» e la sò pàggina di discussioni foru livati dâ tò [[Special:Watchlist|lista taliata]].",
+       "removedwatchtext-short": "La pàggina \"$1\" fu livata dâ tò lista taliata.",
        "watch": "Talìa",
        "watchthispage": "Talìa sta pàggina",
-       "unwatch": "Nun taliari cchiu'",
+       "unwatch": "Nun taliari cchiù",
        "unwatchthispage": "Finisci di taliari",
        "notanarticle": "Nun è na pàggina di cuntinutu",
-       "notvisiblerev": "L'ùltima virsioni fatta di n'utenti diffirenti fu' cancillata",
-       "watchlist-details": "{{PLURAL:$1|Cc'è na pàggina|Cci su' $1 pàggini}} ntâ to lista taliata, senza cuntari sparti li pàggini di discussioni.",
+       "notvisiblerev": "L'ùrtima virsioni fatta di n'utenti diffirenti fu cancillata",
+       "watchlist-details": "{{PLURAL:$1|C'è na pàggina|Ci sù $1 pàggini}} ntâ tò lista taliata, senza cuntari sparti li pàggini di discussioni.",
        "wlheader-enotif": "La nutìfica via posta elittrònica è attivata.",
        "wlheader-showupdated": "Li pàggini ca hannu statu canciati dâ tò ùrtima vìsita sunnu evidinziati 'n <strong>grassettu</strong>.",
        "wlnote": "Sutta attrovi l'ùrtim{{PLURAL:$1|u canciamentu|i <strong>$1</strong> canciamenti}} fatti nta l'ùrtim{{PLURAL:$1|a ura|i <strong>$2</strong> uri}}, aggiurnati ê $4 dû $3.",
        "watchlist-options": "Opzioni dâ lista taliata",
        "watching": "Agghiunciuta â lista taliata...",
        "unwatching": "Cancillata dâ lista taliata...",
-       "watcherrortext": "Mmattìu n'erruri ntô canciari i to mpustazzioni dâ lista taliata di \"$1\".",
+       "watcherrortext": "Ammattìu n'erruri ntô canciari li tò mpustazzioni dâ lista taliata di \"$1\".",
        "enotif_reset": "Segna tutti li pàggini comu già visitati",
        "enotif_impersonal_salutation": "Utenti di {{SITENAME}}",
        "enotif_subject_deleted": "La pàggina $1 supra a {{SITENAME}} fu cancillata di $2",
-       "enotif_subject_created": "La pàggina $1 supra a' {{SITENAME}} fu' criata di $2",
+       "enotif_subject_created": "La pàggina $1 supra a {{SITENAME}} fu criata di $2",
        "enotif_subject_moved": "La pàggina $1 supra a' {{SITENAME}} fu' spustata di $2",
        "enotif_subject_restored": "La pàggina $1 supra a' {{SITENAME}} fu' ripristinata di $2",
        "enotif_subject_changed": "La pàggina $1 supra a' {{SITENAME}} fu' canciata di $2",
-       "enotif_body_intro_deleted": "La pàggina $1 supra a' {{SITENAME}} fu' cancillata lu $PAGEEDITDATE di $2, talìa $3.",
-       "enotif_body_intro_created": "La pàggina $1 supra a' {{SITENAME}} fu' criata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
-       "enotif_body_intro_moved": "La pàggina $1 supra a' {{SITENAME}} fu' spustata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
-       "enotif_body_intro_restored": "La pàggina $1 supra a' {{SITENAME}} fu' ripristinata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
-       "enotif_body_intro_changed": "La pàggina $1 supra a' {{SITENAME}} fu' canciata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
+       "enotif_body_intro_deleted": "La pàggina $1 supra a {{SITENAME}} fu cancillata lu $PAGEEDITDATE di $2, talìa $3.",
+       "enotif_body_intro_created": "La pàggina $1 supra a {{SITENAME}} fu criata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
+       "enotif_body_intro_moved": "La pàggina $1 supra a {{SITENAME}} fu spustata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
+       "enotif_body_intro_restored": "La pàggina $1 supra a {{SITENAME}} fu ripristinata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
+       "enotif_body_intro_changed": "La pàggina $1 supra a {{SITENAME}} fu canciata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
        "enotif_lastvisited": "Cunzurta $1 pi vìdiri tutti li canciamenti dâ tò ùrtima vìsita.",
-       "enotif_lastdiff": "Vidi $1 pi' taliari lu canciamentu.",
+       "enotif_lastdiff": "Vidi $1 pi taliari lu canciamentu.",
        "enotif_anon_editor": "utenti anonimu $1",
-       "enotif_body": "Gintili $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRiassuntu fattu di l'auturi: $PAGESUMMARY $PAGEMINOREDIT\n\nPi' cuntattari l'auturi:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNun ti mannamu autri nutìfichi 'n casu di ultiriuri attività a' menu ca nun vìsiti dda pàggina mentri chi' si' trasutu. Poi puru mpustari dâ to lista taliata l'avvisu di nutìfica pi' tutti li pàggini chi' cunteni.\n\nLu sistema di nutìfica di {{SITENAME}}, ô to sirvizziu\n\n--\nPi' canciari li to mpustazzioni di nutìfica via posta elittrònica, vìsita\n{{canonicalurl:{{#special:Preferences}}}}\n\nPi' canciari li mpustazzioni dâ to lista taliata, vìsita\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPi' livari sta pàggina dâ to lista taliata, vìsita\n$UNWATCHURL\n\nPi' lassari cummenti e arricèviri ultiriuri assistenza:\n$HELPPAGE",
+       "enotif_body": "Gintili $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRiassuntu fattu di l'auturi: $PAGESUMMARY $PAGEMINOREDIT\n\nPi cuntattari l'auturi:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNun ti mannamu àutri nutìfichi n casu d'ultiriuri attività a menu ca nun vìsiti dda pàggina mentri chi sî trasutu. Poi puru mpustari dâ tò lista taliata l'avvisu di nutìfica pi tutti li pàggini chi cunteni.\n\nLu sistema di nutìfica di {{SITENAME}}, ô tò sirvizziu\n\n--\nPi canciari li tò mpustazzioni di nutìfica via posta elittrònica, vìsita\n{{canonicalurl:{{#special:Preferences}}}}\n\nPi canciari li mpustazzioni dâ tò lista taliata, vìsita\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPi livari sta pàggina dâ tò lista taliata, vìsita\n$UNWATCHURL\n\nPi lassari cummenti e arricèviri ultiriuri assistenza:\n$HELPPAGE",
        "created": "criatu",
        "changed": "canciatu",
        "deletepage": "Cancella la pàggina",
        "delete-confirm": "Cancella \"$1\"",
        "delete-legend": "Cancella",
        "historywarning": "<strong>Accura:</strong> La pàggina ca stai pi' cancillari havi na crunuluggìa cu' $1 virsioni:",
-       "confirmdeletetext": "Stai cancillannu na pàggina cu' tutta la so crunuluggìa.\nPi' favuri, cunfirma ca ntenni fari sta cosa, ca hai caputu li cunsiguenzi, e chi' lu fai secunnu [[{{MediaWiki:Policy-url}}|li linî guida]].",
+       "confirmdeletetext": "Stai cancillannu na pàggina cu tutta la sò crunuluggìa.\nPi favuri, cunferma ca ntenni fari sta cosa, ca capisti li cunziguenzi, e chi lu fai secunnu [[{{MediaWiki:Policy-url}}|li lìnii guida]].",
        "actioncomplete": "Azzioni cumpritata",
        "actionfailed": "Azioni fallita",
        "deletedtext": "\"$1\" ha statu cancillatu.\nTalìa $2 pi na lista di cancillazzioni ricenti.",
        "deletionlog": "riggistru dî cancillazzioni",
        "reverted": "Ripristinata la virsioni pricidenti",
        "deletecomment": "Mutivu:",
-       "deleteotherreason": "Autru o ultiriuri mutivu:",
-       "deletereasonotherlist": "Autru mutivu",
-       "deletereason-dropdown": "* Mutivi cchiu' cumuni pâ cancillazzioni\n** Spam\n** Vannalismu\n** Viulazzioni di lu drittu d'auturi\n** Dumanna di l'auturi\n** Rimannu scassatu",
+       "deleteotherreason": "Àutru o ultiriuri mutivu:",
+       "deletereasonotherlist": "Àutru mutivu",
+       "deletereason-dropdown": "* Mutivi cchiù cumuni pâ cancillazzioni\n** Spam\n** Vannalismu\n** Viulazzioni di lu drittu d'auturi\n** Dumanna di l'auturi\n** Rimannu scassatu",
        "delete-edit-reasonlist": "Cancia li mutivi dâ cancillazzioni",
-       "delete-toobig": "Sta pàggina havi na crunuluggìa dî canciamenti assai longa, cchiu' ssai di $1 {{PLURAL:$1|virsioni|virsioni}}).\nLa cancillazzioni dî pàggini comu a' chista è risirvata, pi' scansari la pussibbilitati di pruvucari senza vulìrilu prubblemi a' {{SITENAME}}.",
-       "delete-warning-toobig": "Sta pàggina havi na crunuluggìa dî canciamenti assai longa, cchiu' ssai di $1 {{PLURAL:$1|virsioni|virsioni}}).\nLa so cancillazzioni po' disturbari lu funziunamentu di  {{SITENAME}}; prucedi cu' cautela.",
+       "delete-toobig": "Sta pàggina havi na crunuluggìa dî canciamenti assai longa, cchiossai di $1 {{PLURAL:$1|virsioni|virsioni}}).\nLa cancillazzioni dî pàggini comu a chista è risirvata, pi scanzari la pussibbilitati di pruvucari senza vulìrilu prubblemi a {{SITENAME}}.",
+       "delete-warning-toobig": "Sta pàggina havi na crunuluggìa dî canciamenti assai longa, cchiossai di $1 {{PLURAL:$1|virsioni|virsioni}}).\nLa sò cancillazzioni pò disturbari lu funziunamentu di  {{SITENAME}}; prucedi cu cautela.",
        "deleteprotected": "Nun poi cancillari sta pàggina pirchì fu prutiggiuta.",
        "deleting-backlinks-warning": "'''Accura:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Autri pàggini]] su' culligati o trascludunu la pàggina chi' stai cancillannu.",
        "rollback": "Annullamentu di canciamenti",
        "rollbacklink": "canciu n'arreri",
        "rollbacklinkcount": "cancia n'arreri $1 {{PLURAL:$1|mudìfica|mudìfichi}}",
        "rollbacklinkcount-morethan": "cancia n'arreri cchiu' ssai di $1 {{PLURAL:$1|mudìfica|mudìfichi}}",
-       "rollbackfailed": "Lu canciu 'n arreri nun riniscìu",
-       "cantrollback": "Nun si po' annullari lu canciamentu;\nl'ùltimu cuntribbuturi è l'ùnicu auturi di sta pàggina.",
-       "alreadyrolled": "Nun si po' annullari l'ùltimu canciamentu â pàggina [[:$1]] fattu di [[User:$2|$2]] ([[User talk:$2|discussioni]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nquarchidun'autru già hâ canciatu la pàggina o puru hâ fattu nu canciu n'arreri.\n\nL'ùltimu canciamentu â pàggina fu' fattu di [[User:$3|$3]] ([[User talk:$3|discussioni]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "rollbackfailed": "Lu canciu n arreri nun arriniscìu",
+       "cantrollback": "Nun si pò annullari lu canciamentu;\nl'ùrtimu cuntribbuturi è l'ùnicu auturi di sta pàggina.",
+       "alreadyrolled": "Nun si pò annullari l'ùrtimu canciamentu â pàggina [[:$1]] fattu di [[User:$2|$2]] ([[User talk:$2|discussioni]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nquarchidun'àutru già canciau la pàggina o puru fici nu canciu n'arreri.\n\nL'ùrtimu canciamentu â pàggina fu fattu di [[User:$3|$3]] ([[User talk:$3|discussioni]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Lu riassuntu dû canciamentu era: \"''$1''\".",
-       "revertpage": "Annullati li canciamenti fatti di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussioni]]) nfina a' l'ùltima virsioni di [[User:$1|$1]]",
-       "revertpage-nouser": "Annullati li canciamenti fatti di n'utenti ammucciatu nfina a' l'ùltima virsioni di {{GENDER:$1|[[User:$1|$1]]}}",
-       "rollback-success": "Annullati li canciamenti di $1;\nsi turnau a' l'ùltima virsioni di $2.",
+       "revertpage": "Annullati li canciamenti fatti di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussioni]]) nfina a l'ùrtima virsioni di [[User:$1|$1]]",
+       "revertpage-nouser": "Annullati li canciamenti fatti di n'utenti ammucciatu nfina a l'ùrtima virsioni di {{GENDER:$1|[[User:$1|$1]]}}",
+       "rollback-success": "Annullati li canciamenti di $1;\nsi turnau a l'ùrtima virsioni di $2.",
        "sessionfailure-title": "Erruri dâ sissioni",
-       "sessionfailure": "Pari chi' cc'è quarchi' prubblema câ to sissioni di trasuta;\nst'azzioni fu' annullata comu pricauzzioni contra dû furtu di sissioni.\nTorna â pàggina pricidenti, ricàrricala e prova n'autra vota.",
+       "sessionfailure": "Pari chi c'è quarchi prubblema câ tò sissioni di trasuta;\nst'azzioni fu annullata comu pricauzzioni contra dû furtu di sissioni.\nTorna â pàggina pricidenti, arricàrricala e prova n'àutra vota.",
        "changecontentmodel": "Canciamentu dû mudellu dû cuntinutu di na pàggina",
        "changecontentmodel-legend": "Canciamentu dû mudellu dû cuntinutu",
        "changecontentmodel-title-label": "Tìtulu dâ pàggina",
        "changecontentmodel-model-label": "Mudellu dû cuntinutu novu",
        "changecontentmodel-reason-label": "Mutivu:",
-       "changecontentmodel-success-title": "Lu mudellu dû cuntinutu fu canciatu",
-       "changecontentmodel-success-text": "Lu tipu dû cuntinutu di [[:$1]] fu canciatu.",
-       "changecontentmodel-cannot-convert": "Nun si po’ cunvèrtiri lu cuntinutu di [[:$1]] ntô tipu $2.",
-       "changecontentmodel-nodirectediting": "Lu mudellu dû cuntinutu $1 nun cunsenti lu canciamentu direttu.",
+       "changecontentmodel-success-title": "Lu mudellu dû cuntinutu fu canciatu",
+       "changecontentmodel-success-text": "Lu tipu dû cuntinutu di [[:$1]] fu canciatu.",
+       "changecontentmodel-cannot-convert": "Nun si pò cummèrtiri lu cuntinutu di [[:$1]] ntô tipu $2.",
+       "changecontentmodel-nodirectediting": "Lu mudellu dû cuntinutu $1 nun cunzenti lu canciamentu direttu.",
        "log-name-contentmodel": "Riggistru dî canciamenti ô mudellu dû cuntinutu",
-       "log-description-contentmodel": "Eventi ca riguàrdunu lu mudellu dû cuntinutu di na pàggina",
-       "logentry-contentmodel-change": "$1 {{GENDER:$2|canciàu}} lu mudellu dû cuntinutu dâ pàggina $3 di «$4» a’ «$5»",
+       "log-description-contentmodel": "Eventi c'arriguàrdanu lu mudellu dû cuntinutu di na pàggina",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|canciau}} lu mudellu dû cuntinutu dâ pàggina $3 di «$4» a’ «$5»",
        "logentry-contentmodel-change-revertlink": "annulla",
        "logentry-contentmodel-change-revert": "annullamentu",
        "protectlogpage": "Riggistru dî prutizzioni",
-       "protectlogtext": "Ccassutta c'è nu riggistru dî canciamenti â prutizzioni dî pàggini.\nVidi la [[Special:ProtectedPages|lista dî pàggini prutetti]] pi' canùsciri tutti i prutizzioni di pàggini chi' su' in viguri.",
+       "protectlogtext": "Ccassutta c'è nu riggistru dî canciamenti â prutizzioni dî pàggini.\nVidi la [[Special:ProtectedPages|lista dî pàggini prutetti]] pi canùsciri tutti li prutizzioni di pàggini chi sù n viguri.",
        "protectedarticle": "prutiggìu [[$1]]",
        "modifiedarticleprotection": "canciau lu liveddu di prutizzioni di \"[[$1]]\"",
        "unprotectedarticle": "livau la prutizzioni di \"[[$1]]\"",
        "prot_1movedto2": "spustau [[$1]] nta [[$2]]",
        "protect-badnamespace-title": "Namespace unni nun si po' prutèggiri",
        "protect-badnamespace-text": "Li pàggini nta stu namespace nun si ponnu prutèggiri.",
-       "protect-norestrictiontypes-text": "Sta pàggina nun si po' prutèggiri picchì nun cc'è nudda sorta di ristrizzioni dispunìbbili.",
+       "protect-norestrictiontypes-text": "Sta pàggina nun si pò prutèggiri pirchì nun c'è nudda sorta di ristrizzioni dispunìbbili.",
        "protect-norestrictiontypes-title": "Pàggina chi' nun si po' prutèggiri",
-       "protect-legend": "Cunfirma la prutizzioni",
+       "protect-legend": "Cunferma la prutizzioni",
        "protectcomment": "Mutivu:",
        "protectexpiry": "Scadenza",
        "protect_expiry_invalid": "L'ura di scadenza nun è vàlida.",
-       "protect_expiry_old": "L'ura di scadenza già havi passatu.",
+       "protect_expiry_old": "L'ura di scadenza già passau.",
        "protect-unchain-permissions": "Sblocca autri opzioni di prutizzioni",
-       "protect-text": "Cca poi a' vìdiri e canciari lu liveddu di prutizzioni dâ pàggina <strong>$1</strong>.",
-       "protect-locked-blocked": "Nun si ponnu canciari li livedda di prutizzioni quannu unu è bluccatu.\nCca cci su' li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
-       "protect-locked-dblock": "Nun si ponnu canciari li livedda di prutizzioni picchì cc'è attivatu un bloccu dâ basi di dati.\nCca cci su' li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
-       "protect-locked-access": "Lu to cuntu nun havi lu pirmissu di canciari li livedda di prutizzioni.\nCca cci su' li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
-       "protect-cascadeon": "Com'ad ora sta pàggina è prutetta picchì veni trasclusa {{PLURAL:$1|ntâ siquenti pàggina, ca havi|ntê siquenti pàggini, ca hannu}} la prutizzioni a' cascata attivata.\nLi canciamenti ca si fannu ô liveddu di prutizzioni di sta pàggina nun vannu a' canciari la prutizzioni a' cascata.",
-       "protect-default": "Cunsenti a' tutti l'utenti",
+       "protect-text": "Ccà poi vìdiri e canciari lu liveddu di prutizzioni dâ pàggina <strong>$1</strong>.",
+       "protect-locked-blocked": "Nun si ponnu canciari li liveddi di prutizzioni quannu unu è bluccatu.\nCcà ci sù li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
+       "protect-locked-dblock": "Nun si ponnu canciari li liveddi di prutizzioni pirchì c'è attivatu un bloccu dâ basi di dati.\nCcà ci sù li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
+       "protect-locked-access": "Lu tò cuntu nun havi lu pirmissu di canciari li liveddi di prutizzioni.\nCcà ci sù li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
+       "protect-cascadeon": "Com'a ora sta pàggina è prutetta pirchì veni nclusa {{PLURAL:$1|ntâ pàggina siquenti, ca havi|ntê pàggini siquenti, ca hannu}} la prutizzioni a cascata attivata.\nLi canciamenti ca si fannu ô liveddu di prutizzioni di sta pàggina nun vannu a canciari la prutizzioni a cascata.",
+       "protect-default": "Cunzenti a tutti l'utenti",
        "protect-fallback": "Cunsenti sulu a' l'utenti cû pirmissu \"$1\"",
        "protect-level-autoconfirmed": "Cunsenti sulu a' l'utenti autu-cunfirmati",
        "protect-level-sysop": "Cunsenti sulu a' l'amministratura",
-       "protect-summary-cascade": "a' cascata",
+       "protect-summary-cascade": "a cascata",
        "protect-expiring": "scadi lu $1 (UTC)",
        "protect-expiring-local": "scadi lu $1",
-       "protect-expiry-indefinite": "a' tempu nditirminatu",
-       "protect-cascade": "Pruteggi li pàggini nclusi nta chista (prutizzioni a' cascata)",
-       "protect-cantedit": "Nun poi canciari li livedda di prutizzioni di sta pàggina picchì nun hai lu pirmissu di canciàrila.",
-       "protect-othertime": "Autra scadenza:",
-       "protect-othertime-op": "autra scadenza",
+       "protect-expiry-indefinite": "a tempu nditirminatu",
+       "protect-cascade": "Pruteggi li pàggini nclusi nta chista (prutizzioni a cascata)",
+       "protect-cantedit": "Nun poi canciari li liveddi di prutizzioni di sta pàggina pirchì nun hai lu pirmissu di canciàrila.",
+       "protect-othertime": "Àutra scadenza:",
+       "protect-othertime-op": "àutra scadenza",
        "protect-existing-expiry": "Scadenza attuali: $3 dû $3",
        "protect-existing-expiry-infinity": "Scadenza attuali: infinitu",
-       "protect-otherreason": "Autru o ultiriuri mutivu:",
+       "protect-otherreason": "Àutru o ultiriuri mutivu:",
        "protect-otherreason-op": "Autru mutivu",
-       "protect-dropdown": "*Mutivi cumuni pâ prutizzioni\n** Vannalìsimi ripituti\n** Spam ripitutu\n** Guerra di canciamenti cuntrapruduttiva\n** Pàggina di autu tràficu",
+       "protect-dropdown": "*Mutivi cumuni pâ prutizzioni\n** Vannalismi ripituti\n** Spam ripitutu\n** Guerra di canciamenti contrapruduttiva\n** Pàggina d'àutu tràficu",
        "protect-edit-reasonlist": "Cancia li mutivi pâ prutizzioni",
-       "protect-expiry-options": "1 ura:1 hour,1 jornu:1 day,1 simana:1 week,2 simani:2 weeks,1 misi:1 month,3 misi:3 months,6 misi:6 months,1 annu:1 year,infinitu:infinite",
+       "protect-expiry-options": "1 ura:1 hour,1 jornu:1 day,1 simana:1 week,2 simani:2 weeks,1 misi:1 month,3 misi:3 months,6 misi:6 months,1 annu:1 year,nfinitu:infinite",
        "restriction-type": "Pirmissu:",
        "restriction-level": "Liveddu di ristrizzioni:",
        "minimum-size": "Grannizza mìnima",
        "undeletepage": "Talìa e ricùpira li pàggini cancillati",
        "undeletepagetitle": "<strong>Quantu segui è cumpostu di virsioni cancillati di [[:$1|$1]]</strong>.",
        "viewdeletedpage": "Talìa li pàggini cancillati",
-       "undeletepagetext": "{{PLURAL:$1|La siguenti pàggina fu' cancillata|Li siguenti $1 pàggini foru cancillati}}, però {{PLURAL:$1|è|sunnu}} ancora nta l'archiviu e pi' chistu si {{PLURAL:$1|po|ponnu}} ancora ricupirari.\nPiriudicamenti l'archìviu po' vèniri svacantatu.",
+       "undeletepagetext": "{{PLURAL:$1|La pàggina siguenti fu cancillata|Li $1 pàggini siguenti foru cancillati}}, pirò {{PLURAL:$1|è|sunnu}} ancora nta l'archiviu e pi chistu si {{PLURAL:$1|pò|ponnu}} ancora ricupirari.\nPiriodicamenti l'archiviu pò vèniri svacantatu.",
        "undelete-fieldset-title": "Ricùpira virsioni",
-       "undeleteextrahelp": "Pi' ricupirari la storia sana dâ pàggina, cliccari <strong><em>{{int:undeletebtn}}</em></strong> senza scegghîri nudda casedda.\nPi' fari nu ricùpiru silittivu, scegghîri li caseddi currispunnenti ê virsioni di ripigghiari, e cliccari <strong><em>{{int:undeletebtn}}</em></strong>.",
-       "undeleterevisions": "$1 {{PLURAL:$1|virsioni|virsioni}} nta l'archiviu",
-       "undeletehistory": "Siddu ricùpiri sta pàggina, tutti li so virsioni vèninu ricupirati ntâ crunuluggìa.\nSiddu na pàggina nova havi statu criata cû stissu tìtulu di chidda di ricupirari doppu dâ so cancillazzioni, li virsioni ricupirati vannu a' finiri ntâ crunuluggìa passata.",
-       "undeleterevdel": "Lu ricùpiru nun veni fattu siddu pròvuca la cancillazzioni parziali dâ virsioni currenti dâ pàggina o dû file.\nNta stu casu, hai a' livari lu signu di spunta o l'ammucciamentu dâ virsioni cancillata cchiu' ricenti.",
-       "undeletehistorynoadmin": "Sta pàggina fu' cancillata.\nLu mutivu dâ cancillazzioni è ammustratu ccà sutta, nzèmmula ê dittagghî di l'utenti ca canciaru sta pàggina prima dâ so cancillazzioni.\nLu testu cuntinutu ntê virsioni cancillati è dispunìbbili sulu a' l'amministratura.",
+       "undeleteextrahelp": "Pi ricupirari la storia sana dâ pàggina, cliccari <strong><em>{{int:undeletebtn}}</em></strong> senza scègghiri nudda casedda.\nPi fari nu ricùpiru silittivu, scègghiri li caseddi currispunnenti ê virsioni di ripigghiari, e cliccari <strong><em>{{int:undeletebtn}}</em></strong>.",
+       "undeleterevisions": "$1 {{PLURAL:$1|virsioni}} cancillati",
+       "undeletehistory": "Siddu ricùpiri sta pàggina, tutti li sò virsioni vèninu ricupirati ntâ crunuluggìa.\nSiddu na pàggina nova fu criata cû stissu tìtulu di chidda di ricupirari doppu dâ sò cancillazzioni, li virsioni ricupirati vannu a finiri ntâ crunuluggìa passata.",
+       "undeleterevdel": "Lu ricùpiru nun veni fattu siddu pròvuca la cancillazzioni parziali dâ virsioni currenti dâ pàggina o dû file.\nNta stu casu, hai a livari lu signu di spunta o l'ammucciamentu dâ virsioni cancillata cchiù ricenti.",
+       "undeletehistorynoadmin": "Sta pàggina fu cancillata.\nLu mutivu dâ cancillazzioni è ammustratu ccà sutta, nzèmmula ê dittagghî di l'utenti ca canciaru sta pàggina prima dâ sò cancillazzioni.\nLu testu cuntinutu ntê virsioni cancillati è dispunìbbili sulu a l'amministratura.",
        "undelete-revision": "Virsioni cancillata di $1 (dû $4 ê $5) di $3:",
-       "undeleterevision-missing": "Virsioni nun vàlida o mancanti.\nPo' èssiri chi' hai na lijami sbagghiata, o puru la virsioni hâ statu già ricupirata o livata di l'archiviu.",
+       "undeleterevision-missing": "Virsioni nun vàlida o ammancanti.\nPò èssiri chi hai na lijami sbagghiata, o puru la virsioni fu già ricupirata o livata di l'archiviu.",
        "undelete-nodiff": "Nun fu attruvata nudda virsioni passata.",
        "undeletebtn": "Ricùpira",
        "undeletelink": "talìa/ricùpira",
        "undeletedrevisions-files": "$1 {{PLURAL:$1|virsioni ricupirata|virsioni ricupirati}} e $2 {{PLURAL:$2|file ricupiratu|file ricupirati}}",
        "undeletedfiles": "$1 {{PLURAL:$1|file ricupiratu|file ricupirati}}",
        "cannotundelete": "L'annullamentu dâ cancillazzioni nun riniscìu:\n$1",
-       "undeletedpage": "<strong>La pàggina $1 fu' ricupirata</strong>\n\nCunzulta lu [[Special:Log/delete|riggistru dî cancillazzioni]] pi' vìdiri li cancillazzioni e li ricùpiri cchiu' ricenti.",
+       "undeletedpage": "<strong>La pàggina $1 fu ricupirata</strong>\n\nCunzurta lu [[Special:Log/delete|riggistru dî cancillazzioni]] pi vìdiri li cancillazzioni e li ricùpiri cchiù ricenti.",
        "undelete-header": "Talìa lu [[Special:Log/delete|riggistru dî cancillazzioni]] pî pàggini cancillati di ricenti.",
        "undelete-search-title": "Cerca li pàggini cancillati",
        "undelete-search-box": "Cerca li pàggini cancillati",
-       "undelete-search-prefix": "Ammustra li pàggini unni lu tìtulu accumènza cu':",
+       "undelete-search-prefix": "Ammustra li pàggini unni lu tìtulu accumenza cu:",
        "undelete-search-submit": "Cerca",
-       "undelete-no-results": "Nudda pàggina currispunnentu fu' attruvata nta l'archiviu dî pàggini cancillati.",
-       "undelete-filename-mismatch": "Nun si po' annullari la cancillazzioni dâ virsioni dû file cu' data e ura $1: Nomu di file nun currispunnenti.",
-       "undelete-bad-store-key": "Nun si po' annullari la cancillazzioni dâ virsioni dû file cu' data e ura $1: Lu file mancava avanti dâ cancillazzioni.",
+       "undelete-no-results": "Nudda pàggina currispunnenti fu attruvata nta l'archiviu dî pàggini cancillati.",
+       "undelete-filename-mismatch": "Nun si pò annullari la cancillazzioni dâ virsioni dû file cu data e ura $1: Nomu di file nun currispunnenti.",
+       "undelete-bad-store-key": "Nun si pò annullari la cancillazzioni dâ virsioni dû file cu data e ura $1: Lu file ammancava avanti dâ cancillazzioni.",
        "undelete-cleanup-error": "Erruri ntâ cancillazzioni dû file d'archiviu nun adupiratu \"$1\".",
-       "undelete-missing-filearchive": "Nun si po' ricupirari l'ID $1 di l'archiviu dî file picchì nun è ntâ basi di dati. Po' già avìri statu ricupiratu.",
+       "undelete-missing-filearchive": "Nun si pò ricupirari l'ID $1 di l'archiviu dî file pirchì nun è ntâ basi di dati. Pò già aviri statu ricupiratu.",
        "undelete-error": "Erruri nta l'annullamentu dâ cancillazzioni dâ pàggina",
        "undelete-error-short": "Erruri nta l'annullamentu dâ cancillazzioni dû file: $1",
        "undelete-error-long": "Si virificaru erruri ntô tentativu di annullari la cancillazzioni dô file:\n\n$1",
-       "undelete-show-file-confirm": "Si' sicuru chi' voi talìari la virsioni cancillata dû file \"<nowiki>$1</nowiki>\" dû $2 ê $3?",
+       "undelete-show-file-confirm": "Sî sicuru chi voi taliari la virsioni cancillata dû file \"<nowiki>$1</nowiki>\" dû $2 ê $3?",
        "undelete-show-file-submit": "Si",
        "namespace": "Namespace:",
        "invert": "Inverti la silizzioni",
-       "tooltip-invert": "Scègghî sta casedda p'ammucciari li canciamenti chi' su' fatti a' pàggini dû namespace silizzunatu (e macari dû so namespace assuciatu, si' la casedda rilativa è scigghiuta)",
-       "tooltip-whatlinkshere-invert": "Signa sta casedda p'ammucciari li ligami chi' vènunu di pàggini dû namespace scigghiutu.",
+       "tooltip-invert": "Scegghi sta casedda p'ammucciari li canciamenti chi sù fatti a pàggini dû namespace silizzunatu (e macari dû sò namespace assuciatu, si la casedda rilativa è scigghiuta)",
+       "tooltip-whatlinkshere-invert": "Signa sta casedda p'ammucciari li ligami chi vèninu di pàggini dû namespace scigghiutu.",
        "namespace_association": "Namespace assuciatu",
-       "tooltip-namespace_association": "Scègghî sta casedda pi' nclùdiri macari u namespace di discussioni o principali assuciatu ô namespace silizzunatu",
+       "tooltip-namespace_association": "Scegghi sta casedda pi nclùdiri macari lu namespace di discussioni o chiddu principali assuciatu ô namespace silizzunatu",
        "blanknamespace": "(Principali)",
-       "contributions": "Cuntribbuta di l'{{GENDER:$1|utenti}}",
-       "contributions-title": "Cuntribbuta di l'utenti $1",
-       "mycontris": "Li me cuntribbuta",
+       "contributions": "Cuntribbuti di l'{{GENDER:$1|utenti}}",
+       "contributions-title": "Cuntribbuti di l'utenti $1",
+       "mycontris": "Li mè cuntribbuti",
        "contribsub2": "Di {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Lu cuntu utenti \"$1\" nun è riggistratu.",
-       "nocontribs": "Nuddu canciamentu fu' truvatu chi' currispunni a' sti criterî.",
+       "nocontribs": "Nuddu canciamentu fu attruvatu chi currispunni a sti criterî.",
        "uctop": "(attuali)",
-       "month": "A' pàrtiri dû misi (e pricidenti):",
-       "year": "A' pàrtiri di l'annu (e pricidenti):",
-       "sp-contributions-newbies": "Ammustra sulu li cuntribbuta di l'utenti novi",
+       "month": "A pàrtiri dû misi (e pricidenti):",
+       "year": "A pàrtiri di l'annu (e pricidenti):",
+       "sp-contributions-newbies": "Ammustra sulu li cuntribbuti di l'utenti novi",
        "sp-contributions-newbies-sub": "Di l'utenti novi",
-       "sp-contributions-newbies-title": "Cuntribbuta di l'utenti novi",
+       "sp-contributions-newbies-title": "Cuntribbuti di l'utenti novi",
        "sp-contributions-blocklog": "riggistru dî blocchi",
-       "sp-contributions-suppresslog": "cuntribbuta suppressi di l'utenti",
-       "sp-contributions-deleted": "cuntribbuta cancillati di l'utenti",
+       "sp-contributions-suppresslog": "cuntribbuti suppressi di l'utenti",
+       "sp-contributions-deleted": "cuntribbuti cancillati di l'utenti",
        "sp-contributions-uploads": "file carricati",
-       "sp-contributions-logs": "riggistra",
+       "sp-contributions-logs": "riggistri",
        "sp-contributions-talk": "discussioni",
        "sp-contributions-userrights": "gistioni dî dritti di l'utenti",
-       "sp-contributions-blocked-notice": "St'utenti pi' com'ora è bluccatu.\nComu rifirimentu ccassutta cc'è l'ùltima vuci dû riggistru dî blocchi:",
-       "sp-contributions-blocked-notice-anon": "Stu nnirizzu IP pi' com'ora è bluccatu.\nComu rifirimentu ccassutta cc'è l'ùltima vuci dû riggistru dî blocchi:",
+       "sp-contributions-blocked-notice": "St'utenti pi com'ora è bluccatu.\nComu rifirimentu ccassutta c'è l'ùrtima vuci dû riggistru dî blocchi:",
+       "sp-contributions-blocked-notice-anon": "Stu nnirizzu IP pi com'ora è bluccatu.\nComu rifirimentu ccassutta c'è l'ùrtima vuci dû riggistru dî blocchi:",
        "sp-contributions-search": "Ricerca cuntribbuti",
        "sp-contributions-username": "Nnirizzu IP o nomu utenti:",
        "sp-contributions-toponly": "Ammustra sulu li canciamenti ca sunnu l'ùrtimi virsioni pâ pàggina",
        "sp-contributions-newonly": "Ammustra sulu li canciamenti ca sunnu criazzioni di pàggini novi",
-       "sp-contributions-submit": "Risciduta",
-       "whatlinkshere": "Chi' punta cca",
+       "sp-contributions-submit": "Arricerca",
+       "whatlinkshere": "Chi punta ccà",
        "whatlinkshere-title": "Pàggini ca pùntanu a \"$1\"",
        "whatlinkshere-page": "Pàggina:",
        "linkshere": "Sti pàggini hannu nu liami a '''[[:$1]]''':",
        "nolinkshere": "Nudda pàggina havi nu liami a '''[[:$1]]'''.",
        "nolinkshere-ns": "Nun ci sugnu pàggini chi puntano a '''[[:$1]]''' ntô namespace silizziunatu.",
        "isredirect": "pàggina di rinnirizzamentu",
-       "istemplate": "trasclusioni",
+       "istemplate": "nclusioni",
        "isimage": "lijami ô file",
        "whatlinkshere-prev": "{{PLURAL:$1|pricidenti|pricidenti $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|succissivu|succissivi $1}}",
        "whatlinkshere-links": "← liami",
        "whatlinkshere-hideredirs": "$1 li rimanni",
-       "whatlinkshere-hidetrans": "$1 li trasclusioni",
+       "whatlinkshere-hidetrans": "$1 li nclusioni",
        "whatlinkshere-hidelinks": "$1 li lijami",
-       "whatlinkshere-hideimages": "$1 li lijami a' file",
+       "whatlinkshere-hideimages": "$1 li lijami a file",
        "whatlinkshere-filters": "Filtri",
        "autoblockid": "Bloccu autumàticu #$1",
-       "block": "Bluccari a' n'utenti",
-       "unblock": "Sbluccari a' n'utenti",
-       "blockip": "Blocca a' {{GENDER:$1|stu utenti|sta utenti}}",
-       "blockip-legend": "Blocca a' l'utenti",
+       "block": "Bluccari a n'utenti",
+       "unblock": "Sbluccari a n'utenti",
+       "blockip": "Blocca a {{GENDER:$1|st'utenti|st'utenti}}",
+       "blockip-legend": "Blocca a l'utenti",
        "blockiptext": "Usa lu mòdulu cassutta pi bluccari la pussibbilità di scrìviri pi n'utenti o pi nu ndirizzu IP spicìficu. Chistu s'havi a fari sulu pi privèniri lu vannalismu e secunnu la [[{{MediaWiki:Policy-url}}|pulìtica di {{SITENAME}}]]. Scrivi na raggiùni valida ccà sutta (pi asempiu, cita li pàggini chi foru vannalizzati).",
        "ipaddressorusername": "Nnirizzu IP o nomu utenti:",
        "ipbexpiry": "Durata dû bloccu:",
        "ipbreason-dropdown": "*Mutivi cchiù cumuni pî blocchi\n** Nzerimentu di nformazziuni falsi\n** Cancillazzioni di cuntinuti dê pàggini\n** Liami prumozziunalu a siti sterni\n** Nzserimentu di cuntinuti privi di sensu\n** Cumportamenti ntimidatori o molestie\n** Usu ndebitu di cchiù cunti\n** Nomu utenti nun accittabbili",
        "ipb-hardblock": "Mpidisci a' l'utenti trasuti di fari canciamenti di stu nnirizzu IP",
        "ipbcreateaccount": "Mpidisci la criazzioni di cunti",
-       "ipbemailban": "Mpidisci a' l'utenti di mannari posta elittrònica",
-       "ipbenableautoblock": "Blocca autumaticamenti l'ùltimu nnirizzu IP adupiratu di st'utenti, e li succissivi d'unni prova a' fari canciamenti",
-       "ipbsubmit": "Blocca a' st'utenti",
-       "ipbother": "Autra scadenza:",
-       "ipboptions": "2 uri:2 hours,1 jornu:1 day,3 jorna:3 days,1 simana:1 week,2 simani:2 weeks,1 misi:1 month,3 misi:3 months,6 misi:6 months,1 annu:1 year,infinitu:infinite",
+       "ipbemailban": "Mpidisci a l'utenti di mannari posta elittrònica",
+       "ipbenableautoblock": "Blocca autumaticamenti l'ùrtimu nnirizzu IP adupiratu di st'utenti, e li succissivi d'unni prova a fari canciamenti",
+       "ipbsubmit": "Blocca a st'utenti",
+       "ipbother": "Àutra scadenza:",
+       "ipboptions": "2 uri:2 hours,1 jornu:1 day,3 jorna:3 days,1 simana:1 week,2 simani:2 weeks,1 misi:1 month,3 misi:3 months,6 misi:6 months,1 annu:1 year,nfinitu:infinite",
        "ipbhidename": "Ammuccia lu nomu utenti ntê canciamenti e ntê listi",
        "ipbwatchuser": "Talìa li pàggini e li discussioni di st'utenti",
-       "ipb-disableusertalk": "Mpidisci a' st'utenti di canciari la sò pàggina di discussioni nta mentri ca è bluccatu",
-       "ipb-change-block": "Blocca di novu l'utenti cu' sti mpustazzioni",
-       "ipb-confirm": "Cunfirma lu bloccu",
+       "ipb-disableusertalk": "Mpidisci a st'utenti di canciari la sò pàggina di discussioni ntô mentri ch'è bluccatu",
+       "ipb-change-block": "Blocca di novu l'utenti cu sti mpustazzioni",
+       "ipb-confirm": "Cunferma lu bloccu",
        "badipaddress": "Nnirizzu IP nun vàlidu",
-       "blockipsuccesssub": "Bloccu rinisciutu",
-       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] fu' bluccatu.<br />\nTalìa la [[Special:BlockList|lista dî blocchi]] pi' rivìdiri li blocchi.",
+       "blockipsuccesssub": "Bloccu arrinisciutu",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] fu bluccatu.<br />\nTalìa la [[Special:BlockList|lista dî blocchi]] pi rivìdiri li blocchi.",
        "ipb-blockingself": "Stai bluccannu a' tia stissu! Si' sicuru chi' voi fari sta cosa?",
        "ipb-confirmhideuser": "Stai bluccannu n'utenti chi' havi l'opzioni \"ammuccia utenti\" attivata. A' sta manera u nomu di st'utenti veni supprimutu nta tutti i listi e tutti i riggìstri. Si' sicuru chi' voi fari sta cosa?",
-       "ipb-confirmaction": "Si' si' pi' davera sicuru chi' voi fari sta cosa, scegghî a casedda \"{{int:ipb-confirm}}\" ccassutta.",
+       "ipb-confirmaction": "Si sî pi daveru sicuru chi voi fari sta cosa, scegghi la casedda \"{{int:ipb-confirm}}\" ccassutta.",
        "ipb-edit-dropdown": "Cancia li mutivi dû bloccu",
-       "ipb-unblock-addr": "Sblocca a' $1",
-       "ipb-unblock": "Sblocca a' n'utenti o nu nnirizzu IP",
-       "ipb-blocklist": "Talìa li blocchi in viguri",
+       "ipb-unblock-addr": "Sblocca a $1",
+       "ipb-unblock": "Sblocca a n'utenti o nu nnirizzu IP",
+       "ipb-blocklist": "Talìa li blocchi n viguri",
        "ipb-blocklist-contribs": "Cuntribbuta di {{GENDER:$1|$1}}",
-       "unblockip": "Sblocca a' l'utenti",
-       "unblockiptext": "Adupirari lu mòdulu suttastanti pi' ristituiri l'accessu in scrittura a' nu nnirizzu IP o nomu utenti ca hâ statu bluccatu.",
+       "unblockip": "Sblocca a l'utenti",
+       "unblockiptext": "Adupirari lu mòdulu suttastanti pi'arristituiri l'accessu n scrittura a nu nnirizzu IP o nomu utenti ca fu bluccatu.",
        "ipusubmit": "Leva stu bloccu",
        "unblocked": "L'utenti [[User:$1|$1]] fu sbluccatu.",
        "unblocked-range": "$1 fu sbluccatu.",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] fu sbluccatu.",
        "blocklist": "Utenti bluccati",
        "ipblocklist": "Utenti bluccati",
-       "ipblocklist-legend": "Trova n'utenti bluccatu",
+       "ipblocklist-legend": "Arricerca n'utenti bluccatu",
        "blocklist-userblocks": "Ammuccia li blocchi di cunti",
-       "blocklist-tempblocks": "Ammuccia li blocchi timpuranii",
-       "blocklist-addressblocks": "Ammuccia li blocchi di IP singuli",
+       "blocklist-tempblocks": "Ammuccia li blocchi timpurànii",
+       "blocklist-addressblocks": "Ammuccia li blocchi di IP sìnguli",
        "blocklist-rangeblocks": "Ammuccia li blocchi di ntirvalli di IP",
        "blocklist-timestamp": "Data e ura",
        "blocklist-target": "Oggettu",
        "blocklist-by": "Amministraturi chi' bluccau",
        "blocklist-params": "Paràmitri dû bloccu",
        "blocklist-reason": "Mutivu",
-       "ipblocklist-submit": "Risciduta",
+       "ipblocklist-submit": "Arricerca",
        "ipblocklist-localblock": "Bloccu lucali",
        "ipblocklist-otherblocks": "{{PLURAL:$1|Autru bloccu|Autri blocchi}}",
-       "infiniteblock": "infinitu",
+       "infiniteblock": "nfinitu",
        "expiringblock": "scadi lu $1 ê $2",
        "anononlyblock": "sulu anònimi",
        "noautoblockblock": "bloccu autumàticu disattivatu",
        "createaccountblock": "criazzioni di cunti bluccata",
        "emailblock": "posta elittrònica bluccata",
-       "blocklist-nousertalk": "nun po' canciari la so stissa pàggina di discussioni",
+       "blocklist-nousertalk": "nun pò canciari la sò stissa pàggina di discussioni",
        "ipblocklist-empty": "L'alencu dî blocchi è vacanti.",
        "ipblocklist-no-results": "Lu nnirizzu IP o nomu utenti richiestu nun è bluccatu.",
        "blocklink": "blocca",
        "unblocklink": "sblocca",
        "change-blocklink": "cancia bloccu",
-       "contribslink": "cuntribbuta",
+       "contribslink": "cuntribbuti",
        "emaillink": "manna posta elittrònica",
-       "autoblocker": "Bluccatu autumaticamenti pirchì lu to nnirizzu IP havi statu adupiratu di picca tempu di l'utenti \"[[User:$1|$1]]\".\nLu mutivu datu pû bloccu di $1 è \"$2\"",
+       "autoblocker": "Bluccatu autumaticamenti pirchì lu tò nnirizzu IP fu adupiratu di picca tempu di l'utenti \"[[User:$1|$1]]\".\nLu mutivu datu pû bloccu di $1 è \"$2\"",
        "blocklogpage": "Riggistru dî blocchi",
-       "blocklog-showlog": "St'utenti havi statu bluccatu ntô passatu.\nComu rifirimentu ccassutta cc'è lu riggìstru dî blocchi:",
-       "blocklog-showsuppresslog": "St'utenti havi statu bluccatu e ammucciatu ntô passatu.\nComu rifirimentu ccassutta cc'è lu riggistru dî supprissioni:",
+       "blocklog-showlog": "St'utenti fu bluccatu ntô passatu.\nComu rifirimentu ccassutta c'è lu riggistru dî blocchi:",
+       "blocklog-showsuppresslog": "St'utenti fu bluccatu e ammucciatu ntô passatu.\nComu rifirimentu ccassutta c'è lu riggistru dî supprissioni:",
        "blocklogentry": "hà bluccatu [[$1]]; scadenza $2 $3",
        "reblock-logentry": "Canciau li mpustazzioni dû bloccu pi [[$1]] cu na scadenza di $2 $3",
-       "blocklogtext": "Chistu è l'alencu di l'azzioni di bloccu e sbloccu di l'utenti.\nLi nnirizzi IP bluccati autumaticamenti nun sunnu alincati.\nCunzurtari l'[[Special:BlockList|alencu dî blocchi]] pi' vìdiri li furbanna e' li blocchi chi' sunnu 'n viguri pi' com'ora.",
-       "unblocklogentry": "sbluccau a' \"$1\"",
+       "blocklogtext": "Chistu è l'alencu di l'azzioni di bloccu e sbloccu di l'utenti.\nLi nnirizzi IP bluccati autumaticamenti nun sunnu alincati.\nCunzurtari l'[[Special:BlockList|alencu dî blocchi]] pi vìdiri li furbanna e li blocchi chi sunnu n viguri pi com'ora.",
+       "unblocklogentry": "sbluccau a \"$1\"",
        "block-log-flags-anononly": "sulu utenti anònimi",
        "block-log-flags-nocreate": "criazzioni account bluccata",
        "block-log-flags-noautoblock": "bloccu automàticu disattivatu",
        "ipbnounblockself": "Nun hai u pirmissu di sbluccari a' tia stissu.",
        "lockdb": "Blocca lu database",
        "unlockdb": "Sblocca lu database",
-       "lockdbtext": "Lu bloccu dû database cumporta la suspinsioni pi' tutti l'utenti dâ pussibbilitati di canciari li pàggini, mpustari li so prifirenzi, mudificari li so listi taliati, e 'n ginirali di cùmpiri tutti l'upirazzioni ca richièdinu canciamenti a lu database.\nPi' favuri cunfirma ca chistu è chiddu chi' hai ntinzioni di fari, e ca a lu tèrmini dâ manutinzzioni pruvidi a lu sbloccu dû database.",
-       "unlockdbtext": "Lu sbloccu dû database cunzenti di novu a tutti l'utenti di canciari li pàggini, mpustari li so prifirenzi, mudificari li so listi taliati, e 'n ginirali di cùmpiri tutti l'upirazzioni ca richièdinu canciamenti a lu database.\nPi' favuri cunfirma ca chistu è chiddu chi' hai ntinzioni di fari.",
+       "lockdbtext": "Lu bloccu dû database cumporta la suspinzioni pi tutti l'utenti dâ pussibbilitati di canciari li pàggini, mpustari li sò prifirenzi, canciari li sò listi taliati, e n ginirali di cùmpiri tutti l'opirazzioni c'addumànnanu canciamenti a lu database.\nPi favuri cunferma ca chistu è zocchi hai ntinzioni di fari, e ca a lu tèrmini dâ manutinzioni pruvidi a lu sbloccu dû database.",
+       "unlockdbtext": "Lu sbloccu dû database cunzenti di novu a tutti l'utenti di canciari li pàggini, mpustari li sò prifirenzi, canciari li sò listi taliati, e n ginirali di cùmpiri tutti l'opirazzioni c'addumànnanu canciamenti a lu database.\nPi favuri cunferma ca chistu è zocchi hai ntinzioni di fari.",
        "lockconfirm": "Sì, ntennu effittivamenti bluccari lu database.",
        "unlockconfirm": "Sì, effittivamenti ntennu, sutta la mè rispunzabbilitati, sbluccari lu database.",
        "lockbtn": "Blocca lu database",
        "unlockbtn": "Sblocca lu database",
-       "locknoconfirm": "Nun scigghîsti a casedda di cunfirma.",
+       "locknoconfirm": "Nun scigghisti la casedda di cunferma.",
        "lockdbsuccesssub": "Bloccu dû database esiquitu",
        "unlockdbsuccesssub": "Sbloccu dû database esiquitu",
        "lockdbsuccesstext": "Lu database hà statu bluccatu.\n<br />Arricorda di [[Special:UnlockDB|rimòviri lu bloccu]] doppu aviri accabbatu l'upirazzioni di manutinzioni.",
        "lockedbyandtime": "(di {{GENDER:$1|$1}} u $2 ê $3)",
        "move-page": "Spustamentu di $1",
        "move-page-legend": "Sposta la pàggina",
-       "movepagetext": "Adupirannu lu mòdulu ccassutta si cancia lu nomu dâ pàggina, spustannu tutta la sò crunuluggìa nta la pàggina nova.\nLu tìtulu vecchiu addiventa nu rimannu versu lu tìtulu novu.\nSi pònnu aggiurnari autumaticamenti i rimanni chi' puntàvunu ô tìtulu origginali.\nMa si' scegghî di nun fàrilu, t'hai a' assicurari ca lu spustamentu nun crea [[Special:DoubleRedirects|rimanni duppî]] o puru [[Special:BrokenRedirects|rimanni rutti]].\nE' to rispunsabbilità ch'i liami cuntìnuunu a' puntari â pàggina bona.\n\nVidi chi' la pàggina <strong>nun veni spustata</strong> siddu cc'è già na pàggina chi havi lu tìtulu novu, tranni siddu la pàggina 'n quistioni è nu rimannu e nun havi crunuluggìa di canciamenti passati.\nChistu voli diri chi' si po' canciari n'autra vota u nomu di la pàggina a' chiddu ch'avìa prima siddu si fa' nu sbagghiu, e chi nun si po' suprascrìviri na pàggina chi già esisti.\n\n<strong>Accura!</strong>\nChistu po' èssiri nu canciamentu dràsticu pi na pàggina friquintata; aviti a' èssiri sicuri di capiri li cunziquenzi prima di cuntinuari.",
+       "movepagetext": "Adupirannu lu mòdulu ccassutta si cancia lu nomu dâ pàggina, spustannu tutta la sò crunuluggìa nta la pàggina nova.\nLu tìtulu vecchiu addiventa nu rimannu versu lu tìtulu novu.\nSi ponnu aggiurnari autumaticamenti li rimanni chi puntàvanu ô tìtulu origginali.\nMa si scegghi di nun fàrilu, t'hai a assicurari ca lu spustamentu nun crea [[Special:DoubleRedirects|rimanni duppî]] o puru [[Special:BrokenRedirects|rimanni rutti]].\nÈ tò rispunzabbilità chi li liami cuntìnuanu a puntari â pàggina bona.\n\nVidi chi la pàggina <strong>nun veni spustata</strong> siddu c'è già na pàggina chi havi lu tìtulu novu, tranni siddu la pàggina n quistioni è nu rimannu e nun havi crunuluggìa di canciamenti passati.\nChistu voli diri chi si pò canciari n'àutra vota lu nomu di la pàggina a chiddu c'avìa prima siddu si fa nu sbagghiu, e chi nun si pò suprascrìviri na pàggina chi già esisti.\n\n<strong>Accura!</strong>\nChistu pò èssiri nu canciamentu dràsticu pi na pàggina friquintata; aviti a èssiri sicuri di capiri li cunziquenzi prima di cuntinuari.",
        "movepagetext-noredirectfixer": "Usannu lu mòdulu ccà sutta vui canciati lu nomu dâ pàggina, e spustati tutta la sò storia versu la pàggina nova. Lu tìtulu vecchiu addiventa na pàggina di rinnirizzamentu versu lu tìtulu novu. \nAssicuràtivi ca lu spustamentu nun criau [[Special:DoubleRedirects|redirect duppi]] o [[Special:BrokenRedirects|redirect rumputi]]. Vui siti rispunzàbbili dî liami chi avìssiru a puntari â pàggina giusta.\n\nLa pàggina '''nun''' è spustata siddu cc'è già na pàggina cu lu tìtulu novu, tranni chi la pàggina 'n chistioni è vacanti o è na pàggina di ''redirect'' e nun havi n'archiviu di canciamenti.\nChistu signìfica chi vui putiti rinuminari la pàggina cu lu nomu vecchiu si aviti sbagghiatu, e chi nun putiti suprascrìviri nta na pàggina chi esisti già.\n\n'''Accura!'''\nChistu pò èssiri nu canciamentu dràsticu pi na pàggina pupulari; aviti a èssiri sicuri di capiri li cunziquenzi prima di cuntinuari.",
-       "movepagetalktext": "La pàggina di discussioni sarravi autumaticamenti spustata cud idda <strong>a' menu chi':</strong>\n*Na pàggina di discussioni nun vacanti già esisti cu lu nomu novu, o puru\n*Nun scegghî la casedda ccassutta.\n\nNta sti casi, si' voi, hâ' spustari o jùnciri la pàggina di discussioni a' manu.",
+       "movepagetalktext": "La pàggina di discussioni è autumaticamenti spustata cu idda <strong>a menu chi:</strong>\n*Na pàggina di discussioni nun vacanti già esisti cu lu nomu novu, o puru\n*Nun scegghi la casedda ccassutta.\n\nNta sti casi, si voi, hai a spustari o jùnciri la pàggina di discussioni a manu.",
        "movearticle": "Sposta la pàggina",
        "moveuserpage-warning": "<strong>Accura:</strong> Stai spustannu a pàggina di n'utenti. Hâ' sapìri chi' sulu a pàggina sarravi spustata, l'utenti <em>nun sarravi</em> canciatu di nomu.",
-       "movecategorypage-warning": "<strong>Accura:</strong> Stai spustannu a pàggina di na catigurìa. Hâ' sapìri chi' sulu a pàggina sarravi spustata, i pàggini chi' si tròvunu ntâ catigurìa vecchia <em>nun sarrannu</em> catigurizzati nta chidda nova.",
+       "movecategorypage-warning": "<strong>Accura:</strong> Stai spustannu la pàggina di na catigurìa. Hai a sapìri chi sulu la pàggina è spustata, li pàggini chi s'attròvanu ntâ catigurìa vecchia <em>nun sunnu</em> catigurizzati nta chidda nova.",
        "movenologintext": "Lu spustamentu dî pàggini è cunzintitu sulu a l'utenti riggistrati c'hannu esiquitu l'[[Special:UserLogin|accessu]] a lu situ.",
        "movenotallowed": "Nun hai li pirmessi nicissari a lu spustamentu dê pàggini.",
        "movenotallowedfile": "Nun ci su' li pirmessi nicissàrii pi spustari file.",
        "immobile-target-page": "Nun pòi spustari nti stu tìtulu.",
        "bad-target-model": "A distinazzioni vuluta adòpira nu mudellu di cuntinutu diffirenti. Nun si po' cunvèrtiri dû $1 ô $2.",
        "imagenocrossnamespace": "Nun pòi spustari na mmàggini fora dû namespace Mmàggini.",
-       "nonfile-cannot-move-to-file": "Nun si po' spustari ntô namespace file chiddu chi' nun è nu file.",
+       "nonfile-cannot-move-to-file": "Nun si pò spustari ntô namespace file zocchi nun è nu file.",
        "imagetypemismatch": "La estensioni nova dû file cun currispunni â sò estensioni riali",
        "imageinvalidfilename": "Lu nomu dû file di distinazzioni nun è validu",
        "fix-double-redirects": "Aggiorna tutti li redirect chi puntanu ô titulu urigginali",
        "move-leave-redirect": "Lassa darreri nu redirect",
-       "protectedpagemovewarning": "<strong>Accura:</strong> Sta pàggina fu' prutiggiuta a' manera chi' sulu l'utenti cu' privileggi d'amministraturi la ponnu spustari.\nPi' rifirimentu, ccassutta è ripurtata l'ùltima vuci dû riggistru:",
-       "semiprotectedpagemovewarning": "<strong>Nota:</strong> Sta pàggina fu' prutiggiuta a' manera chi' sulu l'utenti riggistrati la ponnu spustari.\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
+       "protectedpagemovewarning": "<strong>Accura:</strong> Sta pàggina fu prutiggiuta di manera chi sulu l'utenti cu privileggi d'amministraturi la ponnu spustari.\nPi rifirimentu, ccassutta è arripurtata l'ùrtima vuci dû riggistru:",
+       "semiprotectedpagemovewarning": "<strong>Nota:</strong> Sta pàggina fu prutiggiuta di manera chi sulu l'utenti riggistrati la ponnu spustari.\nPi rifirimentu, ccassutta è arripurtata l'ùrtima vuci dû riggistru:",
        "move-over-sharedrepo": "== U file già esisti ==\n[[:$1]] già esisti ntôn dipòsitu cunnivisu. Spustari nu file nta chistu titulu suprascriviravi u file cunnivisu.",
        "file-exists-sharedrepo": "U nomu di file scigghiutu già è adupiratu ntôn dipòsitu cunnivisu.\nPi' favuri scegghî n'autru nomu.",
        "export": "Esporta pàggini",
-       "exporttext": "È pussìbbili espurtari lu testu e la cronoluggìa dî canciamenti di na pàggina o d'un gruppu di pàggini n furmatu XML pi mpurtàrili n àutri siti ca utilìzzanu lu software MediaWiki, attraversu la pàggina [[Special:Import|d'importu]].\n\nP'espurtari li pàggini innicari li tìtuli ntâ casella di testu suttastanti, unu pi riga, e spicificari siddu s'addisìa attèniri la virsioni currenti e tutti li virsioni pricidenti, cu li dati dâ cronoluggìa dâ pàggina, oppuru surtantu l'ùrtima virsioni e li dati currispunnenti a l'ùrtimu canciamentu.\n\nNta st'ùrtimu casu si pò macari utilizzari na lijami, p'asempiu [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] p'espurtari \"[[{{MediaWiki:Mainpage}}]]\".",
+       "exporttext": "È pussìbbili spurtari lu testu e la cronoluggìa dî canciamenti di na pàggina o d'un gruppu di pàggini n furmatu XML pi mpurtàrili n àutri siti ca utilìzzanu lu software MediaWiki, attraversu la pàggina [[Special:Import|di mportu]].\n\nPi spurtari li pàggini innicari li tìtuli ntâ casella di testu suttastanti, unu pi riga, e spicificari siddu s'addisìa ottèniri la virsioni currenti e tutti li virsioni pricidenti, cu li dati dâ cronuluggìa dâ pàggina, oppuru surtantu l'ùrtima virsioni e li dati currispunnenti a l'ùrtimu canciamentu.\n\nNta st'ùrtimu casu si pò macari utilizzari na lijami, p'asempiu [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] pi spurtari \"[[{{MediaWiki:Mainpage}}]]\".",
        "exportall": "Esporta tutti i pàggini",
        "exportcuronly": "Ncludi sulu la rivisioni attuali, nun la ntera cronoluggìa",
        "exportnohistory": "---- '''Nota:''' l'espurtazzioni dâ ntera cronoluggìa dî pàggini attraversu sta nterfaccia hà stata disattivata pi mutivi ligati a li pristazzioni dû sistema.",
        "thumbnail_error_remote": "Messaggiu d'erruri di $1:\n$2",
        "djvu_page_error": "Nùmmuru di pàggina DjVu erratu",
        "djvu_no_xml": "Mpussibbili òtteniri lu XML pô file DjVu",
-       "thumbnail-temp-create": "Nun fu' pussìbbili criari nu file timpuraniu pâ miniatura",
+       "thumbnail-temp-create": "Nun fu pussìbbili criari nu file timpuràniu pâ miniatura",
        "thumbnail-dest-create": "Nun fu' pussìbbili sarvari a miniatura ntâ distinazzioni",
        "thumbnail_invalid_params": "Parametri antiprima nun validi",
        "thumbnail_toobigimagearea": "U file è cchiu' granni di $1",
        "thumbnail_image-missing": "Pari èssiri mancanti lu file: $1",
        "thumbnail_image-failure-limit": "Cc'hannu statu troppu tintativi ($1 o cchiu' ssai) di ginirari sta miniatura. Pi' favuri prova n'autra vota cchiu' tardu.",
        "import": "Mporta pàggini",
-       "importinterwiki": "Mpurtazzioni di n'autra wiki",
-       "import-interwiki-text": "Silizziunari na wiki e lu tìtulu di na pàggina a' mpurtari.\nLi dati dî virsioni e li nomi di l'autura sarannu mantinuti.\nTutti li mpurtazzioni di autri wiki vènunu riggistrati ntô [[Special:Log/import|riggistru dî mpurtazzioni]].",
+       "importinterwiki": "Mpurtazzioni di n'àutra wiki",
+       "import-interwiki-text": "Silizziunari na wiki e lu tìtulu di na pàggina a mpurtari.\nLi dati dî virsioni e li noma di l'autura sunnu mantinuti.\nTutti li mpurtazzioni d'àutri wiki vèninu riggistrati ntô [[Special:Log/import|riggistru dî mpurtazzioni]].",
        "import-interwiki-sourcewiki": "Wiki surgenti:",
        "import-interwiki-sourcepage": "Pàggina surgenti:",
        "import-interwiki-history": "Copia la ntera cronoluggìa di sta pàggina",
        "import-interwiki-templates": "Includi tutti li template",
        "import-interwiki-submit": "Mporta",
-       "import-mapping-default": "Importa ntê distinazzioni pridifinuti",
-       "import-mapping-namespace": "Importa nta nu namespace:",
-       "import-mapping-subpage": "Importa comu suttapàggini di sta pàggina:",
+       "import-mapping-default": "Mporta ntê distinazzioni pridifinuti",
+       "import-mapping-namespace": "Mporta nta nu namespace:",
+       "import-mapping-subpage": "Mporta comu suttapàggini di sta pàggina:",
        "import-upload-filename": "Nomu file:",
        "import-comment": "Oggettu:",
        "importtext": "Pi favuri, esporta lu file dâ wiki surgenti adupirannu [[Special:Export|a funziunalità d'espurtazzioni]].\nSàrvalu supra a' lu tò computer e carrìcalu ccà.",
        "importcantopen": "Mpussìbbili grapiri lu file di mpurtazzioni",
        "importbadinterwiki": "Lijami inter-wiki erratu",
        "importsuccess": "Mpurtazzioni arrinisciuta.",
-       "importnosources": "Nun hâ statu difinuta nudda wiki d'unni mpurtari e li carricamenti diretti dâ cronuluggìa sunnu disattivati.",
+       "importnosources": "Nun fu difinuta nudda wiki d'unni mpurtari e li carricamenti diretti dâ cronuluggìa sunnu disattivati.",
        "importnofile": "Nun hà statu carrcatu nuddu file pi la mpurtazzioni.",
        "importuploaderrorsize": "Caricamentu dû file pi la mpurtazzioni non arrinisciutu. Lu file è cchiù granni di li diminzioni màssimi cunzentiti pi l'upload.",
        "importuploaderrorpartial": "Caricamentu dû file pi la mpurtazzioni non arrinisciutu. Sulamenti na parti dû file vinni caricatu.",
        "importuploaderrortemp": "Caricamentu dû file pi la mpurtazzioni non arrinisciutu. Manca na cartedda timpurània.",
        "import-parse-failure": "Sbagghiu d'anàlisi ntâ mpurtazzioni XML",
        "import-noarticle": "Nudda pàggina di mpurtari.",
-       "import-nonewrevisions": "Nudda virsioni fu' mpurtata (o già c'èrunu tutti, o furu sautati tutti picchì mmatteru erruri).",
+       "import-nonewrevisions": "Nudda virsioni fu mpurtata (o già c'èranu tutti, o foru sautati tutti pirchì ammatteru erruri).",
        "xml-error-string": "$1 a riga $2, culonna $3 (byte $4): $5",
        "import-upload": "Càrrica dati XML",
        "import-token-mismatch": "Si pèrsiru li dati rilativi a la sissioni. Pi piaciri, prova n'àutra vota.",
        "import-invalid-interwiki": "E' mpussìbbili mpurtari dû pruggettu wiki nnicatu.",
        "import-error-edit": "A pàggina \"$1\" nun fu' mpurtata picchì nun hai u pirmissu di canciàrila.",
-       "import-error-create": "La pàggina \"$1\" nun fu' mpurtata picchì nun hai u pirmissu di criàrila.",
-       "import-error-interwiki": "La pàggina \"$1\" nun fu' mpurtata picchì lu so nomu è risirvatu pî lijami di fora (inter-wiki).",
+       "import-error-create": "La pàggina \"$1\" nun fu mpurtata pirchì nun hai lu pirmissu di criàrila.",
+       "import-error-interwiki": "La pàggina \"$1\" nun fu mpurtata picchì lu sò nomu è risirvatu pî lijami di fora (inter-wiki).",
        "import-error-special": "A pàggina \"$1\" nun fu' mpurtata picchì apparteni a' nu namespace spiciali chi' nun cunsenti pàggini.",
        "import-error-invalid": "A pàggina \"$1\" nun fu' mpurtata picchì u nomu unni sarrìa mpurtata nun è vàlidu supra a' sta wiki.",
        "import-error-unserialize": "A virsioni $2 dâ pàggina \"$1\" nun si potti di-sirializzari. Era signatu chi' sta virsioni adupirava u mudellu di cuntinutu $3 sirializzatu comu $4.",
-       "import-error-bad-location": "A virsioni $2 chi' adòpira u mudellu di cuntinutu $3 nun si po' mimurizzari nta \"$1\" supra a' sta wiki, picchì ddu mudellu nun è suppurtatu nta dda pàggina.",
+       "import-error-bad-location": "La virsioni $2 chi adòpira lu mudellu di cuntinutu $3 nun si pò mimurizzari nta \"$1\" supra a sta wiki, pirchì ddu mudellu nun è suppurtatu nta dda pàggina.",
        "import-options-wrong": "{{PLURAL:$2|Opzioni sbagghiata|Opzioni sbagghiati}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "A pàggina ràdica spicificata nun è vàlida comu tìtulu.",
        "import-rootpage-nosubpage": "U namespace \"$1\" dâ pàggina ràdica nun cunsenti suttapàggini.",
        "javascripttest-pagetext-unknownframework": "Framework di virìfica \"$1\" scanusciutu.",
        "javascripttest-pagetext-unknownaction": "Azzioni scanusciuta \"$1\".",
        "javascripttest-pagetext-frameworks": "Pi' favuri scegghî unu dî siguenti framework di virìfica: $1",
-       "javascripttest-pagetext-skins": "Scegghî na peddi câ quali esiguìri i virìfichi:",
+       "javascripttest-pagetext-skins": "Scegghi na peddi câ quali esiguiri li virìfichi:",
        "javascripttest-qunit-intro": "Talìa [$1 a ducumintazzioni a' prupositu dî virìfichi] supra a' mediawiki.org.",
        "tooltip-pt-userpage": "La tò pàggina utenti",
        "tooltip-pt-anonuserpage": "La pàggina utenti di stu ndirizzu IP",
        "tooltip-pt-mycontris": "La lista dî to cuntribbuti",
        "tooltip-pt-login": "La riggistrazzioni è cunzigghiata, puru siddu nun obbrigatoria.",
        "tooltip-pt-logout": "Nisciuta",
-       "tooltip-pt-createaccount": "Si' nvitatu a criari nu cuntu e tràsiri; però nun è obbligatoriu",
+       "tooltip-pt-createaccount": "Sî nvitatu a criari nu cuntu e tràsiri; pirò nun è obbligatoriu",
        "tooltip-ca-talk": "Vidi li discussioni rilativi a sta pàggina",
        "tooltip-ca-edit": "Cancia sta pàggina",
        "tooltip-ca-addsection": "Agghiunci un cummentu a sta discussioni.",
        "tooltip-ca-delete": "Cancella sta pàggina",
        "tooltip-ca-undelete": "Riprìstina la pàggina com'era prima dâ cancillazzioni",
        "tooltip-ca-move": "Sposta sta pàggina (cancia tìtulu)",
-       "tooltip-ca-watch": "Agghiunci sta pàggina â to lista taliata",
-       "tooltip-ca-unwatch": "Leva sta pàggina dâ to lista taliata",
+       "tooltip-ca-watch": "Agghiunci sta pàggina â tò lista taliata",
+       "tooltip-ca-unwatch": "Leva sta pàggina dâ tò lista taliata",
        "tooltip-search": "Cerca 'n {{SITENAME}}",
        "tooltip-search-go": "Vai a na pàggina cu chistu nomu esattu siddu asisti",
-       "tooltip-search-fulltext": "Arriscedi pàggini pi chistu testu",
+       "tooltip-search-fulltext": "Attrova pàggini pi stu testu",
        "tooltip-p-logo": "Pàggina principali",
        "tooltip-n-mainpage": "Vìsita la pàggina principali",
        "tooltip-n-mainpage-description": "Talìa la pàggina principali",
        "tooltip-ca-nstab-main": "Vidi l'artìculu",
        "tooltip-ca-nstab-user": "Vidi la pàggina utenti",
        "tooltip-ca-nstab-media": "Vidi la pàggina dû file multimidiali",
-       "tooltip-ca-nstab-special": "Chista è na pàggina spiciali, nun pò èssiri canciata",
+       "tooltip-ca-nstab-special": "Chista è na pàggina spiciali, e nun si pò canciari",
        "tooltip-ca-nstab-project": "Vidi la pàggina di sirvizziu",
        "tooltip-ca-nstab-image": "Vidi la pàggina dâ mmàggini",
        "tooltip-ca-nstab-mediawiki": "Vidi lu missaggiu di sistema",
        "tooltip-preview": "Antiprima dî canciamenti, ùsala prima di sarvari!",
        "tooltip-diff": "Talìa (mudalitati diff) li canciamenti c'hai fattu.",
        "tooltip-compareselectedversions": "Talìa li diffirenzi tra li dui virsioni silizziunati di sta pàggina.",
-       "tooltip-watch": "Agghiunci sta pàggina â to lista taliata",
+       "tooltip-watch": "Agghiunci sta pàggina â tò lista taliata",
        "tooltip-watchlistedit-normal-submit": "Leva i tìtuli",
        "tooltip-watchlistedit-raw-submit": "Aggiorna la lista taliata",
        "tooltip-recreate": "Ricrea la pàggina puru siddu hà statu cancillata",
        "siteusers": "$1, {{PLURAL:$2|utenti|utenti}} di {{SITENAME}}",
        "anonusers": "{{PLURAL:$2|utenti anònimu|utenti anònimi}} di {{SITENAME}} $1",
        "creditspage": "Autura dâ pàggina",
-       "nocredits": "Nun cc'è nudda nfurmazzioni supra a' l'autura di sta pàggina.",
+       "nocredits": "Nun c'è nudda nfurmazzioni supra a l'autura di sta pàggina.",
        "spamprotectiontitle": "Filtru anti-spam",
        "spamprotectiontext": "La pàggina ca vulevi sarvari hà statu bluccata dû filtru anti-spam. Chistu è prubbabbirmenti duvutu â prisenza di nu liami a nu situ sternu bluccatu.",
        "spamprotectionmatch": "Lu nostru filtru anti-spam hà ndividuatu lu testu siquenti: $1",
        "spambot_username": "MediaWiki - sistema di rimuzzioni spam",
        "spam_reverting": "Ripristinata l'ùrtima virsioni priva di lijami versu $1",
-       "spam_blanking": "Pàggina svacantata, tutti li virsioni cuntinìunu lijami versu $1",
-       "spam_deleting": "Pàggina cancillata, tutti li virsioni cuntinìunu lijami versu $1",
-       "simpleantispam-label": "Cuntrollu anti spam.\n<strong>NUN</strong> jìnchiri stu campu!",
+       "spam_blanking": "Pàggina svacantata, tutti li virsioni cuntinìanu lijami versu $1",
+       "spam_deleting": "Pàggina cancillata, tutti li virsioni cuntinìanu lijami versu $1",
+       "simpleantispam-label": "Cuntrollu anti-spam.\n<strong>NUN JÌNCHIRI</strong> stu campu!",
        "pageinfo-title": "Nfurmazzioni supra a' \"$1\"",
        "pageinfo-not-current": "Sfurtunatamenti, nun è pussìbbili furnìri sti nfurmazzioni pî virsioni vecchî.",
        "pageinfo-header-basic": "Nfurmazzioni essinziali",
        "pageinfo-robot-index": "Cunsintuta",
        "pageinfo-robot-noindex": "Pruibbuta",
        "pageinfo-watchers": "Quanti talìunu sta pàggina",
-       "pageinfo-visiting-watchers": "Nùmmiru d’utenti ntirissati a’ sta pàggina ca hannu taliatu li canciamenti cchiu’ ricenti",
-       "pageinfo-few-watchers": "Cchiu' picca di $1 {{PLURAL:$1|taliaturi|taliatura}}",
-       "pageinfo-few-visiting-watchers": "Forsi cc’è quarchi utenti ntirissatu ca talìa li canciamenti ricenti, forsi no",
+       "pageinfo-visiting-watchers": "Nùmmiru d'utenti ntirissati a sta pàggina ca hannu taliatu li canciamenti chiù ricenti",
+       "pageinfo-few-watchers": "Cchiù picca di $1 {{PLURAL:$1|taliaturi|taliatura}}",
+       "pageinfo-few-visiting-watchers": "Forsi c'è quarchi utenti ntirissatu ca talìa li canciamenti ricenti, forsi no",
        "pageinfo-redirects-name": "Nùmmiru di rimanni a' sta pàggina",
        "pageinfo-subpages-name": "Nùmmiru di suttapàggini di sta pàggina",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|chi' è un rimannu|chi' su' rimanni}}; $3 {{PLURAL:$3|chi' nun è un rimannu|chi' nun su' rimanni}})",
        "pageinfo-lastuser": "Ùltimu cuntribbuturi",
        "pageinfo-lasttime": "Data di l'ùltimu canciamentu",
        "pageinfo-edits": "Nùmmiru tutali di canciamenti",
-       "pageinfo-authors": "Nùmmiru tutali dautura distinti",
+       "pageinfo-authors": "Nùmmiru tutali d'autura distinti",
        "pageinfo-recent-edits": "Nùmmiru di canciamenti ricenti (nta l'ultimu pirìudu di $1)",
        "pageinfo-recent-authors": "Nùmmiru di cuntribbutura ricenti distinti",
        "pageinfo-magic-words": "{{PLURAL:$1|Palora màggica|Palori màggichi}} ($1)",
        "pageinfo-category-pages": "Nùmmiru di pàggini",
        "pageinfo-category-subcats": "Nùmmiru di suttacatigurìi",
        "pageinfo-category-files": "Nùmmiru di file",
-       "markaspatrolleddiff": "Marca comu battugghiatu",
-       "markaspatrolledtext": "Marca sta pàggina comu battugghiata",
-       "markedaspatrolled": "Marcata comu battugghiata",
+       "markaspatrolleddiff": "Marca comu virificatu",
+       "markaspatrolledtext": "Marca sta pàggina comu virificata",
+       "markedaspatrolled": "Marcata comu virificata",
        "markedaspatrolledtext": "La virsioni scigghiuta di [[:$1]] fu' marcata comu battugghiata.",
-       "rcpatroldisabled": "Lu battugghiamentu di l'ùrtimi canciamenti è disattivatu",
-       "rcpatroldisabledtext": "La funzioni di battugghiamentu di l'ùrtimi canciamenti com'ad ora è disattivata.",
-       "markedaspatrollederror": "Nun si po' marcari comu battugghiatu",
-       "markedaspatrollederrortext": "Hâ' spicificari na virsioni di marcari comu battugghiata.",
-       "markedaspatrollederror-noautopatrol": "Nun hai lu pirmissu di marcari li to canciamenti comu battugghiati.",
+       "rcpatroldisabled": "La virìfica di l'ùrtimi canciamenti è disattivata",
+       "rcpatroldisabledtext": "La funzioni di virìfica di l'ùrtimi canciamenti com'a ora è disattivata.",
+       "markedaspatrollederror": "Nun si pò marcari comu virificatu",
+       "markedaspatrollederrortext": "Hai a spicificari na virsioni di marcari comu virificata.",
+       "markedaspatrollederror-noautopatrol": "Nun hai lu pirmissu di marcari li tò canciamenti comu virificati.",
        "markedaspatrollednotify": "Stu canciamentu a' $1 fu' marcatu comu battugghiatu.",
-       "markedaspatrollederrornotify": "La marcatura comu battugghiatu nun riniscìu.",
-       "patrol-log-page": "Riggìstru dî battugghî",
-       "patrol-log-header": "Chistu è nu riggìstru dî virsioni battugghiati.",
-       "log-show-hide-patrol": "$1 lu riggistru dî battugghî",
+       "markedaspatrollederrornotify": "La marcatura comu virificatu nun arriniscìu.",
+       "patrol-log-page": "Riggistru dî canciamenti virificati",
+       "patrol-log-header": "Chistu è nu riggistru dî virsioni virificati.",
+       "log-show-hide-patrol": "$1 lu riggistru dî canciamenti virificati",
        "log-show-hide-tag": "$1 lu riggistru di l'etichetti",
        "deletedrevision": "Cancillata na virsioni vecchia di $1",
        "filedeleteerror-short": "Erruri ntâ cancillazzioni dû file: $1",
-       "filedeleteerror-long": "Mmatteru erruri ntô tintativu di cancillari lu file:\n\n$1",
-       "filedelete-missing": "Lu file \"$1\" nun si po' cancillari pirchì nun esisti.",
+       "filedeleteerror-long": "Ammatteru erruri ntô tintativu di cancillari lu file:\n\n$1",
+       "filedelete-missing": "Lu file \"$1\" nun si pò cancillari pirchì nun esisti.",
        "filedelete-old-unregistered": "La virsioni spicificata dû file, \"$1\", nun è cuntinuta ntâ basi di dati.",
        "filedelete-current-unregistered": "Lu file spicificatu, \"$1\", nun è cuntinutu ntâ basi di dati.",
        "filedelete-archive-read-only": "La cartella d'archiviu \"$1\" nun è scrivìbbili dû server web.",
        "file-info": "Grannizza: $1, tipu MIME: $2",
        "file-info-size": "$1 × $2 pixel, grannizza dû file: $3, tipu MIME: $4",
        "file-info-size-pages": "$1 × $2 pixel, grannizza dû file: $3, tipu MIME: $4, $5 {{PLURAL:$5|pàggina|pàggini}}",
-       "file-nohires": "Risuluzzioni cchiù auta nun nn'havi.",
-       "svg-long-desc": "File SVG, diminsioni nominali $1 × $2 pixel, grannizza dû file: $3",
-       "svg-long-desc-animated": "File SVG animatu, diminsioni numinali $1 × $2 pixel, grannizza dû file: $3",
+       "file-nohires": "Risuluzzioni cchiù àuta nun nn'havi.",
+       "svg-long-desc": "File SVG, diminzioni numinali $1 × $2 pixel, grannizza dû file: $3",
+       "svg-long-desc-animated": "File SVG animatu, diminzioni numinali $1 × $2 pixel, grannizza dû file: $3",
        "svg-long-error": "File SVG nun vàlidu: $1",
        "show-big-image": "File origginali",
-       "show-big-image-preview": "Diminsioni di st'antiprima: $1.",
+       "show-big-image-preview": "Diminzioni di st'antiprima: $1.",
        "show-big-image-other": "{{PLURAL:$2|Autra risuluzzioni|Autri risuluzzioni}}: $1.",
        "show-big-image-size": "$1 × $2 pixel",
-       "file-info-gif-looped": "a' ripitizzioni",
+       "file-info-gif-looped": "a ripitizzioni",
        "file-info-gif-frames": "$1 {{PLURAL:$1|futugramma|futugrammi}}",
        "file-info-png-looped": "a' ripitizzioni",
        "file-info-png-repeat": "ripitutu {{PLURAL:$1|na vota|$1 voti}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|futugramma|futugrammi}}",
-       "file-no-thumb-animation": "<strong>Nota: pi' causa di limitazzioni tècnichi, li miniaturi di stu file nun vènunu animati.</strong>",
-       "file-no-thumb-animation-gif": "<strong>Nota: pi' causa di limitazzioni tècnichi, li miniaturi di na mmàggini GIF a' risuluzzioni auta comu a' chista nun vènunu animati.</strong>",
+       "file-no-thumb-animation": "<strong>Nota: a càusa di limitazzioni tècnichi, li miniaturi di stu file nun vèninu animati.</strong>",
+       "file-no-thumb-animation-gif": "<strong>Nota: a càusa di limitazzioni tècnichi, li miniaturi di na mmàggini GIF a risuluzzioni àuta comu chista nun vèninu animati.</strong>",
        "newimages": "Gallarìa dî file novi",
-       "imagelisttext": "Ccassutta cc'è na lista di <strong>$1</strong> {{PLURAL:$1|file ordinatu|file ordinati}} $2.",
-       "newimages-summary": "Sta pàggina spiciali ammustra li file carricati di cchiu' picca tempu.",
+       "imagelisttext": "Ccassutta c'è na lista di <strong>$1</strong> {{PLURAL:$1|file ordinatu|file ordinati}} $2.",
+       "newimages-summary": "Sta pàggina spiciali ammustra li file carricati di cchiù picca tempu.",
        "newimages-legend": "Filtru",
-       "newimages-label": "Nomu dû file (o na so parti):",
+       "newimages-label": "Nomu dû file (o na sò parti):",
        "newimages-showbots": "Ammustra li carricamenti dî bot",
-       "noimages": "Nenti a' vìdiri.",
-       "ilsubmit": "Va cerca",
-       "bydate": "pi' data",
-       "sp-newimages-showfrom": "Ammustra li file cchiu' novi a' pàrtiri dî $2 dû $1",
+       "noimages": "Nenti a vìdiri.",
+       "ilsubmit": "Va arricerca",
+       "bydate": "pi data",
+       "sp-newimages-showfrom": "Ammustra li file cchiù novi a pàrtiri dî $2 dû $1",
        "seconds": "{{PLURAL:$1|un sicunnu|$1 sicunni}}",
        "minutes": "{{PLURAL:$1|un minutu|$1 minuti}}",
        "hours": "{{PLURAL:$1|un'ura|$1 uri}}",
        "saturday-at": "Sàbbatu ê $1",
        "sunday-at": "Dumìnica ê $1",
        "yesterday-at": "Ajeri ê $1",
-       "bad_image_list": "Lu furmatu è lu siguenti:\n\nSu' pigghiati a' cunsiddirazzioni sulu li vuci d'elenchi puntati (li righi ca accumènzanu cû sìmmulu *).\nLa prima lijami nta ogni' riga havi a' puntari ôn file nun addisiatu.\nSi' cci su' autri lijami ntâ stissa riga, su' cunsiddirati comu eccizzioni, vali a' diri pàggini unni lu file po' èssiri ncurpuratu.",
+       "bad_image_list": "Lu furmatu è lu siguenti:\n\nSù pigghiati a cunziddirazzioni sulu li vuci d'elenchi puntati (li righi c'accumènzanu cû sìmmulu *).\nLa prima lijami nta ogni riga havi a puntari ôn file nun addisiatu.\nSi ci sù àutri lijami ntâ stissa riga, sù cunziddirati comu eccizzioni, vali a diri pàggini unni lu file pò èssiri ncurpuratu.",
        "metadata": "Metadati",
-       "metadata-help": "Stu file cunteni autri nfurmazzioni, prubbabbirmenti agghiunciuti dâ màchina futugràfica o dû scanner adupirati pi' criàrilu o diggitalizzàrilu.\nSiddu lu file hâ statu canciatu dâ so cunnizzioni origginali, certi dittagghî putìssiru nun currispùnniri ô statu novu dû file.",
+       "metadata-help": "Stu file cunteni àutri nfurmazzioni, prubbabbirmenti agghiunciuti dâ màchina futugràfica o dû scanner adupirati pi criàrilu o diggitalizzàrilu.\nSiddu lu file fu canciatu dâ sò cunnizzioni origginali, certi dittagghî putìssiru nun currispùnniri ô statu novu dû file.",
        "metadata-expand": "Ammustra li nfurmazzioni dittagghiati",
        "metadata-collapse": "Ammuccia li nfurmazzioni dittagghiati",
-       "metadata-fields": "Li campi dî metadati dâ mmàggini elincati nta stu missaggiu sarrannu ammustrati ntâ pàggina dâ mmàggini quannu la tavula dî metadati è strinciuta.\nL'àutri campi comu mpustazzioni pridifinuta sarrannu ammucciati.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Li campi dî metadati dâ mmàggini elincati nta stu missaggiu sunnu ammustrati ntâ pàggina dâ mmàggini quannu la tàvula dî metadati è strinciuta.\nL'àutri campi comu mpustazzioni pridifinuta sunnu ammucciati.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Larghizza",
        "exif-imagelength": "Autizza",
-       "exif-bitspersample": "Bit pi' cumpunenti",
+       "exif-bitspersample": "Bit pi cumpunenti",
        "exif-compression": "Miccanismu di cumprissioni",
        "exif-photometricinterpretation": "Cumpusizzioni dû pixel",
        "exif-orientation": "Orientamentu",
        "exif-originaldocumentid": "Idintificaturi unìvucu dû ducumentu origginali",
        "exif-licenseurl": "URL dâ licenza di drittu d'auturi",
        "exif-morepermissionsurl": "Nfurmazzioni pâ cuncissioni di autri licenzi",
-       "exif-attributionurl": "Quannu si fa' usu di st'òpira, si prega di mèttiri na lijami versu",
+       "exif-attributionurl": "Quannu si fa usu di st'òpira, si prega di mèttiri na lijami versu",
        "exif-preferredattributionname": "Quannu si fa' usu di st'òpira, si prega di attribuìrinni a patirnità a'",
        "exif-pngfilecomment": "Cummentu dû file PNG",
        "exif-disclaimer": "Dichiarazzioni di esclusioni di rispunsabbilità",
        "monthsall": "tutti",
        "confirmemail": "Cunfirma dû nnirizzu di posta elittrònica",
        "confirmemail_noemail": "Nun hà statu ndicatu un ndirizzu e-mail vàlidu ntê propi [[Special:Preferences|prifirenzi]].",
-       "confirmemail_text": "{{SITENAME}} dumanna la cunvàlida dû to nnirizzu di posta elittrònica pi' putìri adupirari li funziunalità assuciati.\nCalca lu buttuni ccassutta pi' mannari nu missaggiu e-mail di cunfirma a lu to nnirizzu.\nNtô missaggiu cci sarravi na lijami cuntinenti un còdici;\ncàrrica dda lijami cu lu to browser pi' cunfirmari ca lu to nnirizzu di posta elittrònica è vàlidu.",
-       "confirmemail_pending": "Già nu còdici di cunfirma t'havi statu mannatu via posta elittrònica;\nsiddu hai criatu lu to cuntu di picca tempu, è mègghiu ch'aspètti l'arrivu dû còdici pi' quarchi minutu prima di pruvari a' addumannàrinni unu novu.",
+       "confirmemail_text": "{{SITENAME}} addumanna la cunvàlida dû tò nnirizzu di posta elittrònica pi putiri adupirari li funziunalità assuciati.\nCarca lu buttuni ccassutta pi mannari nu missaggiu e-mail di cunferma a lu tò nnirizzu.\nNtô missaggiu c'è un lijami ca cunteni un còdici;\ncàrrica ddu lijami cô tò browser pi cunfirmari ca lu tò nnirizzu di posta elittrònica è vàlidu.",
+       "confirmemail_pending": "Già nu còdici di cunferma ti fu mannatu via posta elittrònica;\nsiddu criasti lu tò cuntu di picca tempu, è megghiu c'aspetti l'arrivu dû còdici pi quarchi minutu prima di pruvari a addumannàrinni unu novu.",
        "confirmemail_send": "Manna un còdici di cunfirma via e-mail",
        "confirmemail_sent": "Missaggiu e-mail di cunfirma mannatu.",
-       "confirmemail_oncreate": "Un còdici di cunfirma fu' spidutu a lu to nnirizzu di posta elittrònica.\nLu còdici nun servi pi' tràsiri nta lu situ, ma ll'hâ' prisintari pi' putiri attivari tutti li funzioni dâ wiki ca fannu usu dâ posta elittrònica.",
+       "confirmemail_oncreate": "Un còdici di cunferma fu spidutu a lu tò nnirizzu di posta elittrònica.\nLu còdici nun servi pi tràsiri nta lu situ, ma l'hai a prisintari pi putiri attivari tutti li funzioni dâ wiki ca fannu usu dâ posta elittrònica.",
        "confirmemail_sendfailed": "{{SITENAME}} nun potti mannari lu to missaggiu e-mail di cunfirma.\nVirificari ca lu nnirizzu nun cunteni caràttiri nun vàlidi.\n\nMissaggiu d'erruri dû sirvizziu di posta: $1",
        "confirmemail_invalid": "Còdici di cunfirma nun vàlidu.\nLu còdici putissi èssiri scadutu.",
-       "confirmemail_needlogin": "Pi' favuri $1 pi' cunvalidari lu to nnirizzu di posta elittrònica.",
+       "confirmemail_needlogin": "Pi favuri $1 pi cunvalidari lu tò nnirizzu di posta elittrònica.",
        "confirmemail_success": "Lu ndirizzu e-mail è cunfirmatu. Ora è pussìbbili esèquiri l'accessu e fari chinu usu dû situ.",
        "confirmemail_loggedin": "Lu tò nnirizzu email fu ora cunfirmatu.",
        "confirmemail_subject": "Cunfirma dû nnirizzu di posta elittronica pi' {{SITENAME}}",
-       "confirmemail_body": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\nriggistràu un cuntu \"$2\" cu stu nnirizzu di posta elittrònica supra a' {{SITENAME}}.\n\nPi' cunfirmari ca stu cuntu apparteni pi' davera a' tia,\ne attivari li funziunalità di posta elittrònica supra a' {{SITENAME}},\napri sta lijami cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca sta lijami\npi' nigari la cunfirma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunfirma scadi û $4.",
-       "confirmemail_body_changed": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\ncanciàu u nnirizzu di posta elittrònica dû cuntu \"$2\" supra a' {{SITENAME}} mpustannulu a' chistu.\n\nPi' cunfirmari ca stu cuntu apparteni pi' davera a' tia,\ne attivari n'autra vota i funziunalità di posta elittrònica supra a' {{SITENAME}},\napri sta lijami cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca sta lijami\npi' nigari la cunfirma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunfirma scadi û $4.",
-       "confirmemail_body_set": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\nmpustàu stu nnirizzu di posta elittrònica pû cuntu \"$2\" supra a' {{SITENAME}}.\n\nPi' cunfirmari ca stu cuntu apparteni pi' davera a' tia,\ne attivari li funziunalità di posta elittrònica supra a' {{SITENAME}},\napri sta lijami cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca sta lijami\npi' nigari la cunfirma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunfirma scadi û $4.",
+       "confirmemail_body": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\nriggistrau un cuntu \"$2\" cu stu nnirizzu di posta elittrònica supra a {{SITENAME}}.\n\nPi cunfirmari ca stu cuntu apparteni pi daveru a tìa,\ne attivari li funziunalità di posta elittrònica supra a {{SITENAME}},\ngrapi sta lijami cû tò browser:\n\n$3\n\nSi mmeci stu cuntu *nun t'apparteni*, clicca sta lijami\npi nigari la cunferma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunferma scadi lu $4.",
+       "confirmemail_body_changed": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\ncanciau lu nnirizzu di posta elittrònica dû cuntu \"$2\" supra a {{SITENAME}} mpustànnulu a chistu.\n\nPi cunfirmari ca stu cuntu apparteni pi daveru a tìa,\ne attivari n'àutra vota li funziunalità di posta elittrònica supra a {{SITENAME}},\ngrapi sta lijami cû tò browser:\n\n$3\n\nSi mmeci stu cuntu *nun t'apparteni*, clicca sta lijami\npi nigari la cunferma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunferma scadi lu $4.",
+       "confirmemail_body_set": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\nmpustau stu nnirizzu di posta elittrònica pû cuntu \"$2\" supra a {{SITENAME}}.\n\nPi cunfirmari ca stu cuntu apparteni pi daveru a tìa,\ne attivari li funziunalità di posta elittrònica supra a {{SITENAME}},\ngrapi sta lijami cû tò browser:\n\n$3\n\nSi mmeci stu cuntu *nun t'apparteni*, clicca sta lijami\npi nigari la cunferma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunferma scadi lu $4.",
        "confirmemail_invalidated": "Cunvàlida dû nnirizzu di posta elittronica nigata",
        "invalidateemail": "Nigazzioni dâ cunvàlida dâ posta elittrònica",
        "scarytranscludedisabled": "[La nchiusioni di pàggini tra siti wiki nun è attiva]",
        "scarytranscludefailed-httpstatus": "[Carricamentu dû template nun rinisciutu di $1: HTTP $2]",
        "scarytranscludetoolong": "[URL troppu longu]",
        "deletedwhileediting": "'''Accura''': Sta pàggina vinni scancillata doppu c'hai accuminzatu a scanciàrila!",
-       "confirmrecreate": "L'utenti [[User:$1|$1]] ([[User talk:$1|discussioni]]) cancillau sta pàggina appressu chi' tu avìi accuminciatu a' canciàrila, dannu sta spiegazzioni:\n: <em>$2</em>\nPi' favuri cunfirma chi' voi criari n'autra vota sta pàggina pi' davera.",
-       "confirmrecreate-noreason": "L'utenti [[User:$1|$1]] ([[User talk:$1|discussioni]]) cancillau sta pàggina appressu chi' tu avìi accuminciatu a' canciàrila. Pi' favuri cunfirma chi' voi criari n'autra vota sta pàggina pi' davera.",
+       "confirmrecreate": "L'utenti [[User:$1|$1]] ([[User talk:$1|discussioni]]) cancillau sta pàggina appressu chi tu avivi accuminzatu a canciàrila, dannu sta spigazzioni:\n: <em>$2</em>\nPi favuri cunferma chi voi criari n'àutra vota sta pàggina pi daveru.",
+       "confirmrecreate-noreason": "L'utenti [[User:$1|$1]] ([[User talk:$1|discussioni]]) cancillau sta pàggina appressu chi tu avivi accuminzatu a canciàrila. Pi favuri cunferma chi voi criari n'àutra vota sta pàggina pi daveru.",
        "recreate": "Ricrìa",
        "unit-pixel": "px",
        "confirm_purge_button": "Cunfirma",
        "confirm-purge-top": "S'addisìa puliri la cache di sta pàggina?",
        "confirm-purge-bottom": "Pulizziari la cache di na pàggina pirmetti d'ammustrari la sô virsioni cchiù nova.",
        "confirm-watch-button": "Cunfirma",
-       "confirm-watch-top": "Agghiùnciri sta pàggina â to lista taliata?",
+       "confirm-watch-top": "Agghiùnciri sta pàggina â tò lista taliata?",
        "confirm-unwatch-button": "Cunfirma",
-       "confirm-unwatch-top": "Livari sta pàggina dâ to lista taliata?",
+       "confirm-unwatch-top": "Livari sta pàggina dâ tò lista taliata?",
        "quotation-marks": "«$1»",
        "imgmultipageprev": "← pàggina pricidenti",
        "imgmultipagenext": "pàggina siquenti →",
        "lag-warn-high": "A càusa di nu ritardu eccissivu nta l'aggiurnamentu dô server di databbasi, li canciamenti appurtati {{PLURAL:$1|nta l'ùrtimu secundu|nta l'ùrtimi $1 secundi}} ponnu nun èssiri nta sta lista.",
        "watchlistedit-normal-title": "Cancia pàggini taliati",
        "watchlistedit-normal-legend": "Eliminazzioni di pàggini dâ lista dê pàggini taliati",
-       "watchlistedit-normal-explain": "Ccassutta cci sunnu li tìtuli dâ to lista taliata.\nPi' livàrinni unu, scegghî la casedda a' latu d'iddu, e clicca \"{{int:Watchlistedit-normal-submit}}\".\nPoi puru [[Special:EditWatchlist/raw|canciari la lista sutta forma di testu]].",
+       "watchlistedit-normal-explain": "Ccassutta ci sunnu li tìtuli dâ tò lista taliata.\nPi livàrinni unu, scegghi la casedda a latu d'iddu, e clicca \"{{int:Watchlistedit-normal-submit}}\".\nPoi puru [[Special:EditWatchlist/raw|canciari la lista sutta forma di testu]].",
        "watchlistedit-normal-submit": "Elìmina pàggini",
        "watchlistedit-normal-done": "Dâ lista dê pàggini taliati hà{{PLURAL:$1|&nbsp;stata eliminata na pàggina|nnu stati eliminati $1 pàggini}}:",
        "watchlistedit-raw-title": "Canciamentu dâ lista taliata sutta forma di testu",
        "watchlistedit-raw-legend": "Canciamentu dâ lista taliata sutta forma di testu",
-       "watchlistedit-raw-explain": "Ccassutta cci su' li tìtuli ntâ to lista taliata, chi' si po' canciari agghiuncennu e livannu tituli, unu pi' riga.\nQuannu hai finutu, clicca \"{{int:Watchlistedit-raw-submit}}\".\nPoi puru [[Special:EditWatchlist|canciari a lista dâ pàggina tradizziunali]].",
+       "watchlistedit-raw-explain": "Ccassutta ci sù li tìtuli ntâ tò lista taliata, chi si pò canciari agghiuncennu e livannu tìtuli, unu pi riga.\nQuannu finisci, clicca \"{{int:Watchlistedit-raw-submit}}\".\nPoi puru [[Special:EditWatchlist|canciari la lista dâ pàggina tradizziunali]].",
        "watchlistedit-raw-titles": "Pàggini:",
        "watchlistedit-raw-submit": "Aggiorna la lista taliata",
        "watchlistedit-raw-done": "La tò lista dê pàggini taliati vinni aggiurnata.",
        "watchlistedit-raw-removed": "{{PLURAL:$1|&nbsp;Vinni scancillata na pàggina|Foru scancillati $1 pàggini}}:",
        "watchlistedit-clear-title": "Lista taliata svacantata",
        "watchlistedit-clear-legend": "Svacanta la lista taliata",
-       "watchlistedit-clear-explain": "Tutti li tìtuli sarrannu livati da to lista taliata",
+       "watchlistedit-clear-explain": "Tutti li tìtuli sunnu livati dâ tò lista taliata",
        "watchlistedit-clear-titles": "Tìtuli:",
        "watchlistedit-clear-submit": "Svacanta la lista taliata (Sta cosa è difinitiva!)",
        "watchlistedit-clear-done": "La tò lista taliata fu svacantata.",
        "invalid-indicator-name": "<strong>Erruri:</strong> L'attribbutu <code>name</code> di l'innicaturi di statu dâ pàggina nun havi a' èssiri vacanti.",
        "version": "Virsioni",
        "version-extensions": "Estenzioni nstallati",
-       "version-skins": "Peddi installati",
+       "version-skins": "Peddi nstallati",
        "version-specialpages": "Pàggini spiciali",
        "version-parserhooks": "Hook dû parser",
        "version-variables": "Variabili",
        "version-ext-colheader-description": "Discrizzioni",
        "version-ext-colheader-credits": "Auturi",
        "version-license-title": "Licenza di $1",
-       "version-license-not-found": "Pi' st'estinsioni nun fu' truvata nudda nfurmazzioni a' prupòsitu dâ licenza.",
+       "version-license-not-found": "Pi sta stinzioni nun fu attruvata nudda nfurmazzioni a prupòsitu dâ licenza.",
        "version-credits-title": "Ricanuscimenti pi' $1",
-       "version-credits-not-found": "Pi' st'estinsioni nun fu' truvata nudda nfurmazzioni a' prupòsitu dî ricanuscimenti.",
+       "version-credits-not-found": "Pi sta stinzioni nun fu attruvata nudda nfurmazzioni a prupòsitu di l'arricanuscimenti.",
        "version-poweredby-credits": "Sta wiki funziona cu' <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
        "version-poweredby-others": "autri",
        "version-poweredby-translators": "i tradutturi di translatewiki.net",
        "version-credits-summary": "Vulemu ricanusciri u cuntribbutu di sti pirsuni a' [[Special:Version|MediaWiki]].",
-       "version-license-info": "MediaWiki è software lìbbiru; si po' ri-distribbuiri e/o mudificari sutta ê tèrmini dâ GNU General Public License comu pubblicata dâ Free Software Foundation; o la virsioni 2 dâ Licenza, o (a' propia scelta) na virsioni succissiva quali è jè.\n\nMediaWiki veni distribuùtu ntâ spiranza chi' sia ùtili, però SENZA NUDDA GARANZÌA; mancu chidda implìcita di NIGUZZIABBILITÀ o di APPLICABBILITÀ PI' NU SCOPU PARTICULARI. Si taliassi la GNU General Public License pi' maggiuri dittagghî.\n\nS'avissi a' avìri ricivutu [{{SERVER}}{{SCRIPTPATH}}/COPYING na copia dâ GNU General Public License] nsèmmula a' stu prugramma; si' no, si po' scrìviri â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html la si po' lèggiri in linia].",
+       "version-license-info": "MediaWiki è nu software lìbbiru; si pò ridistribbuiri e/o canciari sutta ê tèrmini dâ GNU General Public License comu pubblicata dâ Free Software Foundation; o la virsioni 2 dâ Licenza, o (a scigghiuta propia) na virsioni succissiva qualegghiè.\n\nMediaWiki veni distribuutu ntâ spiranza chi sia ùtili, pirò SENZA NUDDA GARANZÌA; mancu chidda mplìcita di NIGUZZIABBILITÀ o d'APPLICABBILITÀ PI NU SCOPU PARTICULARI. Si taliassi la GNU General Public License pi maiuri dittagghî.\n\nS'avissi a aviri arricivutu [{{SERVER}}{{SCRIPTPATH}}/COPYING na copia dâ GNU General Public License] nzèmmula a stu prugramma; si no, si pò scrìviri â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html la si pò lèggiri n lìnia].",
        "version-software": "Software nstallatu",
        "version-software-product": "Prodottu",
        "version-software-version": "Virsioni",
        "fileduplicatesearch-info": "$1 × $2 pixel<br />Diminzioni: $3<br />Tipu MIME: $4",
        "fileduplicatesearch-result-1": "Non ci sunnu duppiuni li stissi dû file \"$1\".",
        "fileduplicatesearch-result-n": "{{PLURAL:$2|C'è ggià nu duppiuni lu stissu|Ci sunnu ggià $2 duppiuni li stissi}} dû file \"$1\".",
-       "fileduplicatesearch-noresults": "Nuddu file chiamatu \"$1\" fu truvatu.",
+       "fileduplicatesearch-noresults": "Nuddu file chiamatu \"$1\" fu attruvatu.",
        "specialpages": "Pàggini spiciali",
        "specialpages-note-top": "Legenda",
        "specialpages-note": "* Pàggini spiciali nurmali.\n* <span class=\"mw-specialpagerestricted\">Pàggini spiciali risirvati.</strong>",
        "specialpages-group-maintenance": "Resocunti di manutinzioni",
        "specialpages-group-other": "Autri pàggini spiciali",
        "specialpages-group-login": "Trasuta / criazzioni di cunti",
-       "specialpages-group-changes": "Ùrtimi canciamenti e riggistra",
+       "specialpages-group-changes": "Ùrtimi canciamenti e riggistri",
        "specialpages-group-media": "File multimidiali - caricamentu e rennicunti",
        "specialpages-group-users": "Utenti e diritti",
        "specialpages-group-highuse": "Pàggini cchiù usati",
        "specialpages-group-pages": "Listi di pàggini",
        "specialpages-group-pagetools": "Strumenti ùtili pi li pàggini",
        "specialpages-group-wiki": "Dati e strumenti",
-       "specialpages-group-redirects": "Pàggini spiciali chi' rimànnunu",
+       "specialpages-group-redirects": "Pàggini spiciali chi rimànnanu",
        "specialpages-group-spam": "Strumenti contr'a lu spam",
        "specialpages-group-developer": "Stigghi dû sviluppaturi",
        "blankpage": "Pàggina vacanti",
        "intentionallyblankpage": "Sta pàggina è lassata vacanti apposta e è usata pi benchmark, ecc.",
-       "external_image_whitelist": " #Lassari sta riga pi' com'è ora, senza tuccàrila<pre>\n#Mèttiri li frammenti dî sprissioni rigulari (sulu la parti ca va' mmenzu ê //) ccassutta\n#Sarrannu cunfruntati cu l'URL dî mmàggini esterni (hotlinked)\n#Chiddi ca currispùnnunu sarrannu ammustrati comu mmàggini, pi' l'autri veniravi ammustrata sulu na lijami a' la mmàggini\n#Li righi ca accumencianu cu' # sunnu trattati comu cummenti\n#Nun cc'è diffirenza tra majusculi e minusculi\n\n#Mèttiri tutti li frammenti di sprissioni rigulari supra a' sta riga. Lassari sta riga pi' com'è ora, senza tuccàrila</pre>",
-       "tags": "Etichetti dî canciamenti validi",
-       "tag-filter": "Filtra pi' [[Special:Tags|etichetta]]",
+       "external_image_whitelist": " #Lassari sta riga pi com'è ora, senza tuccàrila<pre>\n#Mèttiri li frammenti dî sprissioni rigulari (sulu la parti ca va ammenzu ê //) ccassutta\n#Sunnu cunfruntati cu l'URL dî mmàggini esterni (hotlinked)\n#Chiddi ca currispùnninu sunnu ammustrati comu mmàggini, pi l'àutri veni ammustrata sulu na lijami â mmàggini\n#Li righi ca accumènzanu cu # sunnu trattati comu cummenti\n#Nun c'è diffirenza tra maiùsculi e minùsculi\n\n#Mèttiri tutti li frammenti di sprissioni rigulari supra a sta riga. Lassari sta riga pi com'è ora, senza tuccàrila</pre>",
+       "tags": "Etichetti dî canciamenti vàlidi",
+       "tag-filter": "Filtra pi [[Special:Tags|etichetta]]",
        "tag-filter-submit": "Filtra",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etichetta|Etichetti}}]]: $2)",
        "tags-title": "Etichetti",
-       "tags-intro": "Sta pàggina elenca l'etichetti cu li quali lu software po' marcari nu canciamentu, e lu significatu ca hannu.",
+       "tags-intro": "Sta pàggina elenca l'etichetti cu li quali lu software pò marcari nu canciamentu, e lu significatu ca hannu.",
        "tags-tag": "Nomu di l'etichetta",
        "tags-display-header": "Aspettu nâ lista di canciamenti",
        "tags-description-header": "Discrizzioni cumpleta dô significatu",
        "tags-source-header": "Pruvinenza",
        "tags-active-header": "Attivu?",
-       "tags-hitcount-header": "Canciamenti cu' etichetti",
+       "tags-hitcount-header": "Canciamenti cu etichetti",
        "tags-actions-header": "Azzioni",
        "tags-active-yes": "Sì",
        "tags-active-no": "No",
-       "tags-source-extension": "Difinuta di n'estinsioni",
-       "tags-source-manual": "Appizzata a' manu di utenti e bot",
-       "tags-source-none": "Nun è cchiu' usata",
+       "tags-source-extension": "Difinuta di na stinzioni",
+       "tags-source-manual": "Appizzata a manu di utenti e bot",
+       "tags-source-none": "Nun è cchiù usata",
        "tags-edit": "cancia",
        "tags-delete": "cancella",
        "tags-activate": "attiva",
        "tags-deactivate": "disattiva",
        "tags-hitcount": "$1 {{PLURAL:$1|canciamentu|canciamenti}}",
        "tags-manage-no-permission": "Nun hai lu pirmissu di gistiri l'etichetti dî canciamenti.",
-       "tags-create-heading": "Crìa n'etichetta nova",
-       "tags-create-explanation": "Comu mpustazzioni pridifinuta, l'etichetti novi sunnu dispunìbbili a' èssiri adupirati di l'utenti e dî bot.",
+       "tags-create-heading": "Crea n'etichetta nova",
+       "tags-create-explanation": "Comu mpustazzioni pridifinuta, l'etichetti novi sunnu dispunìbbili a èssiri adupirati di l'utenti e dî bot.",
        "tags-create-tag-name": "Nomu di l'etichetta:",
        "tags-create-reason": "Mutivu:",
-       "tags-create-submit": "Crìa",
-       "tags-create-no-name": "Hai a' spicificari lu nomu di l'etichetta.",
-       "tags-create-invalid-chars": "Li nomi di l'etichetti nun pònnu cuntèniri vìrguli (<code>,</code>) o sbarri p'avanti (<code>/</code>).",
-       "tags-create-invalid-title-chars": "Li nomi di l'etichetti nun pònnu cuntèniri li caràttiri chi' nun si ponnu adupirari ntê tìtuli dî pàggini.",
+       "tags-create-submit": "Crea",
+       "tags-create-no-name": "Hai a spicificari lu nomu di l'etichetta.",
+       "tags-create-invalid-chars": "Li nomi di l'etichetti nun ponnu cuntèniri vìrguli (<code>,</code>) o sbarri p'avanti (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Li nomi di l'etichetti nun ponnu cuntèniri li caràttiri chi nun si ponnu adupirari ntê tìtuli dî pàggini.",
        "tags-create-already-exists": "L'etichetta \"$1\" già esisti.",
-       "tags-create-warnings-above": "{{PLURAL:$2|Mmattìu st'avvertimentu|Mmatteru st'avvertimenti}} ntô criari l'etichetta \"$1\":",
+       "tags-create-warnings-above": "{{PLURAL:$2|Ammattìu st'avvisu|Ammatteru st'avvisi}} ntô criari l'etichetta \"$1\":",
        "tags-create-warnings-below": "Voi cuntinuari e criari l'etichetta?",
        "tags-delete-title": "Cancillazzioni di n'etichetta",
        "tags-delete-explanation-initial": "Stai cancillannu l'etichetta \"$1\" dâ basi di dati.",
-       "tags-delete-explanation-in-use": "Sarravi livata di {{PLURAL:$2|$2 virsioni o vuci di riggistru|tutti li $2 virsioni o vuci di riggistru}} unni è appizzata com'ad ora.",
-       "tags-delete-explanation-warning": "St'opirazzioni è <strong>irrivirsìbbili</strong> e <strong>nuddu la po' annullari</strong>, mancu l'amministratura dâ basi di dati. Hai a' èssiri sicuru chi' è chista l'etichetta chi' voi cancillari.",
-       "tags-delete-explanation-active": "<strong>L'etichetta \"$1\" ancora è attiva, e cuntinuiravi a' èssiri appizzata.</strong> Pi' fari finiri stu fattu, vai ntê banni unni st'etichetta è mpustata pi' èssiri appizzata, e disattìvila di ddani.",
+       "tags-delete-explanation-in-use": "Veni livata di {{PLURAL:$2|$2 virsioni o vuci di riggistru|tutti li $2 virsioni o vuci di riggistru}} unni è appizzata com'a ora.",
+       "tags-delete-explanation-warning": "St'opirazzioni nun è <strong>rivirsìbbili</strong> e <strong>nuddu la pò annullari</strong>, mancu l'amministratura dâ basi di dati. Hai a èssiri sicuru chi è chista l'etichetta chi voi cancillari.",
+       "tags-delete-explanation-active": "<strong>L'etichetta \"$1\" è ancora attiva, e cuntìnua a èssiri appizzata.</strong> Pi fari finiri stu fattu, vai ntê banni unni st'etichetta è mpustata p'èssiri appizzata, e disattìvala di ddà.",
        "tags-delete-reason": "Mutivu:",
        "tags-delete-submit": "Cancella difinitivamenti st'etichetta",
-       "tags-delete-not-allowed": "L'etichetti difinuti di n'estinsioni nun si ponnu cancillari, eccettu quannu l'estinsioni lu cunsenti esprissamenti.",
+       "tags-delete-not-allowed": "L'etichetti difinuti di na stinzioni nun si ponnu cancillari, eccettu quannu li stinzioni lu cunzenti espressamenti.",
        "tags-delete-not-found": "L'etichetta \"$1\" nun esisti.",
-       "tags-delete-too-many-uses": "L'etichetta \"$1\" havi statu appizzata nta cchiu' ssai di $2 {{PLURAL:$2|virsioni}}, e pi' chistu mutivu nun si po' cancillari.",
-       "tags-delete-warnings-after-delete": "L'etichetta \"$1\" fu' cancillata bona, però {{PLURAL:$2|mmattìu st'avvirtimentu|mmatteru st'avvirtimenti}}:",
+       "tags-delete-too-many-uses": "L'etichetta \"$1\" fu appizzata nta cchiossai di $2 {{PLURAL:$2|virsioni}}, e pi stu mutivu nun si pò cancillari.",
+       "tags-delete-warnings-after-delete": "L'etichetta \"$1\" fu' cancillata bona, pirò {{PLURAL:$2|ammattìu st'avvisu|ammatteru st'avvisi}}:",
        "tags-activate-title": "Attivazzioni di n'etichetta",
        "tags-activate-question": "Stai attivannu l'etichetta \"$1\".",
        "tags-activate-reason": "Mutivu:",
-       "tags-activate-not-allowed": "Nun si po' attivari l'etichetta \"$1\".",
+       "tags-activate-not-allowed": "Nun si pò attivari l'etichetta \"$1\".",
        "tags-activate-not-found": "L'etichetta \"$1\" nun esisti.",
        "tags-activate-submit": "Attiva",
        "tags-deactivate-title": "Disattivazzioni di n'etichetta",
        "tags-deactivate-question": "Stai disattivannu l'etichetta \"$1\".",
        "tags-deactivate-reason": "Mutivu:",
-       "tags-deactivate-not-allowed": "Nun si po' disattivari l'etichetta \"$1\".",
+       "tags-deactivate-not-allowed": "Nun si pò disattivari l'etichetta \"$1\".",
        "tags-deactivate-submit": "Disattiva",
-       "tags-apply-no-permission": "Nun hai lu pirmissu di appizzari etichetti ntê to canciamenti.",
-       "tags-apply-not-allowed-one": "Nun è cunsintutu di appizzari l'etichetta \"$1\" a' manu.",
-       "tags-apply-not-allowed-multi": "Nun è cunsintutu di appizzari {{PLURAL:$2|st'etichetta|st'etichetti}} a' manu: $1",
+       "tags-apply-no-permission": "Nun hai lu pirmissu d'appizzari etichetti ntê tò canciamenti.",
+       "tags-apply-not-allowed-one": "Nun è cunzintutu di appizzari l'etichetta \"$1\" a manu.",
+       "tags-apply-not-allowed-multi": "Nun è cunzintutu d'appizzari {{PLURAL:$2|st'etichetta|st'etichetti}} a manu: $1",
        "tags-update-no-permission": "Nun hai lu pirmissu di agghiùnciri o livari l'etichetti di canciamentu dî sìnguli virsioni o vuci di riggistru.",
-       "tags-update-add-not-allowed-one": "Nun è cunsintutu di agghiùnciri l'etichetta \"$1\" a' manu.",
-       "tags-update-add-not-allowed-multi": "Nun è cunsintutu di agghiùnciri {{PLURAL:$2|st'etichetta|st'etichetti}} a' manu: $1",
-       "tags-update-remove-not-allowed-one": "Nun è cunsintutu di livari l'etichetta \"$1\".",
-       "tags-update-remove-not-allowed-multi": "Nun è cunsintutu di livari {{PLURAL:$2|st'etichetta|st'etichetti}} a' manu: $1",
+       "tags-update-add-not-allowed-one": "Nun è cunzintutu d'agghiùnciri l'etichetta \"$1\" a manu.",
+       "tags-update-add-not-allowed-multi": "Nun è cunzintutu d'agghiùnciri {{PLURAL:$2|st'etichetta|st'etichetti}} a manu: $1",
+       "tags-update-remove-not-allowed-one": "Nun è cunzintutu di livari l'etichetta \"$1\".",
+       "tags-update-remove-not-allowed-multi": "Nun è cunzintutu di livari {{PLURAL:$2|st'etichetta|st'etichetti}} a manu: $1",
        "tags-edit-title": "Canciamentu di l'etichetti",
        "tags-edit-manage-link": "Gistisci l'etichetti",
        "tags-edit-revision-selected": "{{PLURAL:$1|Virsioni scigghiuta|Virsioni scigghiuti}} di [[:$2]]:",
        "tags-edit-remove": "Leva st'etichetti:",
        "tags-edit-remove-all-tags": "(leva tutti l'etichetti)",
        "tags-edit-chosen-placeholder": "Scegghî quarchi etichetta",
-       "tags-edit-chosen-no-results": "Nun si truvàu nudda etichetta ca currispunni",
+       "tags-edit-chosen-no-results": "Nun si truvau nudda etichetta ca currispunni",
        "tags-edit-reason": "Mutivu:",
-       "tags-edit-revision-submit": "Àpplica li canciamenti a' {{PLURAL:$1|sta virsioni|$1 virsioni}}",
-       "tags-edit-logentry-submit": "Àpplica li canciamenti a' {{PLURAL:$1|sta vuci di riggistru|$1 vuci di riggistru}}",
-       "tags-edit-success": "Li canciamenti furu applicati boni.",
+       "tags-edit-revision-submit": "Àpplica li canciamenti a {{PLURAL:$1|sta virsioni|$1 virsioni}}",
+       "tags-edit-logentry-submit": "Àpplica li canciamenti a {{PLURAL:$1|sta vuci di riggistru|$1 vuci di riggistru}}",
+       "tags-edit-success": "Li canciamenti foru applicati boni.",
        "tags-edit-failure": "Nun si pòttiru applicari li canciamenti:\n$1",
        "tags-edit-nooldid-title": "Virsioni oggettu nun vàlida",
        "tags-edit-nooldid-text": "O nun spicificasti nudda virsioni comu oggettu di sta funzioni, o puru la virsioni spicificata nun esisti.",
-       "tags-edit-none-selected": "Pi' favuri scegghi ammenu una etichetta, di agghiùnciri o livari.",
+       "tags-edit-none-selected": "Pi favuri scegghi armenu n'etichetta, di agghiùnciri o livari.",
        "comparepages": "Cunfrunta pàggini",
        "compare-page1": "Pàggina 1",
        "compare-page2": "Pàggina 2",
        "dberr-info": "(Impussìbbili accèdiri â basi di dati: $1)",
        "dberr-info-hidden": "(Impussìbbili accèdiri â basi di dati)",
        "dberr-usegoogle": "Poi pruvari a circari supra Google ammentri.",
-       "dberr-outofdate": "Nota ca la so innicizzazioni dû nostru cuntinutu po' nun èssiri aggiurnata.",
+       "dberr-outofdate": "Nota ca la sò nnicizzazioni dû nostru cuntinutu pò nun èssiri aggiurnata.",
        "dberr-cachederror": "Chista ca segui è na copia cache da pàggina richiesta, e putissi essiri nun aggiurnata.",
        "htmlform-invalid-input": "Ci su prublema cu l'input nseritu",
        "htmlform-select-badoption": "Lu valori spicificatu nun è n'opzioni valida.",
        "htmlform-cloner-delete": "Leva",
        "htmlform-cloner-required": "Cci voli almenu nu valuri.",
        "htmlform-title-badnamespace": "[[:$1]] nun sta ntô namespace «{{ns:$2}}».",
-       "htmlform-title-not-creatable": "«$1» nun è tìtulu di na pàggina ca si po’ criari",
+       "htmlform-title-not-creatable": "«$1» nun è lu tìtulu di na pàggina ca si pò criari",
        "htmlform-title-not-exists": "[[:$1]] nun esisti.",
        "htmlform-user-not-exists": "<strong>$1</strong> nun esisti.",
        "htmlform-user-not-valid": "<strong>$1</strong> nun è vàlidu comu nomu utenti.",
        "revdelete-content-unhid": "cuntinutu ammustratu",
        "revdelete-summary-unhid": "riassuntu dû canciamentu ammustratu",
        "revdelete-uname-unhid": "nomu utenti ammustratu",
-       "revdelete-restricted": "misi ristrizzioni pi' l'amministratura",
-       "revdelete-unrestricted": "livati ristrizzioni pi' l'amministratura",
-       "logentry-block-block": "$1 {{GENDER:$2|bluccàu}} a' {{GENDER:$4|$3}} cûn tempu di scadenza di $5 $6",
-       "logentry-block-unblock": "$1 {{GENDER:$2|sbluccàu}} a' {{GENDER:$4|$3}}",
-       "logentry-block-reblock": "$1 {{GENDER:$2|canciàu}} li mpustazzioni dû bloccu di {{GENDER:$4|$3}} cûn tempu di scadenza di $5 $6",
-       "logentry-suppress-block": "$1 {{GENDER:$2|bluccàu}} a' {{GENDER:$4|$3}} cûn tempu di scadenza di $5 $6",
-       "logentry-suppress-reblock": "$1 {{GENDER:$2|canciàu}} li mpustazzioni dû bloccu di {{GENDER:$4|$3}} cûn tempu di scadenza di $5 $6",
-       "logentry-import-upload": "$1 {{GENDER:$2|impurtàu}} $3 pi' menzu dûn carricamentu di file",
-       "logentry-import-interwiki": "$1 {{GENDER:$2|impurtàu}} $3 di n'autra wiki",
+       "revdelete-restricted": "misi ristrizzioni pi l'amministratura",
+       "revdelete-unrestricted": "livati ristrizzioni pi l'amministratura",
+       "logentry-block-block": "$1 {{GENDER:$2|bluccau}} a {{GENDER:$4|$3}} cûn tempu di scadenza di $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|sbluccau}} a {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|canciau}} li mpustazzioni dû bloccu di {{GENDER:$4|$3}} cûn tempu di scadenza di $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|bluccau}} a {{GENDER:$4|$3}} cûn tempu di scadenza di $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|canciau}} li mpustazzioni dû bloccu di {{GENDER:$4|$3}} cûn tempu di scadenza di $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|mpurtau}} $3 pi menzu dûn carricamentu di file",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|mpurtau}} $3 di n'àutra wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|juncìu}} $3 nta $4 (virsioni nfina ô $5)",
        "logentry-move-move": "$1 {{GENDER:$2|spustau}} la pàggina $3 nti $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|spustau}} a pàggina $3 nta $4 senza lassari nu rimannu",
        "logentry-newusers-create2": "U cuntu di l'utenti $3 fu' {{GENDER:$2|criatu}} di $1",
        "logentry-newusers-byemail": "U cuntu di l'utenti $3 fu' {{GENDER:$2|criatu}} di $1 e a password fu' mannata via posta elittrònica",
        "logentry-newusers-autocreate": "U cuntu di l'utenti $1 fu' {{GENDER:$2|criatu}} di manera autumàtica",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|spustau}} li mpustazzioni di prutizzioni di $4 a’ $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|canciau}} l'appartinenza di $3 dû gruppu $4 ô gruppu $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|canciau}} l'appartinenza a' gruppi di $3",
        "logentry-rights-autopromote": "$1 fu' {{GENDER:$2|prumuvutu|prumuvuta}} di manera autumatica di $4 a' $5",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|carricau}} na virsioni nova di $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|carricau}} $3",
        "log-name-managetags": "Riggistru dâ gistioni di l'etichetti",
-       "log-description-managetags": "Sta pàggina elenca l'opirazzioni amministrativi chi' riguàrdunu l'[[Special:Tags|etichetti]]. Lu riggìstru cunteni sulu l'azzioni chi' furu fatti a' manu di n'amministraturi; l'etichetti ponnu puru èssiri criati e cancillati dû software dâ wiki senza lassari vuci nta stu riggistru.",
-       "logentry-managetags-create": "$1 {{GENDER:$2|criàu}} l'etichetta «$4»",
-       "logentry-managetags-delete": "$1 {{GENDER:$2|cancillàu}} l'etichetta \"$4\" (livata di $5 {{PLURAL:$5|virsioni o vuci di riggistru}})",
-       "logentry-managetags-activate": "$1 {{GENDER:$2|attivàu}} l'etichetta «$4» pi' l'usu di utenti e bot",
-       "logentry-managetags-deactivate": "$1 {{GENDER:$2|disattivàu}} l'etichetta \"$4\" pi' l'usu di l'utenti e dî bot",
+       "log-description-managetags": "Sta pàggina elenca l'opirazzioni amministrativi c'arriguàrdanu l'[[Special:Tags|etichetti]]. Lu riggistru cunteni sulu l'azzioni chi foru fatti a manu di n'amministraturi; l'etichetti ponnu puru èssiri criati e cancillati dû software dâ wiki senza lassari vuci nta stu riggistru.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|criau}} l'etichetta «$4»",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|cancillau}} l'etichetta \"$4\" (livata di $5 {{PLURAL:$5|virsioni o vuci di riggistru}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|attivau}} l'etichetta «$4» pi l'usu di utenti e bot",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|disattivau}} l'etichetta \"$4\" pi l'usu di l'utenti e dî bot",
        "log-name-tag": "Riggistru di l'etichetti",
-       "log-description-tag": "Sta pàggina ammustra quannu l'utenti agghiunciunu o lèvunu [[Special:Tags|etichetti]] di sìnguli virsioni o vuci di riggistru. Stu riggistru nun rifirisci li variazzioni di l'etichetti chi' succèdunu ntô cuntestu di nu canciamentu, na cancillazzioni, o n'autra opirazzioni comu a' chisti.",
+       "log-description-tag": "Sta pàggina ammustra quannu l'utenti agghiùncinu o lèvanu [[Special:Tags|etichetti]] di sìnguli virsioni o vuci di riggistru. Stu riggistru nun arrifirisci li variazzioni di l'etichetti chi succèdinu ntô cuntestu di nu canciamentu, na cancillazzioni, o n'àutra opirazzioni comu a chisti.",
        "logentry-tag-update-add-revision": "$1 {{GENDER:$2|agghiuncìu}} l'{{PLURAL:$7|etichetta|etichetti}} $6 â virsioni $4 dâ pàggina $3",
        "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|agghiuncìu}} {{PLURAL:$7|l'etichetta|l'etichetti}} $6 â vuci di riggistru $5 dâ pàggina $3",
-       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|livàu}} {{PLURAL:$9|l'etichetta|l'etichetti}} $8 dâ virsioni $4 dâ pàggina $3",
-       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|livàu}} l'{{PLURAL:$9|etichetta|etichetti}} $8 dâ vuci di riggistru $5 dâ pàggina $3",
-       "logentry-tag-update-revision": "$1 {{GENDER:$2|canciàu}} l'etichetti dâ virsioni $4 dâ pàggina $3 ({{PLURAL:$7|nn'agghiuncìu}} $6; {{PLURAL:$9|nni livàu}} $8)",
-       "logentry-tag-update-logentry": "$1 {{GENDER:$2|aggiurnàu}} l'etichetti ntâ vuci di riggistru $5 dâ pàggina $3 ({{PLURAL:$7|nn'agghiuncìu}} $6; {{PLURAL:$9|nni livàu}} $8)",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|livau}} {{PLURAL:$9|l'etichetta|l'etichetti}} $8 dâ virsioni $4 dâ pàggina $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|livau}} l'{{PLURAL:$9|etichetta|etichetti}} $8 dâ vuci di riggistru $5 dâ pàggina $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|canciau}} l'etichetti dâ virsioni $4 dâ pàggina $3 ({{PLURAL:$7|nn'agghiuncìu}} $6; {{PLURAL:$9|nni livau}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|aggiurnau}} l'etichetti ntâ vuci di riggistru $5 dâ pàggina $3 ({{PLURAL:$7|nn'agghiuncìu}} $6; {{PLURAL:$9|nni livau}} $8)",
        "rightsnone": "(nuddu)",
        "revdelete-summary": "riassuntu dô canciamentu",
        "feedback-adding": "Agghiuncimentu dû cummentu â pàggina...",
-       "feedback-back": "Arreti",
+       "feedback-back": "N'arreri",
        "feedback-bugcheck": "Bonu! Sulu cuntrolla chi' nun è unu dî [$1 bug già canusciuti].",
        "feedback-bugnew": "Cuntrullai. Signala nu bug novu",
-       "feedback-bugornote": "Si' si' bonu a' discrìviri un prubblema tècnicu di manera dittagghiata, pi' favuri [$1 signala nu bug].\nSi' no, poi adupirari u mòdulu facilitatu ccassutta. U to cummentu sarravi agghiunciutu â pàggina \"[$3 $2]\", nsemmula ô to nomu utenti.",
+       "feedback-bugornote": "Si sî bonu a discrìviri un prubblema tècnicu di manera dittagghiata, pi favuri [$1 signala nu bug].\nSi no, poi adupirari lu mòdulu facilitatu ccassutta. Lu tò cummentu è agghiunciutu â pàggina \"[$3 $2]\", nzèmmula ô tò nomu utenti.",
        "feedback-cancel": "Annulla",
        "feedback-close": "Finutu",
        "feedback-external-bug-report-button": "Signala nu prubblema tècnicu",
        "feedback-dialog-title": "Lassa nu cummentu",
-       "feedback-dialog-intro": "Poi adupirari stu mòdulu facili ccassutta pi' lassari lu to cummentu. Stu cummentu sarravi agghiunciutu â pàggina «$1», nsemmula ô to nomu utenti.",
+       "feedback-dialog-intro": "Poi adupirari stu mòdulu facili ccassutta pi lassari lu tò cummentu. Stu cummentu è agghiunciutu â pàggina «$1», nzèmmula ô tò nomu utenti.",
        "feedback-error-title": "Erruri",
        "feedback-error1": "Erruri: Risultatu di l'API nun ricanusciutu",
        "feedback-error2": "Erruri: A mudìfica nun riniscìu",
-       "feedback-error3": "Erruri: Nudda risposta di l'API",
-       "feedback-error4": "Erruri: Nun fu' pussìbbili pubblicari ntô tìtulu dû cummentu spicificatu",
+       "feedback-error3": "Erruri: Nudda arrispunnuta di l'API",
+       "feedback-error4": "Erruri: Nun fu pussìbbili pubblicari ntô tìtulu dû cummentu spicificatu",
        "feedback-message": "Missaggiu:",
        "feedback-subject": "Oggettu:",
        "feedback-submit": "Manna",
-       "feedback-terms": "Capisciu ca li nfurmazzioni dû me aggenti di l'utenti cuntènunu li virsioni pricisi dû me browser e dû me sistema opirativu, e ca sti nfurmazzioni sarrannu cunnivisi pubblicamenti a' latu dû me cummentu.",
-       "feedback-termsofuse": "Accunsentu a' lassari lu me cummentu in cuncurdanza cu' li Cunnizzioni d'Usu.",
+       "feedback-terms": "Capisciu ca li nfurmazzioni dû mè aggenti di l'utenti cuntèninu li virsioni pricisi dû mè browser e dû mè sistema opirativu, e ca sti nfurmazzioni sunnu cunnivisi pubblicamenti a latu dû mè cummentu.",
+       "feedback-termsofuse": "Accunzentu a lassari lu mè cummentu n cuncurdanza cu li Cunnizzioni d'Usu.",
        "feedback-thanks": "Grazzî! U to cummentu fu' affissu ntâ pàggina \"[$2 $1]\".",
        "feedback-thanks-title": "Ti ringrazziamu!",
        "feedback-useragent": "Aggenti di l'utenti:",
-       "searchsuggest-search": "Risciduta",
+       "searchsuggest-search": "Arricerca",
        "searchsuggest-containing": "chi' cunteni...",
        "api-error-badaccess-groups": "Nun hai u pirmissu di carricari file nta sta wiki.",
        "api-error-badtoken": "Erruri nternu: Token sbagghiatu",
        "api-error-duplicate-archive-popup-title": "{{PLURAL:$1|File duppiuni|File duppiuni}} chi' già {{PLURAL:$1|havi statu cancillatu|hannu statu cancillati}}.",
        "api-error-duplicate-popup-title": "File {{PLURAL:$1|duppiuni}}.",
        "api-error-empty-file": "U file chi' mannasti era vacanti.",
-       "api-error-emptypage": "Criari pàggini novi e vacanti nun è cunsintutu.",
+       "api-error-emptypage": "Criari pàggini novi e vacanti nun è cunzintutu.",
        "api-error-fetchfileerror": "Erruri nternu: Quarchi' cosa nun funziunau mentri chi' si carricava u file.",
        "api-error-fileexists-forbidden": "Nu file chi' si chiama \"$1\" già esisti, e nun si po' suprascrìviri.",
        "api-error-fileexists-shared-forbidden": "Nu file chi' si chiama \"$1\" già esisti ntô dipòsitu cunnivisu, e nun si po' suprascrìviri.",
        "api-error-missingresult": "Erruri nternu: Nun fu' pussìbbili capiri s'a copia riniscìu.",
        "api-error-mustbeloggedin": "Hâ' jèssiri trasutu pi' carricari file.",
        "api-error-mustbeposted": "Erruri nternu: A richiesta havi bisognu di POST HTTP.",
-       "api-error-noimageinfo": "U carricamentu riniscìu, però u server nun nni desi nudda nfurmazzioni a' prupòsitu dû file.",
+       "api-error-noimageinfo": "Lu carricamentu arriniscìu, pirò lu server nun ni desi nudda nfurmazzioni a prupòsitu dû file.",
        "api-error-nomodule": "Erruri nternu: nun fu mpustatu lu mòdulu di carricamentu",
        "api-error-ok-but-empty": "Erruri ntenru: nudda risposta dû server",
        "api-error-overwrite": "Suprascriviri nu file ca nun esisti nun è cunsitutu",
        "api-error-unknown-warning": "Avvirtimentu scanusciutu: \"$1\".",
        "api-error-unknownerror": "Erruri scanusciutu: \"$1\".",
        "api-error-uploaddisabled": "U carricamentu è disattivatu nta sta wiki.",
-       "api-error-verification-error": "Lu file purrìa èssiri ruinatu, o puru aviri l'estinsioni sbagghiata.",
+       "api-error-verification-error": "Lu file purrìa èssiri ruinatu, o puru aviri la stinzioni sbagghiata.",
        "duration-seconds": "$1 {{PLURAL:$1|sicunnu|sicunni}}",
        "duration-minutes": "$1 {{PLURAL:$1|minutu|minuti}}",
        "duration-hours": "$1 {{PLURAL:$1|ura|uri}}",
        "limitreport-title": "Dati di prufilazzioni di l'analizzaturi sintatticu:",
        "limitreport-cputime": "Usu di tempu dâ CPU",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|sicunnu|sicunni}}",
-       "limitreport-walltime": "Usu di tempu riàli",
+       "limitreport-walltime": "Tempu d'usu riali",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|sicunnu|sicunni}}",
        "limitreport-ppvisitednodes": "Cuntiggiu dî gruppi visitati dû priprucissuri",
        "limitreport-ppgeneratednodes": "Cuntiggiu dî gruppi ginirati dû priprucissuri",
        "limitreport-expansiondepth": "Màssimu funnu d'espansioni",
        "limitreport-expensivefunctioncount": "Cuntìggiu dî funzioni di l'analizzaturi sintatticu spisusi",
        "expandtemplates": "Espansioni dî template",
-       "expand_templates_intro": "Sta pàggina spiciali pigghia un testu e espanni tutti i template chi' cunteni, di manera ricursiva.\nEspanni macari i funzioni di l'analizzaturi sintatticu chi' su suppurtati, comu <code><nowiki>{{</nowiki>#language:…}}</code>, e i variàbbili, comu <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nIn pratica, espanni cchiu' o menu tuttu chiddu chi' si trova mmenzu a' duppî parèntisi graffi.",
+       "expand_templates_intro": "Sta pàggina spiciali pigghia un testu e espanni tutti li template chi cunteni, di manera ricursiva.\nEspanni macari li funzioni di l'analizzaturi sintàtticu chi sù suppurtati, comu <code><nowiki>{{</nowiki>#language:…}}</code>, e li variàbbili, comu <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nN pràttica, espanni cchiù o menu tuttu zocchi s'attrova ammenzu a duppî parèntisi graffi.",
        "expand_templates_title": "Tìtulu dû cuntestu, pi' {{FULLPAGENAME}} etc.:",
        "expand_templates_input": "Testu a' espànniri:",
        "expand_templates_output": "Risultatu",
        "log-name-pagelang": "Riggistru dî canci di lingua",
        "log-description-pagelang": "Chistu è nu riggistru dî canciamenti â lingua dî pàggini.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|canciau}} a lingua dâ pàggina $3 di $4 a' $5.",
-       "default-skin-not-found": "Whoops! La peddi pridifinuta dâ to wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nA' quantu pari la to istallazzioni ncludi {{PLURAL:$4|la peddi|li peddi}} ccasutta. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuali: Cunfigurazzioni dî peddi] p'istruzzioni supra a' comu {{PLURAL:$4|s'attìva|s'attìvunu e comu si scegghî chidda pridifinuta}}.\n\n$2\n\n; Si' hai istallatu MediaWiki ora ora:\n: E' prubbàbbili ca l'istallasti dû git, o direttamenti dû còdici surgenti nta quarchi' n'autra manera. Allura sta cosa è privista. Prova e istalla quarchi' peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archìviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download lu prugramma d'istallazzioni in furmatu tar], ca cunteni tanti peddi ed estinsioni. Poi cupiari e ncuddari la cartella <code>skins/</code> di ddadintra.\n:* Scàrrica a' una a' una quarchi' peddi ntô furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Adòpira Git pi' scarricari peddi].\n: Lu fari accussi' nun avissi a' ntirfirìri cû to dipòsitu git si' si' nu sviluppaturi di MediaWiki.\n\n; Si' hai aggiurnatu MediaWiki ora ora:\n: MediaWiki virsioni 1.24 e succissivi nun attìvunu cchiu' di manera autumàtica li peddi istallati (talìa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manüali: Scuperta autumatica dî peddi]). Poi cupiari e ncuddari {{PLURAL:$5|sta riga|sti righi}} nta <code>LocalSettings.php</code> p'attivari {{PLURAL:$5|la peddi ca è istallata pi' com'ora|tutti li peddi ca sunnu istallati pi' com'ora}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si' hai mudificatu <code>LocalSettings.php</code> ora ora:\n: Cuntrolla ca nun sbagghiasti a' scrìviri li nomi dî peddi.",
-       "default-skin-not-found-no-skins": "Whoops! La peddi pridifinuta dâ to wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nNun hai nudda peddi installata.\n\n; Si' hai installatu o puru aggiurnatu MediaWiki ora ora:\n: E' prubbàbbili chi' l'installasti dû git, o direttamenti dû còdici surgenti nta quarchi' autra manera. Allura sta cosa è privista. MediaWiki virsioni 1.24 e succissivi nun cuntènunu nudda peddi ntô dipòsitu principali. Prova e installa quarchi' peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archìviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download u prugramma d'installazzioni in furmatu tar], chi' cunteni tanti peddi ed estinsioni. Poi cupiari e ncuddari a cartella <code>skins/</code> di ddadintra.\n:* Scàrrica a' una a' una quarchi' peddi in furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Adòpira Git pi' scarricari peddi].\n: Fari accussì' nun avissi a' ntirfirìri cû to dipòsitu git si' si' nu sviluppaturi di MediaWiki. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manüali: Cunfigurazzioni dî peddi] p'istruzzioni supra a' comu s'attìvunu i peddi e comu si scegghî chidda pridifinuta.",
+       "default-skin-not-found": "Whoops! La peddi pridifinuta dâ tò wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nA quantu pari la tò stallazzioni ncludi {{PLURAL:$4|la peddi|li peddi}} ccassutta. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuali: Cunfigurazzioni dî peddi] pi struzzioni supra a comu {{PLURAL:$4|s'attiva|s'attìvanu e comu si scegghî chidda pridifinuta}}.\n\n$2\n\n; Si stallasti MediaWiki ora ora:\n: E' prubbàbbili ca la stallasti dû git, o direttamenti dû còdici surgenti nta quarchi n'àutra manera. Allura sta cosa è privista. Prova e stalla quarchi peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archiviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download lu prugramma di stallazzioni n furmatu tar], ca cunteni tanti peddi e stinzioni. Poi cupiari e ncuddari la cartella <code>skins/</code> di ddà dintra.\n:* Scàrrica a una a una quarchi peddi ntô furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Adòpira Git pi scarricari peddi].\n: Lu fari accussì nun avissi a ntirfiriri cû tò dipòsitu git si sî nu sviluppaturi di MediaWiki.\n\n; Si aggiurnasti MediaWiki ora ora:\n: MediaWiki virsioni 1.24 e succissivi nun attìvanu cchiù di manera autumàtica li peddi stallati (talìa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuali: Scuperta autumàtica dî peddi]). Poi cupiari e ncuddari {{PLURAL:$5|sta riga|sti righi}} nta <code>LocalSettings.php</code> p'attivari {{PLURAL:$5|la peddi ch'è stallata pi com'ora|tutti li peddi ca sunnu stallati pi com'ora}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si canciasti <code>LocalSettings.php</code> ora ora:\n: Cuntrolla ca nun sbagghiasti a scrìviri li noma dî peddi.",
+       "default-skin-not-found-no-skins": "Whoops! La peddi pridifinuta dâ tò wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nNun hai nudda peddi nstallata.\n\n; Si nstallasti o puru aggiurnasti MediaWiki ora ora:\n: È prubbàbbili chi lu nstallasti dû git, o direttamenti dû còdici surgenti nta quarchi àutra manera. Allura sta cosa è privista. MediaWiki virsioni 1.24 e succissivi nun cuntèninu nudda peddi ntô dipòsitu principali. Prova e nstalla quarchi peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archiviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download lu prugramma di nstallazzioni n furmatu tar], chi cunteni tanti peddi e stinzioni. Poi cupiari e ncuddari la cartella <code>skins/</code> di ddà dintra.\n:* Scàrrica a una a una quarchi peddi n furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Adòpira Git pi scarricari peddi].\n: Fari accussì nun avissi a ntirfiriri cû tò dipòsitu git si sî nu sviluppaturi di MediaWiki. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuali: Cunfigurazzioni dî peddi] pi struzzioni supra a comu s'attìvanu li peddi e comu si scegghî chidda pridifinuta.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (attivata)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disattivata''')",
        "mediastatistics": "Statìstichi supra ê file multimidiali",
        "special-characters-group-greek": "Grecu",
        "special-characters-group-cyrillic": "Cirillicu",
        "special-characters-group-arabic": "Àrabbu",
-       "special-characters-group-arabicextended": "Àrabbu estinnutu",
+       "special-characters-group-arabicextended": "Àrabbu stinnutu",
        "special-characters-group-persian": "Persianu",
        "special-characters-group-hebrew": "Ebbreu",
        "special-characters-group-bangla": "Bengalisi",
        "special-characters-title-endash": "liniedda enni",
        "special-characters-title-emdash": "liniedda emmi",
        "special-characters-title-minus": "signu menu",
+       "mw-widgets-dateinput-no-date": "Nudda data scigghiuta",
        "mw-widgets-titleinput-description-new-page": "sta pàggina ancora nun esisti",
-       "mw-widgets-titleinput-description-redirect": "rimannu a $1"
+       "mw-widgets-titleinput-description-redirect": "rimannu a $1"
 }
index 76ea3ff..3a5ad0a 100644 (file)
        "passwordreset-emailtitle": "Accoont details oan {{SITENAME}}",
        "passwordreset-emailtext-ip": "Somebodie (likely ye, fae IP address $1) requested ae reset o yer passwaird fer {{SITENAME}} ($4). The follaein uiser {{PLURAL:$3|accoont is|accoonts ar}}\nassociated wi this wab-mail address:\n\n$2\n\n{{PLURAL:$3|This temperie passwaird|Thir temperie passwairds}} will expire in {{PLURAL:$5|yin day|$5 days}}.\nYe shid log in n chuise ae new passwaird nou. Gif some ither bodie makit this request, or gif ye'v mynded yer oreeginal passwaird, n ye nae longer\nwish tae chynge it, ye can ignore this message n continue uisin yer auld passwaird.",
        "passwordreset-emailtext-user": "Uiser $1 oan {{SITENAME}} requested ae reset o yer passwaird fer {{SITENAME}}\n($4). The follaein uiser {{PLURAL:$3|accoont is|accoonts ar}} associated wi this wab-mail address:\n\n$2\n\n{{PLURAL:$3|This temperie passwaird|Thir temperie passwairds}} will expire in {{PLURAL:$5|yin day|$5 days}}.\nYe shid log in n chuise ae new password nou. Gif some ither bodie haes makit this request, or gif ye'v mynded yer oreeginal passwaird, n ye nae langer wish tae chynge it, ye can ignore this message n continue uisin yer auld passwaird.",
-       "passwordreset-emailelement": "Uisername: $1\nTemperie passwaird: $2",
+       "passwordreset-emailelement": "Uisername: \n$1\n\nTemperie passwaird: \n$2",
        "passwordreset-emailsent": "Ae passwaird reset wab-mail haes been sent.",
        "passwordreset-emailsent-capture": "Ae passwaird reset wab-mail haas been sent, this is shawn ablow.",
        "passwordreset-emailerror-capture": "Ae passwaird reset wab-mail wis generated, (this is shawn ablow), but sendin it til the {{GENDER:$2|uiser}} failed: $1",
index e4a0b4e..523b5de 100644 (file)
        "passwordreset-emailtitle": "Kontu šilbawey {{SITENAME}} ga",
        "passwordreset-emailtext-ip": "Boro foo (sanda war da, nda IP aderesu $1) ceeci ka war\n šenniufaloo barmay {{SITENAME}} ($4) se. Goykaa woo {{PLURAL:$3|kontoo ti}\n kaŋ ga hanga bataga aderesoo woo:\n\n $2\n\n{{PLURAL:$3|Šiiyan šennikufaloo woo|Šiiyan šennikufaley wey}}  ga buu {{PLURAL:$5|zaari foo|zaari}} ra.\nWar ga hima ka huru nda šennifulal taaga dam sohõ. Nda boro waani ka ceeci ka woo tee\n nda war honga war šennikufal žeenaa, nda war ši boona koyne\n ka šennikufal barmay,\n war ga hin ka šaawaroo woo murayy nda soobay ka goy nda war\n šennikufal žeenaa. \\",
        "passwordreset-emailtext-user": "Goykaw $1 {{SITENAME}} wiri ka war sennikufaloo yeeti {{SITENAME}} se\n($4). Goykaa woo {{PLURAL:$3|kontoo ga|kontey ga}} marga nda nda bataga aderesoo woo:\n\n$2\n\n {{PLURAL:$3|Šiiyan šennikufaloo woo|Šiiyan šennikufaley wey}} ga buu {{PLURAL:$5|jirbi foo|jirbi $5}} ra.\nWar ga hima ka huru  nda šennikufal taaga suuba sohõ. Nda boro waani ka ceeci\n ka woo tee wala war ga honga wara šennikufal žeenaa nda war ši boona koyne\n k'a barma, war ga hin ka šaawaroo woo muray nda gaabandi ka goy nda war\n šennikufal žeenaa.",
-       "passwordreset-emailelement": "Goykaw maa: $1\nŠiiyan šennikufal: $2",
+       "passwordreset-emailelement": "Goykaw maa: \n$1\n\nŠiiyan šennikufal: \n$2",
        "passwordreset-emailsent": "Šennikufal yeetiyan bataga n' ka sanbandi war se.",
        "passwordreset-emailsent-capture": "Šennikulal yeetiyan bataga n' ka sanbandi war se, kaŋ ga cebandi ne ganda.",
        "passwordreset-emailerror-capture": "Šennikufal yeetiyan bataga n' ka teendi, kaŋ ga cebandi ne ganda, amm'a mana hin ka sanbandi {{GENDER:$2|goykaw}} do: $1",
        "emailuser": "Hantum goykaa woo se",
        "emailuser-title-target": "Hantum {GENDER:$1|user}} woo se",
        "emailuser-title-notarget": "Bataga goykaw",
-       "emailpage": "Bataga goykaw",
        "emailpagetext": "War ga hin ka ganda takaddaa zaa ka bataga sanba {{GENDER:$1|goykaw}} se.\nBataga aderesoo kaŋ war n'a dam [[Special:Preferences|your user preferences]] ra mma bangay sanda \"From\" bataga aderesu, adiši duukaa ga hin ka war zaabi nga boŋ se.",
        "defemailsubject": "{{SITENAME}} bataga kan hun \"$1\" do",
        "usermaildisabled": "Goykaw bataga ši koy",
index 3ee09eb..9623c23 100644 (file)
        "passwordreset-emailtitle": "Detalji računa na {{SITENAME}}",
        "passwordreset-emailtext-ip": "Netko (vjerovatno Vi, s IP adrese $1) je zatražio resetiranje vaše lozinke/zaporke {{SITENAME}} ($4). Sljedeći {{PLURAL:$3|račun korisnika je|računi korisnika su}}\npovezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena lozinka|Ove privremene lozinke}} će isteći za {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu lozinku. Ako je neko drugi napravio ovaj\nzahtjev, ili ako ste se sjetili Vaše početne lozinke, a ne želite je promijeniti, \nmožete zanemariti ovu poruku i nastaviti koristiti staru lozinku.",
        "passwordreset-emailtext-user": "Korisnik $1 na {{SITENAME}} je zatražio resetiranje vaše lozinke/zaporke za {{SITENAME}}\n($4). Sljedeći {{PLURAL:$3|korisnički račun je|korisnički računi su}} povezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena lozinka|Ove privremene lozinke}} će isteći za {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu lozinku. Ako je neko drugi napravio ovaj\nzahtjev, ili ako ste se sjetili Vaše originalne lozinke, a ne želite je više promijeniti, \nmožete zanemariti ovu poruku i nastaviti koristiti staru lozinku.",
-       "passwordreset-emailelement": "Korisničko ime: $1\nPrivremena šifra: $2",
+       "passwordreset-emailelement": "Korisničko ime: \n$1\n\nPrivremena šifra: \n$2",
        "passwordreset-emailsent": "E-mail za resetiranje lozinke/zaporke je poslan.",
        "passwordreset-emailsent-capture": "E-mail za resetiranje lozinke/zaporke je poslan (prikazan dolje).",
        "passwordreset-emailerror-capture": "E-mail za resetiranje lozinke/zaporke, prikazan dolje, je poslan, ali slanje {{GENDER:$2|korisniku|korisnici|korisniku}} nije uspjelo: $1",
        "emailuser": "Pošalji E-mail ovom korisniku",
        "emailuser-title-target": "Slanje e-maila {{GENDER:$1|korisniku|korisnici|korisniku}}",
        "emailuser-title-notarget": "Slanje e-maila korisniku",
-       "emailpage": "Pošalji e-mail ovom korisniku",
        "emailpagetext": "Možete da koristite donji obrazac da pošaljete e-mail {{GENDER:$1|ovom korisniku|ovoj korisnici|ovom korisniku|}}.\nE-mail koju ste uneli u vašim [[Special:Preferences|postavkama]] će se prikazati u polju \"Od:\", tako da će primalac moći da vam odgovori direktno.",
        "defemailsubject": "{{SITENAME}} e-mail od korisnika \"$1\"",
        "usermaildisabled": "Korisnički e-mail onemogućen",
index 549d49e..b17e15b 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}}යෙහි ගිණුම් තොරතුරු",
        "passwordreset-emailtext-ip": "කවුරුන්හෝ (බොහෝවිට ඔබ, $1 අන්තර්ජාල ලිපිනය භාවිතයෙන්) {{SITENAME}} ($4) සඳහා ඔබගේ ගිණුම් විස්තර සිහිකැඳවීමක් ඉල්ලා ඇත.  පහත පරිශීලක {{PLURAL:$3|ගිණුම|ගිණුම්}}\nමෙම විද්‍යුත් තැපැල් ලිපිනය හා සමගින් ආශ්‍රය වෙයි.\n\n$2\n\n{{PLURAL:$3|මෙම තාවකාලික මුරපදය|මෙම තාවකාලික මුරපද}} {{PLURAL:$5|එක් දිනයක්|දින $5 ක්}} ගෙවුනු විට ඉකුත් වනු ඇත.\nඔබ දැන් ප්‍රවිෂ්ට වී නව මුරපදයක් තෝරාගත යුතුයි. වෙන යම් අයෙක් මෙම ඉල්ලීම කර ඇත්නම් හෝ, ඔබගේ මුල් මුරපදය ඔබගේ මතකයට පැමිණ ඇති නම් හා, එය වෙනස් කිරීමට ඔබ හට තවදුරටත් අවශ්‍ය නොවේ නම්, ඔබ විසින් මෙම පණිවුඩය නොසලකා හැර පැරණි මුරපදය තවදුරටත් පාවිච්චි කළ හැක.",
        "passwordreset-emailtext-user": "{{SITENAME}} හි පරිශීලක $1,{{SITENAME}}($4)සඳහා මුරපදය යලි පිහිටුවීමට ඉල්ලා ඇත.\n\n$2\n\n{{PLURAL:$3|මෙම මුරපදය|මෙම මුරපද}}{{PLURAL:$5|එක් දිනකින්|දවස්$5කින්}}කල් ඉකුත් වනු ඇත.\nඔබ දැන් ඇතුළු වී නව මුරපදයක් තේරිය යුතුය.මෙම ඉල්ලීම වෙන කෙනෙකු විසින් හෝ ඔබට ඔබගේ මුල් මුරපදය මතක නම් හෝ ඔබ තව දුරටත් එය වෙනස් කිරීමට අදහස් නොකරයි නම් හෝ ඔබ මෙම පනිවිඩය නොසලකාහැර ඔබගේ පැරණි මුරපදය භාවිතා කරන්න.",
-       "passwordreset-emailelement": "පරිශීලක නාමය: $1\nතාවකාලික මුරපදය: $2",
+       "passwordreset-emailelement": "පරිශීලක නාමය: \n$1\n\nතාවකාලික මුරපදය: \n$2",
        "passwordreset-emailsent": "මුර-පදය නැවත සකස් කිරීම පිළිබඳව විද්‍යුත් තැපෑලක් යවන ලදී.",
        "passwordreset-emailsent-capture": "මුර-පදය වෙනස් කිරීම පිළිබඳව විද්‍යුත් තැපෑලක් යවන ලදී, එය පහත දැක්වේ.",
        "passwordreset-emailerror-capture": "සිහිකැඳවුම් ඊ-තැපෑල ජනිත කරනු ලැබූ අතර, එය පහත දැක්වේ, නමුත් එය {{GENDER:$2|}}පරිශීලකයාට යැවීම අසාර්ථක වුනි: $1",
index 5a4c688..a3f4f5d 100644 (file)
        "passwordreset-emailtitle": "Podrobnosti o účte na {{GRAMMAR:lokál|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Niekto (pravdepodobne vy z IP adresy $1) požiadal o obnovenie vášho hesla na {{GRAMMAR:genitív|{{SITENAME}}}} ($4). {{PLURAL:$3|Nasledujúci používateľský účet je spojený|Nasledujúce používateľské účty sú spojené}}\ns touto emailovou adresou:\n\n$2\n\n{{PLURAL:$3|Platnosť tohto dočasného hesla vyprší|Platnosť týchto dočasných hesiel vyprší}} o {{PLURAL:$5|jeden deň|$5 dni|$5 dní}}.\nMali by ste sa prihlásiť teraz a zvoliť nové heslo. Ak túto žiadosť podal niekto iný alebo\nak ste si spomenuli svoje pôvodné heslo a už ho chcete zmeniť, môžete túto správu\nignorovať a ďalej používať vaše staré heslo.",
        "passwordreset-emailtext-user": "Používateľ $1 na {{GRAMMAR:genitív|{{SITENAME}}}} požiadal o obnovenie vášho hesla na na {{GRAMMAR:genitív|{{SITENAME}}}} ($4). {{PLURAL:$3|Nasledujúci používateľský účet je spojený|Nasledujúce používateľské účty sú spojené}}\ns touto emailovou adresou:\n\n$2\n\n{{PLURAL:$3|Platnosť tohto dočasného hesla vyprší|Platnosť týchto dočasných hesiel vyprší}} o {{PLURAL:$5|jeden deň|$5 dni|$5 dní}}.\nMali by ste sa prihlásiť teraz a zvoliť nové heslo. Ak túto žiadosť podal niekto iný alebo\nak ste si spomenuli svoje pôvodné heslo a už ho chcete zmeniť, môžete túto správu\nignorovať a ďalej používať vaše staré heslo.",
-       "passwordreset-emailelement": "Používateľské meno: $1\nDočasné heslo:$2",
+       "passwordreset-emailelement": "Používateľské meno: \n$1\n\nDočasné heslo:\n$2",
        "passwordreset-emailsent": "Email s novým heslom bol odoslaný.",
        "passwordreset-emailsent-capture": "Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie.",
        "passwordreset-emailerror-capture": "Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať {{GENDER:$2|používateľovi}}: $1",
        "emailuser": "E-mail tomuto používateľovi",
        "emailuser-title-target": "E-mail {{GENDER:$1|tomuto používateľovi|tejto používateľke}}",
        "emailuser-title-notarget": "E-mail používateľovi",
-       "emailpage": "E-mail používateľovi",
        "emailpagetext": "Pomocou nasledovného formulára môžete {{GENDER:$1|tomuto používateľovi|tejto používateľke}} poslať e-mailovú správu.\nMailová adresa, ktorú ste zadali vo svojich [[Special:Preferences|nastaveniach]] sa zobrazí ako adresa odosielateľa mailu, aby vám mohol príjemca priamo odpovedať.",
        "defemailsubject": "email {{GRAMMAR:genitív|{{SITENAME}}}} od používateľa „$1“",
        "usermaildisabled": "Používateľ má vypnuté používanie emailu",
index 555db1a..6baa78e 100644 (file)
@@ -10,7 +10,8 @@
                        "Yerpo",
                        "아라",
                        "MaGa",
-                       "Skalcaa"
+                       "Skalcaa",
+                       "Janezdrilc"
                ]
        },
        "tog-underline": "Podčrtavanje povezav:",
        "passwordreset-emailtitle": "Podrobnosti računa na {{SITENAME}}",
        "passwordreset-emailtext-ip": "Nekdo (verjetno vi, z IP-naslova $1) je zahteval ponastavitev vašega\ngesla na {{SITENAME}} ($4). S tem e-poštnim naslovom\n{{PLURAL:$3|je povezan naslednji uporabniški račun|sta povezana naslednja uporabniška računa|so povezani naslednji uporabniški računi}}:\n\n$2\n\n{{PLURAL:$3|Začasno geslo bo poteklo|Začasni gesli bosta potekli|Začasna gesla bodo potekla}} v {{PLURAL:$5|enem dnevu|$5 dneh}}.\nPrijavite se in izberite novo geslo. Če je zahtevo podal\nnekdo drug ali pa ste se spomnili svojega prvotnega gesla in ga več\nne želite spremeniti, lahko to sporočilo prezrete in nadaljujete z uporabo\nsvojega starega gesla.",
        "passwordreset-emailtext-user": "Uporabnik $1 na strani {{SITENAME}} je zahteval ponastavitev vašega gesla na {{SITENAME}}\n($4). S tem e-poštnim naslovom {{PLURAL:$3|je povezan naslednji uporabniški račun|sta povezana naslednja uporabniška računa|so povezani naslednji uporabniški računi}}:\n\n$2\n\n{{PLURAL:$3|Začasno geslo bo poteklo|Začasni gesli bosta potekli|Začasna gesla bodo potekla}} v {{PLURAL:$5|enem dnevu|$5 dneh}}.\nPrijavite se in izberite novo geslo sedaj. Če je zahtevo podal\nnekdo drug ali pa ste se spomnili svojega prvotnega gesla in ga več\nne želite spremeniti, lahko to sporočilo prezrete in nadaljujete z uporabo\nsvojega starega gesla.",
-       "passwordreset-emailelement": "Uporabniško ime: $1\nZačasno geslo: $2",
+       "passwordreset-emailelement": "Uporabniško ime: \n$1\n\nZačasno geslo: \n$2",
        "passwordreset-emailsent": "Poslali smo e-pošto za postavitev gesla.",
        "passwordreset-emailsent-capture": "Poslali smo e-pošto za ponastavitev gesla, ki je prikazana spodaj.",
        "passwordreset-emailerror-capture": "Ustvarili smo e-pošto za ponastavitev gesla, ki je prikazana spodaj, vendar pa pošiljanje {{GENDER:$2|uporabniku|uporabnici}} ni uspelo: $1",
        "changeemail-password": "Vaše geslo za {{GRAMMAR:tožilnik|{{SITENAME}}}}:",
        "changeemail-submit": "Spremeni e-naslov",
        "changeemail-throttled": "Izvedli ste preveč poskusov prijave.\nProsimo, počakajte $1, preden poskusite znova.",
+       "changeemail-nochange": "Prosimo, vnesite drugačen nov e-poštni naslov.",
        "resettokens": "Ponastavitev žetonov",
        "resettokens-text": "Žetone lahko ponastavite, kar omogoča dostop do nekaterih zasebnih podatkov, povezanih z vašim računom.\n\nTo storite, če ste po nesreči žetone z nekom delili, ali če je bil vaš račun ogrožen.",
        "resettokens-no-tokens": "Ni nobenih žetonov za ponastavitev.",
        "rows": "Vrstic:",
        "columns": "Stolpcev:",
        "searchresultshead": "Nastavitve poizvedovanja",
-       "stub-threshold": "Prag označevanja <a href=\"#\" class=\"stub\">škrbin</a> (v bajtih):",
+       "stub-threshold": "Prag označevanja škrbin ($1):",
+       "stub-threshold-sample-link": "primer",
        "stub-threshold-disabled": "Onemogočeno",
        "recentchangesdays": "Število dni, prikazanih v zadnjih spremembah:",
        "recentchangesdays-max": "Največ $1 {{PLURAL:$1|dan|dneva|dnevi|dni}}",
        "newpages": "Nove strani",
        "newpages-username": "Uporabniško ime:",
        "ancientpages": "Najdlje nespremenjeni članki",
-       "move": "Prestavi",
+       "move": "Preimenuj",
        "movethispage": "Prestavi stran",
        "unusedimagestext": "Spodnje datoteke obstajajo, vendar niso vključene v nobeno stran.\nProsimo, upoštevajte, da se lahko druge spletne strani povezujejo na datoteko z neposrednim URL in je zato morda še vedno navedena tukaj, čeprav se aktivno uporablja.",
        "unusedcategoriestext": "Naslednje strani kategorij obstajajo, vendar jih ne uporablja noben članek ali druga kategorija.",
        "booksources-text": "Sledi seznam povezav do drugi spletnih strani, ki prodajajo nove in rabljene knjige, in imajo morda nadaljnje informacije o knjigah, ki jih iščete:",
        "booksources-invalid-isbn": "Za dani ISBN se ne zdi, da je veljaven; preverite za morebitne napake pri kopiranju iz prvotnega vira.",
        "specialloguserlabel": "Izvajalec:",
-       "speciallogtitlelabel": "Cilj (naslov ali uporabnik):",
+       "speciallogtitlelabel": "Cilj (naslov ali {{ns:user}}:uporabniškoime za uporabnika):",
        "log": "Dnevniki",
        "all-logs-page": "Vsi javni dnevniki",
        "alllogstext": "Združeno so prikazani dnevniki sprememb uporabniških pravic, preimenovanj uporabnikov, nalaganja predstavnostnih datotek, prestavljanja in zaščite strani, brisanja, registracij uporabnikov, sprememb položaja botov ter blokiranja in deblokiranja uporabnikov na strani {{SITENAME}}. Pogled lahko zožite z izbiro dnevnika, uporabniškega imena ali strani. Vedite, da polje »Uporabnik« razlikuje med malimi in velikimi črkami.",
        "lockfilenotwritable": "Datoteka zaklepanja zbirke podatkov ni zapisljiva.\nZa zaklepanje in odklepanje zbirke podatkov mora biti ta datoteka zapisljiva s strani spletnega strežnika.",
        "databasenotlocked": "Zbirka podatkov ni zaklenjena.",
        "lockedbyandtime": "($1 dne $2 ob $3)",
-       "move-page": "Prestavi $1",
+       "move-page": "Preimenuj $1",
        "move-page-legend": "Prestavitev strani",
        "movepagetext": "Z naslednjim obrazcem lahko stran preimenujete in hkrati prestavite tudi vso njeno zgodovino.\nDosedanja stran se bo spremenila v preusmeritev na prihodnje mesto.\nSamodejno lahko posodobite preusmeritve, ki kažejo na dosedanji naslov.\nČe se za to ne odločite, ne pozabite preveriti vseh [[Special:DoubleRedirects|dvojnih]] ali [[Special:BrokenRedirects|pretrganih preusmeritev]].\nOdgovorni ste, da bodo povezave še naprej kazale na prava mesta.\n\nKjer stran z izbranim novim imenom že obstaja, dejanje '''ne''' bo izvedeno, razen če je sedanja stran preusmeritev in brez zgodovine urejanj.\nTo pomeni, da lahko, če se zmotite, strani vrnete prvotno ime, ne morete pa prepisati že obstoječe strani.\n\n'''Opozorilo!'''\nPrestavitev strani je lahko za priljubljeno stran velika in nepričakovana sprememba, zato pred izbiro ukaza dobro premislite.",
        "movepagetext-noredirectfixer": "Z uporabo spodnjega obrazca lahko preimenujete stran tako, da prestavite vso njeno zgodovino na novo ime.\nStar naslov bo postal preusmeritvena stran na nov naslov.\nNe pozabite preveriti [[Special:DoubleRedirects|dvojnih]] ali [[Special:BrokenRedirects|pretrganih preusmeritev]].\nVi ste odgovorni, da vse povezave še naprej kažejo tja, kamor naj bi.\n\nUpoštevajte, da stran '''ne''' bo prestavljena, če že obstaja stran z novim naslovom, razen če je prazna ali preusmeritev brez pretekle zgodovine urejanj.\nTo pomeni, da lahko stran preimenujete nazaj, če ste naredili napako, vendar ne morete prepisati obstoječe strani.\n\n'''Opozorilo!'''\nTo je lahko velika in nepričakovana sprememba za priljubljeno stran;\nprosimo, pred nadaljevanjem se prepričajte, da razumete posledice tega dejanja.",
        "movepagetalktext": "Če obstaja, bo samodejno prestavljena tudi pripadajoča pogovorna stran, '''razen kadar'''\n*pod novim imenom že obstaja neprazna pogovorna stran ali\n*ste odkljukali spodnji okvirček.\n\nČe je tako, boste morali pogovorno stran, če želite, prestaviti ali povezati ročno.",
-       "movearticle": "Prestavi stran:",
+       "movearticle": "Preimenuj stran:",
        "moveuserpage-warning": "'''Opozorilo:''' Premikate uporabniško stran. To pomeni, da bo premaknjena samo stran in uporabnik ''ne'' bo preimenovan.",
        "movecategorypage-warning": "<strong>Opozorilo:</strong> Prestavili boste stran kategorije. Pomnite, da boste prestavili samo stran; vse strani v stari kategoriji <em>ne</em> bomo prekategorizirali v novo kategorijo.",
        "movenologintext": "Za prestavljanje strani morate biti registrirani in [[Special:UserLogin|prijavljeni]].",
        "tooltip-ca-unprotect": "Spremenite zaščito strani",
        "tooltip-ca-delete": "Brišite stran",
        "tooltip-ca-undelete": "Obnovite pred izbrisom napravljena urejanja strani.",
-       "tooltip-ca-move": "Preimenujte stran",
+       "tooltip-ca-move": "Preimenuj stran",
        "tooltip-ca-watch": "Dodajte stran na spisek nadzorov",
        "tooltip-ca-unwatch": "Odstranite stran s spiska nadzorov",
        "tooltip-search": "Preiščite wiki",
        "tooltip-ca-nstab-main": "Prikaže članek",
        "tooltip-ca-nstab-user": "Prikaže uporabniško stran",
        "tooltip-ca-nstab-media": "Prikaže stran s predstavnostno vsebino",
-       "tooltip-ca-nstab-special": "Te posebne strani ne morete urejati",
+       "tooltip-ca-nstab-special": "To je posebna stran in je ni mogoče urejati",
        "tooltip-ca-nstab-project": "Prikaže stran projekta",
        "tooltip-ca-nstab-image": "Prikaže stran s sliko ali drugo datoteko",
        "tooltip-ca-nstab-mediawiki": "Prikaže sistemsko sporočilo",
index 97f3641..1e4efde 100644 (file)
        "resetpass-temp-password": "Ereysir ku meel gaar ah:",
        "passwordreset": "Bedel ereysirka",
        "passwordreset-text-many": "{{PLURAL:$1|Gali mid ka mid ah macluumaadkaada asaasiga ah si erey sirtaada usoo ceshato.}}",
-       "passwordreset-legend": "Bedel ereysirka",
        "passwordreset-username": "Magaca gudagalka",
        "passwordreset-email": "Ciwaanka e-mailka",
        "passwordreset-emailtext-ip": "(Qof laga yaabo in ee tahay adi, oo ka socdo ciwaanka IP'ka $1)  ayaa  codsaday xasuus faah faahin akoonkaada {{SITENAME}}\n($4). Isticmaaladaan soo socota {{PLURAL:$3|akoonkooda waxee|akoonkooda waxee}} la xiriiraan ciwaankaan e-mailka ah:\n\n$2\n\n{{PLURAL:$3|eraysirkaan kumeel gaarka ah|Eraysiryadaan kumeel gaarka ah}} waxay dhacaayaan {{PLURAL:$5|hal maalin|$5 maalmood}}.\nWaa in aad gudaha gashaa oo e-mail cusub doorataa hadda. Hadii ee qof kale codsigaan sameysay, ama hadii aad soo xasuusatay eraysirkaagii hore, oo aadna u baahneen in aad badashid, iska ilaaw fariintaan siina isticmaal eraysirkaagii duqi ahaa.",
        "passwordreset-emailtext-user": "Isticmaale $1 ee {{SITENAME}} wuxuu codsaday xasuus faah faahin akoonkaada {{SITENAME}}\n($4). Isticmaaladaan soo socota {{PLURAL:$3|akoonkooda waxee|akoonkooda waxee}} la xiriiraan ciwaankaan e-mailka ah:\n\n$2\n\n{{PLURAL:$3|eraysirkaan kumeel gaarka ah|Eraysiryadaan kumeel gaarka ah}} waxay dhacaayaan {{PLURAL:$5|hal maalin|$5 maalmood}}.\nWaa in aad gudaha gashaa oo e-mail cusub doorataa hadda. Hadii ee qof kale codsigaan sameysay, ama hadii aad soo xasuusatay eraysirkaagii hore, oo aadna u baahneen in aad badashid, iska ilaaw fariintaan siina isticmaal eraysirkaagii duqi ahaa.",
-       "passwordreset-emailelement": "Magaca gudagalka: $1\nEreysirka kumeelgaarka ah: $2",
+       "passwordreset-emailelement": "Magaca gudagalka: \n$1\n\nEreysirka kumeelgaarka ah: \n$2",
        "passwordreset-emailerror-capture": "E-mail xasuus ah ayaa la sameeyay, oo ka arki kartid hoosta,laakiin wuxuu ku guul dareestay in isticmaalaha loo diro: $1",
        "changeemail": "Bedel ciwaanka E-mailka",
        "changeemail-oldemail": "Ciwaanka e-mailka hadda jiro:",
        "mailnologin": "Ma'jiro cinwaan wax lagu diro",
        "mailnologintext": "Waa in aad [[Special:UserLogin|gudaha ku jirtaa]]\nkuna haysatid E-boosto sax ah [[Special:Preferences|dooqyadaada]],\nsi aad ugu dirto E-boosto isticmaalayaasha kale.",
        "emailuser": "E-mail u dir isticmaalahaan",
-       "emailpage": "Isticmaalaha e-mailka",
        "noemailtitle": "Malahan cinwaan E-mail",
        "emailfrom": "Ka socoto:",
        "emailto": "Ku:",
index 1f65899..cb5de48 100644 (file)
                        "OrvenBregu",
                        "Macofe",
                        "Liridon",
-                       "Ammartivari"
+                       "Ammartivari",
+                       "Kosovastar"
                ]
        },
-       "tog-underline": "Nënvizo lidhjet:",
-       "tog-hideminor": "Fshih redaktimet e vogla në ndryshimet e fundit",
+       "tog-underline": "Nënvizizimi i lidhjes:",
+       "tog-hideminor": "Fsheh redaktimet e vogla nga ndryshimet e fundit",
        "tog-hidepatrolled": "Fshih redaktimet e vrojtuara në ndryshimet e fundit",
        "tog-newpageshidepatrolled": "Fshih faqet e vrojtuara nga lista e faqeve të reja",
        "tog-extendwatchlist": "Zgjero listën e faqeve të vëzhguara që t'i tregojë të gjitha ndryshimet, jo vetëm më të fundit.",
@@ -46,6 +47,7 @@
        "tog-watchdefault": "Shto faqet dhe skedat e redaktuara prej meje tek lista e faqeve nën mbikqyrje",
        "tog-watchmoves": "Shto faqet dhe skedat e zhvendosura prej meje tek lista e faqeve nën mbikqyrje",
        "tog-watchdeletion": "Shto faqet dhe skedat e grisura prej meje tek lista e faqeve  nën mbikqyrje",
+       "tog-watchrollback": "Shto faqet ku unë kam kryer një rikthim tek lista ime mbikqyrëse",
        "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ë",
        "sort-descending": "Radhit në zbritje",
        "sort-ascending": "Radhit në ngjitje",
        "nstab-main": "Artikulli",
-       "nstab-user": "Faqja e përdoruesit",
-       "nstab-media": "Media-faqe",
+       "nstab-user": "{{GENDER:{{ROOTPAGENAME}}|Faqja e përdoruesit|Faqja e përdorueses}}",
+       "nstab-media": "Medie",
        "nstab-special": "Faqe speciale",
-       "nstab-project": "Projekt-faqe",
+       "nstab-project": "Projekti",
        "nstab-image": "Skedë",
        "nstab-mediawiki": "Mesazh",
        "nstab-template": "Stampa",
        "readonly_lag": "Databaza është kyçur automatikisht për t'i dhënë kohë serverëve databazë slave që të arrijnë në një nivel me serverin databazë master",
        "internalerror": "Gabim i brendshëm",
        "internalerror_info": "Gabim i brendshëm: $1",
+       "internalerror-fatal-exception": "Përjashtim fatal i tipit \"$1\"",
        "filecopyerror": "I pamundur kopjimi i skedës \"$1\" tek \"$2\".",
        "filerenameerror": "I pamundur riemërtimi i skedës \"$1\" në \"$2\".",
        "filedeleteerror": "E pamundur fshirja e skedës \"$1\".",
        "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}}",
+       "createacct-benefit-body1": "{{PLURAL:$1|redaktim|redaktime}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|faqe|faqe}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|kontribues}} kohët e fundit",
        "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",
        "passwordreset-emailtitle": "Detajet e llogarisë në {{SITENAME}}",
        "passwordreset-emailtext-ip": "Dikush (ndoshta ju, nga IP adresa $1) kërkoi një kujtesë për \ndetajet e llogarisë suaj {{SITENAME}} ($4).Përdoruesi në vijim {{PLURAL:$3|llogari është|llogaritë janë}} të lidhur me këtë postë elektronike:\n\n$2\n\n{{PLURAL:$3|Ky fjalëkalim i përkohshëm|Këto fjalëkalime të përkohshme}} do të përfundojë për {{PLURAL:$5|një ditë|$5 ditë}}.\n\nJu duhet të kyçeni dhe të zgjidhni një fjalëkalim të ri tani. Nëse dikush tjetër e ka bërë këtë kërkesës, ose në qoftë se ju mbani mend fjalëkalimin tuaj origjinal, dhe ju nuk dëshirojni të ndryshoni atë, ju mund të injoroni këtë mesazh dhe do të vazhdoni përdorimin e fjalëkalimit tuaj të vjetër.",
        "passwordreset-emailtext-user": "Përdoruesi  $1 në {{SITENAME }} ka kërkuar një kujtesë për të dhënat e llogarisë suaj për {{SITENAME }} ($4). Përdoruesi në vijim {{PLURAL:$3 | llogaria është | llogaritë janë}} të lidhur me këtë postë elektronike: \n\n$2\n\n{{PLURAL:$3 | Ky fjalëkalim i përkohshëm | Këto fjalëkalime të përkohshme}} do të përfundojë në {{PLURAL:$5 | një ditë | $5 ditë}}.\nJu duhet të kyçeni dhe të zgjidhni një fjalëkalim të ri tani. Nëse dikush tjetër e ka bërë këtë kërkesës, ose në qoftë se ju mbani mend fjalëkalimin tuaj origjinal, dhe ju nuk dëshirojni të ndryshoni atë, ju mund të injoroni këtë mesazh dhe do të vazhdoni përdorimin e fjalëkalimit tuaj të vjetër.",
-       "passwordreset-emailelement": "Nofka: $1\nFjalëkalimi i përkohshëm: $2",
+       "passwordreset-emailelement": "Nofka: \n$1\n\nFjalëkalimi i përkohshëm: \n$2",
        "passwordreset-emailsent": "Një email për rivendosjen e fjalëkalimit është dërguar.",
        "passwordreset-emailsent-capture": "Një email për rivendosjen e fjalëkalimit është dërguar, i cili tregohet më poshtë.",
        "passwordreset-emailerror-capture": "U dërgua një e-mail kujtesë, i cili tregohet më poshtë, por dërgesa për tek përdoruesi qe e pamundur: $1",
        "updated": "(E ndryshuar)",
        "note": "'''Shënim:'''",
        "previewnote": "'''Vini re! Kjo faqe është vetëm për shqyrtim.'''\nNdryshimet tuaja nuk janë ruajtur ende!",
-       "continue-editing": "Vazhdo ndryshimin",
+       "continue-editing": "Shko në pjesën për redaktim",
        "previewconflict": "Kjo parapamje reflekton tekstin sipër kutisë së redaktimit siç do të duket kur të kryeni ndryshimin.",
        "session_fail_preview": "'''Ju kërkojmë ndjesë! Redaktimi juaj nuk mund të perpunohej për shkak të humbjes së të dhënave të seancës.'''\nJu lutemi, provojeni përsëri.\nNëse përsëri nuk punon, provoni të [[Special:UserLogout|dilni nga faqja]] dhe të identifikoheni serish.",
        "session_fail_preview_html": "'''Ju kërkojmë ndjesë! I pamundur përpunimi i redaktimeve tuaja për shkak të humbjes së të dhënave të seancës.'''\n'' Për shkak se {{SITENAME}} ka të aktivizuar përdorimin e HTML-së së papërpunuar, teksti për shqyrtim është fshehur si masë parandaluese kundër sulmeve JavaScript.''\n'''Nëse kjo është një përpjekje e sinqertë për redaktim, ju lutemi, provojeni përsëri.'''\nNëse përsëri nuk funksiono, provoni [[Special:UserLogout|të dilni nga faqja]] dhe të identifikoheni sërish.",
        "history-feed-empty": "Faqja që kërkuat nuk ekziston. Ajo mund të jetë grisur nga wiki ose mund të jetë zhvendosur nën një emër tjetër. Mund të provoni ta gjeni duke e [[Special:Search|kërkuar]].",
        "rev-deleted-comment": "(Edit përmbledhje larguar)",
        "rev-deleted-user": "(përdoruesi u largua)",
-       "rev-deleted-event": "(veprimi në regjistër është hequr)",
+       "rev-deleted-event": "(detajet e regjistrit janë hequr)",
        "rev-deleted-user-contribs": "[Përdoruesi ose adresa IP u hoq - redaktimet e  fshehura nga kontribuesit]",
        "rev-deleted-text-permission": "Versioni i kësaj faqeje është '''fshirë'''.\nDetajet mund të gjenden tek [{{fullurl:{{#Special:Log}}/delete={{FULLPAGENAME}}}} regjistri i grisjeve].",
        "rev-deleted-text-unhide": "Ky version i faqes është '''grisur'''.\nDetajet mund të gjenden tek [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAME}}}} regjistri i grisjeve].\nJu akoma mund ta [$1 shikoni këtë version] nëse doni të vazhdoni.",
        "prefs-reset-intro": "Mundeni me përdorë këtë faqe për me i kthy parapëlqimet tueja në ato të paracaktuemet e faqes.\nKjo nuk mundet me u zhbâ.",
        "prefs-emailconfirm-label": "Konfirmimi i emailit:",
        "youremail": "Adresa e email-it*",
-       "username": "Nofka e përdoruesit:",
-       "prefs-memberingroups": "Anëtar i {{PLURAL:$1|grupit|grupeve}}:",
+       "username": "{{GENDER:$1|Emri i përdoruesit|Emri i përdorueses}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Anëtar i|Anëtare e}} {{PLURAL:$1|grupit|grupeve}}:",
        "prefs-registration": "Koha e regjistrimit:",
        "yourrealname": "Emri juaj i vërtetë*",
        "yourlanguage": "Ndërfaqja gjuhësore",
        "prefs-help-signature": "Komentet në faqet e diskutimit duhet të nënshkruhen me \"<nowiki>~~~~</nowiki>\" të cilat do të konvertohen me emrin tuaj të përdoruesit dhe kohën.",
        "badsig": "Sintaksa e signaturës është e pavlefshme, kontrolloni HTML-in.",
        "badsiglength": "Nënshkrimi është tepër i gjatë.\nNuk duhet të jetë më i gjatë se $1 {{PLURAL:$1|karakter|karaktere}}.",
-       "yourgender": "Gjinia:",
-       "gender-unknown": "e pacaktuar",
+       "yourgender": "Si dëshironi të përshkruheni?",
+       "gender-unknown": "Kur ju të përmendeni, softueri do të përdorë fjalë asnjanëse kur është e mundur (në të shumtën e rasteve do të jenë fjalë të gjinisë mashkullore)",
        "gender-male": "Ai redakton faqet wiki",
        "gender-female": "Ajo redakton faqet wiki",
-       "prefs-help-gender": "Sipas dëshirës: përdoret për adresim korrekt në relacion me gjininë nga software-i.\nKjo informatë është publike.",
+       "prefs-help-gender": "Vendosja e këtij parapëlqimi nuk është e detyrueshme.\nSoftueri përdor vlerat e tij për t'ju adresuar dhe për t'ju përmendur ju te të tjerët duke përdorur gjininë e duhur gramatikore.\nKy informacion do të jetë publik.",
        "email": "Email",
        "prefs-help-realname": "* Emri i vërtetë nuk është i domosdoshëm: Nëse e jipni do të përmendeni si kontribues për punën që ke bërë.",
        "prefs-help-email": "Posta elektronike është zgjedhore, por ju mundëson që fjalëkalimi i ri të ju dërgohet nëse e harroni atë. Gjithashtu mund të zgjidhni nëse doni të tjerët t'ju shkruajnë ose jo përmes faqes suaj të diskutimit pa patur nevojë të zbulojnë identitetin tuaj.",
        "userrights-lookup-user": "Ndrysho grupet e përdoruesit",
        "userrights-user-editname": "Fusni emrin e përdoruesit:",
        "editusergroup": "Redakto grupet e përdoruesve",
-       "editinguser": "Duke ndryshuar privilegjet e përdoruesit '''[[User:$1|$1]]''' $2",
+       "editinguser": "Duke ndryshuar privilegjet e {{GENDER:$1|përdoruesit|përdorueses}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Anëtarësimi tek grupet",
        "saveusergroups": "Ruaj Grupin e Përdoruesve",
-       "userrights-groupsmember": "Anëtar i:",
-       "userrights-groupsmember-auto": "Anëtar implicit i:",
-       "userrights-groups-help": "Mund të ndryshoni anëtarësimin e këtij përdoruesi në grupe:\n* Kutia e zgjedhur shënon që përdoruesi është anëtar në atë grup\n* Kutia e pazgjedhur shënon që përdoruesi nuk është anëtar në atë grup\n* Një * shënon që nuk mund ta hiqni grupin pasi ta keni shtuar (dhe anasjelltas).",
+       "userrights-groupsmember": "{{GENDER:$2|Anëtar i|Anëtare e}}:",
+       "userrights-groupsmember-auto": "{{GENDER:$2|Anëtar i nënkuptuar i|Anëtare e nënkuptuar e}}:",
+       "userrights-groups-help": "Mund të ndryshoni anëtarësimin e {{GENDER:$1|këtij përdoruesi|kësaj përdorueseje}} në grupe:\n* Kutia e zgjedhur shënon që {{GENDER:$1|përdoruesi|përdoruesja}} është {{GENDER:$1|anëtar|anëtare}} në atë grup.\n* Kutia e pazgjedhur shënon që {{GENDER:$1|përdoruesi|përdoruesja}} nuk është {{GENDER:$1|anëtar|anëtare}} në atë grup.\n* Një * tregon që nuk mund ta hiqni grupin pasi ta keni shtuar (dhe anasjelltas).",
        "userrights-reason": "Arsyeja:",
        "userrights-no-interwiki": "Nuk keni leje për të ndryshuar privilegjet e përdoruesve në wiki të tjera.",
        "userrights-nodatabase": "Regjistri $1 nuk ekziston ose nuk është vendor.",
        "userrights-nologin": "Duhet të [[Special:UserLogin|hyni brenda]] me një llogari administrative për të ndryshuar privilegjet e përdoruesve.",
-       "userrights-notallowed": "llogaria juaj nuk ka leje për të shtuar ose hequr privilegjet e përdoruesve.",
+       "userrights-notallowed": "Ju nuk keni leje për të shtuar ose hequr privilegjet e përdoruesve.",
        "userrights-changeable-col": "Grupe që mund të ndryshoni",
        "userrights-unchangeable-col": "Grupe që s'mund të ndryshoni",
+       "userrights-conflict": "Konflikt në ndryshimin e të drejtave të përdoruesit! Ju lutemi të rishikoni dhe konfirmomi ndryshimet tuaja.",
        "group": "Grupi:",
        "group-user": "Përdorues",
        "group-autoconfirmed": "Përdorues të vërtetuar automatikisht",
        "recentchanges": "Ndryshimet e fundit",
        "recentchanges-legend": "Zgjedhjet e ndryshimeve momentale",
        "recentchanges-summary": "Ndiqni ndryshime së fundmi tek kjo faqe.",
+       "recentchanges-noresult": "Nuk ka ndryshime gjatë periudhës së dhënë që plotësojnë këto kritere.",
        "recentchanges-feed-description": "Ndjek ndryshimet më të fundit në wiki tek kjo fushë.",
        "recentchanges-label-newpage": "Ky redaktim krijoi një faqe të re",
-       "recentchanges-label-minor": "Ky është një editim i vogël",
+       "recentchanges-label-minor": "Ky është një redaktim i vogël",
        "recentchanges-label-bot": "Ky redaktim u krye nga një robot",
        "recentchanges-label-unpatrolled": "Ky editim ende nuk është patrolluar",
        "recentchanges-label-plusminus": "Madhësia e faqes ndryshoi me këtë numër bajtësh",
        "unusedtemplateswlh": "lidhje",
        "randompage": "Faqe e rastit",
        "randompage-nopages": "Nuk ka faqe në {{PLURLA:$2|hapësirën|hapësirat}} në vijim: $1",
+       "randomincategory-invalidcategory": "\"$1\" nuk është emër i vlefshëm kategorie.",
+       "randomincategory-nopages": "Nuk ka faqe në kategorinë [[:Category:$1|$1]].",
+       "randomincategory-category": "Kategoria:",
+       "randomincategory-legend": "Faqe e rastit në kategori",
+       "randomincategory-submit": "Shko",
        "randomredirect": "Përcjellim i rastit",
        "randomredirect-nopages": "Nuk ka përcjellim në \"$1\".",
        "statistics": "Statistika",
        "statistics-users": "[[Special:ListUsers|Përdoruesit]] e regjistruar",
        "statistics-users-active": "Përdoruesit aktiv",
        "statistics-users-active-desc": "Përdoruesit që kanë së paku një veprim në {{PLURAL:$1|ditën|$1 ditët}} e fundit",
+       "pageswithprop-prop": "Emri i pronës:",
+       "pageswithprop-submit": "Shko",
        "doubleredirects": "Përcjellime dopjo",
        "doubleredirectstext": "Kjo faqe liston faqet përcjellëse tek faqet e tjera përcjellëse.\nSecili rresht përmban lidhjet tek përcjellimi i parë dhe përcjellimi i dytë, gjithashtu synimin e përcjellimit të dytë, që është zakonisht faqja synuese '''e vërtetë''', që faqja w parë duhej të ishte përcjellëse e kësaj faqeje.\n<del>Kalimet nga</del> hyrjet janë zgjidhur.",
-       "double-redirect-fixed-move": "[[$1]] u zhvendos, tani është gjendet në [[$2]]",
+       "double-redirect-fixed-move": "[[$1]] u zhvendos.\n\nËshtë përditësuar automatikisht dhe tani përcjellet tek [[$2]]",
        "double-redirect-fixed-maintenance": "Duke zgjidhur përcjellimin e dyfishtë nga [[$1]] tek [[$2]].",
        "double-redirect-fixer": "Rregullues zhvendosjesh",
        "brokenredirects": "Përcjellime të prishura",
        "fewestrevisions": "Artikuj më të paredaktuar",
        "nbytes": "$1 {{PLURAL:$1|byte|byte}}",
        "ncategories": "$1 {{PLURAL:$1|kategori|kategori}}",
+       "ninterwikis": "$1 {{PLURAL:$1|ndërwiki|ndërwikit}}",
        "nlinks": "$1 {{PLURAL:$1|lidhje|lidhje}}",
        "nmembers": "$1 {{PLURAL:$1|antar|antarë}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|anëtar|anëtarët}}",
        "nrevisions": "$1 {{PLURAL:$1|version|versione}}",
        "nimagelinks": "Përdorur në $1 {{PLURAL:$1|faqe|faqe}}",
        "ntransclusions": "përdorur në $1 {{PLURAL:$1|faqe|faqe}}",
        "protectedpages-indef": "Vetëm mbrojtjet pa afat",
        "protectedpages-cascade": "Vetëm mbrojtjet",
        "protectedpagesempty": "Nuk ka faqe të mbrojtura me të dhënat e kërkuara.",
+       "protectedpages-page": "Faqja",
+       "protectedpages-expiry": "Skadon",
+       "protectedpages-reason": "Arsyeja",
        "protectedtitles": "Titujt e mbrojtur",
        "protectedtitlesempty": "Asnjë titull i mbrojtur nuk u gjet në këtë hapësirë.",
        "listusers": "Lista e përdoruesve",
        "pager-older-n": "{{PLURAL:$1|1 më i vjetër|$1 më të vjetra}}",
        "suppress": "Kujdestari",
        "querypage-disabled": "Kjo faqe speciale është çaktivizuar për arsye të performancës.",
+       "apihelp-no-such-module": "Moduli \"$1\" nuk u gjet.",
        "booksources": "Burime librash",
        "booksources-search-legend": "Kërkim burimor librash",
        "booksources-search": "Kërko",
        "watcherrortext": "Është paraqitur një gabim përderisa ndryshuat parametrat e listës suaj mbikqyrëse për \"$1\".",
        "enotif_reset": "Shëno të gjitha faqet e vizituara",
        "enotif_impersonal_salutation": "Përdorues i {{SITENAME}}",
+       "enotif_subject_created": "{{SITENAME}} faqja $1 është {{GJINIA:$2|krijuar}} nga $2",
        "enotif_lastvisited": "Shikoni $1 për të gjitha ndryshimet që prej vizitës tuaj të fundit.",
        "enotif_lastdiff": "Shikoni $1 për ndryshime.",
        "enotif_anon_editor": "përdorues anonim $1",
        "deletecomment": "Arsyeja:",
        "deleteotherreason": "Arsye tjetër:",
        "deletereasonotherlist": "Arsyeja tjetër",
-       "deletereason-dropdown": "*Arsye për grisje:\n** Pa të drejtë autori\n** Kërkesë nga autori\n** Vandalizëm",
+       "deletereason-dropdown": "*Arsye të zakonshme të grisjes\n** Spam\n** Vandalizëm\n** Shkelje e të drejtave të autorit\n** Kërkesë e autorit\n** Faqe përcjellëse e thyer",
        "delete-edit-reasonlist": "Ndrysho arsyet e grisjes",
        "delete-toobig": "Kjo faqe ka një historik të madh redaktimesh, më shumë se $1 {{PLURAL:$1|version|versione}}.\nGrisja e faqeve të tilla ka qenë kufizuar për të parandaluar përçarjen aksidentale të {{SITENAME}}.",
        "delete-warning-toobig": "Kjo faqe ka një historik të madh redaktimesh, më shumë se $1 {{PLURAL:$1|version|versione}}.\nGrisja e saj mund të ndërpresë operacionet e bazës së të dhënave të {{SITENAME}};\nvazhdoni me kujdes.",
        "rollback": "Riktheji mbrapsh redaktimet",
        "rollbacklink": "riktheje",
-       "rollbacklinkcount": "riktheni $1 {{PLURAL:$1|ndryshimin|ndryshiemt}}",
+       "rollbacklinkcount": "riktheni $1 {{PLURAL:$1|ndryshim|ndryshime}}",
        "rollbacklinkcount-morethan": "riktheni më tepër $1 {{PLURAL:$1|ndryshim|ndryshime}}",
        "rollbackfailed": "Rikthimi dështoi",
        "cantrollback": "Redaktimi nuk mund të kthehej;\nredaktori i fundit është i vetmi autor i këtij artikulli.",
        "rollback-success": "Ndryshimet e $1 u kthyen mbrapsh; artikulli ndodhet tek verzioni i $2.",
        "sessionfailure-title": "Dështim sesioni",
        "sessionfailure": "Duket se ka një problem me seancën tuaj hyrëse; ky veprim është anuluar për tu mbrojtur nga ndonjë veprim dashakeq kundrejt shfletimit tuaj. Ju lutemi kthehuni mbrapsh, rifreskoni faqen prej nga erdhët dhe provojeni përsëri veprimin.",
+       "changecontentmodel-reason-label": "Arsyeja:",
        "protectlogpage": "Regjistri i mbrojtjeve",
        "protectlogtext": "Më poshtë është lista e kyçjeve dhe çkyçjeve të faqes.\nShih listën e [[Special:ProtectedPages|faqeve të mbrojtura]] nga lista e mbrojtjeve të faqeve tani në veprim.",
        "protectedarticle": "mbrojti [[$1]]",
        "protect-existing-expiry": "Koha ekzistuese e skadimit: $3, $2",
        "protect-otherreason": "Arsye tjera/shtesë:",
        "protect-otherreason-op": "Arsyeja tjetër",
-       "protect-dropdown": "*Arsyet e përbashkëta të mbrojtjes\n**Vandalizëm i tepërt\n**Spam i tepërt\n**Counter-productive edit warning\n**Faqe e lartë trafiku",
+       "protect-dropdown": "*Arsye të zakonshme të mbrojtjes\n**Vandalizëm i tepërt\n**Spam i tepërt\n**Paralajmërim i redaktimeve joprodukive\n**Faqe e trafikut të lartë",
        "protect-edit-reasonlist": "Redakto arsyet e mbrojtjes",
        "protect-expiry-options": "1 Orë:1 hour,1 Ditë:1 day,1 Javë:1 week,2 Javë:2 weeks,1 Muaj:1 month,3 Muaj:3 months,6 Muaj:6 months,1 Vjet:1 year,Pa kufi:infinite",
        "restriction-type": "Lejet:",
        "ipaddressorusername": "Adresë IP ose emër përdoruesi",
        "ipbexpiry": "Afati",
        "ipbreason": "Arsyeja:",
-       "ipbreason-dropdown": "*Arsyet më të shpeshta të bllokimit\n** Postimi i informacioneve të rreme\n** Largimi i përmbajtjes së faqes\n** Futja e lidhjeve \"spam\"\n** Futja e informatave pa kuptim në faqe\n** Sjellje arrogante/perverze\n** Përdorimi i më shumë llogarive të përdoruesve\n** Nofkë të papranueshme",
+       "ipbreason-dropdown": "*Arsye të zakonshme të bllokimit\n** Vendosja e të dhënave të rreme\n** Largimi i përmbajtjeve të faqeve\n** Vendosja e lidhjeve spam \n** Vendosja e të dhënave të pakuptimta\n** Sjellje arrogante dhe/ose ngacmuese\n** Përdorimi i më shumë llogarive\n** Nofkë e papranueshme",
        "ipb-hardblock": "Parandalo përdoruesit e kyçur për të redaktuar nga kjo IP adresë",
        "ipbcreateaccount": "Mbroje krijimin e llogarive",
        "ipbemailban": "Pa mundëso dërgimin  e porosive elektronike nga përdoruesit",
        "ipb-blockingself": "Ju jeni duke bllokuar vetëveten ! Jeni te sigurte qe doni te bëni këtë?",
        "ipb-confirmhideuser": "Ju jeni gati për të bllokuar një përdorues me \"përdorues të fshehur\" të aktivizuar. Kjo do të shtypur emrin e përdoruesit në të gjitha listat dhe aktivitetet hyrëse. Jeni te sigurte qe doni ta bëni këtë ?",
        "ipb-edit-dropdown": "Redakto arsyet e bllokimit",
-       "ipb-unblock-addr": "Çblloko $1",
+       "ipb-unblock-addr": "Zhblloko $1",
        "ipb-unblock": "Çblloko përdorues dhe IP të bllokuara",
        "ipb-blocklist": "Përdorues dhe IP adresa të bllokuara",
-       "ipb-blocklist-contribs": "Kontributet për $1",
-       "unblockip": "Çblloko përdoruesin",
+       "ipb-blocklist-contribs": "Kontributet për {{GENDER:$1|$1}}",
+       "unblockip": "Zhblloko përdoruesin",
        "unblockiptext": "Përdor formularin e më poshtëm për t'i ridhënë leje shkrimi\nnjë përdoruesi ose IP adreseje të bllokuar.",
        "ipusubmit": "Hiqni këtë bllokim",
-       "unblocked": "[[User:$1|$1]] është çbllokuar",
-       "unblocked-range": "$1 është zhbllokuar",
+       "unblocked": "[[User:$1|$1]] është zhbllokuar.",
+       "unblocked-range": "$1 është zhbllokuar.",
        "unblocked-id": "Bllokimi $1 është hequr",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] është zhbllokuar.",
        "blocklist": "Përdorues i Bllokuar",
        "ipblocklist": "Përdorues i Bllokuar",
        "ipblocklist-legend": "Gjej një përdorues të bllokuar",
        "ipblocklist-empty": "Lista e të bllokimeve është e zbrazët.",
        "ipblocklist-no-results": "Adresa IP ose përdoruesi i kërkuar nuk është i bllokuar.",
        "blocklink": "blloko",
-       "unblocklink": "çblloko",
+       "unblocklink": "zhblloko",
        "change-blocklink": "ndryshoje bllokun",
        "contribslink": "kontribute",
        "emaillink": "dërgo e-mail",
        "blocklog-showsuppresslog": "Ky përdorues ka qenë i bllokuar dhe i fshehur më parë.\nRegjistri i bllokimeve është poshtë për referncë:",
        "blocklogentry": "bllokoi [[$1]] për një kohë prej: $2 $3",
        "reblock-logentry": "ndryshoi parametrat e bllokimit për [[$1]] me një kohë prej $2 $3",
-       "blocklogtext": "Ky është një regjistër bllokimesh dhe çbllokimesh të përdoruesve. IP-të e bllokuara automatikisht nuk janë të dhëna. Shikoni dhe [[Special:BlockList|listën e IP-ve të bllokuara]] për një listë të bllokimeve të tanishme.",
+       "blocklogtext": "Ky është një regjistër i veprimeve bllokuese dhe zhbllokuese të përdoruesit.\n\nAdresat I të bllokuara automatikisht nuk janë të paraqitura. \n\nShikoni dhe [[Special:BlockList|listën e të bllokuarve]] për një listë të bllokimeve dhe ndalimeve vepruese të tanishme.",
        "unblocklogentry": "çbllokoi \"$1\"",
        "block-log-flags-anononly": "vetëm anonimët",
        "block-log-flags-nocreate": "krijimi i llogarive është pamundësuar",
        "ipb_already_blocked": "\"$1\" është i bllokuar",
        "ipb-needreblock": "$1 është i bllokuar.\nDëshironi t'i ndryshoni parametrat?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Bllokim tjetër|Bllokime të tjera}}",
-       "unblock-hideuser": "Ju nuk mund të zhbllokoni këtë përdorues, përderisa nofka e tij është fshehur.",
-       "ipb_cant_unblock": "Gabim: Bllokimi ID $1 nuk u gjet.\nMund të jetë zhbllokuar.",
+       "unblock-hideuser": "Ju nuk mund të zhbllokoni këtë përdorues, përderisa nofka e tij është fshehur.",
+       "ipb_cant_unblock": "Gabim: Bllokimi ID $1 nuk u gjet.\n\nMund të jetë zhbllokuar deri tani.",
        "ipb_blocked_as_range": "Gabim: Adresa IP $1 nuk është bllokuar direkt dhe nuk mund të zhbllokohet.\nAjo është, megjithatë, e bllokuar si pjesë e rangut $2, që nuk mund të zhbllokohet.",
        "ip_range_invalid": "Shtrirje IP gabim.",
        "ip_range_toolarge": "Radhitja e bllokimeve më të mëdha se /$1 nuk lejohet.",
        "unlockbtn": "Çblloko regjistrin",
        "locknoconfirm": "Nuk vendose kryqin tek kutia konfirmuese.",
        "lockdbsuccesssub": "Regjistri u bllokua me sukses",
-       "unlockdbsuccesssub": "Regjistri u çbllokua me sukses",
+       "unlockdbsuccesssub": "Regjistri u zhbllokua me sukses",
        "lockdbsuccesstext": "Regjistri është bllokuar.<br />\nKujtohuni ta [[Special:UnlockDB|çbllokoni]] pasi të keni mbaruar mirëmbajtjen.",
-       "unlockdbsuccesstext": "Regjistri i {{SITENAME}} është çbllokuar.",
+       "unlockdbsuccesstext": "Regjistri i {{SITENAME}} është zhbllokuar.",
        "lockfilenotwritable": "Skeda për bllokimin e regjistrit s'mund të shkruhet.\nShërbyesi i rrjetit duhet të jetë në gjendje të shkruaj këtë skedë për të bllokuar ose çbllokuar regjistrin.",
        "databasenotlocked": "Regjistri nuk është bllokuar.",
        "lockedbyandtime": "(nga {{GENDER:$1|$1}} më $2 në $3)",
        "spam_deleting": "Të gjitha inspektimet përmbanin lidhje në $1, duke fshirë",
        "simpleantispam-label": "Kontrolli anti-spam.\n<strong>Mos</strong> e plotëso këtë!",
        "pageinfo-title": "Informacion për \" $1 \"",
-       "pageinfo-header-edits": "Redaktimet",
-       "pageinfo-watchers": "Numri i mbikqyrësve",
-       "pageinfo-edits": "Numri i redaktimeve",
-       "pageinfo-authors": "Numri i autorëve të veçantë",
+       "pageinfo-header-edits": "Historiku i redaktimeve",
+       "pageinfo-watchers": "Numri i mbikqyrësve të faqes",
+       "pageinfo-edits": "Numri total i redaktimeve",
+       "pageinfo-authors": "Numri i përgjithshëm i autorëve të veçantë",
        "pageinfo-toolboxlink": "Informacioni i faqes",
+       "pageinfo-category-total": "Numri i përgjithshëm i anëtarëve",
        "markaspatrolleddiff": "Shënoje si të patrulluar",
        "markaspatrolledtext": "Shënoje këtë artikull të patrulluar",
        "markedaspatrolled": "Shënoje të patrulluar",
        "hours": "{{PLURAL:$1|$1 orë|$1 orë}}",
        "days": "{{PLURAL:$1|$1 ditë|$1 ditë}}",
        "ago": "$1 më parë",
+       "monday-at": "Të hënën në $1",
+       "tuesday-at": "Të martën në $1",
+       "wednesday-at": "Të mërkurën në $1",
+       "thursday-at": "Të enjten në $1",
+       "friday-at": "Të premten në $1",
+       "saturday-at": "Të shtunën në $1",
+       "sunday-at": "Të dielën në $1",
+       "yesterday-at": "Dje në $1",
        "bad_image_list": "Formati është si vijon:\n\nVetëm elementët listë ( rreshtat duhet të fillojnë me * ) merren parasysh.\nLidhja e parë në një rresht duhet të lidhet me një skedë të prishur.\nÇdo lidhje pasuese në rreshtin e njëjtë konsiderohet si përjashtim, p.sh. faqe në të cilat skeda mund të shfaqet në të njëjtin rresht.",
        "metadata": "Metadata",
        "metadata-help": "Kjo skedë përmban hollësira të tjera të cilat mund të jenë shtuar nga kamera ose skaneri dixhital që është përdorur për ta krijuar.\nNë qoftë se skeda është ndryshuar nga gjendja origjinale, disa hollësira mund të mos pasqyrojnë versionin e tanishëm.",
        "exif-compression-3": "CCITT Grupi 3 faks kodimi",
        "exif-compression-4": "CCITT Grupi 4 faks kodimi",
        "exif-copyrighted-true": "E drejtë e autorit",
-       "exif-copyrighted-false": "Sferë publike",
+       "exif-copyrighted-false": "Statusi i së drejtës së autorit nuk u caktua",
        "exif-unknowndate": "E dhënë e pa njohur",
        "exif-orientation-1": "Normale",
        "exif-orientation-2": "E kthyer horizontalisht",
        "autosumm-replace": "Faqja u zëvendësua me '$1'",
        "autoredircomment": "Përcjellim te [[$1]]",
        "autosumm-new": "Krijoi faqen me \"$1\"",
+       "autosumm-newblank": "Krijoi faqe të zbrazët",
        "lag-warn-normal": "Ndryshimet më të reja se $1 {{PLURAL:$1|sekond|sekonda}} mund të mos tregohen në këtë listë.",
        "lag-warn-high": "Për shkak të vonesës së regjistrit ndryshimet më të reja se $1 {{PLURAL:$1|sekond|sekonda}} mund të mos tregohen në këtë listë.",
        "watchlistedit-normal-title": "Redakto listën mbikqyrëse",
        "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-skins": "Pamjet e instaluara",
        "version-specialpages": "Faqe speciale",
        "version-parserhooks": "Parser goditje",
        "version-variables": "Variabël",
        "version-hook-name": "Emri i goditjes",
        "version-hook-subscribedby": "Abonuar nga",
        "version-version": "($1)",
-       "version-license": "Licensa",
+       "version-license": " Liçenca MediaWiki",
        "version-poweredby-credits": "Ky wiki është mundësuar nga '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "të tjerë",
        "version-license-info": "MediaWiki është një softuer i lirë; ju mund ta shpërndani dhe redakatoni atë nën kushtet GNU General Public License si e publikuar nga fondacioni Free Software; ose versioni 2 i licensës, ose çdo version më i vonshëm.\n\nMediaWiki është shpërndarë me shpresën se do të jetë i dobishëm, por PA ASNJË GARANCI; as garancinë e shprehur të SHITJES apo PËRDORIMIT PËR NJË QËLLIM TË CAKTUAR. Shikoni GNU General Public License  për më shumë detaje.\n\nJu duhet të keni marrë [{{SERVER}}{{SCRIPTPATH}}/COPYING një kopje të GNU General Public License] së bashku me këtë program; nëse jo, shkruani tek Free Software Foundation, Inc., 51 Rruga Franklin, Kati i pestë, Boston, MA 02110-1301, ShBA ose [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lexojeni atë online].",
        "tags-hitcount-header": "Ndrzshimet e etikuara",
        "tags-edit": "redakto",
        "tags-hitcount": "$1 {{PLURAL:$1|ndryshim|ndryshime}}",
+       "tags-create-reason": "Arsyeja:",
+       "tags-delete-reason": "Arsyeja:",
+       "tags-activate-reason": "Arsyeja:",
+       "tags-deactivate-reason": "Arsyeja:",
+       "tags-edit-reason": "Arsyeja:",
        "comparepages": "Krahasoni faqet",
        "compare-page1": "Faqe 1",
        "compare-page2": "Faqe 2",
        "sqlite-has-fts": "$1 me mbështetje të kërkimit me teskt të plotë",
        "sqlite-no-fts": "$1 pa mbështetje të kërkimit me teskt të plotë",
        "logentry-delete-delete": "$1 {{GENDER:$2|grisi}} faqen $3",
-       "logentry-delete-restore": "$1 riktheu faqen $3",
-       "logentry-delete-event": "$1 ndryshoi dukshmërinë e {{PLURAL:$5|një ngjarje regjistri|$5 ngjarjeve regjistri}} në $3: $4",
-       "logentry-delete-revision": "$1 ndryshoi dukshmërinë e {{PLURAL:$5|një versioni|$5 versioneve}} në $3: $4",
-       "logentry-delete-event-legacy": "$1 ndryshoi dukshmërinë e ngjarjeve të regjistrit në $3",
-       "logentry-delete-revision-legacy": "$1 ndryshoi dukshmërinë e versioneve në $3",
-       "logentry-suppress-delete": "$1 shtypi faqen $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|riktheu}} faqen $3",
+       "logentry-delete-event": "$1 {{GENDER:$2|ndryshoi}} dukshmërinë e {{PLURAL:$5|e një ngjarjeje regjistri|$5 ngjarjeve regjitri}} në $3: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|ndryshoi}} dukshmërinë e {{PLURAL:$5|një rishikimi|$5 rishikimeve}} në faqen $3: $4",
+       "logentry-delete-event-legacy": "$1 {{GENDER:$2|ndryshoi}} dukshmërinë e ngjarjeve të regjistit në $3",
+       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|ndryshpi}} dukshmërinë e rishikimeve në faqen $3",
+       "logentry-suppress-delete": "$1 {{GENDER:$2|shtypi}} faqen $3",
        "logentry-suppress-event": "$1 në mënyrë sekrete ndryshoi dukshmërinë e {{PLURAL:$5|një ngjarje regjistri|$5 ngjarjeve regjistri}} në $3: $4",
        "logentry-suppress-revision": "$1 në mënyrë sekrete ndryshoi dukshmërinë e {{PLURAL:$5|një versioni|$5 versioneve}} në $3: $4",
        "logentry-suppress-event-legacy": "$1 në mënyrë sekrete ndryshoi dukshmërinë e ngjarjeve të regjistrit në $3",
        "revdelete-uname-unhid": "emri i përdoruesit jo i fshehur",
        "revdelete-restricted": "u vendosën kufizime për administruesit",
        "revdelete-unrestricted": "u hoqën kufizimet për administruesit",
+       "logentry-block-block": "$1 {{GENDER:$2|bllokoi}} {{GENDER:$4|$3}} me një kohë të skadimit $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|zhbllokoi}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|changed}} bllokoi cilësimet për {{GENDER:$4|$3}} me një kohë të skadimit $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|bllokoi}} {{GENDER:$4|$3}} me një kohë të skadimit $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} bllokoi cilësimet për {{GENDER:$4|$3}} me një kohë të skadimit $5 $6",
        "logentry-move-move": "$1 {{GENDER:$2|zhvendosi}} faqen $3 tek $4",
        "logentry-move-move-noredirect": "$1 zhvendosi faqen $3 te $4 pa lënë një përcjellim",
        "logentry-move-move_redir": "$1 zhvendosi faqen $3 te $4 nëpërmjet përcjellimit",
        "logentry-move-move_redir-noredirect": "$1 zhvendosi faqen $3 te $4 nëpërmjet një përcjellimi pa lënë një përcjellim",
        "logentry-patrol-patrol": "$1 shënoi versionin $4 të faqes $3 të patrolluar",
        "logentry-patrol-patrol-auto": "$1 automatikisht shënoi versionin $4 të faqes $3 të patrolluar",
-       "logentry-newusers-newusers": "$1 krijoi një llogari",
+       "logentry-newusers-newusers": "Llogaria e përdoruesit $1 është {{GENDER:$2|krijuar}}",
        "logentry-newusers-create": "Llogaria e {{GENDER:$2|përdoruesit|përdorueses}} $1 u krijua.",
-       "logentry-newusers-create2": "$1 krijoi një llogari $3",
-       "logentry-newusers-autocreate": "Llogaria $1 u krijua automatikisht",
+       "logentry-newusers-create2": "Llogaria e përdoruesit $3 është {{GENDER:$2|krijuar}} nga $1",
+       "logentry-newusers-autocreate": "Llogaria e {{GENDER:$2|përdoruesit|përdorueses}} $1 u {{GENDER:$2|krijua}} automatikisht",
+       "logentry-rights-rights": "$1 {{GENDER:$2|ndërroi}} anëtarësinë e grupit për $3 nga $4 në $5",
+       "logentry-rights-autopromote": "$1 është {{GENDER:$2|promovuar}} automatikisht nga $4 në $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|ngarkoi}} $3",
        "rightsnone": "(asgjë)",
        "revdelete-summary": "përmbledhja redaktimit",
index 1bdd3d5..88033d5 100644 (file)
        "databaseerror-query": "Упит: $1",
        "databaseerror-function": "Функција: $1",
        "databaseerror-error": "Грешка: $1",
-       "laggedslavemode": "'''Упозорење:''' страница је можда застарела.",
+       "laggedslavemode": "<strong>Упозорење:</strong> страница је можда застарела.",
        "readonly": "База података је закључана",
        "enterlockreason": "Унесите разлог за закључавање, укључујући и време откључавања",
        "readonlytext": "База података је тренутно закључана, што значи да је није могуће мењати.\n\nРазлог: $1",
        "editinginterface": "<strong>Упозорење:</strong> уређујете страницу која се користи за приказивање текста корисничког окружења.\nИзмене на овој страници ће утицати на све кориснике овог викија.",
        "translateinterface": "Да додате или промените преводе за све викије, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
        "cascadeprotected": "Ова страница је закључана јер садржи {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:\n$2",
-       "namespaceprotected": "Немате дозволу да уређујете странице у именском простору '''$1'''.",
+       "namespaceprotected": "Немате дозволу да уређујете странице у именском простору <strong>$1</strong>.",
        "customcssprotected": "Немате дозволу да мењате ову CSS страницу јер садржи личне поставке другог корисника.",
        "customjsprotected": "Немате дозволу да мењате ову страницу јаваскрипта јер садржи личне поставке другог корисника.",
        "mycustomcssprotected": "Немате дозволу за мењање ове CSS странице.",
        "virus-badscanner": "Неисправна поставка: непознати скенер за вирусе: ''$1''",
        "virus-scanfailed": "неуспешно скенирање (код $1)",
        "virus-unknownscanner": "непознати антивирус:",
-       "logouttext": "'''Одјављени сте.'''\n\nИмајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију свог прегледача.",
+       "logouttext": "<strong>Одјављени сте.</strong>\n\nИмајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију свог прегледача.",
        "welcomeuser": "Добро дошли, $1!",
        "welcomecreation-msg": "Ваш налог је отворен.\nНе заборавите да промените своја [[Special:Preferences|подешавања]].",
        "yourname": "Корисничко име:",
        "resetpass-submit-loggedin": "Промени лозинку",
        "resetpass-submit-cancel": "Откажи",
        "resetpass-wrong-oldpass": "Неисправна привремена или текућа лозинка.\nМожда сте већ променили лозинку или сте затражили нову привремену лозинку.",
-       "resetpass-recycled": "Унели сте садашњу лозинку, да би сте ресетовали лозинку морате унети нову.",
+       "resetpass-recycled": "Унели сте садашњу лозинку, да бисте ресетовали лозинку морате унети нову.",
        "resetpass-temp-emailed": "Пријавили сте се са привременим кодом из е-поште.\nДа бисте завршили пријављивање морате поставити нову лозинку овде:",
        "resetpass-temp-password": "Привремена лозинка:",
        "resetpass-abort-generic": "Промену лозинке је спречио додатак.",
        "resetpass-validity-soft": "Ваша лозинка није ваљана: $1\n\nМолимо изаберите нову или кликните „{{int:resetpass-submit-cancel}}“ да ресетујете касније.",
        "passwordreset": "Обнављање лозинке",
        "passwordreset-text-one": "Попуните овај образац да бисте добили привремену лозинку на е-пошту.",
-       "passwordreset-text-many": "{{PLURAL:$1|Испуните једно од поља како би сте добили привремену лозинку на е-пошту.}}",
+       "passwordreset-text-many": "{{PLURAL:$1|Испуните једно од поља како бисте добили привремену лозинку на е-пошту.}}",
        "passwordreset-disabled": "Обнављање лозинке је онемогућено на овом викију.",
        "passwordreset-emaildisabled": "Е-пошта је онемогућена на овом викију.",
        "passwordreset-username": "Корисничко име:",
        "passwordreset-emailtitle": "Детаљи налога на викију {{SITENAME}}",
        "passwordreset-emailtext-ip": "Неко, вероватно Ви, са ИП адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом е-адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку и наставите користити стару лозинку.",
        "passwordreset-emailtext-user": "{{GENDER:$1|Корисник је затражио|Корисница је затражила}} подсетник о подацима за пријаву на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом е-адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку.",
-       "passwordreset-emailelement": "Корисничко име: $1\nПривремена лозинка: $2",
+       "passwordreset-emailelement": "Корисничко име: \n$1\n\nПривремена лозинка: \n$2",
        "passwordreset-emailsent": "Подсетник о лозинци је послат на вашу адресу.",
        "passwordreset-emailsent-capture": "Послат је подсетник преко е-поште (приказан доле).",
        "passwordreset-emailerror-capture": "Е-порука за ресетовање лозинке, приказана испод је послата, али слање {{GENDER:$2|кориснику|корисници}} није успело: $1",
        "userjspreview": "'''Ово је само преглед јаваскрипта.'''\n'''Страница још није сачувана!'''",
        "sitecsspreview": "'''Ово је само преглед CSS-а.'''\n'''Страница још није сачувана!'''",
        "sitejspreview": "'''Ово је само преглед јаваскрипта.'''\n'''Страница још није сачувана!'''",
-       "userinvalidcssjstitle": "'''Упозорење:''' не постоји тема „$1“.\nПрилагођене странице CSS и јаваскрипт почињу малим словом, нпр. {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
+       "userinvalidcssjstitle": "<strong>Упозорење:</strong> не постоји тема „$1“.\nПрилагођене странице CSS и јаваскрипт почињу малим словом, нпр. {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
        "updated": "(Ажурирано)",
-       "note": "'''Напомена:'''",
+       "note": "<strong>Напомена:</strong>",
        "previewnote": "<strong>Ово је претпреглед.</strong>\nВаше измене још нису сачуване!",
        "continue-editing": "Иди на уређивачки оквир",
        "previewconflict": "Овај преглед осликава како ће текст у текстуалном оквиру изгледати.",
        "revdelete-legend": "Ограничења видљивости",
        "revdelete-hide-text": "Текст измене",
        "revdelete-hide-image": "Сакриј садржај датотеке",
-       "revdelete-hide-name": "СакÑ\80иÑ\98 Ñ\86иљ и параметре",
+       "revdelete-hide-name": "Ð¦иљ и параметре",
        "revdelete-hide-comment": "Опис измене",
        "revdelete-hide-user": "Корисничко име/ИП адреса",
        "revdelete-hide-restricted": "Сакриј податке од администратора и других корисника",
        "rows": "Редова:",
        "columns": "Колона",
        "searchresultshead": "Претрага",
-       "stub-threshold": "Праг за обликовање <a href=\"#\" class=\"stub\">везе као клице</a>:",
+       "stub-threshold": "Праг за обликовање везе као клице ($1):",
+       "stub-threshold-sample-link": "пример",
        "stub-threshold-disabled": "Онемогућено",
        "recentchangesdays": "Број дана у скорашњим изменама:",
        "recentchangesdays-max": "Највише $1 {{PLURAL:$1|дан|дана}}",
        "saveusergroups": "Сачувај корисничке групе",
        "userrights-groupsmember": "Члан:",
        "userrights-groupsmember-auto": "Подразумевано члан и:",
-       "userrights-groups-help": "Можете променити групе којима овај корисник припада.\n* Означена кућица означава да се корисник налази у тој групи.\n* Неозначена кућица означава да се корисник не налази у тој групи.\n* Звездица означава да не можете уклонити групу ако је додате и обратно.",
+       "userrights-groups-help": "Можете променити групе којима овај корисник припада.\n* Означен квадратић означава да се корисник налази у тој групи.\n* Неозначен квадратић означава да се корисник не налази у тој групи.\n* Звездица означава да не можете уклонити групу ако је додате и обратно.",
        "userrights-reason": "Разлог:",
        "userrights-no-interwiki": "Немате овлашћења да мењате корисничка права на другим викијима.",
        "userrights-nodatabase": "База података $1 не постоји или није локална.",
        "group-autoconfirmed-member": "{{GENDER:$1|аутоматски потврђен корисник|аутоматски потврђена корисница}}",
        "group-bot-member": "{{GENDER:$1|бот}}",
        "group-sysop-member": "{{GENDER:$1|администратор|администраторка|администратор}}",
-       "group-bureaucrat-member": "{{GENDER:$1|бирократа|бирократкиња|бирократа}}",
+       "group-bureaucrat-member": "{{GENDER:$1|бирократа}}",
        "group-suppress-member": "{{GENDER:$1|ревизор|ревизорка}}",
        "grouppage-user": "{{ns:project}}:Корисници",
        "grouppage-autoconfirmed": "{{ns:project}}:Аутоматски потврђени корисници",
        "watchlistanontext": "Морате бити пријављени да бисте гледали и уређивали ставке на вашем списку надгледања.",
        "watchnologin": "Нисте пријављени",
        "addwatch": "Додај на списак надгледања",
-       "addedwatchtext": "СÑ\82Ñ\80аниÑ\86а â\80\9e[[:$1]]â\80\9c Ð¸ Ñ\9aена Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð° Ñ\80азговоÑ\80 Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð²аш [[Special:Watchlist|списак надгледања]].",
-       "addedwatchtext-short": "СÑ\82Ñ\80аниÑ\86а â\80\9e$1â\80\9c Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð²аш списак надгледања.",
+       "addedwatchtext": "СÑ\82Ñ\80аниÑ\86а â\80\9e[[:$1]]â\80\9c Ð¸ Ñ\9aена Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð° Ñ\80азговоÑ\80 Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð\92аш [[Special:Watchlist|списак надгледања]].",
+       "addedwatchtext-short": "СÑ\82Ñ\80аниÑ\86а â\80\9e$1â\80\9c Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð\92аш списак надгледања.",
        "removewatch": "Уклони са списка надгледања",
        "removedwatchtext": "Страница „[[:$1]]“ и њена страница за разговор је уклоњена с вашег [[Special:Watchlist|списка надгледања]].",
        "removedwatchtext-short": "Страница „$1“ је уклоњена с вашег списка надгледања.",
        "watchlist-details": "Имате {{PLURAL:$1|$1 страница|$1 странице|$1 страница}} на вашем списку надгледања, не рачунајући странице за разговор.",
        "wlheader-enotif": "Обавештење е-поруком је омогућено.",
        "wlheader-showupdated": "Странице које су измењене откад сте их последњи пут посетили су '''подебљане'''.",
-       "wlnote": "Испод {{PLURAL:$1|је последња измена|су последње '''$1''' измене|је последњих '''$1''' измена}} у {{PLURAL:$2|претходном сату|претходна '''$2''' сата|претходних '''$2''' сати}}, закључно са $3, $4.",
+       "wlnote": "Испод {{PLURAL:$1|је последња измена|су последње <strong>$1</strong> измене|је последњих <strong>$1</strong> измена}} у {{PLURAL:$2|претходном сату|претходна <strong>$2</strong> сата|претходних <strong>$2</strong> сати}}, закључно са $3, $4.",
        "wlshowlast": "Прикажи последњих $1 сати, $2 дана",
        "watchlist-options": "Поставке списка надгледања",
        "watching": "Надгледање…",
        "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_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",
        "protect-locked-dblock": "Степени заштите се не могу мењати јер је активна база података закључана.\nОво су поставке странице '''$1''':",
        "protect-locked-access": "Немате овлашћења за мењање степена заштите странице.\nОво су тренутне поставке странице '''$1''':",
        "protect-cascadeon": "Ова страница је тренутно заштићена јер се налази на {{PLURAL:$1|страници која има|страницама које имају}} преносиву заштиту.\nМожете да промените степен заштите, али то неће утицати на преносиву заштиту.",
-       "protect-default": "Допуштено свим корисницима",
+       "protect-default": "Допуштено свима",
        "protect-fallback": "Дозвољено само корисницима са дозволом „$1“",
        "protect-level-autoconfirmed": "Допуштено само аутоматски потврђеним корисницима",
        "protect-level-sysop": "Допуштено само администраторима",
        "undeleteviewlink": "погледај",
        "undeleteinvert": "Обрни избор",
        "undeletecomment": "Разлог:",
-       "undeletedrevisions": "{{PLURAL:$1|Ð\98змена Ñ\98е Ð²Ñ\80аÑ\9bена|$1 Ð¸Ð·Ð¼ÐµÐ½Ðµ Ñ\81Ñ\83 Ð²Ñ\80аÑ\9bене|$1 Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\98е Ð²Ñ\80аÑ\9bено}}",
+       "undeletedrevisions": "{{PLURAL:$1|измена Ð²Ñ\80аÑ\9bено}} $1",
        "undeletedrevisions-files": "$1 {{PLURAL:$1|измена|измене|измена}} и $2 {{PLURAL:$2|датотека је враћена|датотеке су враћене|датотека је враћено}}",
-       "undeletedfiles": "{{PLURAL:$1|Ð\94аÑ\82оÑ\82ека Ñ\98е Ð²Ñ\80аÑ\9bена|$1 Ð´Ð°Ñ\82оÑ\82еке Ñ\81Ñ\83 Ð²Ñ\80аÑ\9bене|$1 Ð´Ð°Ñ\82оÑ\82ека Ñ\98е Ð²Ñ\80аÑ\9bено}}",
+       "undeletedfiles": "{{PLURAL:$1|даÑ\82оÑ\82ека Ð²Ñ\80аÑ\9bено}} $1",
        "cannotundelete": "Враћање није успело:\n$1",
        "undeletedpage": "<strong>Страница $1 је враћена</strong>\n\nПогледајте [[Special:Log/delete|дневник брисања]] за записе о скорашњим брисањима и враћањима.",
        "undelete-header": "Погледајте [[Special:Log/delete|историјат брисања]] за недавно обрисане странице.",
        "sp-contributions-newbies-sub": "За нове кориснике",
        "sp-contributions-newbies-title": "Доприноси нових корисника",
        "sp-contributions-blocklog": "дневник блокирања",
-       "sp-contributions-deleted": "обÑ\80иÑ\81ани ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð´Ð¾Ð¿Ñ\80иноÑ\81и",
+       "sp-contributions-deleted": "обрисани доприноси",
        "sp-contributions-uploads": "отпремања",
        "sp-contributions-logs": "дневници",
        "sp-contributions-talk": "разговор",
        "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": "Ð\97абÑ\80ани Ð¾Ð²Ð¾Ð¼ ÐºÐ¾Ñ\80иÑ\81никÑ\83 Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98е Ñ\81воÑ\98Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð·Ð° Ñ\80азговоÑ\80 Ð´Ð¾Ðº Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан",
+       "ipb-disableusertalk": "Ð\9eнемогÑ\83Ñ\9bи ÐºÐ¾Ñ\80иÑ\81никÑ\83 Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98е Ñ\81воÑ\98Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð·Ð° Ñ\80азговоÑ\80",
        "ipb-change-block": "Поново блокирај корисника с овим поставкама",
        "ipb-confirm": "Потврди блокирање",
        "badipaddress": "Неисправна ИП адреса",
        "blocklist-reason": "Разлог",
        "ipblocklist-submit": "Претражи",
        "ipblocklist-localblock": "Локално блокирање",
-       "ipblocklist-otherblocks": "{{PLURAL:$1|Ð\94Ñ\80Ñ\83го Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aе|Ð\94Ñ\80Ñ\83га Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа}}",
+       "ipblocklist-otherblocks": "{{PLURAL:$1|Друга блокирања}}",
        "infiniteblock": "трајно",
        "expiringblock": "истиче $1 у $2",
        "anononlyblock": "само анонимни",
        "ipb_hide_invalid": "Не могу да потиснем овај налог; има више од {{PLURAL:$1|једне измене|$1 измена}}.",
        "ipb_already_blocked": "„$1“ је већ блокиран.",
        "ipb-needreblock": "$1 је већ блокиран. Желите ли да промените подешавања?",
-       "ipb-otherblocks-header": "{{PLURAL:$1|Ð\94Ñ\80Ñ\83га Ð±Ð»Ð¾ÐºÐ°Ð´Ð°|Ð\94Ñ\80Ñ\83ге Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ}}",
+       "ipb-otherblocks-header": "{{PLURAL:$1|Друге блокаде}}",
        "unblock-hideuser": "Не можете деблокирати овог корисника јер је његово корисничко име сакривено.",
        "ipb_cant_unblock": "Грешка: блокада $1 не постоји. Можда је корисник деблокиран.",
        "ipb_blocked_as_range": "Грешка: ИП адреса $1 није директно блокирана и не може да се деблокира.\nОна је блокирана као део блокаде $2, која може бити деблокирана.",
        "imagetypemismatch": "Екстензија нове датотеке се не поклапа с њеном врстом",
        "imageinvalidfilename": "Циљани назив датотеке је неисправан",
        "fix-double-redirects": "Ажурирајте сва преусмерења која воде до првобитног наслова",
-       "move-leave-redirect": "Ð\9dапÑ\80ави преусмерење",
+       "move-leave-redirect": "Ð\9eÑ\81Ñ\82ави преусмерење",
        "protectedpagemovewarning": "'''Упозорење:''' ова страница је заштићена, тако да само корисници с администраторским овлашћењима могу да је преместе.\nЗа више информација, последњи запис у дневнику измена је приказан испод:",
        "semiprotectedpagemovewarning": "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је преместе.\nЗа више информација, последњи запис у дневнику измена је приказан испод:",
        "move-over-sharedrepo": "== Датотека постоји ==\n[[:$1]] се налази на дељеном складишту. Ако преместите датотеку на овај наслов, то ће заменити дељену датотеку.",
        "import-interwiki-history": "Копирај све верзије историје за ову страницу",
        "import-interwiki-templates": "Укључи све шаблоне",
        "import-interwiki-submit": "Увези",
+       "import-mapping-default": "Исто као и изворне странице",
        "import-mapping-namespace": "Увези у именски простор:",
+       "import-mapping-subpage": "Увези као подстранице следеће странице:",
        "import-upload-filename": "Назив датотеке:",
        "import-comment": "Коментар:",
        "importtext": "Извезите датотеку с изворног викија користећи [[Special:Export|извоз]].\nСачувајте је на рачунар и пошаљите овде.",
        "markedaspatrollederrortext": "Морате изабрати измену да бисте је означили као патролирану.",
        "markedaspatrollederror-noautopatrol": "Не можете да означите своје измене као патролиране.",
        "markedaspatrollednotify": "Ова измена на страници „$1“ је означена као патролирана.",
-       "markedaspatrollederrornotify": "Означавање ове странице патролираном није успело.",
+       "markedaspatrollederrornotify": "Означавање ове измене патролираном није успело.",
        "patrol-log-page": "Дневник патролирања",
        "patrol-log-header": "Ово је дневник патролираних измена.",
        "log-show-hide-patrol": "$1 дневник патролирања",
        "filedelete-archive-read-only": "Сервер не може да пише по складишној фасцикли ($1).",
        "previousdiff": "← Старија измена",
        "nextdiff": "Новија измена →",
-       "mediawarning": "'''Упозорење''': ова врста датотеке може садржати штетан код.\nАко га покренете, ваш рачунар може бити угрожен.",
+       "mediawarning": "<strong>Упозорење:</strong> ова врста датотеке може садржати штетан код.\nАко га покренете, Ваш рачунар може бити угрожен.",
        "imagemaxsize": "Ограничење величине слике:<br />''(на страницама за опис датотека)''",
        "thumbsize": "Величина минијатуре:",
        "widthheight": "$1 × $2",
        "watchlistedit-raw-done": "Ваш списак надгледања је ажуриран.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1=Додат је један наслов|Додата су $1 наслова|Додато је $1 наслова}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 наслов је уклоњен|Уклоњена су $1 наслова|Уклоњено је $1 наслова}}:",
-       "watchlistedit-clear-title": "Ð\9fÑ\80ажÑ\9aеÑ\9aе Ñ\81пиÑ\81ак надгледања",
+       "watchlistedit-clear-title": "Ð\9fÑ\80ажÑ\9aеÑ\9aе Ñ\81пиÑ\81ка надгледања",
        "watchlistedit-clear-legend": "Испразни списак надгледања",
        "watchlistedit-clear-explain": "Сви наслови ће бити уклоњени из вашег списка надгледања.",
        "watchlistedit-clear-titles": "Наслови:",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|разговор]])",
        "timezone-utc": "UTC",
        "duplicate-defaultsort": "'''Упозорење:''' подразумевани кључ сврставања „$2“ мења некадашњи кључ „$1“.",
+       "duplicate-displaytitle": "<strong>Упозорење:</strong> наслов за приказ „$2“ замениће постојећи „$1“.",
        "version": "Верзија",
        "version-extensions": "Инсталирана проширења",
        "version-skins": "Инсталиране теме",
index d3f4458..c59d881 100644 (file)
        "databaseerror-query": "Upit: $1",
        "databaseerror-function": "Funkcija: $1",
        "databaseerror-error": "Greška: $1",
-       "laggedslavemode": "'''Upozorenje:''' stranica je možda zastarela.",
+       "laggedslavemode": "<strong>Upozorenje:</strong> stranica je možda zastarela.",
        "readonly": "Baza podataka je zaključana",
        "enterlockreason": "Unesite razlog za zaključavanje, uključujući i vreme otključavanja",
        "readonlytext": "Baza podataka je trenutno zaključana, što znači da je nije moguće menjati.\n\nRazlog: $1",
        "editinginterface": "<strong>Upozorenje:</strong> uređujete stranicu koja se koristi za prikazivanje teksta korisničkog okruženja.\nIzmene na ovoj stranici će uticati na sve korisnike ovog vikija.",
        "translateinterface": "Da dodate ili promenite prevode za sve vikije, posetite [//translatewiki.net/ Translejtviki], projekat za lokalizaciju Medijavikija.",
        "cascadeprotected": "Ova stranica je zaključana jer sadrži {{PLURAL:$1|sledeću stranicu koja je zaštićena|sledeće stranice koje su zaštićene}} „prenosivom“ zaštitom:\n$2",
-       "namespaceprotected": "Nemate dozvolu da uređujete stranice u imenskom prostoru '''$1'''.",
+       "namespaceprotected": "Nemate dozvolu da uređujete stranice u imenskom prostoru <strong>$1</strong>.",
        "customcssprotected": "Nemate dozvolu da menjate ovu CSS stranicu jer sadrži lične postavke drugog korisnika.",
        "customjsprotected": "Nemate dozvolu da menjate ovu stranicu javaskripta jer sadrži lične postavke drugog korisnika.",
        "mycustomcssprotected": "Nemate dozvolu za menjanje ove CSS stranice.",
        "virus-badscanner": "Neispravna postavka: nepoznati skener za viruse: ''$1''",
        "virus-scanfailed": "neuspešno skeniranje (kod $1)",
        "virus-unknownscanner": "nepoznati antivirus:",
-       "logouttext": "'''Odjavljeni ste.'''\n\nImajte na umu da neke stranice mogu nastaviti da se prikazuju kao da ste još prijavljeni, sve dok ne očistite privremenu memoriju svog pregledača.",
+       "logouttext": "<strong>Odjavljeni ste.</strong>\n\nImajte na umu da neke stranice mogu nastaviti da se prikazuju kao da ste još prijavljeni, sve dok ne očistite privremenu memoriju svog pregledača.",
        "welcomeuser": "Dobrodošli, $1!",
        "welcomecreation-msg": "Vaš nalog je otvoren.\nNe zaboravite da promenite svoja [[Special:Preferences|podešavanja]].",
        "yourname": "Korisničko ime:",
        "resetpass-submit-loggedin": "Promeni lozinku",
        "resetpass-submit-cancel": "Otkaži",
        "resetpass-wrong-oldpass": "Neispravna privremena ili tekuća lozinka.\nMožda ste već promenili lozinku ili ste zatražili novu privremenu lozinku.",
-       "resetpass-recycled": "Uneli ste sadašnju lozinku, da bi ste resetovali lozinku morate uneti novu.",
+       "resetpass-recycled": "Uneli ste sadašnju lozinku, da biste resetovali lozinku morate uneti novu.",
        "resetpass-temp-emailed": "Prijavili ste se sa privremenim kodom iz e-pošte.\nDa biste završili prijavljivanje morate postaviti novu lozinku ovde:",
        "resetpass-temp-password": "Privremena lozinka:",
        "resetpass-abort-generic": "Promenu lozinke je sprečio dodatak.",
        "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 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-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako biste dobili privremenu lozinku na e-poštu.}}",
        "passwordreset-disabled": "Obnavljanje lozinke je onemogućeno na ovom vikiju.",
        "passwordreset-emaildisabled": "E-pošta je onemogućena na ovom vikiju.",
        "passwordreset-username": "Korisničko ime:",
        "passwordreset-emailtitle": "Detalji naloga na vikiju {{SITENAME}}",
        "passwordreset-emailtext-ip": "Neko, verovatno Vi, sa IP adrese $1 je zatražio novu lozinku na vikiju {{SITENAME}} ($4).\nSledeći {{PLURAL:$3|korisnički nalog je povezan|korisnički nalozi su povezani}} s ovom e-adresom:\n\n$2\n\n{{PLURAL:$3|Privremena lozinka ističe|Privremene lozinke ističu}} za {{PLURAL:$5|jedan dan|$5 dana}}.\nPrijavite se i izaberite novu lozinku. Ako je neko drugi zahtevao ovu radnju ili ste se setili lozinke i ne želite da je menjate, zanemarite ovu poruku i nastavite koristiti staru lozinku.",
        "passwordreset-emailtext-user": "{{GENDER:$1|Korisnik je zatražio|Korisnica je zatražila}} podsetnik o podacima za prijavu na vikiju {{SITENAME}} ($4).\nSledeći {{PLURAL:$3|korisnički nalog je povezan|korisnički nalozi su povezani}} s ovom e-adresom:\n\n$2\n\n{{PLURAL:$3|Privremena lozinka ističe|Privremene lozinke ističu}} za {{PLURAL:$5|jedan dan|$5 dana}}.\nPrijavite se i izaberite novu lozinku. Ako je neko drugi zahtevao ovu radnju ili ste se setili lozinke i ne želite da je menjate, zanemarite ovu poruku.",
-       "passwordreset-emailelement": "Korisničko ime: $1\nPrivremena lozinka: $2",
+       "passwordreset-emailelement": "Korisničko ime: \n$1\n\nPrivremena lozinka: \n$2",
        "passwordreset-emailsent": "Podsetnik o lozinci je poslat na vašu adresu.",
        "passwordreset-emailsent-capture": "Poslat je podsetnik preko e-pošte (prikazan dole).",
        "passwordreset-emailerror-capture": "E-poruka za resetovanje lozinke, prikazana ispod je poslata, ali slanje {{GENDER:$2|korisniku|korisnici}} nije uspelo: $1",
        "userjspreview": "'''Ovo je samo pregled javaskripta.'''\n'''Stranica još nije sačuvana!'''",
        "sitecsspreview": "'''Ovo je samo pregled CSS-a.'''\n'''Stranica još nije sačuvana!'''",
        "sitejspreview": "'''Ovo je samo pregled javaskripta.'''\n'''Stranica još nije sačuvana!'''",
-       "userinvalidcssjstitle": "'''Upozorenje:''' ne postoji tema „$1“.\nPrilagođene stranice CSS i javaskript počinju malim slovom, npr. {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.",
+       "userinvalidcssjstitle": "<strong>Upozorenje:</strong> ne postoji tema „$1“.\nPrilagođene stranice CSS i javaskript počinju malim slovom, npr. {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.",
        "updated": "(Ažurirano)",
-       "note": "'''Napomena:'''",
+       "note": "<strong>Napomena:</strong>",
        "previewnote": "<strong>Ovo je pretpregled.</strong>\nVaše izmene još nisu sačuvane!",
        "continue-editing": "Idi na uređivački okvir",
        "previewconflict": "Ovaj pregled oslikava kako će tekst u tekstualnom okviru izgledati.",
        "revdelete-legend": "Ograničenja vidljivosti",
        "revdelete-hide-text": "Tekst izmene",
        "revdelete-hide-image": "Sakrij sadržaj datoteke",
-       "revdelete-hide-name": "Sakrij cilj i parametre",
+       "revdelete-hide-name": "Cilj i parametre",
        "revdelete-hide-comment": "Opis izmene",
        "revdelete-hide-user": "Korisničko ime/IP adresa",
        "revdelete-hide-restricted": "Sakrij podatke od administratora i drugih korisnika",
        "rows": "Redova:",
        "columns": "Kolona",
        "searchresultshead": "Pretraga",
-       "stub-threshold": "Prag za oblikovanje <a href=\"#\" class=\"stub\">veze kao klice</a>:",
+       "stub-threshold": "Prag za oblikovanje veze kao klice ($1):",
        "stub-threshold-disabled": "Onemogućeno",
        "recentchangesdays": "Broj dana u skorašnjim izmenama:",
        "recentchangesdays-max": "Najviše $1 {{PLURAL:$1|dan|dana}}",
        "saveusergroups": "Sačuvaj korisničke grupe",
        "userrights-groupsmember": "Član:",
        "userrights-groupsmember-auto": "Podrazumevano član i:",
-       "userrights-groups-help": "Možete promeniti grupe kojima ovaj korisnik pripada.\n* Označena kućica označava da se korisnik nalazi u toj grupi.\n* Neoznačena kućica označava da se korisnik ne nalazi u toj grupi.\n* Zvezdica označava da ne možete ukloniti grupu ako je dodate i obratno.",
+       "userrights-groups-help": "Možete promeniti grupe kojima ovaj korisnik pripada.\n* Označen kvadratić označava da se korisnik nalazi u toj grupi.\n* Neoznačen kvadratić označava da se korisnik ne nalazi u toj grupi.\n* Zvezdica označava da ne možete ukloniti grupu ako je dodate i obratno.",
        "userrights-reason": "Razlog:",
        "userrights-no-interwiki": "Nemate ovlašćenja da menjate korisnička prava na drugim vikijima.",
        "userrights-nodatabase": "Baza podataka $1 ne postoji ili nije lokalna.",
        "group-autoconfirmed-member": "{{GENDER:$1|automatski potvrđen korisnik|automatski potvrđena korisnica}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|administrator|administratorka}}",
-       "group-bureaucrat-member": "{{GENDER:$1|birokrata|birokratkinja}}",
+       "group-bureaucrat-member": "{{GENDER:$1|birokrata}}",
        "group-suppress-member": "{{GENDER:$1|revizor|revizorka}}",
        "grouppage-user": "{{ns:project}}:Korisnici",
        "grouppage-autoconfirmed": "{{ns:project}}:Automatski potvrđeni korisnici",
        "watchlistanontext": "Morate biti $1 da biste gledali i uređivali stavke na vašem spisku nadgledanja.",
        "watchnologin": "Niste prijavljeni",
        "addwatch": "Dodaj na spisak nadgledanja",
-       "addedwatchtext": "Stranica „[[:$1]]“ i njena stranica za razgovor je dodata na vaš [[Special:Watchlist|spisak nadgledanja]].",
-       "addedwatchtext-short": "Stranica „$1“ je dodata na vaš spisak nadgledanja.",
+       "addedwatchtext": "Stranica „[[:$1]]“ i njena stranica za razgovor je dodata na Vaš [[Special:Watchlist|spisak nadgledanja]].",
+       "addedwatchtext-short": "Stranica „$1“ je dodata na Vaš spisak nadgledanja.",
        "removewatch": "Ukloni sa spiska nadgledanja",
        "removedwatchtext": "Stranica „[[:$1]]“ i njena stranica za razgovor je uklonjena s vašeg [[Special:Watchlist|spiska nadgledanja]].",
        "removedwatchtext-short": "Stranica „$1“ je uklonjena s vašeg spiska nadgledanja.",
        "watchlist-details": "Imate {{PLURAL:$1|$1 stranica|$1 stranice|$1 stranica}} na vašem spisku nadgledanja, ne računajući stranice za razgovor.",
        "wlheader-enotif": "Obaveštenje e-porukom je omogućeno.",
        "wlheader-showupdated": "Stranice koje su izmenjene otkad ste ih poslednji put posetili su '''podebljane'''.",
-       "wlnote": "Ispod {{PLURAL:$1|je poslednja izmena|su poslednje '''$1''' izmene|je poslednjih '''$1''' izmena}} u {{PLURAL:$2|prethodnom satu|prethodna '''$2''' sata|prethodnih '''$2''' sati}}, zaključno sa $3, $4.",
+       "wlnote": "Ispod {{PLURAL:$1|je poslednja izmena|su poslednje <strong>$1</strong> izmene|je poslednjih <strong>$1</strong> izmena}} u {{PLURAL:$2|prethodnom satu|prethodna <strong>$2</strong> sata|prethodnih <strong>$2</strong> sati}}, zaključno sa $3, $4.",
        "wlshowlast": "Prikaži poslednjih $1 sati, $2 dana",
        "watchlist-options": "Postavke spiska nadgledanja",
        "watching": "Nadgledanje…",
        "enotif_subject_moved": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|premestio je|premestila je}} $2",
        "enotif_subject_restored": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|vratio je|vratila je}} $2",
        "enotif_subject_changed": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|promenio je|promenila je}} $2",
-       "enotif_body_intro_deleted": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|obrisao je|obrisala je}} $2 dana $PAGEEDITDATE. Pogledajte $3.",
-       "enotif_body_intro_created": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|napravio je|napravila je|napravio je}} $2 dana $PAGEEDITDATE. Trenutna izmena nalazi se na $3.",
-       "enotif_body_intro_moved": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|premestio je|premestila je}} $2 dana $PAGEEDITDATE. Trenutna izmena nalazi se na  $3.",
-       "enotif_body_intro_restored": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|vratio je|vratila je|vratio je}} $2 dana $PAGEEDITDATE. Trenutna izmena nalazi se na $3.",
-       "enotif_body_intro_changed": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|promenio je|promenila je|promenio je}} $2 dana $PAGEEDITDATE. Trenutna izmena nalazi se na $3.",
+       "enotif_body_intro_deleted": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|obrisao|obrisala}} je $2 dana $PAGEEDITDATE Pogledajte $3.",
+       "enotif_body_intro_created": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|napravio|napravila}} je $2 dana $PAGEEDITDATE Trenutna izmena nalazi se na $3.",
+       "enotif_body_intro_moved": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|premestio|premestila}} je $2 dana $PAGEEDITDATE Trenutna izmena nalazi se na  $3.",
+       "enotif_body_intro_restored": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|vratio|vratila}} je $2 dana $PAGEEDITDATE Trenutna izmena nalazi se na $3.",
+       "enotif_body_intro_changed": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|promenio|promenila}} je $2 dana $PAGEEDITDATE Trenutna izmena nalazi se na $3.",
        "enotif_lastvisited": "Pogledajte $1 za sve izmene od vaše poslednje posete.",
        "enotif_lastdiff": "Pogledajte $1 da vidite ovu izmenu.",
        "enotif_anon_editor": "anoniman korisnik $1",
        "protect-locked-dblock": "Stepeni zaštite se ne mogu menjati jer je aktivna baza podataka zaključana.\nOvo su postavke stranice '''$1''':",
        "protect-locked-access": "Nemate ovlašćenja za menjanje stepena zaštite stranice.\nOvo su trenutne postavke stranice '''$1''':",
        "protect-cascadeon": "Ova stranica je trenutno zaštićena jer se nalazi na {{PLURAL:$1|stranici koja ima|stranicama koje imaju}} prenosivu zaštitu.\nMožete da promenite stepen zaštite, ali to neće uticati na prenosivu zaštitu.",
-       "protect-default": "Dopušteno svim korisnicima",
+       "protect-default": "Dopušteno svima",
        "protect-fallback": "Dozvoljeno samo korisnicima sa dozvolom „$1“",
        "protect-level-autoconfirmed": "Dopušteno samo automatski potvrđenim korisnicima",
        "protect-level-sysop": "Dopušteno samo administratorima",
        "undeleteviewlink": "pogledaj",
        "undeleteinvert": "Obrni izbor",
        "undeletecomment": "Razlog:",
-       "undeletedrevisions": "{{PLURAL:$1|Izmena je vraćena|$1 izmene su vraćene|$1 izmena je vraćeno}}",
+       "undeletedrevisions": "{{PLURAL:$1|izmena vraćeno}} $1",
        "undeletedrevisions-files": "$1 {{PLURAL:$1|izmena|izmene|izmena}} i $2 {{PLURAL:$2|datoteka je vraćena|datoteke su vraćene|datoteka je vraćeno}}",
-       "undeletedfiles": "{{PLURAL:$1|Datoteka je vraćena|$1 datoteke su vraćene|$1 datoteka je vraćeno}}",
+       "undeletedfiles": "{{PLURAL:$1|datoteka vraćeno}} $1",
        "cannotundelete": "Vraćanje nije uspelo:\n$1",
        "undeletedpage": "<strong>Stranica $1 je vraćena</strong>\n\nPogledajte [[Special:Log/delete|dnevnik brisanja]] za zapise o skorašnjim brisanjima i vraćanjima.",
        "undelete-header": "Pogledajte [[Special:Log/delete|istorijat brisanja]] za nedavno obrisane stranice.",
        "sp-contributions-newbies-sub": "Za nove korisnike",
        "sp-contributions-newbies-title": "Doprinosi novih korisnika",
        "sp-contributions-blocklog": "dnevnik blokiranja",
-       "sp-contributions-deleted": "obrisani korisnički doprinosi",
+       "sp-contributions-deleted": "obrisani doprinosi",
        "sp-contributions-uploads": "otpremanja",
        "sp-contributions-logs": "dnevnici",
        "sp-contributions-talk": "razgovor",
        "ipboptions": "2 sata:2 hours,1 dan:1 day,3 dana:3 days,1 nedelja:1 week,2 nedelje:2 weeks,1 mesec:1 month,3 meseca:3 months,6 meseci:6 months,1 godina:1 year,trajno:infinite",
        "ipbhidename": "Sakrij korisničko ime sa izmena i spiskova",
        "ipbwatchuser": "Nadgledaj korisničke stranice i stranice za razgovor ovog korisnika",
-       "ipb-disableusertalk": "Zabrani ovom korisniku da uređuje svoju stranicu za razgovor dok je blokiran",
+       "ipb-disableusertalk": "Onemogući korisniku da uređuje svoju stranicu za razgovor",
        "ipb-change-block": "Ponovo blokiraj korisnika s ovim postavkama",
        "ipb-confirm": "Potvrdi blokiranje",
        "badipaddress": "Neispravna IP adresa",
        "blocklist-reason": "Razlog",
        "ipblocklist-submit": "Pretraži",
        "ipblocklist-localblock": "Lokalno blokiranje",
-       "ipblocklist-otherblocks": "{{PLURAL:$1|Drugo blokiranje|Druga blokiranja}}",
+       "ipblocklist-otherblocks": "{{PLURAL:$1|Druga blokiranja}}",
        "infiniteblock": "trajno",
        "expiringblock": "ističe $1 u $2",
        "anononlyblock": "samo anonimni",
        "ipb_hide_invalid": "Ne mogu da potisnem ovaj nalog; ima više od {{PLURAL:$1|jedne izmene|$1 izmena}}.",
        "ipb_already_blocked": "„$1“ je već blokiran.",
        "ipb-needreblock": "$1 je već blokiran. Želite li da promenite podešavanja?",
-       "ipb-otherblocks-header": "{{PLURAL:$1|Druga blokada|Druge blokade}}",
+       "ipb-otherblocks-header": "{{PLURAL:$1|Druge blokade}}",
        "unblock-hideuser": "Ne možete deblokirati ovog korisnika jer je njegovo korisničko ime sakriveno.",
        "ipb_cant_unblock": "Greška: blokada $1 ne postoji. Možda je korisnik deblokiran.",
        "ipb_blocked_as_range": "Greška: IP adresa $1 nije direktno blokirana i ne može da se deblokira.\nOna je blokirana kao deo blokade $2, koja može biti deblokirana.",
        "imagetypemismatch": "Ekstenzija nove datoteke se ne poklapa s njenom vrstom",
        "imageinvalidfilename": "Ciljani naziv datoteke je neispravan",
        "fix-double-redirects": "Ažurirajte sva preusmerenja koja vode do prvobitnog naslova",
-       "move-leave-redirect": "Napravi preusmerenje",
+       "move-leave-redirect": "Ostavi preusmerenje",
        "protectedpagemovewarning": "'''Upozorenje:''' ova stranica je zaštićena, tako da samo korisnici s administratorskim ovlašćenjima mogu da je premeste.\nZa više informacija, poslednji zapis u dnevniku izmena je prikazan ispod:",
        "semiprotectedpagemovewarning": "'''Napomena:''' ova stranica je zaštićena, tako da samo registrovani korisnici mogu da je premeste.\nZa više informacija, poslednji zapis u dnevniku izmena je prikazan ispod:",
        "move-over-sharedrepo": "== Datoteka postoji ==\n[[:$1]] se nalazi na deljenom skladištu. Ako premestite datoteku na ovaj naslov, to će zameniti deljenu datoteku.",
        "markedaspatrollederrortext": "Morate izabrati izmenu da biste je označili kao patroliranu.",
        "markedaspatrollederror-noautopatrol": "Ne možete da označite svoje izmene kao patrolirane.",
        "markedaspatrollednotify": "Ova izmena na stranici „$1“ je označena kao patrolirana.",
-       "markedaspatrollederrornotify": "Označavanje ove stranice patroliranom nije uspelo.",
+       "markedaspatrollederrornotify": "Označavanje ove izmene patroliranom nije uspelo.",
        "patrol-log-page": "Dnevnik patroliranja",
        "patrol-log-header": "Ovo je dnevnik patroliranih izmena.",
        "log-show-hide-patrol": "$1 dnevnik patroliranja",
        "filedelete-archive-read-only": "Server ne može da piše po skladišnoj fascikli ($1).",
        "previousdiff": "← Starija izmena",
        "nextdiff": "Novija izmena →",
-       "mediawarning": "'''Upozorenje''': ova vrsta datoteke može sadržati štetan kod.\nAko ga pokrenete, vaš računar može biti ugrožen.",
+       "mediawarning": "<strong>Upozorenje:</strong> ova vrsta datoteke može sadržati štetan kod.\nAko ga pokrenete, Vaš računar može biti ugrožen.",
        "imagemaxsize": "Ograničenje veličine slike:<br />''(na stranicama za opis datoteka)''",
        "thumbsize": "Veličina minijature:",
        "widthheight": "$1 × $2",
        "watchlistedit-raw-done": "Vaš spisak nadgledanja je ažuriran.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1=Dodat je jedan naslov|Dodata su $1 naslova|Dodato je $1 naslova}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 naslov je uklonjen|Uklonjena su $1 naslova|Uklonjeno je $1 naslova}}:",
-       "watchlistedit-clear-title": "Pražnjenje spisak nadgledanja",
+       "watchlistedit-clear-title": "Pražnjenje spiska nadgledanja",
        "watchlistedit-clear-legend": "Isprazni spisak nadgledanja",
        "watchlistedit-clear-explain": "Svi naslovi će biti uklonjeni iz vašeg spiska nadgledanja.",
        "watchlistedit-clear-titles": "Naslovi:",
index 7935127..b47950d 100644 (file)
        "passwordreset-capture-help": "Wan du disse Kaste ankjuusest, wäd ju E-Mail-Ättergjucht mäd dät temporäre Paaswoud, die wiesed, as uk dän Benutser tousoand.",
        "passwordreset-email": "E-Mail-Adresse:",
        "passwordreset-emailtitle": "Benutserkontoinformatione ap {{SITENAME}}",
-       "passwordreset-emailelement": "↓Benutsernoome: $1\nTemporär Paaswoud: $2",
+       "passwordreset-emailelement": "↓Benutsernoome: \n$1\n\nTemporär Paaswoud: \n$2",
        "passwordreset-emailsent": "↓Ne Ärinnerenge wuud uur E-Mail fersoand.",
        "bold_sample": "Fatten Text",
        "bold_tip": "Fatten Text",
        "mailnologin": "Du bäst nit anmälded.",
        "mailnologintext": "Du moast [[Special:UserLogin|anmälded weese]] un sälwen ne [[Special:Preferences|gultige E-Mail-Adrässe]] anroat hääbe, uum uur Benutsere ne E-Mail tou seenden.",
        "emailuser": "Seende E-Mail an dissen Benutser",
-       "emailpage": "E-mail an Benutser",
        "emailpagetext": "Du koast dän Benutser mäd dän unner stoundene Formular ne E-Mail seende.\nAs Ouseender wäd ju E-Mail-Adresse uut dien [[Special:Preferences|Ienstaalengen]] iendrain, deermäd die Benutser die oantwoudje kon.",
        "defemailsubject": "{{SITENAME}}-E-Mail",
        "usermaildisabled": "E-Mail-Ämfangst deaktivierd",
index 94d56da..e862faa 100644 (file)
        "passwordreset-emailtitle": "Wincikan akun di {{SITENAME}}",
        "passwordreset-emailtext-ip": "Aya (sigana anjeun, ti alamat IP $1) ménta nyetél ulang kecap sandi pikeun {{SITENAME}} ($4). {{PLURAL:$3|Akun}} di handap tumali jeung alamat ieu surélék:\n\n$2\n\n{{PLURAL:$3|Ieu sandi saheulaanan}} bakal kadaluwarsa dina témpo {{PLURAL:$5|sapoé|$5 poé}}.\nAnjeun kudu asup sarta milih sandi anyar ayeuna. Lamun teu rumasa nyieun ieu paménta, atawa lamun geus inget sandi aslina sarta moal dirobah, ieu surat teu kudu diwaro.",
        "passwordreset-emailtext-user": "Pamaké $1 di {{SITENAME}} ménta nyetél ulang sandi anjeun di {{SITENAME}} ($4). {{PLURAL:$3|Akun}} di handap tumali jeung alamat surélék ieu:\n\n$2\n\n{{PLURAL:$3|Ieu sandi saheulaanan}} bakal kadaluwarsa dina témpo {{PLURAL:$5|sapoé|$5 poé}}.\nAnjeun kudu asup sarta milih sandi anyar ayeuna. Lamun henteu rumasa nyieun ieu pamundut atawa lamun geus inget sandi asli sarta moal ngarobah deui, ieu talatah teu kudu dipaliré.",
-       "passwordreset-emailelement": "Sandiasma: $1\nSandi saheulaanan: $2",
+       "passwordreset-emailelement": "Sandiasma: \n$1\n\nSandi saheulaanan: \n$2",
        "passwordreset-emailsent": "Surélék pikeun nyetél ulang kecap sandi geus dikirim.",
        "passwordreset-emailsent-capture": "Surélék pikeun nyetél ulang kecap sandi geus dikirim, sakumaha ditémbongkeun di handap.",
        "passwordreset-emailerror-capture": "Surélék pikeun nyetél ulang kecap sandi geus dijieun, sakumaha ditémbongkeun di handap, tapi gagal ngirim ka {{GENDER:$2|pamaké}}: $1",
        "mailnologin": "Euweuh alamat ngirim",
        "mailnologintext": "Anjeun kudu '''[[Special:UserLogin|asup log]]''' sarta boga alamat surélék nu sah na [[Special:Preferences|préferénsi]] anjeun sangkan bisa nyurélékan pamaké séjén.",
        "emailuser": "Surélékan pamaké ieu",
-       "emailpage": "Surélékan pamaké",
        "emailpagetext": "Anjeun bisa maké formulir di handap pikeun ngirim surélék ka ieu pamaké.\nAlamat surélék nu diasupkeun kana [[Special:Preferences|préferénsi pamaké anjeun]] bakal katémbong salaku alamat \"Ti\" dina surélékna, sahingga nu dituju bisa males langsung.",
        "defemailsubject": "Surélék {{SITENAME}} ti pamaké \"$1\"",
        "usermaildisabled": "Surélék kontributor ditumpurkeun",
index 8d32a88..7d454fd 100644 (file)
        "passwordreset-emailtitle": "Kontouppgifter på {{SITENAME}}",
        "passwordreset-emailtext-ip": "Någon (förmodligen du, från IP-adressen $1) begärde en återställning av ditt lösenord för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:\n\n$2\n\n{{PLURAL:$3|Detta|Dessa}} tillfälliga lösenord kommer att gå ut om {{PLURAL:$5|en dag|$5 dagar}}.\nDu bör logga in och välja ett nytt lösenord nu. Om någon annan gjorde denna begäran, eller om du kommer ihåg ditt ursprungliga lösenord, och inte längre önskar ändra det, kan du ignorera detta meddelande och fortsätta använda ditt gamla lösenord.",
        "passwordreset-emailtext-user": "Användaren $1 på {{SITENAME}} begärde en återställning av ditt lösenord för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:\n\n$2\n\n{{PLURAL:$3|Detta|Dessa}} tillfälliga lösenord kommer att gå ut om {{PLURAL:$5|en dag|$5 dagar}}.\nDu bör logga in och välja ett nytt lösenord nu. Om någon annan gjorde denna begäran, eller om du kommer ihåg ditt ursprungliga lösenord, och inte längre önskar ändra det, kan du ignorera detta meddelande och fortsätta använda ditt gamla lösenord.",
-       "passwordreset-emailelement": "Användarnamn: $1\nTillfälligt lösenord: $2",
+       "passwordreset-emailelement": "Användarnamn: \n$1\n\nTillfälligt lösenord: \n$2",
        "passwordreset-emailsent": "En lösenordsåterställning via e-post har skickats.",
        "passwordreset-emailsent-capture": "En lösenordsåterställning via e-post har skickats, som visas nedan.",
        "passwordreset-emailerror-capture": "En lösenordsåterställning via e-post har skapats, som visas nedan, men det gick inte att skicka den till {{GENDER:$2|användaren}}: $1",
        "changeemail-password": "Ditt lösenord till {{SITENAME}}:",
        "changeemail-submit": "Ändra e-post",
        "changeemail-throttled": "Du har gjort för många inloggningsförsök.\nVänta $1 innan du försöker igen.",
+       "changeemail-nochange": "Ange en annan ny e-postadress.",
        "resettokens": "Återställ nycklar",
        "resettokens-text": "Du kan återställa nycklar som tillåter åtkomst till vissa privata uppgifter som är associerade till ditt konto här.\n\nDu bör återställa om du av misstag delade dem med någon eller om ditt konto har äventyrats.",
        "resettokens-no-tokens": "Det finns inga nycklar att återställa.",
        "rows": "Rader:",
        "columns": "Kolumner:",
        "searchresultshead": "Sökning",
-       "stub-threshold": "Gräns för <a href=\"#\" class=\"stub\">stubblänk</a>-formatering (byte):",
+       "stub-threshold": "Gräns för formatering av stubblänk ($1):",
+       "stub-threshold-sample-link": "exempel",
        "stub-threshold-disabled": "Avaktiverat",
        "recentchangesdays": "Antal dygn som skall visas i \"senaste ändringarna\":",
        "recentchangesdays-max": "Maximalt $1 {{PLURAL:$1|dygn}}",
        "booksources-text": "Nedan följer en lista över länkar till webbplatser som säljer nya och begagnade böcker, och som kanske har ytterligare information om de böcker du söker.",
        "booksources-invalid-isbn": "Det angivna ISBN-numret verkar inte vara giltigt. Kontrollera källan för eventuella fel.",
        "specialloguserlabel": "Utförare:",
-       "speciallogtitlelabel": "Mål (titel eller användare):",
+       "speciallogtitlelabel": "Mål (titel eller {{ns:user}}:användarnamn för användare):",
        "log": "Loggar",
        "all-logs-page": "Alla publika loggar",
        "alllogstext": "Kombinerad visning av alla tillgängliga loggar för {{SITENAME}}.\nDu kan avgränsa sökningen och få färre träffar genom att ange typ av logg, användarnamn (skiftlägeskänsligt), eller berörd sida (också skiftlägeskänsligt).",
        "tooltip-ca-nstab-main": "Visa innehållssidan",
        "tooltip-ca-nstab-user": "Visa användarsidan",
        "tooltip-ca-nstab-media": "Visa mediesidan",
-       "tooltip-ca-nstab-special": "Detta är en specialsida; du kan inte redigera själva sidan",
+       "tooltip-ca-nstab-special": "Detta är en specialsida och kan inte redigeras",
        "tooltip-ca-nstab-project": "Visa projektsidan",
        "tooltip-ca-nstab-image": "Visa filsidan",
        "tooltip-ca-nstab-mediawiki": "Visa systemmeddelandet",
index b565ada..4174493 100644 (file)
        "passwordreset-emailtitle": "Maelezo ya akaunti kwenye {{SITENAME}}",
        "passwordreset-emailtext-ip": "Kuna mtu (huenda ikawa ni wewe, kutoka anwani ya IP $1) aliyeomba neno la siri la akaunti yako liwekwe upya katika {{SITENAME}} ($4). {{PLURAL:$3|Akaunti inayofuata imeunganishwa|Akaunti zinazofuata zimeunganishwa}} na anwani ya barua pepe hii:\n\n$2\n\n{{PLURAL:$3|Neno la siri hili litakwisha|Maneno ya siri haya yatakwisha}} baada ya siku {{PLURAL:$5|$5}}.\nUnafaa kuingia sasa na uchague neno jipya la siri. Kama mtu mwingine ameomba hili, au ikiwa umekumbuka neno lako la siri na hutaki kulibadilisha tena, basi usijali ujumbe huu, na uendelee kutumia neno la siri lako la zamani.",
        "passwordreset-emailtext-user": "Mtumiaji $1 kwenye {{SITENAME}} ameomba neno la siri la akaunti yako liwekwe upya katika {{SITENAME}} ($4). {{PLURAL:$3|Akaunti inayofuata imeunganishwa|Akaunti zinazofuata zimeunganishwa}} na anwani ya barua pepe hii:\n\n$2\n\n{{PLURAL:$3|Neno la siri hili litakwisha|Maneno ya siri haya yatakwisha}} baada ya siku {{PLURAL:$5|one day|$5 siku}}.\nTafadhali ingia sasa na uchague neno jipya la siri. Kama mtu mwingine ameomba hili, au ikiwa umekumbuka neno lako la siri na hutaki kulibadilisha tena, basi usijali ujumbe huu, na uendelee kutumia neno la siri lako la zamani.",
-       "passwordreset-emailelement": "Jina la mtumiaji: $1\nNeno la siri la muda: $2",
+       "passwordreset-emailelement": "Jina la mtumiaji: \n$1\n\nNeno la siri la muda: \n$2",
        "passwordreset-emailsent": "Barua pepe ya ukumbusho wa neno la siri imetumwa.",
        "passwordreset-emailsent-capture": "Barua pepe ya ukukumbusho wa neno la siri imetumwa, ambayo inaonekana hapo chini.",
        "passwordreset-emailerror-capture": "Barua pepe ya ukukumbusho wa neno la siri imetengenezwa, ambayo inaonekana hapo chini, lakini kuituma kwa mtumiaji {{GENDER:$2|user}} kumeshindikana: $1",
        "emailuser": "Mtumie mtumiaji huyu barua pepe",
        "emailuser-title-target": "Tumia barua pepe {{GENDER:$1|user}}",
        "emailuser-title-notarget": "Kumtumia mtumiaji barua pepe",
-       "emailpage": "Kumtumia mtumiaji barua pepe",
        "emailpagetext": "Utumie fomu iliopo chini ili kutuma barua pepe kwa mtumiaji huyu.\nAnwani yako ya barua pepe ulioitaja katika [[Special:Preferences|mapendekezo yako]] itaandikwa kwenye sanduku la anwani \"Kutoka kwa\" katika barua pepe, ili mtu atakayeipokea aweze kukujibu moja kwa moja.",
        "defemailsubject": "Barua pepe ya {{SITENAME}} iliyotumwa na mtumiaji \"$1\"",
        "usermaildisabled": "Uwezo wa kutuma barua pepe kwa mtumiaji umesitishwa",
index 0cffa90..1abc1c5 100644 (file)
        "passwordreset-email": "E-brif:",
        "passwordreset-emailtitle": "Kůnto na {{GRAMMAR:MS.lp|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Ftoś (cheba Ty, s IP $1)\npado, aże chce informacyji lo konta do {{GRAMMAR:MS.lp{{SITENAME}}}} ($4).\nZe tym ausdrukym sům powjůnzane kůnta:\n$2\n\n{{PLURAL:$3|Tymczasowygo hasła|Tymczasowych hasył}} możno użyć we {{PLURAL:$5|jedyn dźyń|$5 dńi}}.\n\nJak chćołżeś gynał to zrobjyć, to zaloguj śe terozki a podej swoje hasło.\n\nJak ftoś inkszy chćoł nowe hasło abo jak Ci śe przipůmńoło stare a ńy chcysz nowygo, to zignoruj to a używej starygo hasła.",
-       "passwordreset-emailelement": "Mjano sprowjorza: $1\nTymczasowe hasło: $2",
+       "passwordreset-emailelement": "Mjano sprowjorza: \n$1\n\nTymczasowe hasło: \n$2",
        "passwordreset-emailsent": "E-brif posłany.",
        "passwordreset-emailsent-capture": "E-brif posłony, kerego widać niżej.",
        "passwordreset-emailerror-capture": "Ńy udoło śe posłać wjadomości lo {{GENDER:$2|używocza|używoczki}}: $1",
        "mailnologin": "Brak adresu",
        "mailnologintext": "Muśyš śe [[Special:UserLogin|zalůgować]] i mjeć wpisany aktualny adres e-brif w swojich [[Special:Preferences|preferyncyjach]], coby můc wysuać e-brif do inkšygo užytkowńika.",
        "emailuser": "Poślij tymu używoczowi e-brif",
-       "emailpage": "Wyślij e-brif do užytkowńika",
        "emailpagetext": "Możesz użyć půńiższygo formularza, coby wysłać wjadůmość e-brif do tygo użytkowńika.\nAdres e-brifa, kery zostoł bez Ćebje wkludzůny we [[Special:Preferences|Twojich sztalowańach]], pojawi śe we polu „Uod”, bez cůż uodbjorca bydźe můg Ći uodpedźeć.",
        "defemailsubject": "{{SITENAME}} - e-brif uod używacza \"$1\"",
        "usermaildisabled": "E-brif używacza ńy załůnczony",
index be1612f..ab74dad 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} ல் கணக்கு விவரங்கள்",
        "passwordreset-emailtext-ip": "யாராவது (அநேகமாக நீங்கள், IP முகவரி   $1 ல் இருந்து ), நினைவுபடுத்தி கோரிய உங்கள் கணக்கு\n விவரங்கள் நினைவுபடுத்தி {{SITENAME}} ( $4 ).பின்வரும் பயனர்  {{PLURAL:$3|account is|accounts are}}\n இந்த மின்னஞ்சல் முகவரியுடன் இணைக்கப்பட்டுள்ளது.\n$2\n{{PLURAL:$3|This temporary password|These temporary passwords}} காலாவதி ஆக உள்ள நாட்கள் {{PLURAL:$5|one day|$5 days}}.\nநீங்கள் புதிய கடவுச்சொல்லை இப்போதே தேர்வு செய்து வேண்டும், அல்லது வேறு யாராவது இந்த கோரிக்கையை அனுப்பியிருந்தாலோ\nஅல்லது உங்கள் மூல கடவுச்சொல் நினைவில் இருந்தாலோ இதை மாற்ற வேண்டிய அவசியம் இல்லை,நீங்கள் இந்த தகவலை புறக்கணித்துவிட்டுஉங்கள் பழைய கடவுச்சொல்லையே பயன்படுத்திக்கொள்ளலாம்.",
        "passwordreset-emailtext-user": "பயனர் $1 {{SITENAME}} லிருந்து கடவுச்சொல் மீட்டமையினை {{SITENAME}}\n($4) க்கு கோரியுள்ளார்.பின்வரும் பயனர்  {{PLURAL:$3|account is|accounts are}}\n இந்த மின்னஞ்சல் முகவரியுடன் இணைக்கப்பட்டுள்ளது.\n$2\n{{PLURAL:$3|This temporary password|These temporary passwords}} காலாவதி ஆக உள்ள நாட்கள் {{PLURAL:$5|one day|$5 days}}.\nநீங்கள் புதிய கடவுச்சொல்லை இப்போதே தேர்வு செய்ய வேண்டும், அல்லது வேறு யாராவது இந்த கோரிக்கையை அனுப்பியிருந்தாலோ\nஅல்லது உங்கள் மூல கடவுச்சொல் நினைவில் இருந்தாலோ இதை மாற்ற வேண்டிய அவசியம் இல்லை,நீங்கள் இந்த தகவலை புறக்கணித்துவிட்டுஉங்கள் பழைய கடவுச்சொல்லையே பயன்படுத்திக்கொள்ளலாம்.",
-       "passwordreset-emailelement": "பயனர் பெயர்:  $1\nதற்காலிகக் கடவுச்சொல்: $2",
+       "passwordreset-emailelement": "பயனர் பெயர்:  \n$1\n\nதற்காலிகக் கடவுச்சொல்: \n$2",
        "passwordreset-emailsent": "கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல் அனுப்பப்பட்டது.",
        "passwordreset-emailsent-capture": "கீழே காண்பிக்கப்பட்டுள்ளது போல் கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல் அனுப்பப்பட்டது.",
        "passwordreset-emailerror-capture": "கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல்  உருவாக்கப்பட்டுவிட்டது, அது கீழே காட்டப்பட்டுள்ளது, ஆனால் {{GENDER:$2|user}} அனுப்புவது தோல்வியடைந்தது:$1",
index eedd87b..886f757 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}}లో ఖాతా వివరాలు",
        "passwordreset-emailtext-ip": "ఎవరో (బహుశా మీరే, ఐపీ అడ్రసు $1 నుంచి)  {{SITENAME}} ($4) లో మీ సంకేతపదాన్ని మార్చమంటూ అడిగారు. కింది వాడుకరి {{PLURAL:$3|ఖాతా|ఖాతాలు}}\nఈ ఈమెయిలు చిరునామాతో అనుసంధింపబడి ఉన్నాయి:\n\n$2\n\n{{PLURAL:$3|ఈ సంకేతపదానికి|ఈ సంకేతపదాలకు}} {{PLURAL:$5|ఒక్కరోజులో|$5 రోజుల్లో}} కాలం చెల్లుతుంది.\nఇప్పుడు మీరు లాగినై కొత్త సంకేతపదాన్ని ఎంచుకోవాల్సి ఉంటుంది. ఈ అభ్యర్ధన చేసింది మరెవరైనా అయినా, లేక మీ అసలు సంకేతపదం మీకు గుర్తొచ్చి దాన్ని మార్చాల్సిన అవసరం లేదని అనుకున్నా, మీరీ సందేశాన్ని పట్టించుకోనక్కర్లేదు. పాత సంకేతపదాన్నే వాడుకోవచ్చు.",
        "passwordreset-emailtext-user": "{{SITENAME}} లోని వాడుకరి $1, {{SITENAME}} ($4) లోని మీ సంకేతపదాన్ని మార్చమంటూ అడిగారు. కింది వాడుకరి {{PLURAL:$3|ఖాతా|ఖాతాలు}}\nఈ ఈమెయిలు అడ్రసుతో అనుసంధింపబడి ఉన్నాయి:\n\n$2\n\n{{PLURAL:$3|ఈ తాత్కాలిక సంకేతపదానికి|ఈ తాత్కాలిక సంకేతపదాలకు}} {{PLURAL:$5|ఒక్క రోజులో|$5 రోజుల్లో}} కాలం చెల్లుతుంది.\nఇప్పుడు మీరు లాగినై కొత్త సంకేతపదాన్ని ఎంచుకోవాల్సి ఉంటుంది. ఈ అభ్యర్ధన చేసింది మరెవరైనా అయినా, లేక మీ అసలు సంకేతపదం మీకు గుర్తొచ్చి దాన్ని మార్చాల్సిన అవసరం లేదని అనుకున్నా, మీరీ సందేశాన్ని పట్టించుకోనక్కర్లేదు. పాత సంకేతపదాన్నే వాడుకోవచ్చు.",
-       "passwordreset-emailelement": "వాడుకరిపేరు: $1\nతాత్కాలిక సంకేతపదం: $2",
+       "passwordreset-emailelement": "వాడుకరిపేరు: \n$1\n\nతాత్కాలిక సంకేతపదం: \n$2",
        "passwordreset-emailsent": "సంకేతపదం మార్పు ఈమెయిలును పంపించాం.",
        "passwordreset-emailsent-capture": "క్రింద చూపిన సంకేతపదం మార్పు ఈమెయిలును పంపించాం.",
        "passwordreset-emailerror-capture": "కింద చూపిన సంకేతపదం మార్పు ఈమెయిలును తయారుచేసాం. కానీ దాన్ని {{GENDER:$2|వాడుకరికి}} పంపడం విఫలమైంది: $1",
        "emailuser": "ఈ వాడుకరికి ఈ-మెయిలుని పంపించండి",
        "emailuser-title-target": "ఈ {{GENDER:$1|వాడుకరికి}} ఈమెయిలు పంపించండి",
        "emailuser-title-notarget": "వాడుకరికి ఈమెయిలు పంపించండి",
-       "emailpage": "వాడుకరికి ఈ-మెయిలుని పంపించు",
        "emailpagetext": "ఈ {{GENDER:$1|వాడుకరికి}} ఈమెయిలు సందేశము పంపించుటకు క్రింది ఫారంను ఉపయోగించవచ్చు. [[Special:Preferences|మీ వాడుకరి అభిరుచుల]]లో మీరిచ్చిన ఈ-మెయిలు చిరునామా \"నుండి\" ఆ సందేశం వచ్చినట్లుగా ఉంటుంది, కనుక వేగుని అందుకునేవారు నేరుగా మీకు జవాబివ్వగలుగుతారు.",
        "defemailsubject": "వాడుకరి \"$1\" నుండి {{SITENAME}} ఈ-మెయిలు",
        "usermaildisabled": "వాడుకరి ఈమెయిలు అచేతనం చెయ్యబడింది",
index fc2bdc3..5fa4535 100644 (file)
        "passwordreset-domain": "Домана:",
        "passwordreset-email": "Нишонаи почтаи электронӣ:",
        "passwordreset-emailtitle": "Мушаххасоти ҳисоб дар {{SITENAME}}",
-       "passwordreset-emailelement": "Номи корбарӣ: $1\nГузарвожаи муваққатӣ: $2",
+       "passwordreset-emailelement": "Номи корбарӣ: \n$1\n\nГузарвожаи муваққатӣ: \n$2",
        "changeemail": "Тағийри нишонаи email",
        "changeemail-oldemail": "Нишонаи почтаи кунунӣ:",
        "changeemail-newemail": "Нишонаи почтаи нав:",
        "mailnologintext": "Барои фиристодани почтаи электронӣ барои корбарони дигар бояд [[Special:UserLogin|ба систем ворид шавед]] ва нишонаи почтаи электронии мӯътабар дар [[Special:Preferences|тарҷиҳоти]] худ дошта бошед.",
        "emailuser": "Фиристодани email ба ин корбар",
        "emailuser-title-notarget": "Фиристодани пайём ба корбар",
-       "emailpage": "Почтаи электронӣ ба корбар",
        "emailpagetext": "Агар ин корбар нишонаи почтаи электронии мӯътабаре дар тарҷиҳоти ворид карда бошад, форми зерин як пайғоме мефиристад.\nНишонаи почтаи электроние, ки шумо дар тарҷиҳоти корбариатон ворид кардаед, дар нишони фиристандаи нома \"From\" хоҳад омад, то ки гиранда тавонад ба шумо посух диҳад.",
        "defemailsubject": "Пайёми {{SITENAME}} аз корбар \"$1\"",
        "noemailtitle": "Нишонаи почтаи электронӣ мавҷуд нест",
index f0b2d41..b0ce154 100644 (file)
        "createacct-benefit-body2": "$1 หน้า",
        "createacct-benefit-body3": "$1 ผู้ร่วมเขียนล่าสุด",
        "badretype": "รหัสผ่านที่คุณกรอกไม่ตรง",
+       "usernameinprogress": "การสร้างบัญชีสำหรับชื่อผู้ใช้นี้อยู่ระหว่างดำเนินการแล้ว\nโปรดรอสักครู่",
        "userexists": "ชื่อผู้ใช้ที่กรอกมีผู้ใช้แล้ว \nกรุณาเลือกชื่ออื่น",
        "loginerror": "ล็อกอินผิดพลาด",
        "createacct-error": "การสร้างบัญชีผิดพลาด",
        "passwordreset-emailtitle": "รายละเอียดบัญชีบน {{SITENAME}}",
        "passwordreset-emailtext-ip": "บางคน (ซึ่งอาจเป็นคุณ จากเลขที่อยู่ไอพี $1) ขอตั้งรหัสผ่านของคุณใหม่บน{{SITENAME}} ($4) บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
        "passwordreset-emailtext-user": "ผู้ใช้ $1 บน {{SITENAME}} ขอตั้งรหัสผ่านของคุณใหม่สำหรับ {{SITENAME}} ($4) {{PLURAL:$3||}}บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
-       "passwordreset-emailelement": "ชื่อผู้ใช้: $1\nรหัสผ่านชั่วคราว: $2",
+       "passwordreset-emailelement": "ชื่อผู้ใช้: \n$1\n\nรหัสผ่านชั่วคราว: \n$2",
        "passwordreset-emailsent": "อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้ว",
        "passwordreset-emailsent-capture": "อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้ว ซึ่งแสดงด้านล่าง",
        "passwordreset-emailerror-capture": "อีเมลตั้งรหัสผ่านใหม่ถูกสร้างขึ้นแล้ว ซึ่งแสดงด้านล่าง แต่ไม่สามารถส่งไปยัง{{GENDER:$2|ผู้ใช้}}: $1",
        "history-feed-description": "ประวัติรุ่นปรับปรุงของหน้านี้ในวิกิ",
        "history-feed-item-nocomment": "$1 เมื่อ $2",
        "history-feed-empty": "ไม่มีหน้าที่ต้องการ \nซึ่งอาจถูกลบหรือเปลี่ยนชื่อแล้ว \nลอง[[Special:Search|ค้นวิกินี้]]หาหน้าใหม่ที่เกี่ยวข้อง",
+       "history-edit-tags": "ป้ายระบุการแก้ไขของรุ่นแก้ไขที่เลือก",
        "rev-deleted-comment": "(คำอธิบายอย่างย่อถูกลบออก)",
        "rev-deleted-user": "(ชื่อผู้ใช้ถูกลบออก)",
        "rev-deleted-event": "(รายละเอียดปูมถูกลบ)",
        "rows": "แถว:",
        "columns": "คอลัมน์:",
        "searchresultshead": "ค้นหา",
-       "stub-threshold": "ขีดแบ่งสำหรับการจัดรูปแบบ <a href=\"#\" class=\"stub\">ลิงก์โครง</a> (ไบต์):",
+       "stub-threshold": "ขีดแบ่งสำหรับการจัดรูปแบบลิงก์โครง ($1):",
+       "stub-threshold-sample-link": "ตัวอย่าง",
        "stub-threshold-disabled": "ปิดใช้งาน",
        "recentchangesdays": "จำนวนวันที่แสดงในปรับปรุงล่าสุด:",
        "recentchangesdays-max": "มากสุด $1 วัน",
        "upload-http-error": "เกิดข้อผิดพลาดเอชทีทีพี: $1",
        "upload-copy-upload-invalid-domain": "ไม่สามารถคัดลอกการอัปโหลดจากโดเมนนี้",
        "upload-dialog-title": "อัปโหลดไฟล์",
+       "upload-dialog-error": "เกิดข้อผิดพลาด",
+       "upload-dialog-warning": "เกิดคำเตือน",
+       "upload-dialog-button-cancel": "ยกเลิก",
+       "upload-dialog-button-done": "เสร็จสิ้น",
+       "upload-dialog-button-save": "บันทึก",
+       "upload-dialog-button-upload": "อัปโหลด",
+       "upload-dialog-label-select-file": "เลือกไฟล์",
+       "upload-dialog-label-infoform-title": "รายละเอียด",
+       "upload-dialog-label-infoform-name": "ชื่อ",
+       "upload-dialog-label-infoform-description": "คำอธิบาย",
+       "upload-dialog-label-usage-title": "การใช้",
+       "upload-dialog-label-usage-filename": "ชื่อไฟล์",
        "backend-fail-backup": "ไม่สามารถสำรองไฟล์ \"$1\"",
        "backend-fail-notexists": "ไม่มีไฟล์ $1",
        "backend-fail-delete": "ไม่สามารถลบไฟล์ \"$1\"",
        "booksources-text": "ด้านล่างเป็นรายการการเชื่อมโยงไปยังเว็บไซต์อื่นที่ขายหนังสือใหม่และหนังสือใช้แล้ว และอาจมีสารสนเทศเพิ่มเติมเกี่ยวกับหนังสือที่คุณกำลังมองหา:",
        "booksources-invalid-isbn": "รหัส ISBN ที่ให้ไว้ไม่ถูกต้อง กรุณาตรวจสอบจากต้นฉบับอีกครั้ง",
        "specialloguserlabel": "ผู้ดำเนินการ:",
-       "speciallogtitlelabel": "เป้าหมาย (ชื่อเรื่องหรือผู้ใช้):",
+       "speciallogtitlelabel": "เป้าหมาย (ชื่อเรื่องหรือ {{ns:user}}:ชื่อผู้ใช้ สำหรับผู้ใช้):",
        "log": "ปูม",
        "all-logs-page": "ปูมสาธารณะทั้งหมด",
        "alllogstext": "การแสดงผลรวมปูมที่มีทั้งหมดของ {{SITENAME}}\nคุณสามารถค้นหาให้ละเอียดขึ้นโดยเลือกประเภทปูม ชื่อผู้ใช้หรือหน้าที่ต้องการ (ไวต่ออักษรใหญ่เล็ก)",
        "tooltip-ca-nstab-main": "ดูหน้าเนื้อหา",
        "tooltip-ca-nstab-user": "ดูหน้าผู้ใช้",
        "tooltip-ca-nstab-media": "ดูหน้าสื่อ ภาพ เพลง",
-       "tooltip-ca-nstab-special": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\9eิà¹\80ศษ à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89",
+       "tooltip-ca-nstab-special": "หน้านี้เป็นหน้าพิเศษ ไม่สามารถแก้ไขได้",
        "tooltip-ca-nstab-project": "ดูหน้าโครงการ",
        "tooltip-ca-nstab-image": "ดูหน้าภาพไฟล์",
        "tooltip-ca-nstab-mediawiki": "ดูข้อความระบบ",
index 9e88060..305e972 100644 (file)
        "passwordreset": "Paroly nol et",
        "passwordreset-username": "Ulanyjy ady:",
        "passwordreset-domain": "Domen:",
-       "passwordreset-emailelement": "Ulanyjy ady: $1\nWagtlaýyn parol: $2",
+       "passwordreset-emailelement": "Ulanyjy ady: \n$1\n\nWagtlaýyn parol: \n$2",
        "changeemail": "E-poçta adresini üýtget",
        "changeemail-oldemail": "Häzirki e-poçta adresi:",
        "changeemail-newemail": "Täze e-poçta adresi:",
        "mailnologin": "Iberer ýaly adres ýok",
        "mailnologintext": "Başga ulanyjylara e-poçta ibermek üçin [[Special:UserLogin|sessiýaňyz açyk bolmaly]] hem-de [[Special:Preferences|ileri tutmalarda]] dogry bir e-poçta adresiňiz bolmalydyr.",
        "emailuser": "Bu ulanyja e-poçta iber",
-       "emailpage": "Ulanyja e-poçta iber",
        "emailpagetext": "Bu ulanyja e-poçta habarlaşygy ibermek üçin aşakdaky formdan peýdalanyp bilersiňiz.\n[[Special:Preferences|Ulanyjy ileri tutmalaryňyzda]] görkezen e-poçta adresiňiz e-poçtanyň \"Kimden\" adresinde peýda bolar, şeýlelikde kabul ediji size gönüden-göni jogap berip biler.",
        "defemailsubject": "{{SITENAME}} e-poçtasy",
        "usermaildisabled": "Ulanyjy e-poçtasy ýapyk",
index 5ae0a43..f3cb696 100644 (file)
        "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-emailtext-user": "Ang tagagamit na si $1 sa {{SITENAME}} ay humiling ng isang paalala ng iyong mga akawnt ng detalye para sa {{SITENAME}}\n($4). Ang sumusunod na pangtagagamit na {{PLURAL:$3|akawnt ay|mga akawnt ay}} may kaugnayan sa tirahang ito ng e-liham:\n\n$2\n\n{{PLURAL:$3|Ang pansamantalang hudyat na ito|Ang pansamantalang mga hudyat na ito}} mawawalan ng bias sa loob ng {{PLURAL:$5|isang araw|$5 mga araw}}.\nDapat kang lumagda at pumili ng isang hudyat ngayon. Kung ibang tao ang gumawa ng kahilingang ito, o kung naalala mo na ang iyong orihinal na hudyat, at hindi mo na nais palitan pa ito, maaari mong huwag nang pansinin ang mensaheng ito at magpatuloy sa paggamit ng iyong lumang hudyat.",
-       "passwordreset-emailelement": "Pangalan ng tagagamit: $1\nPansamantalang password: $2",
+       "passwordreset-emailelement": "Pangalan ng tagagamit: \n$1\n\nPansamantalang password: \n$2",
        "passwordreset-emailsent": "Naipadala na ang isang e-liham na pampaalala.",
        "passwordreset-emailsent-capture": "Naipadala na ang isang e-liham na paalala, na ipinapakita sa ibaba.",
        "passwordreset-emailerror-capture": "Nalikha na ang isang e-liham na paalala, na ipinapakita sa ibaba, subalit nabigo ang pagpapadala sa tagagamit: $1",
        "emailuser": "Padalhan ng e-liham ang tagagamit",
        "emailuser-title-target": "Padalhan ng elektronikong liham ang {{GENDER:$1|tagagamit}} na ito",
        "emailuser-title-notarget": "Padalhan ng e-liham ang tagagamit",
-       "emailpage": "Magpadala ng e-liham sa tagagamit",
        "emailpagetext": "Magagamit mo ang pormularyo sa ibaba para makapagpadala ng mensahe sa pamamagitan ng isang e-liham para sa tagagamit na ito.\nAng ipinasok mong direksiyong e-liham sa [[Special:Preferences|iyong mga kagustuhan ng tagagamit]] ay lilitaw bilang adres na \"Mula kay\" ng e-liham, para tuwirang makatugon sa iyo ang nakatanggap.",
        "defemailsubject": "E-liham ng {{SITENAME}} mula sa tagagamit na si \"$1\"",
        "usermaildisabled": "Hindi pinagana ang e-liham ng tagagamit",
index 4406660..02d4ada 100644 (file)
        "print": "Yazdır",
        "view": "Görüntüle",
        "view-foreign": "$1 üzerinde gör",
-       "edit": "Düzenle",
+       "edit": "Değiştir",
        "edit-local": "Yerel açıklamayı düzenle",
        "create": "Oluştur",
        "create-local": "Yerel açıklama ekle",
        "actionthrottled": "Eylem kısılmıştır",
        "actionthrottledtext": "Spam'e karşı alınan önlemler dahilinde belirli bir süre aralığında bu eylemin gerçekleştirilmesine izin verilen miktarı aştınız.\nLütfen birkaç dakika sonra yeniden deneyin.",
        "protectedpagetext": "Bu sayfa değişiklik ya da diğer eylemlerin yapılmasını engellemek için koruma altına alınmıştır.",
-       "viewsourcetext": "Bu sayfanın kaynağını görebilir ve kopyalayabilirsiniz:",
-       "viewyourtext": "Bu sayfada <strong>yaptığınız değişikliklerin</strong> kaynağını görünteleyip kopyalayabilirsiniz:",
+       "viewsourcetext": "Bu sayfanın kaynağını görebilir ve kopyalayabilirsiniz.",
+       "viewyourtext": "Bu sayfada <strong>yaptığınız değişikliklerin</strong> kaynağını görünteleyip kopyalayabilirsiniz.",
        "protectedinterface": "Bu sayfa yazılım için arayüz metni sağlamaktadır ve kötüye kullanımı önlemek için korumaya alınmıştır.\nBütün vikilere dair çeviri eklemek veya bunları değiştirmek için lütfen MediaWiki yerelleştirme projesi [//translatewiki.net/ translatewiki.net]'i kullanın.",
        "editinginterface": "<strong>Uyarı:</strong> Yazılım için arayüz metni sağlayan bir sayfayı değiştiriyorsunuz.\nBu sayfada yapılacak değişiklikler diğer kullanıcıların vikilerindeki kullanıcı arayüzlerinin görünümünü de etkileyecektir.",
        "translateinterface": "Tüm vikilerde çeviri eklemek veya çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesini [//translatewiki.net/] kullanın.",
        "passwordreset-emailtitle": "{{SITENAME}} hesap detayları",
        "passwordreset-emailtext-ip": "Birisi, (muhtemelen siz, $1 IP adresinden) {{SITENAME}} ($4) için hesap bilgilerinizin \nhatırlatılmasını istedi. Aşağıdaki kullanıcı {{PLURAL:$3|hesabı|hesapları}} bu e-posta adresiyle ilişkili:\n\n$2\n\n{{PLURAL:$3|Bu geçici şifre|Bu geçici şifreler}} {{PLURAL:$5|bir gün|$5  gün}} geçerlidir.\nBu geçici parola ile giriş yapın ve yeni bir şifre seçin. Şifre değişimini siz istemediyseniz veya şifrenizi hatırladıysanız ve artık şifrenizi değiştirmek istemiyorsanız; bu iletiyi önemsemeyerek eski şifrenizi kullanmaya devam edebilirsiniz.",
        "passwordreset-emailtext-user": "$1 adlı kullanıcı, {{SITENAME}} ($4) için hesap bilgilerinizin hatırlatılmasını istedi. Aşağıdaki kullanıcı {{PLURAL:$3|hesabı|hesapları}} bu e-posta adresiyle ilişkili:\n\n$2\n\n{{PLURAL:$3|Bu geçici şifre|Bu geçici şifreler}} {{PLURAL:$5|bir gün|$5  gün}} geçerlidir.\nBu geçici parola ile giriş yapın ve yeni bir şifre seçin. Bu talep bir başkasına aitse veya şifrenizi hatırladıysanız ve artık şifrenizi değiştirmek istemiyorsanız; bu iletiyi önemsemeyerek eski şifrenizi kullanmaya devam edebilirsiniz.",
-       "passwordreset-emailelement": "Kullanıcı adı: $1\nGeçici şifre: $2",
+       "passwordreset-emailelement": "Kullanıcı adı: \n$1\n\nGeçici şifre: \n$2",
        "passwordreset-emailsent": "Parola sıfırlama e-postası gönderildi.",
        "passwordreset-emailsent-capture": "Aşağıda gözüktüğü gibi bir parola sıfırlama e-postası gönderildi.",
        "passwordreset-emailerror-capture": "Aşağıda gözüktüğü gibi bir parola sıfırlama e-postası oluşturuldu ancak {{GENDER:$2|kullanıcıya}} gönderme işlemi başarısız oldu: $1",
        "tooltip-pt-preferences": "Tercihleriniz (ayarlarınız)",
        "tooltip-pt-watchlist": "Değişiklikler için izlemeye aldığınız sayfaların listesi",
        "tooltip-pt-mycontris": "Katkılarınızın listesi",
-       "tooltip-pt-login": "Oturum açmanızı tavsiye ederiz; ancak zorunda değilsiniz",
+       "tooltip-pt-login": "Oturum açmanız tavsiye edilmektedir; ancak bu zorunda değildir",
        "tooltip-pt-logout": "Sistemden çık",
        "tooltip-pt-createaccount": "Bir hesap oluşturup oturum açmanız tavsiye edilmektedir ancak bu zorunlu değildir",
        "tooltip-ca-talk": "İçerik ile ilgili tartışma",
        "tooltip-ca-nstab-main": "İçerik sayfasını göster",
        "tooltip-ca-nstab-user": "Kullanıcı sayfasını göster",
        "tooltip-ca-nstab-media": "Medya sayfasını göster",
-       "tooltip-ca-nstab-special": "Bu özel sayfa olduğu için üzerinde değişiklik yapamazsınız.",
+       "tooltip-ca-nstab-special": "Bu bir özel sayfadır ve düzenleme yapılamaz",
        "tooltip-ca-nstab-project": "Proje sayfasını göster",
        "tooltip-ca-nstab-image": "Dosya sayfasını göster",
        "tooltip-ca-nstab-mediawiki": "Sistem mesajını göster",
        "spam_reverting": "$1 ile bağlantı içermeyen son sürüme geri dönülüyor",
        "spam_blanking": "Tüm revizyonlar $1 sayfasına bağlantı içeriyor, boşaltılıyor",
        "spam_deleting": "Tüm revizyonlar $1 sayfasına bağlantı içeriyor, siliniyor",
-       "simpleantispam-label": "Anti-spam denetimi.\nBunu '''doldurMAyın'''!",
+       "simpleantispam-label": "Anti-spam denetimi.\nBunu <strong>doldurmayın</strong>!",
        "pageinfo-title": "Bilgi için \"$1\"",
        "pageinfo-not-current": "Üzgünüz, eski sürümler için bu bilgileri sağlamamız mümkün değildir.",
        "pageinfo-header-basic": "Temel bilgiler",
index fe9ec13..b12e304 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} хисап язмасы турында мәгълүматлар",
        "passwordreset-emailtext-ip": "Кемдер (бәлки, сездер, $1 IP-адресыннан) {{SITENAME}} ($4) проектында сезнең серсүзне искә төшерүне сорады.\n{{PLURAL:$3|1=Түбәндәге хисап язмасы|Түбәндәге хисап язмалары}} бу электрон әрҗә адресы белән бәйле:\n\n$2\n\n{{PLURAL:$3|1=Бу вакытлы серсүз|Бу вакытлы серсүзләр}} {{PLURAL:$5|$5 көн}} дәвамында эшлиячәкләр.\nСез системага керергә һәм яңа серсүз сайларга тиешсез.\nӘгәр сез серсүз сорамаган булсагыз яки элеккеге серсүзегезне искә төшерсәгез \nһәм аны үзгәртергә теләмәсәгез, бу хатка җавап бирмәгез\nһәм элеккеге серсүзегезне кулланыгыз.",
        "passwordreset-emailtext-user": "{{SITENAME}} проектыннан $1 кулланучысы {{SITENAME}} ($4) проектында сезнең серсүзне искә төшерүне сорады.\n{{PLURAL:$3|1=Түбәндәге хисап язмасы|Түбәндәге хисап язмалары}} бу электрон әрҗә адресы белән бәйле:\n\n$2\n\n{{PLURAL:$3|1=Бу вакытлы серсүз|Бу вакытлы серсүзләр}} {{PLURAL:$5|$5 көн}} дәвамында эшлиячәкләр.\nСез системага керергә һәм яңа серсүз сайларга тиешсез.\nӘгәр сез серсүз сорамаган булсагыз яки элеккеге серсүзегезне искә төшерсәгез \nһәм аны үзгәртергә теләмәсәгез, бу хатка җавап бирмәгез\nһәм элеккеге серсүзегезне кулланыгыз.",
-       "passwordreset-emailelement": "Кулланучы исеме: $1\nВакытлыча серсүз: $2",
+       "passwordreset-emailelement": "Кулланучы исеме: \n$1\n\nВакытлыча серсүз: \n$2",
        "passwordreset-emailsent": "Электрон әрҗәгә искәртү җибәрелгән иде",
        "passwordreset-emailsent-capture": "Җибәрелгән хат-искәртү түбәндә китерелә",
        "passwordreset-emailerror-capture": "Түбәндә язылган хат-искәртү китерелгән, аны җибәрмәүнең сәбәбе:$1",
        "enotif_impersonal_salutation": "{{SITENAME}} кулланучы",
        "enotif_lastvisited": "Соңгы керүегездән соң булган барлык үзгәртүләрне күрер өчен, бу сылтама аша узыгыз: $1",
        "enotif_body": "Хөрмәтле $WATCHINGUSERNAME,\n\n«{{SITENAME}}» проектының «$PAGETITLE» бите  $PAGEEDITOR  тарафыннан  $PAGEEDITDATE  көнне  $CHANGEDORCREATED. Битне карар өчен $PAGETITLE_URL  буенча узыгыз.\n\n$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": "төзергән",
+       "created": "төзелгән",
        "changed": "үзгәртелде",
        "deletepage": "Битне бетерү",
        "confirm": "Раслау",
        "tooltip-ca-nstab-main": "Мәкаләнең эчтәлеге",
        "tooltip-ca-nstab-user": "Кулланучының шәхси бите",
        "tooltip-ca-nstab-media": "Медиа-файл",
-       "tooltip-ca-nstab-special": "Бу махсус бит, сез аны үзгәртү алмыйсыз",
+       "tooltip-ca-nstab-special": "Бу махсус бит, аны үзгәртү мөмкин түгел",
        "tooltip-ca-nstab-project": "Проектның бите",
        "tooltip-ca-nstab-image": "Сүрәтнең бите",
        "tooltip-ca-nstab-mediawiki": "MediaWiki - хат бите",
index 9c7671b..4f12c93 100644 (file)
        "resetpass-submit-cancel": "Соксаары",
        "resetpass-temp-password": "Түр чажыт сөс:",
        "passwordreset": "Чажыт сөстү дүжүрү",
-       "passwordreset-legend": "Чажыт атты дүжүр",
        "passwordreset-username": "Aжыглакчының ады:",
        "passwordreset-domain": "Домен:",
        "passwordreset-email": "Э-чагааның адреси:",
-       "passwordreset-emailelement": "Ажыглакчы ады: $1\nТүр чажыт сөс: $2",
+       "passwordreset-emailelement": "Ажыглакчы ады: \n$1\n\nТүр чажыт сөс: \n$2",
        "changeemail": "Э-чагааның адресин өскертири",
        "changeemail-oldemail": "Амгы э-чагааның адреси:",
        "changeemail-newemail": "Чаа э-чагааның адреси:",
        "nlinks": "$1 {{PLURAL:$1|холбаа}}",
        "nmembers": "$1 {{PLURAL:$1|кежигүн}}",
        "nrevisions": "$1 {{PLURAL:$1|үндүрери}}",
-       "nviews": "$1 {{PLURAL:$1|көрүш}}",
        "specialpage-empty": "Бо илеткелдиң түңнели чок.",
        "lonelypages": "Чааскаан арыннар",
        "uncategorizedpages": "Бөлүк эвес арыннар",
index a24fa92..0342666 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}} دىكى ھېسابات تەپسىلاتى",
        "passwordreset-emailtext-ip": "باشقىلار (بەلكىم سىز، IP ئادرېسى $1) {{SITENAME}} ($4) دىكى پارولنى قايتا بېكىتىشنى ئىلتىماس قىلدى. تۆۋەندىكى ئىشلەتكۈچىنىڭ {{PLURAL:$3|ھېسابات|ھېسابات}}ى مۇشۇ ئېلخەتكە باغلانغان:\n\n$2\n\n{{PLURAL:$3|بۇ ۋاقىتلىق پارول|بۇ ۋاقىتلىق پارول}} {{PLURAL:$5|بىر كۈن|$5 كۈن}}دە ۋاقتى ئۆتىدۇ. ئەگەر بۇ مەشغۇلاتنى سىز ئىلتىماس قىلغان بولسىڭىز، دەرھال تىزىمغا كىرىپ يېڭى پارولدىن بىرنى تاللاڭ.\nسىز بەلگىلىگەن يېڭى پارول  {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ. ئەگەر باشقىلار ئىلتىماس قىلغان بولسا ياكى ئۆزىڭىز بەلگىلىگەن پارول ئېسىڭىزگە كېلىپ ئۇنى ئۆزگەرتمىسىڭىز، \nبۇ ئۇچۇرغا پەرۋا قىلماي ئۆزىڭىزنىڭ كونا پارولىنى ئىشلىتىۋېرىڭ.",
        "passwordreset-emailtext-user": "{{SITENAME}} دىكى ئىشلەتكۈچى $1 بېكەت {{SITENAME}} ($4) دىكى پارولىڭىزنى قايتا بېكىتىشنى ئىلتىماس قىلدى .\nتۆۋەندىكى ئىشلەتكۈچىنىڭ {{PLURAL:$3|ھېسابات|ھېسابات}}($4)ى مۇشۇ ئېلخەتكە باغلانغان:\n\n$2\n\n{{PLURAL:$3|بۇ ۋاقىتلىق پارول|بۇ ۋاقىتلىق پارول}} {{PLURAL:$5|بىر كۈن|$5 كۈن}}دە ۋاقتى ئۆتىدۇ. ئەگەر بۇ مەشغۇلاتنى سىز ئىلتىماس قىلغان بولسىڭىز، دەرھال تىزىمغا كىرىپ يېڭى پارولدىن بىرنى تاللاڭ.\nسىز بەلگىلىگەن يېڭى پارول {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ. ئەگەر باشقىلار ئىلتىماس قىلغان بولسا ياكى ئۆزىڭىز بەلگىلىگەن پارول ئېسىڭىزگە كېلىپ ئۇنى ئۆزگەرتمىسىڭىز، \nبۇ ئۇچۇرغا پەرۋا قىلماي ئۆزىڭىزنىڭ كونا پارولىنى ئىشلىتىۋېرىڭ.",
-       "passwordreset-emailelement": "ئىشلەتكۈچى نامى: $1\nۋاقىتلىق پارول: $2",
+       "passwordreset-emailelement": "ئىشلەتكۈچى نامى: \n$1\n\nۋاقىتلىق پارول: \n$2",
        "passwordreset-emailsent": "پارولنى قايتا بېكىتىش ئېلخېتى يوللاندى.",
        "passwordreset-emailsent-capture": "پارولنى قايتا بېكىتىش ئېلخېتى يوللاندى، تۆۋەندە كۆرسىتىلىدۇ.",
        "passwordreset-emailerror-capture": "ھاسىل قىلىنغان پارولنى قايتا بېكىتىش ئېلخېتى تۆۋەندە كۆرسىتىلگەندەك ئەمما ئۇنى {{GENDER:$2|ئىشلەتكۈچى}}گە يوللىيالمىدى: $1",
        "emailuser": "بۇ ئىشلەتكۈچىگە ئېلخەت يوللا",
        "emailuser-title-target": "بۇ {{ئىشلەتكۈچى|GENDER:$1}} گە ئېلخەت يوللا",
        "emailuser-title-notarget": "ئېلخەت ئىشلەتكۈچى",
-       "emailpage": "بۇ ئىشلەتكۈچىگە ئېلخەت يوللا",
        "emailpagetext": "سىز تۆۋەندىكى جەدۋەلنى ئىشلىتىپ، بۇ {{GENDER:$1|ئىشلەتكۈچى}} گە ئېلخەت يوللىيالايسىز.\n [[Special:Preferences|ئىشلەتكۈچى مايىللىقىڭىز]]دىكى ئېلخەت ئادرېسى  \"يوللىغۇچى\" ستونىدا كۆرۈنىدۇ، مۇشۇنداق بولغاندا شۇ ئىشلەتكۈچى سىزگە بىۋاسىتە جاۋاب قايتۇرالايدۇ.",
        "defemailsubject": "{{SITENAME}}بېكەتتىكى \"$1\" ئىشلەتكۈچىنىڭ ئېلخەت",
        "usermaildisabled": "ئىشلەتكۈچى ئېلخەت چەكلەنگەن",
index 348ff17..20f84ea 100644 (file)
        "passwordreset-emailtitle": "Деталі облікового запису на {{SITENAME}}",
        "passwordreset-emailtext-ip": "Хтось (імовірно ви, з IP-адреси $1) попросив нагадати деталі вашого облікового запису для {{SITENAME}} ($4). З вашою електронною скринькою пов'язан{{PLURAL:$3|1=ий такий запис|і такі записи}}:\n\n$2\n\n{{PLURAL:$3|1=Цей тимчасовий пароль стане недійсним|Ці тимчасові паролі стануть недійсними}} через $5 {{PLURAL:$5|день|дні|днів}}.\nВи маєте ввійти в систему і вибрати новий пароль. Якщо ж цей запит зробив хтось інший або ви згадали свій старий пароль і не бажаєте його змінювати, можете ігнорувати це повідомлення та продовжувати використовувати старий пароль.",
        "passwordreset-emailtext-user": "Користувач $1 з {{SITENAME}} попросив нагадати деталі вашого облікового запису для {{SITENAME}} ($4). З вашою електронною скринькою пов'язан{{PLURAL:$3|1=ий такий запис|і такі записи}}:\n\n$2\n\n{{PLURAL:$3|1=Цей тимчасовий пароль|Ці тимчасові паролі}} стануть нечинні через {{PLURAL:$5|день|$5 дні|$5 днів}}.\nВи маєте ввійти в систему і вибрати новий пароль. Якщо ж цей запит зробив хтось інший, або ви згадали свій старий пароль і не бажаєте його змінювати, можете просто ігнорувати це повідомлення та продовжувати використовувати старий пароль.",
-       "passwordreset-emailelement": "Ім'я користувача: $1\nТимчасовий пароль: $2",
+       "passwordreset-emailelement": "Ім'я користувача: \n$1\n\nТимчасовий пароль: \n$2",
        "passwordreset-emailsent": "Електронний лист для відновлення пароля надісланий.",
        "passwordreset-emailsent-capture": "Електронний лист скидання пароля було надіслано, як показано нижче.",
        "passwordreset-emailerror-capture": "Електронний лист для відновлення пароля мав бути надісланий, як показано нижче, але його надсилання {{GENDER:$2|користувачеві|користувачці}} $1 не вдалося.",
        "reuploaddesc": "Повернутися до форми завантаження",
        "upload-tryagain": "Зберегти змінений опис файлу",
        "uploadnologin": "Ви не ввійшли в систему",
-       "uploadnologintext": "Ð\92и Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ\96 $1, щоб завантажувати файли.",
+       "uploadnologintext": "Ð\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, $1, щоб завантажувати файли.",
        "upload_directory_missing": "Директорія для завантажень ($1) відсутня і не може бути створена веб-сервером.",
        "upload_directory_read_only": "Веб-сервер не має прав запису в папку ($1), в якій планується зберігати завантажувані файли.",
        "uploaderror": "Помилка завантаження файлу",
index 17cfc1a..c2ef7ac 100644 (file)
        "actionthrottled": "Action throttled",
        "actionthrottledtext": "بطورِ ایک ضدسپم تدبیر، آپ کو مختصر وقت میں کئی بار یہ عمل بجا لانے سے محدود کیا گیا، اور آپ یہ حد پار کرچکے ہیں.\nبراہِ کرم، کچھ منٹ بعد کوشش کیجئے.",
        "protectedpagetext": "اس صفحہ کو تدوین سے محفوظ رکھنے کیلیے مقفل کر دیا گیا ہے۔",
-       "viewsourcetext": "آپ صرف مسودہ دیکھ سکتے ہیں اور اسکی نقل اتار سکتے ہیں:",
-       "viewyourtext": "آپ اس مواد کو دیکھ سکتے ہیں اور اٹھا (کاپی) سکتے ہیں <strong>آپ کی ترامیم </strong>اس صفحہ پر:",
+       "viewsourcetext": "آپ صرف مسودہ دیکھ سکتے ہیں اور اسکی نقل اتار سکتے ہیں۔",
+       "viewyourtext": "آپ اس مواد کو دیکھ سکتے ہیں اور اٹھا (کاپی) سکتے ہیں <strong>آپ کی ترامیم</strong> اس صفحہ پر۔",
        "protectedinterface": "یہ صفحہ سوفٹ وئیر کے لیے انٹرفیس متن فراہم کرتا ہے، اور ناجائزاستعمال کے سدِباب کے لیے اِسے مقفل کیا گیا ہے.",
        "editinginterface": "'''انتباہ: ''' آپ ایک ایسا صفحہ تدوین کر رہے ہیں جو سوفٹ ویئر کیلئے انٹرفیس متن فراہم کرتا ہے۔ اس صفحہ میں کی جانے والی ترمیم، دیگر صارفین کے لیے انٹرفیس کو تبدیل کردے گی۔\nبراہِ کرم، ترجمہ کے لیے [//translatewiki.net/wiki/Main_Page?setlang=en '''ٹرانسلیٹ ویکی.نیٹ'''] (میڈیا ویکی دارالترجمہ) استعمال کریں.",
        "translateinterface": "تمام ویکیوں میں تبدیلی یا شامل کرنے کے لیے، اسے استعمال کریں [//translatewiki.net/ translatewiki.net]، میڈیا ویکی دارالترجمہ.",
        "virus-badscanner": "خراب وضعیت: انجان وائرسی مفراس: ''$1''",
        "virus-scanfailed": "تفریس ناکام (رمز $1)",
        "virus-unknownscanner": "انجان ضدوائرس:",
-       "logouttext": "'''اب آپ خارج ہوچکے ہیں'''\n\nآپ گمنام طور پر {{SITENAME}}  کا استعمال جاری رکھ سکتے ہیں، یا دوبارہ اسی نام یا مختلف نام سے <span class='plainlinks'>[$1 دوبارہ داخلِ نوشتہ]</span> بھی ہو سکتے ہیں۔  یہ یاد آوری کرلیجیۓ کہ کچھ صفحات ایسے نظر آتے رہیں گے کہ جیسے ابھی آپ خارج نہیں ہوئے ، جب تک آپ اپنے متصفح کا ابطن صاف نہ کردیں۔",
+       "logouttext": "<strong>اب آپ خارج ہوچکے ہیں۔</strong>\n\nیاد رکھیں! کچھ صفحات ایسے نظر آتے رہیں گے کہ جیسے ابھی آپ خارج نہیں ہوئے، جب تک آپ اپنے کیشے صاف نہیں کرتے۔",
        "welcomeuser": "خوش آمدید، $1!",
        "yourname": "اسمِ رکنیت",
        "userlogin-yourname": "صارف نام",
        "passwordtooshort": "آپکا منتخب کردہ پارلفظ مختصر ہے. پارلفظ کم از کم {{PLURAL:$1|1 محرف|$1 محارف}} ہونا چاہئے.",
        "password-name-match": "آپکا پارلفظ آپکے اسمِ صارف سے مختلف ہونا چاہئے.",
        "password-login-forbidden": "اس صارف نام یا کلمۂ شناخت (پاسورڈ) کا استعمال ممنوع ہے",
-       "mailmypassword": "Ù\86Û\8cا Ù¾Ø§Ø±Ù\84Ù\81ظ Ø¨Ø±Ù\82Û\8c Ú\88اک Ù\85Û\8cÚº Ø¨Ú¾Û\8cجÙ\88",
+       "mailmypassword": "پاسÙ\88رÚ\88 ØªØ¨Ø¯Û\8cÙ\84 Ú©Ø±Û\8cÚº",
        "passwordremindertitle": "نیا عارضی کلمۂ شناخت برائے {{SITENAME}}",
        "passwordremindertext": "(IP پتہ $1 سے) کسی (یا شاید آپ) نے {{SITENAME}} ($4)\nکیلئے نئی کلمۂ شناخت کیلئے التماس کیا. ایک عارضی کلمۂ شناخت \"$3\"\nبرائے صارف \"$2\" تخلیق کیا گیا ہے. اگر یہ آپ کا ارادہ تھا، تو آپ\nکو چاہئے کہ داخلِ نوشتہ ہونے کے بعد نئے کلمۂ شناخت کا انتخاب کریں.\nآپ کا کلمۂ شناخت {{PLURAL:$5|ایک دِن|$5 دِن}} کے بعد ناکارہ ہوجائے گا.\n\nاگر کسی اَور نے یہ التماس کیا ہے، یا آپ کو اپنا کلمۂ شناخت یاد آگیا ہے،\nاور آپ اسے تبدیل نہیں کرنا چاہتے، تو آپ یہ پیغام نظر انداز کرسکتے ہیں اور\nآپنا پُرانا کلمۂ شناخت کا استعمال جاری رکھ سکتے ہیں.",
        "noemail": "صارف \"$1\" کیلئے کوئی برقی پتہ درج نہیں کیا گیا.",
        "noemailcreate": "صحیح برقی پتہ مہیّا کریں",
        "passwordsent": "ایک نیا کلمۂ شناخت \"$1\" کے نام سے بننے والی برقی ڈاک کے پتے کیلیے بھیج دیا گیا ہے۔\nجب وہ موصول ہو جاۓ تو براہ کرم اسکے ذریعے دوبارہ داخل ہوں۔",
        "blocked-mailpassword": "آپ کا آئی.پی پتہ تدوین سے روک لیا گیا ہے، سو، ناجائز استعمال کو روکنے کیلئے، آپ کے آئی.پی پتہ کو کلمۂ شناخت کی بحالی کا فعل استعمال کرنے کی اِجازت نہیں ہے.",
-       "eauthentsent": "ایک تصدیقی برقی خط نامزد کئے گئے برقی پتہ پر ارسال کردیا گیا ہے.\nآپ کو موصول ہوئے برقی خط میں ہدایات پر عمل کرکے اس بات کی توثیق کرلیں کہ مذکورہ برقی پتہ آپ کا ہی ہے.",
-       "throttled-mailpassword": "گزشتہ {{PLURAL:$1|گھنٹے|$1 گھنٹوں}} کے دوران پہلے سے ہی پارلفظ کی ایک یادآوری بھیجی جاچکی ہے.\nناجائز استعمال کے سدّباب کیلئے، {{PLURAL:$1|گھنٹہ|$1 گھنٹوں}} کے دوران صرف ایک پارلفظی یادآواری بھیجی جاسکتی ہے.",
+       "eauthentsent": "ایک تصدیقی برقی خط نامزد کیے گئے برقی پتہ پر ارسال کردیا گیا ہے۔\nآپ کو موصول ہوئے برقی خط میں ہدایات پر عمل کرکے اس بات کی توثیق کرلیں کہ مذکورہ برقی پتہ آپ کا ہی ہے۔",
+       "throttled-mailpassword": "گزشتہ {{PLURAL:$1|گھنٹے|$1 گھنٹوں}} کے دوران پہلے سے ہی پارلفظ (پاسورڈ) کی تبدیلی کے لیے برقی خط بھیجا گيا ہے۔\nناجائز استعمال کے سدّباب کیلئے، {{PLURAL:$1|گھنٹہ|$1 گھنٹوں}} کے دوران صرف ایک برقی خط بھیجا جاسکتا ہے۔",
        "mailerror": "مسلہ دوران ترسیل خط:$1",
        "acct_creation_throttle_hit": "آپکی آئی.پی کے ذریعے اِس ویکی پر آنے والے صارفین نے پچھلے ایک دِن میں {{PLURAL:$1|1 کھاتہ بنایا ہے|$1 کھاتے بنائے ہیں}}، جو کہ مذکورہ وقت میں کافی ہیں.\nلہٰذا، آپکی آئی.پی استعمال کرنے والے صارفین اِس وقت مزید کھاتے نہیں بناسکتے.",
-       "emailauthenticated": "آپکے برقی ڈاک پتہ کی تصدیق تاریخ $2 بوقت $3 بجے کو ہوئی.",
-       "emailnotauthenticated": "آپ کے برقی پتہ کی ابھی تصدیق نہیں ہوئی ہے.\nدرج ذیل میں سے کسی بھی چیز کیلئے آپکے برقی پتہ پر برقی ڈاک ارسال نہیں کیا جائے گا.",
+       "emailauthenticated": "آپکے برقی ڈاک پتہ کی تصدیق تاریخ $2 بوقت $3 بجے کو ہوئی۔",
+       "emailnotauthenticated": "آپ کے برقی پتہ کی ابھی تصدیق نہیں ہوئی ہے۔\nدرج ذیل میں سے کسی بھی چیز کیلئے آپ کے برقی پتہ پر برقی ڈاک ارسال نہیں کی جائے گی۔",
        "noemailprefs": "اِن خصائص کو کام میں لانے کیلئے اپنے ترجیحات میں برقی ڈاک کا پتہ متعین کیجئے.",
        "emailconfirmlink": "اپنے برقی پتہ کی تصدیق کیجئے",
        "invalidemailaddress": "برقی پتہ قبول نہیں کیا جاسکتا کیونکہ یہ غلط شکل میں ہے.\nبراہِ کرم! ایک برقی پتہ صحیح شکل میں درج کیجئے یا جگہ کو خالی چھوڑ دیجئے.",
        "user-mail-no-addy": "برقی ڈاک بھیجنے کی کوشش بغیر برقی ڈاک پتہ",
        "user-mail-no-body": "خالی یا بہت ہی مختصر برقی خط بھیجنے کی کوشش",
        "changepassword": "کلمۂ شناخت تبدیل کریں",
-       "resetpass_announce": "آپ ایک برقی ارسال کردہ عارضی رمز کے ساتھ داخل ہوئے ہیں.\nداخلِ نوشتہ کے عمل کو مکمل کرنے کیلئے آپ کو یہاں نیا پارلفظ متعین کرنا ہوگا:",
+       "resetpass_announce": "آپ ایک برقی ارسال کردہ عارضی رمز (کوڈ) کے ساتھ داخل ہوئے ہیں۔\nداخلِ نوشتہ کے عمل کو مکمل کرنے کیلئے آپ کو یہاں نیا پارلفظ (پاسورڈ) متعین کرنا ہوگا۔",
        "resetpass_header": "کھاتہ کا پارلفظ تبدیل کریں",
        "oldpassword": "پرانا کلمۂ شناخت:",
        "newpassword": "نیا کلمۂ شناخت",
        "retypenew": "نیا کلمۂ شناخت دوبارہ درج کریں:",
        "resetpass_submit": "پارلفظ بناؤ اور داخل ہوجاؤ",
-       "changepassword-success": "آپ کا پارلفظ کامیابی سے تبدیل ہوگیا!\nاَب داخلِ نوشتہ کیا جارہا ہے...",
+       "changepassword-success": "آپ کا پارلفظ کامیابی سے تبدیل ہوگیا!",
        "resetpass_forbidden": "پارلفظ تبدیل نہیں ہوسکتا",
        "resetpass-no-info": "اِس صفحہ تک براہِ راست رسائی کیلئے آپ کو داخلِ نوشتہ ہونا پڑے گا.",
        "resetpass-submit-loggedin": "پارلفظ کی تبدیلی",
        "preview": "نمائش",
        "showpreview": "نمائش",
        "showdiff": "تبدیلیاں دکھاؤ",
-       "anoneditwarning": "آپ {{SITENAME}} میں داخل نہیں ہوۓ لہذا آپکا IP پتہ اس صفحہ کے تاریخچہ ء ترمیم میں محفوظ ہوجاۓ گا۔",
+       "anoneditwarning": "آپ {{SITENAME}} میں داخل نہیں ہوئے لہذا آپکا IP پتہ اس صفحہ کے تاریخچۂ  ترمیم میں محفوظ ہوجائے گا۔",
        "missingsummary": "'''انتباہ:''' آپ نے ترمیمی خلاصہ مہیّا نہیں کیا.\nاگر آپ نے محفوظ کا بٹن دوبارہ دبایا تو آپ کی ترمیم بغیر کسی خلاصہ کے محفوظ ہوجائے گی.",
        "missingcommenttext": "براہِ کرم! تبصرہ نیچے درج کیجئے.",
-       "missingcommentheader": "'''انتباہ:''' آپ نے اِس تبصرہ کیلئے عنوان یا شہ سرخی مہیّا نہیں کی.\nاگر آپ نے محفوظ کا بٹن دوبارہ دبایا تو آپ کا تبصرہ بغیر کسی عنوان کے محفوظ ہوجائے گا.",
+       "missingcommentheader": "<strong>انتباہ:</strong>  آپ نے اِس تبصرہ کیلئے عنوان یا شہ سرخی مہیّا نہیں کی۔\nاگر آپ نے محفوظ کا بٹن دوبارہ دبایا تو آپ کا تبصرہ بغیر کسی عنوان کے محفوظ ہوجائے گا۔",
        "summary-preview": "نمائش خلاصہ:",
        "subject-preview": "عنوان/شہ سرخی کا پیش منظر:",
        "blockedtitle": "صارف مسدود ہے",
        "mailnologintext": "دیگر ارکان کو برقی خط ارسال کرنے کیلیۓ لازم ہے کہ آپ [[Special:UserLogin|داخل شدہ]] حالت میں ہوں اور آپ کی [[Special:Preferences|ترجیحات]] ایک درست برقی خط کا پتا درج ہو۔",
        "emailuser": "صارف کو برقی خط لکھیں",
        "emailuser-title-notarget": "ای میل صارف",
-       "emailpage": "صارف کو برقی خط لکھیں",
        "defemailsubject": "{{SITENAME}} سے برقی خط",
        "noemailtext": "اس صارف نے برقی خط کے لیے پتہ فراہم نہیں کیا، یا یہ چاہتا ہے کا اس سے کوئی صارف رابطہ نہ کرے۔",
        "emailusername": "صارف نام:",
index ad3028e..e835306 100644 (file)
@@ -19,7 +19,7 @@
        "tog-hidepatrolled": "Yangi oʻzgarishlar roʻyxatida tekshirilgan tahrirlarni yashirish",
        "tog-newpageshidepatrolled": "Yangi sahifalar roʻyxatidan tekshirilgan sahifalarni yashirish",
        "tog-extendwatchlist": "Kengaytirilgan kuzatuv roʻyxati: faqat oxirgi paytdagi emas, barcha oʻzgarishlar koʻrsatiladi",
-       "tog-usenewrc": "Yangi oʻzgarishlar va kuzatuv roʻyxatidagi sahifalarni guruhlarga boʻlish (JavaScript orqali)",
+       "tog-usenewrc": "Yangi oʻzgarishlar va kuzatuv roʻyxatidagi sahifalarni guruhlarga boʻlish",
        "tog-numberheadings": "Sarlavhalarni avtomatik raqamlash",
        "tog-showtoolbar": "Tahrirlash asboblarini koʻrsatish",
        "tog-editondblclick": "Sichqonchaning chap tugmasini ikki marta bosib tahrirlashni boshlash",
@@ -38,7 +38,7 @@
        "tog-shownumberswatching": "Sahifani kuzatuv roʻyxatiga olgan foydalanuvchilar sonini koʻrsatish",
        "tog-oldsig": "Joriy imzo:",
        "tog-fancysig": "Imzoni viki-belgi qilib koʻrsatish (avtomatik ishoratsiz)",
-       "tog-uselivepreview": "Tez koʻrib chiqish (JavaScript orqali) (sinovda)",
+       "tog-uselivepreview": "Tez koʻrib chiqish",
        "tog-forceeditsummary": "Qisqa tavsif oynasi toʻldirilmagani haqida ogohlantirish koʻrsatish",
        "tog-watchlisthideown": "Oʻz tahrirlarim kuzatuv roʻyxatimda koʻrsatilmasin",
        "tog-watchlisthidebots": "Botlar qilgan tahrirlar kuzatuv roʻyxatimda koʻrsatilmasin",
        "passwordreset-domain": "Domen:",
        "passwordreset-capture": "Xatni koʻrmoqchimisiz?",
        "passwordreset-email": "Elektron pochta manzilingiz:",
-       "passwordreset-emailelement": "Foydalanuvchi ismi: $1\nVaqtinchalik maxfiy so'z: $2",
+       "passwordreset-emailelement": "Foydalanuvchi ismi: \n$1\n\nVaqtinchalik maxfiy so'z: \n$2",
        "changeemail": "Elektron pochta manzilini oʻzgartirish",
        "changeemail-oldemail": "Joriy elektron pochta manzili",
        "changeemail-newemail": "Elektron pochtaning yangi manzili",
        "emailuser": "Foydalanuvchiga maktub",
        "emailuser-title-target": "Ushbu {{GENDER:$1|foydalanuvchi}}ga maktub joʻnatish",
        "emailuser-title-notarget": "Foydalanuvchiga elektron maktub yozish",
-       "emailpage": "Foydalanuvchiga maktub",
        "defemailsubject": "{{SITENAME}} — $1 tomonidan maktub",
        "usermaildisabled": "Foydalanuvchi elektron pochtasi o‘chirilgan",
        "noemailtitle": "Elektron pochta manzili mavjud emas",
        "invert": "Tanlash tartibini almashtirish",
        "namespace_association": "Bogʻliq nomfazo",
        "blanknamespace": "(asosiy)",
-       "contributions": "{{GENDER:$1|Foydalanuvchi}} hissasi",
+       "contributions": "Hissasi",
        "contributions-title": "{{GENDER:$1|Foydalanuvchi}} $1 hissasi",
        "mycontris": "Hissam",
        "contribsub2": "$1 uchun ($2)",
        "sp-contributions-username": "IP-manzil yoki foydalanuvchi nomi:",
        "sp-contributions-toponly": "Faqat oxirgi deb hisoblangan tahrirlarni koʻrsat",
        "sp-contributions-submit": "Qidirish",
-       "whatlinkshere": "Bu sahifaga bog'langan sahifalar",
+       "whatlinkshere": "Bogʻliq sahifalar",
        "whatlinkshere-title": "\"$1\"ga bogʻlangan sahifalar",
        "whatlinkshere-page": "Sahifa:",
        "linkshere": "Quyidagi sahifalar '''[[:$1]]''' sahifasiga bogʻlangan:",
        "tooltip-t-recentchangeslinked": "Bu sahifaga bogʻlangan sahifalardagi yangi oʻzgarishlar",
        "tooltip-feed-rss": "Bu sahifa uchun RSS ta'minot",
        "tooltip-feed-atom": "Bu sahifa uchun Atom ta'minot",
-       "tooltip-t-contributions": "Bu foydalanuvchinig qoʻshgan hissasini koʻrish",
+       "tooltip-t-contributions": "Ushbu foydalanuvchi qoʻshgan hissasini koʻrish",
        "tooltip-t-emailuser": "Ushbu foydalanuvchiga xat jo‘natish",
        "tooltip-t-upload": "Rasmlar yoki media fayllar yuklash",
        "tooltip-t-specialpages": "Maxsus sahifalar ro‘yxati",
index 39554c2..482b472 100644 (file)
@@ -45,7 +45,7 @@
        "tog-shownumberswatching": "Mostra el numaro de utenti che i ga ła pajina en oservasion",
        "tog-oldsig": "Anteprima de ła firma:",
        "tog-fancysig": "Interpreta i comandi wiki in te la firma (sensa colegamento automatego)",
-       "tog-uselivepreview": "Ativa ƚa funsion \"Live preview\" (sperimentaƚe)",
+       "tog-uselivepreview": "Intaca l'anteprima dal vivo",
        "tog-forceeditsummary": "Chiedi conferma se l'ozeto de ła modifega el xé vodo",
        "tog-watchlisthideown": "Scondi łe me modifeghe ne i oservai spesałi",
        "tog-watchlisthidebots": "Scondi łe modifeghe de i bot ne i oservai spesałi",
        "disclaimers": "Avertense",
        "disclaimerpage": "Project:Avertense xenerali",
        "edithelp": "Guida",
+       "helppage-top-gethelp": "Ajuto",
        "mainpage": "Pajina prinsipałe",
        "mainpage-description": "Pajina prinsipałe",
        "policy-url": "Project:Policy",
        "hidetoc": "scondi",
        "collapsible-collapse": "Conprimi",
        "collapsible-expand": "Espandi",
+       "confirmable-confirm": "Sito {{GENDER:$1|seguro|segura}}?",
+       "confirmable-yes": "Sì",
+       "confirmable-no": "No",
        "thisisdeleted": "Varda o ripristina $1?",
        "viewdeleted": "Varda $1?",
        "restorelink": "{{PLURAL:$1|un canbiamento scanselà|$1 canbiamenti scanselà}}",
        "gotaccountlink": "Entra",
        "userlogin-resetlink": "Desmentegà i to dati d'aceso?",
        "userlogin-resetpassword-link": "Te gheto desmentegà ła paroła d'ordine?",
+       "userlogin-helplink2": "Ajuto par 'ndar drento",
        "createacct-emailrequired": "Indirisso e-mail",
        "createacct-emailoptional": "Indiriso e-mail (opsionałe)",
        "createacct-email-ph": "Inserissi el to indirizo de e-mail",
        "passwordreset-emailtitle": "Detaji de l'account so {{SITENAME}}",
        "passwordreset-emailtext-ip": "Cualcheduni (probabilmente ti, co indiriso IP $1) ga richiesto l'invio de na nova password par l'aceso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente asocià|I utenti asociadi}} a sto indiriso de posta ełetronega łi xe:\n\n$2\n\n{{PLURAL:$3|Sta password tenporanea ła scadarà|Ste password tenporanee łe scadarà}} dopo {{PLURAL:$5|un dì|$5 dì}}.\n\nSarìa mejo acedare e deçidare na nova password sùito. Se no te si stà ti a fare ła richiesta, o se te te ghe ricordà ła password originałe e no te vołi pi canbiarla, te połi ignorare sto mesajo e continuar doparare ła to password vecia.",
        "passwordreset-emailtext-user": "El utente $1 da {{SITENAME}} (probabilmente ti steso) ga richiesto l'invio de na password nova par {{SITENAME}} ($4). {{PLURAL:$3|El profiło utente asocià|I profiłi utenti asociadi}} a sto indiriso de posta ełetronega łi xe:\n\n$2\n\n{{PLURAL:$3|Sta password tenporanea ła scadarà|Ste password tenporanee łe scadarà}} dopo {{PLURAL:$5|un dì|$5 dì}}.\n\nSarìa mejo acedare e deçidare na nova password sùito. Se no te si stà ti a fare ła richiesta, o se te te ghe ricordà ła password originałe e no te vołi pi canbiarla, te połi ignorare sto mesajo e continuar doparare ła to password vecia.",
-       "passwordreset-emailelement": "Nome utente: $1\nPassword tenporanea: $2",
+       "passwordreset-emailelement": "Nome utente: \n$1\n\nPassword tenporanea: \n$2",
        "passwordreset-emailsent": "Xe stà invià na mail de reset password.",
        "passwordreset-emailsent-capture": "Xe stà invià na mail de reset password: el contegù xe riportà cuà de seguito.",
        "passwordreset-emailerror-capture": "Xe stà generà na mail de reset password, riportà cuà de seguito. L'invio a {{GENDER:$2|l'utente}} no xe riusido: $1",
        "preview": "Anteprima",
        "showpreview": "Varda anteprima",
        "showdiff": "Mostra canbiamenti",
-       "anoneditwarning": "'''Ocio:''' Nò te sì entrà co' un nome utente.\nIn te ła storia de ła pajina restarà el to indiriso IP.",
+       "anoneditwarning": "<strong>Ocio:</strong> Nò te sì entrà co' un nome utente.\nSe te fè calche canbiamento, el to indiriso IP el sarà visibile a tuti.\nSe te <strong>[$1 entri col to nome utente]</strong> o te te <strong>[$2 crei un utente]</strong>, i to contributi i vegnarà assegnà al nome utente che te te sì messo, oltre ad altri vantaji.",
        "anonpreviewwarning": "\"No te ghe eseguio el login. Salvando el to indiriso IP sarà rejistrà ne ła cronołosia de sta voxe.\"",
        "missingsummary": "'''Ocio:''' No te ghè indicà l'ogeto de la modifica. Macando de novo 'Salva la pagina' la modifica la vegnerà con l'ogeto vodo.",
        "missingcommenttext": "Inserissi un comento qua soto.",
        "shown-title": "Fà védar {{PLURAL:$1|un risultato|$1 risultati}} par pagina",
        "viewprevnext": "Varda ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "Su sto sito ghe xe na pagina che se ciama \"[[:$1]]\"",
-       "searchmenu-new": "'''Crèa la pagina \"[[:$1]]\" su sta wiki!'''",
+       "searchmenu-new": "<strong>Crèa la pagina \"[[:$1]]\" su sta wiki!</strong> Varda anca {{PLURAL:$2|0=|la pagina|le pagine}} catà co la riserca.",
        "searchprofile-articles": "Pagine de contenuti",
        "searchprofile-images": "File",
        "searchprofile-everything": "Tuto quanto",
        "search-result-category-size": "{{PLURAL:$1|1 utente|$1 utenti}} ({{PLURAL:$2|1 sotocategoria|$2 sotocategorie}}, {{PLURAL:$3|1 file|$3 file}})",
        "search-redirect": "(redirect $1)",
        "search-section": "(sesion $1)",
+       "search-category": "(categoria $1)",
        "search-suggest": "Sercavito forsi: $1",
        "search-interwiki-caption": "Projeti fradei",
        "search-interwiki-default": "Risultati da $1:",
        "prefs-timeoffset": "Ore de difarensa",
        "prefs-advancedediting": "Preferense avansade",
        "prefs-editor": "Contributor",
+       "prefs-preview": "Anteprima",
        "prefs-advancedrc": "Preferense avansade",
        "prefs-advancedrendering": "Preferense avansade",
        "prefs-advancedsearchoptions": "Preferense avansade",
        "prefs-advancedwatchlist": "Preferense avansade",
        "prefs-displayrc": "Preferense de visualixassion",
        "prefs-displaywatchlist": "Opzioni de visualixassion",
+       "prefs-tokenwatchlist": "Geton",
        "prefs-diffs": "Difarense",
        "email-address-validity-valid": "L'indiriso de posta eletronega pararìa vałido",
        "email-address-validity-invalid": "Inserisi un indiriso de posta eletronega vałido",
        "rcshowhidebots-show": "Mostra",
        "rcshowhidebots-hide": "Scondi",
        "rcshowhideliu": "$1 i utenti registrài",
+       "rcshowhideliu-show": "Mostra",
        "rcshowhideliu-hide": "Scondi",
        "rcshowhideanons": "$1 i utenti anonimi",
        "rcshowhideanons-show": "Mostra",
        "rcshowhideanons-hide": "Scondi",
        "rcshowhidepatr": "$1 łe modifeghe controłae",
+       "rcshowhidepatr-show": "Mostra",
+       "rcshowhidepatr-hide": "Scondi",
        "rcshowhidemine": "$1 i me canbiamenti",
        "rcshowhidemine-show": "Mostra",
        "rcshowhidemine-hide": "Scondi",
        "upload-too-many-redirects": "In te l'URL ghe jera massa rimandi",
        "upload-http-error": "Se gà verificà un eròr HTTP: $1",
        "upload-copy-upload-invalid-domain": "No xe consentìo cargare copie da sto dominio.",
+       "upload-dialog-title": "Carga un file",
+       "upload-dialog-button-cancel": "Łasa star",
+       "upload-dialog-button-done": "Fato",
+       "upload-dialog-button-save": "Salva",
+       "upload-dialog-button-upload": "Carga",
+       "upload-dialog-label-select-file": "Siegli el file",
+       "upload-dialog-label-infoform-name": "Nome",
+       "upload-dialog-label-infoform-description": "Descrision",
+       "upload-dialog-label-usage-title": "Uso",
+       "upload-dialog-label-usage-filename": "Nome del file",
        "backend-fail-stream": "Inposibiłe traxmetare el file $1.",
        "backend-fail-backup": "Inposibiłe fare el backup del file $1.",
        "backend-fail-notexists": "El file $1 no existe.",
        "license-nopreview": "(Anteprima mìa disponibile)",
        "upload_source_url": " (na URL coreta e acessibile)",
        "upload_source_file": " (un file sul to computer)",
+       "listfiles-delete": "scancela",
        "listfiles-summary": "Sta pajina speciałe ła fa vedare tuti i file caricadi.\nSe l'utente modifega l'ordenamento, vien mostradi soło i file caricadi pi de recente da l'utente.",
        "listfiles_search_for": "Serca file par nome:",
        "imgfile": "file",
        "randomincategory": "Pagina a ocio in te na categoria",
        "randomincategory-invalidcategory": "\"$1\" no'l và mia ben come nome de categoria.",
        "randomincategory-nopages": "No ghe xe mia pagine in [[:Category:$1]].",
+       "randomincategory-category": "Categoria:",
+       "randomincategory-submit": "Và",
        "randomredirect": "Un redirect a caso",
        "randomredirect-nopages": "No ghe xe nissun rimando in tel namespace \"$1\".",
        "statistics": "Statisteghe",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki}}",
        "nlinks": "$1 {{PLURAL:$1|colegamento|colegamenti}}",
        "nmembers": "$1 {{PLURAL:$1|elemento|elementi}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|elemento|elementi}}",
        "nrevisions": "$1 {{PLURAL:$1|revision}}",
        "nimagelinks": "Doparà su $1 {{PLURAL:$1|pagina|pagine}}",
        "ntransclusions": "doparà su $1 {{PLURAL:$1|pagina|pagine}}",
        "protectedpages-cascade": "Solo protezion ricorsive",
        "protectedpages-noredirect": "Scondi rimandi",
        "protectedpagesempty": "Al momento no ghe xe pagine protete",
+       "protectedpages-timestamp": "Data e ora",
+       "protectedpages-page": "Pàjina",
+       "protectedpages-expiry": "Scade",
+       "protectedpages-reason": "Motivo",
+       "protectedpages-unknown-timestamp": "Sconossùa",
+       "protectedpages-unknown-performer": "Utente sconossùo",
        "protectedtitles": "Titoli proteti",
        "protectedtitlesempty": "Al momento no ghe xe titoli proteti coi parametri specificà.",
        "listusers": "Elenco dei utenti",
        "pager-older-n": "{{PLURAL:$1|quel pi vecio|i $1 pi vèci}}",
        "suppress": "Supervision",
        "querypage-disabled": "Sta pàjina speciałe ła xe dixativà par motivi de prestasion.",
+       "apihelp-no-such-module": "Modulo \"$1\" mia catà.",
        "booksources": "Fonti librarie",
        "booksources-search-legend": "Riserca de fonti librarie",
        "booksources-search": "Serca",
        "listgrouprights-removegroup-self": "Pol cavarse da {{PLURAL:$2|un grupo|dei grupi}}: $1",
        "listgrouprights-addgroup-self-all": "Pol xontarse a tuti i grupi",
        "listgrouprights-removegroup-self-all": "Pol cavarse da tuti i grupi",
+       "listgrouprights-namespaceprotection-namespace": "Namespace",
+       "trackingcategories-name": "Nome del messajo",
        "mailnologin": "Nissun indirizo a cui mandarghe el messagio",
        "mailnologintext": "Par inviare messagi e-mail ad altri utenti bisogna [[Special:UserLogin|acedere al sito]] e aver registrà un indirisso vałido ne łe proprie [[Special:Preferences|preferense]].",
        "emailuser": "Scrìveghe a sto utente",
        "rollback-success": "Anułàe łe modifighe de $1; riportà a ła version de prima de $2.",
        "sessionfailure-title": "Eròr de session",
        "sessionfailure": "Se gà verificà un problema ne la session che identifica l'acesso; el sistema, par precauzion, no'l gà mìa eseguìo el comando che te ghè dato. Torna a la pagina precedente col boton 'Indrìo' del to browser, ricarica la pagina e ripróa da novo.",
+       "changecontentmodel-title-label": "Tìtoło de ła pàjina",
+       "changecontentmodel-reason-label": "Motivo:",
        "protectlogpage": "Protesion",
        "protectlogtext": "De seguito xe elencade łe modifeghe ałe protesion dełe pajine.\nVedi ła [[Special:ProtectedPages|lista dełe pajine protete]] pa l'elenco de łe protesion de pajina atualmente ative.",
        "protectedarticle": "ga proteto \"[[$1]]\"",
        "allmessages-prefix": "Filtra par prefisso:",
        "allmessages-language": "Lengua:",
        "allmessages-filter-submit": "Và",
+       "allmessages-filter-translate": "Tradusi",
        "thumbnail-more": "Ingrandissi",
        "filemissing": "File mancante",
        "thumbnail_error": "Eror ne la creazion de la miniatura: $1",
        "tooltip-pt-mycontris": "Elenco de i to contributi",
        "tooltip-pt-login": "Te consiliemo de registrarte, ma no te ghè da farlo par forsa.",
        "tooltip-pt-logout": "Và fora",
+       "tooltip-pt-createaccount": "Te incorajemo de farte un utente e 'ndar drento co quelo; comunque no te toca farlo pa' forsa.",
        "tooltip-ca-talk": "Discussion sul contenuto de sta pagina",
        "tooltip-ca-edit": "Modifega sta pagina",
        "tooltip-ca-addsection": "Scumisia na nova sesion",
        "pageinfo-article-id": "ID de la pagina",
        "pageinfo-language": "Lengua del contenuto de la pagina",
        "pageinfo-robot-policy": "Stato par i motori de riserca",
-       "pageinfo-robot-index": "Indicizabile",
-       "pageinfo-robot-noindex": "Mia indicizabile",
+       "pageinfo-robot-index": "Parmesso",
+       "pageinfo-robot-noindex": "Vietà",
        "pageinfo-watchers": "Nùmaro de utenti che tien d'ocio sta pagina",
        "pageinfo-few-watchers": "Manco de $1 {{PLURAL:$1|oservador|oservadori}}",
        "pageinfo-redirects-name": "Rimandi verso sta pagina",
        "confirm-watch-top": "Xonto sta pàjina a ła to lista de łe tegnùe d'ocio?",
        "confirm-unwatch-button": "Va ben",
        "confirm-unwatch-top": "Cavo sta pàjina da ła to lista de łe tegnùe d'ocio?",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← la pagina prima",
        "imgmultipagenext": "la pagina dopo →",
        "imgmultigo": "Và",
        "imgmultigoto": "Và a la pagina $1",
        "img-lang-default": "(lengua predefinìa)",
+       "img-lang-go": "Và",
        "ascending_abbrev": "cresc",
        "descending_abbrev": "decresc",
        "table_pager_next": "Pagina sucessiva",
        "watchlistedit-raw-done": "La lista dei osservati speciali la xe stà agiornà.",
        "watchlistedit-raw-added": "Xe stà zontà {{PLURAL:$1|una pagina|$1 pagine}}:",
        "watchlistedit-raw-removed": "Xe stà eliminà {{PLURAL:$1|una pagina|$1 pagine}}:",
+       "watchlistedit-clear-titles": "Pagine:",
        "watchlisttools-view": "Varda i canbiamenti",
        "watchlisttools-edit": "Varda e canbia le pagine tegnùe d'ocio",
        "watchlisttools-raw": "Canbia la lista in formato testo",
        "version-hook-name": "Nome de l'hook",
        "version-hook-subscribedby": "Sotoscrizioni",
        "version-version": "($1)",
+       "version-no-ext-name": "[nissun nome]",
        "version-license": "Licensa MediaWiki",
        "version-ext-license": "Licensa",
        "version-ext-colheader-name": "Estension",
        "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Licensa",
        "version-ext-colheader-description": "Descrission",
+       "version-ext-colheader-credits": "Autori",
        "version-license-title": "Licensa par $1",
        "version-poweredby-credits": "Sta wiki la va con '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "altri",
        "version-entrypoints": "URL de aceso",
        "version-entrypoints-header-entrypoint": "Punti de aceso",
        "version-entrypoints-header-url": "URL",
-       "redirect": "Rimando par file, utente, o ID de revision.",
+       "version-libraries": "Librarie instalà",
+       "version-libraries-library": "Libraria",
+       "version-libraries-version": "Version",
+       "version-libraries-license": "Licensa",
+       "version-libraries-description": "Descrision",
+       "version-libraries-authors": "Autori",
+       "redirect": "Rimando par file, utente, pagina o ID de version.",
        "redirect-legend": "Rimandar a un file o na pagina",
        "redirect-summary": "Sta pagina speciale la rimanda a un file (dato el nome del file), a na pagina (dato l'ID de la revision), o a na pagina utente (dato l'ID de l'utente).",
        "redirect-submit": "Và",
        "fileduplicatesearch-result-n": "Ghe xe {{PLURAL:$2|un duplicato conpagno|$2 duplicati conpagni}} al file \"$1\".",
        "fileduplicatesearch-noresults": "Nisun file de nome \"$1\" trovà.",
        "specialpages": "Pagine speciali",
+       "specialpages-note-top": "Legenda",
        "specialpages-note": "* Pàjine speciałi normałi.\n* <span class=\"mw-specialpagerestricted\">Pàjine speciałi a aceso limità.</span>",
        "specialpages-group-maintenance": "Resoconti de manutenzion",
        "specialpages-group-other": "Altre pagine speciali",
        "tags-tag": "Nome del tag",
        "tags-display-header": "Aspetto ne la lista de le modifiche",
        "tags-description-header": "Descrission conpleta del significado",
+       "tags-source-header": "Fonte",
        "tags-active-header": "Ativo?",
        "tags-hitcount-header": "Modifiche che gà dei tag",
+       "tags-actions-header": "Asion",
+       "tags-active-yes": "Sì",
+       "tags-active-no": "No",
        "tags-edit": "modìfega",
+       "tags-delete": "scancela",
+       "tags-activate": "intaca",
+       "tags-deactivate": "destaca",
        "tags-hitcount": "$1 {{PLURAL:$1|modìfega|modìfeghe}}",
+       "tags-create-reason": "Motivo:",
+       "tags-create-submit": "Crea",
+       "tags-delete-reason": "Motivo:",
+       "tags-activate-reason": "Motivo:",
+       "tags-activate-submit": "Intaca",
+       "tags-deactivate-reason": "Motivo:",
+       "tags-edit-existing-tags-none": "''Nissuna''",
+       "tags-edit-new-tags": "Etichete nove:",
+       "tags-edit-add": "Zonta ste etichete:",
+       "tags-edit-remove": "Cava ste etichete:",
+       "tags-edit-remove-all-tags": "(cava tute le etichete)",
+       "tags-edit-reason": "Motivo:",
        "comparepages": "Confronta le pagine",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
        "rightsnone": "(nissun)",
        "revdelete-summary": "modifica ogeto",
        "feedback-adding": "Inserimento del feedback inte ła pàjina...",
+       "feedback-back": "Indrìo",
        "feedback-bugcheck": "Otimo! Verifega che nó 'l sia xà infrà i [$1 bug conosui].",
        "feedback-bugnew": "Controło efetuà. Segnała un novo bug",
        "feedback-bugornote": "Se se xe in grado de descrivare el problema tenico riscontrà in maniera precixa, [$1 segnałare el bug]. In alternadiva, se pol doparar el moduło senplifegà cuà soto. El comento inserio el sarà xontà a ła pàjina \"[$3 $2]\", insieme al propio nome utente.",
        "feedback-cancel": "Anuła",
        "feedback-close": "Fato",
+       "feedback-error-title": "Eròr",
        "feedback-error1": "Eror: Da ła API xe rivà un rexultà nó riconosùo",
        "feedback-error2": "Eror: Nó xe sta posibiłe exeguir ła modifega",
        "feedback-error3": "Errore: Nisuna risposta da ła API",
        "feedback-subject": "Ogeto:",
        "feedback-submit": "Manda",
        "feedback-thanks": "Grasie! El to feedback el xe sta publicà a ła pàjina \"[$2 $1]\".",
+       "feedback-thanks-title": "Grassie!",
        "searchsuggest-search": "Serca",
        "searchsuggest-containing": "che contien...",
        "api-error-badaccess-groups": "Nó te si autorixà a cargar documenti so sta wiki.",
        "duration-centuries": "$1 {{PLURAL:$1|secolo|secoli}}",
        "duration-millennia": "$1 {{PLURAL:$1|milenio|mileni}}",
        "rotate-comment": "Imagine girà de $1 {{PLURAL:$1|grado|gradi}} in senso orario",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|secondo|secondi}}",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$1|byte}}",
        "expandtemplates": "Espansion dei template",
        "expand_templates_intro": "Sta pagina speciale la elabora un testo espandendo tuti i template presenti. La calcola inoltre el risultato de le funzion suportàe dal parser come <nowiki>{{</nowiki>#language:...}} e de le variabili de sistema quali <nowiki>{{</nowiki>CURRENTDAY}}, overo in pratica tuto quel che se cata tra dopie parentesi grafe. La funsiona riciamando le oportune funzion del parser de MediaWiki.",
        "expand_templates_title": "Contesto (par {{FULLPAGENAME}} ecc.):",
        "expand_templates_remove_nowiki": "Cava i tag <nowiki> dal risultato",
        "expand_templates_generate_xml": "Mostra àlbaro sintàtico XML",
        "expand_templates_preview": "Anteprima",
+       "pagelang-name": "Pàjina",
+       "pagelang-language": "Lengua",
+       "mediastatistics-header-unknown": "Sconossùo",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-executable": "File eseguibili",
        "special-characters-group-latin": "Latìn",
        "special-characters-group-latinextended": "Latìn estexo",
        "special-characters-group-ipa": "IPA",
        "special-characters-title-emdash": "lineeta eme",
        "special-characters-title-minus": "segno meno",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-GG",
-       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
+       "mw-widgets-titleinput-description-redirect": "rimando a $1"
 }
index bc4dbc5..687433a 100644 (file)
        "resetpass-wrong-oldpass": "Vär pordaigaine vai nügüdläine peitsana.\nVoib olda, tö olet jo toižetanuded peitsanan vai pakinuded uden peitsanan.",
        "resetpass-temp-password": "Pordaigaline peitsana:",
        "passwordreset": "Peitsanan alustuz",
-       "passwordreset-legend": "Peitsanan alustuz",
        "passwordreset-username": "Kävutajan nimi:",
        "passwordreset-domain": "Domen",
        "passwordreset-capture": "Ozutada-k loptud kirjeine?",
        "passwordreset-email": "E-počtan adres:",
-       "passwordreset-emailelement": "Kävutajannimi: $1\nAigaline peitsana: $2",
+       "passwordreset-emailelement": "Kävutajannimi: \n$1\n\nAigaline peitsana: \n$2",
        "passwordreset-emailsent": "Muštatai kirjeine uden peitsananke oigetihe e-počtadme.",
        "changeemail": "Toižetada e-počtan adres",
        "changeemail-no-info": "Miše kirjutada necil lehtpolel, teile pidab kirjutadas sistemha.",
        "nlinks": "$1 {{PLURAL:$1|kosketuz|kosketust}}",
        "nmembers": "$1 {{PLURAL:$1|ühtnii|ühtnijad}}",
        "nrevisions": "$1 {{PLURAL:$1|versii|versijad}}",
-       "nviews": "$1 {{PLURAL:$1|kacund|kacundad}}",
        "specialpage-empty": "Ecind ei ole andnu rezul'tatad.",
        "lonelypages": "Üksjäižed lehtpoled",
        "lonelypagestext": "Ozutadud lehtpolid ei kosketagoi toižed necen saitan lehtpoled; ozutadud lehtpoled mugažo ei olgoi mülütadud toižihe lehtpolihe.",
        "listgrouprights-removegroup-self-all": "Sab heitta poiš kaik gruppad ičeze sistemkirjutandaspäi",
        "mailnologin": "Ei ole adresan oigendamižen täht",
        "emailuser": "Oigeta e-kirjeine necile kävutajale",
-       "emailpage": "Kirjeine kävutajale",
        "defemailsubject": "$1-kävutajan počt {{SITENAME}}-saitalpäi",
        "usermaildisabled": "Kävutajan e-počt ei ole kävutamižes",
        "noemailtitle": "Ei ole e-počtan adresad",
index 471fda9..bbe7617 100644 (file)
        "passwordreset-emailtitle": "Thông tin tài khoản tại {{SITENAME}}",
        "passwordreset-emailtext-ip": "Ai đó (có thể là bạn, từ địa chỉ IP $1) đã yêu cầu tái tạo mật khẩu của bạn \ntại {{SITENAME}} ($4). {{PLURAL:$3|Tài khoản|Các tài khoản}} dưới đây gắn liền \nvới địa chỉ thư điện tử này:\n\n$2\n\n{{PLURAL:$3|Mật khẩu|Các mật khẩu}} tạm này sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}. Bạn nên đăng nhập\nngay bây giờ để chọn mật khẩu mới. Nếu bạn không phải là người yêu cầu\nhoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn\nmuốn thay đổi nó, xin vui lòng bỏ qua thông điệp này và tiếp tục sử dụng\nmật khẩu cũ.",
        "passwordreset-emailtext-user": "Thành viên $1 tại {{SITENAME}} đã yêu cầu tái tạo mật khẩu tại {{SITENAME}} \n($4). {{PLURAL:$3|Tài khoản|Các tài khoản}} dưới đây gắn liền với địa chỉ thư điện tử này:\n\n$2\n\n{{PLURAL:$3|Mật khẩu|Các mật khẩu}} tạm này sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}. Bạn nên đăng nhập\nngay bây giờ để chọn mật khẩu mới. Nếu bạn không phải là người yêu cầu hoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn\nmuốn thay đổi nó, xin vui lòng bỏ qua thông điệp này và tiếp tục sử dụng\nmật khẩu cũ.",
-       "passwordreset-emailelement": "Tên người dùng: $1\nMật khẩu tạm: $2",
+       "passwordreset-emailelement": "Tên người dùng: \n$1\n\nMật khẩu tạm: \n$2",
        "passwordreset-emailsent": "Đã gửi thư điện tử để tái tạo mật khẩu.",
        "passwordreset-emailsent-capture": "Thư điện tử để tái tạo mật khẩu đã được gửi, nội dung như sau.",
        "passwordreset-emailerror-capture": "Chúng tôi đã tạo thư tái tạo mật khẩu dưới đây, nhưng không thể gửi đến {{GENDER:$2}}người dùng: $1",
        "rows": "Số hàng:",
        "columns": "Số cột:",
        "searchresultshead": "Tìm kiếm",
-       "stub-threshold": "Định dạng <a href=\"#\" class=\"stub\">liên kết đến sơ khai</a> cho các trang ngắn hơn (byte):",
+       "stub-threshold": "Định dạng liên kết đến sơ khai ($1) cho các trang ngắn hơn:",
+       "stub-threshold-sample-link": "ví dụ",
        "stub-threshold-disabled": "Tắt",
        "recentchangesdays": "Số ngày hiển thị trong thay đổi gần đây:",
        "recentchangesdays-max": "(tối đa $1 {{PLURAL:$1|ngày|ngày}})",
        "booksources-text": "Dưới đây là danh sách những trang bán sách mới và cũ, đồng thời có thể có thêm thông tin về những cuốn sách bạn đang tìm:",
        "booksources-invalid-isbn": "ISBN mà bạn cung cấp dường như không đúng; xin hãy kiểm tra lại xem có lỗi gì khi sao chép từ nội dung gốc hay không.",
        "specialloguserlabel": "Người thực hiện:",
-       "speciallogtitlelabel": "Mục tiêu (tiêu đề hoặc người dùng):",
+       "speciallogtitlelabel": "Mục tiêu (tiêu đề hoặc {{ns:user}}:Tên-người-dùng đối với người dùng):",
        "log": "Nhật trình",
        "all-logs-page": "Tất cả các nhật trình công khai",
        "alllogstext": "Hiển thị tất cả các nhật trình đang có của {{SITENAME}} chung với nhau.\nBạn có thể thu hẹp kết quả bằng cách chọn loại nhật trình, tên thành viên (phân biệt chữ hoa-chữ thường), hoặc các trang bị ảnh hưởng (cũng phân biệt chữ hoa-chữ thường).",
        "autoredircomment": "Đổi hướng đến [[$1]]",
        "autosumm-new": "Tạo trang mới với nội dung “$1”",
        "autosumm-newblank": "Đã tạo trang trống",
+       "size-bytes": "$1 byte",
        "size-kilobytes": "$1 kB",
+       "size-pixel": "$1 điểm ảnh",
        "size-kilopixel": "$1 kP",
        "bitrate-bits": "$1 bit/s",
        "bitrate-kilobits": "$1 kbit/s",
index 66ac477..7097a43 100644 (file)
@@ -8,7 +8,8 @@
                        "Wiki indio",
                        "לערי ריינהארט",
                        "Kolega2357",
-                       "아라"
+                       "아라",
+                       "MarcoAurelio"
                ]
        },
        "tog-underline": "Bagisa ha ilarom an mga sumpay:",
        "passwordreset-email": "E-mail adres:",
        "passwordreset-emailtitle": "Mga detalye han akawnt ha {{SITENAME}}",
        "passwordreset-emailtext-ip": "Mayda gumaramit (bangin hi ikaw, tikang han IP adres nga $1) nga naghangyo hin reset han imo tigaman-pansulod han {{SITENAME}} ($4). An nasunod nga gumaramit {{PLURAL:$3|nga akawnt|nga mga akawnt}} nahanungod hini nga email nga adres: \n\n$2\n\n{{PLURAL:$3|Iní nga temporaryo nga tigaman-pansulod|Iní nga mga temporaryo nga tigaman-pansulod}} ma-waray bali hin {{PLURAL:$5|usa ka adlaw|$5 nga mga adlaw}}.\nAngay ka sumakob ngan pumílì hin bag-o nga tigaman-pansulod ha yanâ.  Kun mayda lain nga naghatag hini nga hangyo, o kun nahinumdoman mo an imo orihinal nga tigaman-pansulod, ngan nadírì ka na pagbalyo hiní, puyde mo pasagdan ini nga sumat ngan magpadayon hin paggamit han imo daan nga tigaman-pansulod.",
-       "passwordreset-emailelement": "Agnay han gumaramit: $1\nTemporaryo nga tigaman han pagsakob: $2",
+       "passwordreset-emailelement": "Agnay han gumaramit: \n$1\n\nTemporaryo nga tigaman han pagsakob: \n$2",
        "passwordreset-emailsent": "Ginpadangat an password reset email.",
        "passwordreset-emailsent-capture": "Ginpadangat an password reset email, nga ginpakita ha ubos.",
        "passwordreset-emailerror-capture": "Ginhimo an password reset email, kun diin nakikita ha ubos, pero pakyas an pagpadara ha  {{GENDER:$2|gumaramit}}: $1",
        "prefs-reset-intro": "Puydi nimo ini gamiton nga pakli para makareset han imo mga preperensya nga ginbutang nga daan han sityo. Diri ini puydi mapawaray-buhat.",
        "prefs-emailconfirm-label": "Kompirmasyon han email:",
        "youremail": "E-mail:",
-       "username": "{{HENERO:$1|Agnay hit gumaramit}}:",
+       "username": "{{GENDER:$1|Agnay hit gumaramit}}:",
        "prefs-memberingroups": "{{GENDER:$2|Api}} han {{PLURAL:$1|grupo|mga grupo}}:",
        "prefs-registration": "Oras han pagrehistro:",
        "yourrealname": "Tinuod nga ngaran:",
        "filehist-deleteall": "Paraa ngatanan",
        "filehist-deleteone": "paraa",
        "filehist-revert": "igbalik",
-       "filehist-current": "yana",
+       "filehist-current": "pagkayana",
        "filehist-datetime": "Pitsa/Oras",
        "filehist-thumb": "Thumbnail",
        "filehist-thumbtext": "Bersyon han thumbnail han $1",
        "contributions-title": "Mga amot han gumaramit para ha $1",
        "mycontris": "Mga ámot nakon",
        "contribsub2": "Para {{HENERO:$3|$1}} ($2)",
-       "uctop": "(yana)",
+       "uctop": "(pagkayana)",
        "month": "Tikang ha bulan (ngan uruunhan):",
        "year": "Tikang ha tuig (ngan uruunhan):",
        "sp-contributions-newbies": "Igpakita an mga amot hin mga bag-o nga akawnt la",
        "pageinfo-category-subcats": "Ihap han mga ubos-kaarangay",
        "pageinfo-category-files": "Ihap han mga paypay",
        "markaspatrolleddiff": "Igmarka komo ginpatrolya na",
-       "markaspatrolledtext": "Markaha ini nga pakli komo ginpatrolya na",
+       "markaspatrolledtext": "Markaha ini nga pakli nga napatrolyahan na",
        "markedaspatrolled": "Igmarka komo ginpatrolya na",
        "markedaspatrollederror": "Diri nakakamarka komo ginpatrolya na",
        "patrol-log-page": "Talaan han pagpatrolya",
index 48db359..ed6581e 100644 (file)
        "cancel": "Neenal",
        "moredotdotdot": "Ak yeneen...",
        "mypage": "Samaw xët",
-       "mytalk": "Xëtu waxtaanuwaay",
+       "mytalk": "Waxtaan",
        "anontalk": "Waxtaan ak bii IP",
        "navigation": "Joowiin",
        "and": "&#32;ak",
        "actions": "Jëf",
        "namespaces": "Barabu tur",
        "variants": "Wuute",
+       "navigation-heading": "Njëlul joowiin",
        "errorpagetitle": "Njuumte",
        "returnto": "Dellu ci wii xët $1.",
        "tagline": "Jóge  {{SITENAME}}.",
        "printableversion": "Sumb bu móolu",
        "permalink": "Lëkkalekaay yu sax",
        "print": "Móol",
+       "view": "Xool",
+       "view-foreign": "Xoolee ko ci $1",
        "edit": "Soppi",
        "create": "Sos",
+       "create-local": "Yokk faramfàcceb barab bii",
        "editthispage": "Soppi xët wii",
        "create-this-page": "Sos wii xët",
        "delete": "Far",
        "otherlanguages": "Yeneeni làkk",
        "redirectedfrom": "(Yoonalaat gu jóge $1)",
        "redirectpagesub": "Xëtu yoonalaat",
+       "redirectto": "Jëmalewaat:",
        "lastmodifiedat": "Coppite bu mujj bu xët wii $1 ci $2.<br />",
        "viewcount": "Xët wii nemmeeku nañ ko {{PLURAL:$1|$1 yoon|$1 yoon}}.",
        "protectedpage": "Xët wees aar",
        "policy-url": "Project:àtte",
        "portal": "Buntub askan",
        "portal-url": "Project:Xët wu njëkk",
-       "privacy": "Politigu mbóot",
-       "privacypage": "Project:Xibaar ci say mbóot",
+       "privacy": "Politigu sutura",
+       "privacypage": "Project:Xibaari sutura",
        "badaccess": "Njuumte ci ndigël gi",
        "badaccess-group0": "Amoo ay sañ-sañ yu doy ngir man a def li nga bëgg a def.",
        "badaccess-groups": "Jëf ji ngay jéem a def dañu koo jagleel jëfandikukat yi bokk ci {{PLURAL:$2|mbooloo mu|benn ci mbooloo yi toftal}}: $1.",
        "virus-scanfailed": "Saytu gi dog na (code $1)",
        "logouttext": "Fi mu nekk nii génn nga.'''\n\nMan ngaa wéy di jëfandikoo {{SITENAME}} ci anam buñ la dul xamme walla nga  <span class='plainlinks'>[$1 duggewaat]</span> ak wenn tur wi walla ak weneen.",
        "yourname": "Sa turu jëfandikukat",
+       "userlogin-yourname": "Turu jëfandikukat",
+       "userlogin-yourname-ph": "Duggalal sa turu jëfandikukat",
        "yourpassword": "Sa baatujàll",
+       "userlogin-yourpassword": "Baatujàll",
+       "createacct-yourpassword-ph": "Duggalal ab baatujàll",
        "yourpasswordagain": "Bindaatal sa baatujàll",
+       "createacct-yourpasswordagain": "Dëggalal baatujàll bi",
+       "createacct-yourpasswordagain-ph": "Duggalaatal baatujàll bi",
        "remembermypassword": "Denc sama yëgley dukkukaay ci bii joowukaay (lu ëpp nag $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "Sa barab",
        "externaldberror": "Njuumte judd na ci dàttub njoxe bi, walla day ni rekk amuloo sañ-sañu yeesal sa sàqum biti.",
        "createaccount": "Sos am sàq",
        "gotaccount": "Sos nga am sàq? '''$1'''.",
        "gotaccountlink": "Dugg",
+       "createacct-email-ph": "Duggalal sa màkkaanu m-bataaxal",
        "createaccountmail": "Jaare ko ci m-bataaxal",
+       "createacct-captcha": "Caytug kaaraange",
+       "createacct-imgcaptcha-ph": "Duggalal mbind  miy toftal mi ngay gis",
+       "createacct-submit": "Sos sa sàq",
        "badretype": "Baatujàll yi nga bind yemuñu.",
        "userexists": "Turu jëfandikukat bi nga bind am na boroom ba noppi. Tànnal weneen.",
        "loginerror": "Njuumte ci dugg gi",
        "createaccount-text": "Kenn ku sos am sàq ci {{SITENAME}} te tudd $2 ($4).\nBaatujàll bu « $2 » mooy « $3 ». Li gën mooy nga dugg ci teel te soppi baatujàll bi.\n\nJéelaleel bataaxal bii su fekkee ci njuumte nga sosee mii sàq.",
        "login-throttled": "Jéem ngaa dugg ay yoon te jàllul.\n\nNgalla néggandikul ab diir door a jéemaat.",
        "loginlanguagelabel": "Làkk : $1",
+       "pt-login": "Dugg",
+       "pt-createaccount": "Sos am sàq",
+       "pt-userlogout": "Génn",
        "changepassword": "Coppiteg baatujàll bi",
        "resetpass_announce": "Danga dugg ak ab baatujàll bu saxul-dakk, buñ la yónne cib bataaxal. Ngir matal mbindu mi, faaw nga roof ab baatujàll bu bees fii:",
        "resetpass_text": "<!-- Bindal fii -->",
        "preview": "Wonendi",
        "showpreview": "Wonendi",
        "showdiff": "Wone samay soppi",
-       "anoneditwarning": "'''Moytul :''' Duggoo. Sa màkkaanub IP di nañu ko dugal ci jaar-jaaru xët wii.",
+       "anoneditwarning": "<strong>Moytul :</strong> Duggoo. Bépp coppite boo def sa màkkaanub IP lañu koy xaatimee ci jaar-jaaru xët wi, ñépp di ko gis. Waaye soo <strong>[$1 duggee]</strong> walla nga <strong>[$2 sos am sàq]</strong>, say coppite sa tur lañuy àndal ak yeneeni njariñ.",
        "missingsummary": "'''Fattali :''' Defoo ab tënk ci coppite yi nga amal. Soo cuqaate ci «Denc xët wi», say coppite di nañ dugg te duñ am tënk, maanaam duñ xam loo soppi.",
        "missingcommenttext": "Di la sakku nga dugal ab tënk ci suuf, jërëjëf.",
        "missingcommentheader": "'''Fattali :''' Joxoo ab koj say coppite. Soo cuqaate ci «Denc xët wi», di nañ leen dugal te duñ am koj.",
        "newarticletext": "Da ngaa topp ab lëkkalekaay buy jëme ci aw xët wu amagul. ngir sos xët wi léegi, duggalal sa mbind ci boyot bii ci suuf (man ngaa yër [$1 xëtu ndimbal wi] ngir yeneeni xamle). Su fekkee njuumtee la fi indi cuqal ci '''dellu''' bu sa joowukaay.",
        "anontalkpagetext": "---- ''Yaa ngi ci xëtu waxtaanuwaayu ab jëfandikukatu alaxam, bu bindoogul ba fim ne mbaa jëfandikoowul am sàqam.\nKon ngir xàmmee ko fàw nga jëfandikoo màkkaanub IP wam. Te màkkaanub IP jëfandikukat yu bari man nañ koo bokk.\nSu fekkee jëfandikukatu alaxam nga, te nga gis ne dees laa féetale ay kàddu yoo moomul, ngalla [[Special:UserLogin|bindu]] walla [[Special:UserLogin|dugg]] ngir benn jaxase bañatee am ëllëg .''",
        "noarticletext": "Fi mu ne ni amul menn mbind ci xët wii; man ngaa [[Special:Search/{{PAGENAME}}|seet koju xët wi]] ci yeneen xët, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} seet ci xëtu jagleel wi ],\nwalla [{{fullurl:{{FULLPAGENAME}}|action=edit}} soppi xët wii]</span>.",
-       "noarticletext-nopermission": "Nii-nii amul menn mbind ci wii xët.\nMan nga [[Special:Search/{{PAGENAME}}|seet bii koj]] ci yeneen xët,\nwalla <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nga seet ci yéenekaay yees ko féetaleel]</span>.",
+       "noarticletext-nopermission": "Nii-nii amul menn mbind ci wii xët.\nMan ngaa [[Special:Search/{{PAGENAME}}|seet bii koj]] ci yeneen xët walla <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nga seet ciy yéenekaayam]</span>. Numu man a deme, amoo sañ-sañu sos wii xët.",
        "userpage-userdoesnotexist": "Mii sàqum jëfandikukat « <nowiki>$1</nowiki> » du bu ku-bindu. Seetal bu baax ndax da ngaa namma sos walla soppi wii xët.",
        "clearyourcache": "'''Karmat :''' Soo dence xët wi ba noppi, faaw nga far nëmbiitu sa joowukaay ngir man a gis say coppite, te nga, su dee '''Mozilla / Firefox / Safari :''' cuq ci ''yeesal'' te bësaale ''shift'', walla nga bës ''Shift-R'' walla ''Ctrl-F5'' (Command-R ci Mac ), su dee '''Konqueror''': cuq ''yeesal'' walla nga bës ''F5''; su dee '''Opera''' faral nëbiit li (''Jumtukaay → Tànneef'') su dee '''Internet Explorer:''' cuq ci ''yeesal te bësaale ''Ctrl''  walla nga bës ''Ctrl-F5''.",
        "usercssyoucanpreview": "'''Xelal :''' di la digël nga cuq ci «Wonendi» ngir gis say xobi CSS walla JavaScript yu bees laata nga leen di denc.",
        "session_fail_preview_html": "'''Jéegalu ! manu noo denc say coppite ngir ñakkug ay njoxe ñeel sag dugg.'''\n\n''Segam ci bii dal dañ fee doxal HTML bu ñumm, ngir ay ngirtey kaaraange, wonendi gi du gisu.''\n\n'''Su tolof-tolof bi wéyee, man nga jéem a génn te duggaat .'''",
        "token_suffix_mismatch": "'''Votre modification n’a pas été acceptée car votre navigateur a mal codé les caractères de ponctuation dans l’identifiant de modification.'''\nCe rejet est nécessaire pour empêcher la corruption du texte de la page.\nCe problème se produit parfois lorsque vous utilisez un serveur mandataire anonyme problématique basé sur le web.",
        "editing": "Coppiteg $1",
+       "creating": "Moo ngi sos $1",
        "editingsection": "Coppiteg $1 (xaaj)",
        "editingcomment": "Coppiteg $1 (xaaj bu bees)",
        "editconflict": "jàppanteb coppite ci: $1",
        "shown-title": "Wone $1 {{PLURAL:$1|ngérte|ngérte}} ciw xët",
        "viewprevnext": "Xool ($1 {{int:pipe-separator}} $2) ($3).",
        "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 !'''",
+       "searchmenu-new": "<strong>Sosal xët wii di « [[:$1|$1]] » ci bii wiki !</strong>\n{{PLURAL:$2|0=|Xoolal itam xët wees gis ak sa ceet gi.|Xoolal itam ngértey ceet gi.}}",
        "searchprofile-articles": "Xëti ëmbiit",
        "searchprofile-images": "Barixibaarukaay",
        "searchprofile-everything": "Lé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>.",
+       "search-showingresults": "{{PLURAL:$4|Ngérte <strong>$1</strong> ci <strong>$3</strong>|Ngérte <strong>$1 - $2</strong> ci <strong>$3</strong>}}",
        "search-nonefound": "Ceet gi jurul dara.",
        "powersearch-legend": "Ceet gu xóot",
        "powersearch-ns": "Seet ci barabi tur yi :",
        "search-external": "Ceet gu biti",
        "searchdisabled": "Ceet gi ci {{SITENAME}} doxul. Ci négandiku doxal gi, man nga seet ci Google. Jàppal ne, xéj-na ëmbiti {{SITENAME}} gi ci bii seetukaay yeesaluñ leen.",
        "preferences": "Tànneef",
-       "mypreferences": "Samay tànneef",
+       "mypreferences": "Tànnéef",
        "prefs-edits": "Limu coppite yi:",
        "prefs-skin": "Melokaan",
        "skin-preview": "Wonendil",
        "action-userrights-interwiki": "soppi aqi jëfandikukat yu jëfandikukat yu beneen wiki",
        "action-siteadmin": "caabi walla caabeedi dàttub njoxe bi",
        "nchanges": "$1 {{PLURAL:$1|coppite|ciy coppite}}",
+       "enhancedrc-history": "jaar-jaar",
        "recentchanges": "Coppite yu mujj",
        "recentchanges-legend": "tànneefi coppite yu mujj",
        "recentchanges-summary": "Toppal ci wii xët coppite yu mujj ci {{SITENAME}}.",
        "recentchanges-label-minor": "Coppite gu néewal la",
        "recentchanges-label-bot": "Coppite bu ab bot def",
        "recentchanges-label-unpatrolled": "Coppite bii kenn fugloogu ko",
-       "recentchanges-legend-newpage": "$1 - xët wu bees",
+       "recentchanges-label-plusminus": "Dayoob xët wi soppeeku na ci lu ni toll ciy byte.",
+       "recentchanges-legend-heading": "'''Piri:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (wone itam [[Special:NewPages|limu xët yu bees yi]]) -",
        "rcnotefrom": "Yii ñooy coppite yi dalee '''$2''' (ba '''$1''').",
        "rclistfrom": "Wone coppite yi mujj yi dooree $3 $2",
        "rcshowhideminor": "$1 Coppite yu néewal",
+       "rcshowhideminor-hide": "Nëbb",
        "rcshowhidebots": "$1 bot yi",
-       "rcshowhideliu": "$1 jëfandikukat yu bindu",
+       "rcshowhidebots-show": "Wone",
+       "rcshowhideliu": "$1 jëfandikukat yi bindu",
+       "rcshowhideliu-hide": "Nëbb",
        "rcshowhideanons": "$1 jëfandikukat yu binduwul",
+       "rcshowhideanons-hide": "Nëbb",
        "rcshowhidepatr": "$1 coppite bees fuglu",
        "rcshowhidemine": "$1 samay cëru",
+       "rcshowhidemine-hide": "Nëbb",
        "rclinks": "Wone $1 coppite yi mujj ci $2  fan yi mujj <br />$3.",
        "diff": "wuute",
        "hist": "Jaar",
        "rc_categories": "Digalub wàll yi (xaajale leen ak « \"|\" »)",
        "rc_categories_any": "Yépp",
        "rc-change-size": "$1",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} ginnaaw coppite gi",
        "newsectionsummary": "/* $1 */ xaaj bu bees",
        "rc-enhanced-expand": "Xool faramfacce yi (laaj na JavaScript)",
        "rc-enhanced-hide": "nëbb faramfacce yi",
        "filewasdeleted": "Dencukaay bu tudd nii yeboon nañ ko fi ba noppi, faraat ko. Saytul $1 laataa nga koy yebaat.",
        "filename-bad-prefix": "Turu dencukaay bi ngay yeb moo ngi tambalee '''\"$1\"''', te muy tur wu nosukaay bi di joxal boppam nataalukaay yi.\nDila ñaan nga tànn tur wuy faramfacce dencukaay bi.",
        "upload-success-subj": "Yeb gi jàll na",
+       "license-header": "Anami Jëfandikoo gi",
        "imgfile": "Dencukaay",
        "listfiles": "Limu dencukaay",
        "listfiles_date": "Taariix",
        "filehist-dimensions": "Dayoo",
        "filehist-filesize": "Dayoo ŋara wi",
        "filehist-comment": "Saraa",
-       "imagelinks": "Xët yi am bii dencukaay",
+       "imagelinks": "Njëfandikug dencukaay bi",
        "linkstoimage": "{{PLURAL:$1|Xët wii ci suuf ëmb na|$1 xët yii ci suuf ëmb nañu}} bii dencukaay:",
        "linkstoimage-more": "Lu ëpp $1 {{PLURAL:$1|xët lëkkale nañu leen|xët lëkkale nañu leen}} ak bii dencukaay.\nLim bii di toftal moo lay won {{PLURAL:$1|xët wi ñu njëkk a|xët yi ñu njëkk a}} lëkkale ak wii.\nAb [[Special:WhatLinksHere/$2|lim bu mat]] jàppandi na.",
        "nolinkstoimage": "Amul wenn xët wu ëmb bii dencukaay.",
        "uploadnewversion-linktext": "Yeb sumb bu bees bu bii dencukaay",
        "shared-repo-from": "$1",
        "shared-repo": "ab dencu bees bokk",
+       "upload-disallowed-here": "Manoo bindaat ci kaw bii dencukaay.",
        "filerevert": "Loppanti $1",
        "filerevert-legend": "Delloowaat dencukaay bi",
        "filerevert-intro": "Yaa ngi waaj a delloowaat dencukaay bii di '''[[Media:$1|$1]]''' ci  [$4 sumb bu $2 ci $3].",
        "nlinks": "$1 {{PLURAL:$1|lëkkalekaay|ciy lëkkalekaay}}",
        "nmembers": "$1 {{PLURAL:$1|xët|ciy xët}} ci biir",
        "nrevisions": "$1 {{PLURAL:$1|sumb|sumb}}",
-       "nviews": "$1 {{PLURAL:$1|nemmeeku|nemmeeku}}",
        "specialpage-empty": "Xët wii amul dara",
        "lonelypages": "Xëti jiriim",
        "lonelypagestext": "Xët yiy toftal amuñuy lëkkalekaay yu ne ci yeneen xët yu leen di ubbi te ëmbuwuñu itam ci benn xëtu {{SITENAME}}.",
        "mailnologin": "Amul benn mákkaan boo man a yónne bataaxal bi",
        "mailnologintext": "Ngir man a yónney bataaxal laaj na nga [[Special:UserLogin|dugg]] te it am ab màkkaanub m-bataaxal bu baax ci say [[Special:Preferences|tànneef]].",
        "emailuser": "Bind bii jëfandikukat",
-       "emailpage": "Yónne ab m-bataaxal bii jëfandikukat",
        "defemailsubject": "M-bataaxalu {{SITENAME}}",
        "noemailtitle": "Amul mákkaanub m-bataaxal",
        "noemailtext": "Bii jëfandikukat joxewul ab màkkaanub m-bataaxal bu baax.",
        "delete-toobig": "Xët wii dafa am jaar-jaar bu bari, bu weesu $1 {{PLURAL:$1|sumb|sumb}}. Farteg yooyule xët dañu koo digal ngir bañ ay jafe-jafe yu mana am ci doxinu {{SITENAME}}.",
        "delete-warning-toobig": "Xët wii dafa am jaar-jaar bu bari, bu weesu $1 {{PLURAL:$1|sumb|sumb}}. Seenug farte man naa jur ag jaxasoo ci dáttub njoxeeb {{SITENAME}} ; def ko ak teey.",
        "rollback": "Loppanti coppite yi",
-       "rollback_short": "Loppanti",
        "rollbacklink": "delloowaat",
        "rollbackfailed": "Loppanti gi antuwul",
        "cantrollback": "Neenal coppite gi manula nekk;\nKi def coppite gi mooy Kenn ki masa cëru ci xët wii.",
        "undelete-show-file-submit": "Waaw",
        "namespace": "Barabu tur :",
        "invert": "Jallarbi fal gi",
+       "tooltip-invert": "Falal bii néeg ngir nëbb coppitey xët yi ci barabu tur bi nga tànn (ak yi mu lonkool su fekkee tànnaale nga leen)",
+       "namespace_association": "Barabu turam",
+       "tooltip-namespace_association": "Falal bii néeg ngir boolewaale ci xëtu waxtaanuwaay walla koju barabu tur bi nga fal",
        "blanknamespace": "(njëkk)",
-       "contributions": "Cëruy bii jëfandikukat",
+       "contributions": "Cëruy bii {{GENDER:$1|jëfandikukat}}",
        "contributions-title": "Cëru yu jëfandikukat bii di $1",
-       "mycontris": "Samay cëru",
+       "mycontris": "Cëru",
        "contribsub2": "Ngir $1 ($2)",
        "nocontribs": "Amul benn coppite bu melokaanoo nii bu ñu gis.",
        "uctop": "(bi mujj)",
        "nolinkshere-ns": "Amul wenn xët wu lëkkalook wii '''[[:$1]]''' ci barabu tur bi nga tànn.",
        "isredirect": "Xëtu jubluwaat",
        "istemplate": "mboole",
-       "isimage": "lëkkalekaayu nataal bi",
+       "isimage": "lëkkalekaayu dencukaay bi",
        "whatlinkshere-prev": "{{PLURAL:$1|wi jiitu|$1 yi jiitu}}",
        "whatlinkshere-next": "{{PLURAL:$1|wi toftal|$1 yi toftal}}",
        "whatlinkshere-links": "← lëkkalekaay",
        "tooltip-pt-mycontris": "Limu say cëru",
        "tooltip-pt-login": "Woo nan la ngir nga xammeku, waaye doonul lu manuta ñakk.",
        "tooltip-pt-logout": "Génn",
+       "tooltip-pt-createaccount": "Dees na la digal nga bindu te dugg, donte doonul lu manul-ñàkk",
        "tooltip-ca-talk": "Waxtaan yi ñeel xët wii",
-       "tooltip-ca-edit": "Man ngaa soppi xët wi. Ngir yàlla wonendil laataa ngay denc.",
+       "tooltip-ca-edit": "Soppi xët wii",
        "tooltip-ca-addsection": "Tambali xaaj bu bees",
        "tooltip-ca-viewsource": "Xët wii dañ koo aar. Waaye man ngaa xool ëmbitam.",
        "tooltip-ca-history": "Sumb yi weesu yu xët wi.",
        "tooltip-upload": "Door yeb gi",
        "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.",
+       "tooltip-summary": "Def ci ab tënk",
        "common.css": "/* CSS yiñ def fii dañuy am ay njeexit ci col yépp  */",
        "common.js": "/* Bépp JavaScript buñ fi duggal, xët yéppa koy yeb ak jëfandikukat bumu manti doon. */",
        "anonymous": "Benn walla ay jëfandikukat yu binduwul yu {{SITENAME}}",
        "spamprotectiontitle": "Seggukaay lank-spam",
        "spam_reverting": "Loppantib sumb mu mujj mu amul lëkkalekaay buy jëme $1",
        "spam_blanking": "Setal nañ wecc sumb yi amoon lëkkalekaay buy jëme $1",
+       "simpleantispam-label": "Caytu lànk-spam.\n<strong>Bu</strong> fi yokk lenn!",
+       "pageinfo-toolboxlink": "Xibaar ci xëtu wi",
        "previousdiff": "← Coppite yi gën a yàgg",
        "nextdiff": "Coppite yi mujj →",
        "file-info": "Réyaayu file bi : $1, type MIME : $2",
        "file-info-size": "$1 × $2 pixels, réyaayu file bi : $3, type MIME : $4",
        "file-nohires": "Amul kem bu ëpp bii bu jàppandi.",
        "svg-long-desc": "Dencukaay SVG, kem bu jaadu  $1 × $2 pixel, dayoo dencukaay bi: $3",
-       "show-big-image": "Ngandalal nataal gii",
+       "show-big-image": "Dencukaay bi mu bàyyikoo",
+       "show-big-image-preview": "Dayoob bii wonendi: $1.",
+       "show-big-image-size": "$1 × $2 pixel",
        "ilsubmit": "Seet",
        "bydate": "ci diir",
        "bad_image_list": "Limu  cër yi nekk ci rëdd yi tàmbalee * rekk lees di faale.\nLëkkalekaay bu njëkk bu aw rëdd dafa war a nekk bu ab dencukaay bu baaxul.\nLëkkalekaay yiy toftal, ci wenn rëdd wi, dees leen di jàppee nikiy sette, maanaam xët yi dencukaay bi man a feeñ.",
        "metadata-help": "Bii dencukaay dafa ami xibaar yees ci yokk, xéj-na nataalukaay bu waaraame walla waaraamalekaay bees jëfandikoo moo leen ci yokk. Su fekkee soppees na xar-kanamu dencukaay bi, yenn ci fàramfacce ñeel ko manees nañoo bañ a dëppook li am.",
        "metadata-expand": "Wone faramfacce yi",
        "metadata-collapse": "Nëbb faramfacce yi",
-       "metadata-fields": "Tool yi ñu jagleel jégginjoxe yu EXIF yi ñu lim ci wii xët di nañu leen wone ci xëtu nataal wi suñu waññee àlliwa bu jegginjoxe yi.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Tooli jégginjoxe yu nataal yi ñu lim ci bii bataaxal dañ leen di wone ci xëtu faramfàcce wu nataal bi su fekkee dañoo lem àlliwab jégginjoxe bi.\nYeneen tool yi dañ leen di nëbb.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Yaatuwaay",
        "exif-imagelength": "Kawewaay",
+       "exif-orientation": "Jubluwaay",
+       "exif-datetime": "Taariix ak waxtu coppiteg dencukaay bi",
+       "exif-make": "Defarkatu nataalukaay bi",
+       "exif-software": "Jëfekaay bees jëfandikoo",
+       "exif-exifversion": "Sumb bu Exif",
+       "exif-colorspace": "Barabu melo",
        "exif-usercomment": "Kadduy jëfëndikookat bi",
+       "exif-datetimeoriginal": "Taariix ak waxtub njurug njoxe yi",
+       "exif-orientation-1": "Jaadu",
        "exif-componentsconfiguration-0": "Amul",
        "namespacesall": "Yépp",
        "monthsall": "Yépp",
        "watchlisttools-view": "Limu toppte",
        "watchlisttools-edit": "Xool te soppi limu toppte gi",
        "watchlisttools-raw": "Soppi lim gi",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|waxtaan]])",
        "specialpages": "Xëti jagleel",
+       "tag-filter": "Seggee ak [[Special:Tags|Tafaan]]:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tag}}]]: $2)",
+       "logentry-delete-delete": "$1 {{GENDER:$2|moo far}} xët wi $3",
        "revdelete-restricted": "doxalub digal ngir yorkat yi",
        "revdelete-unrestricted": "digal ngir yorkat yi deñ na",
+       "logentry-newusers-create": "Sàqum jëfandikukat $1 sos nañu ko",
        "rightsnone": "(menn)",
-       "revdelete-summary": "soppi tënk gi"
+       "revdelete-summary": "soppi tënk gi",
+       "searchsuggest-search": "Seet"
 }
index 6050760..0a79897 100644 (file)
        "passwordreset-emailtitle": "ანგარიშის მონაცემები {{SITENAME}}-თვის",
        "passwordreset-emailtext-ip": "ვიღაცამ (შესაძლოა თქვენ, ამ IP-მისამართიდან $1) მოითხოვა თქვენი \nპაროლის თავიდან დაყენება საიტისათვის {{SITENAME}} ($4).\n{{PLURAL:$3|შემდეგი ანგარიში მიბმულია|შემდეგი ანგარიშები მიბმულია}} ამ ელ.ფოსტის მისამართზე:\n\n$2\n\n{{PLURAL:$3|ეს დროებითი პაროლი|ეს დროებითი პაროლები}} იმოქმედებს {{PLURAL:$5|ერთი დღე|$5 დღე}}.\nთქვენ უნდა შეხვიდეთ სისტემაში და აირჩიოთ ახალი პაროლი.\nთუ თქვენ არ გაგიკეთებიათ აღნიშნული მოთხოვნა, ან გაიხსენეთ თქვენი პაროლი\nდა აღარ გსურთ მისი შეცვლა, მაშინ შეგიძლიათ იგნორირება გაუკეთოთ ამ შეტყობინებას\nდა გააგრძელოთ თქვენი ძველი პაროლის გამოყენება.",
        "passwordreset-emailtext-user": "მომხმარებელმა $1 პროექტიდან {{SITENAME}} მოითხოვა თქვენი \nპაროლის თავიდან დაყენება საიტისათვის {{SITENAME}} ($4).\n{{PLURAL:$3|შემდეგი ანგარიში მიბმულია|შემდეგი ანგარიშები მიბმულია}} ამ ელ.ფოსტის მისამართზე:\n\n$2\n\n{{PLURAL:$3|ეს დროებითი პაროლი|ეს დროებითი პაროლები}} იმოქმედებს {{PLURAL:$5|ერთი დღე|$5 დღე}}.\nთქვენ უნდა შეხვიდეთ სისტემაში და აირჩიოთ ახალი პაროლი.\nთუ თქვენ არ გაგიკეთებიათ აღნიშნული მოთხოვნა, ან გაიხსენეთ თქვენი პაროლი\nდა აღარ გსურთ მისი შეცვლა, მაშინ შეგიძლიათ იგნორირება გაუკეთოთ ამ შეტყობინებას\nდა გააგრძელოთ თქვენი ძველი პაროლის გამოყენება.",
-       "passwordreset-emailelement": "მომხმარებლის სახელი: $1\nდროებითი პაროლი: $2",
+       "passwordreset-emailelement": "მომხმარებლის სახელი: \n$1\n\nდროებითი პაროლი: \n$2",
        "passwordreset-emailsent": "პაროლის თავიდან დასაყენებელი ელ.ფოსტა გაიგზავნა.",
        "passwordreset-emailsent-capture": "ქვემოთ ნაჩვენები პაროლის თავიდან დასაყენებელი წერილი გაიგზავნა.",
        "passwordreset-emailerror-capture": "ქვემოთ მოცემულია შექმნილი პაროლის დასაყენებელი წერილი, რომლის გაგზავნაც {{GENDER:$2|მომხმარებელთან}} ვერ მოხერხდა: $1 გამო",
index b2dfd21..044793e 100644 (file)
        "title-invalid-characters": "דער געזוכטער בלאט־קעפל אנטהאלט אומגילטיקע צייכענען: \"$1\".",
        "title-invalid-relative": "דער טיטל האט א רעלאטיוון שטעג. . רעלאטיווע בלאט טיטלען  (./, ../) זענען אומגילטיג, ווייל אפט זענען זיי אומגרייכבאר דורכן בלעטערער פונעם באניצער.",
        "title-invalid-magic-tilde": "דער געבעטענער בלאט־טיטל אנטהאלט אן אומגילטיגן מאגישן טילדה־סעקווענץ (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "דיר געבעטענער בלאט־טיטל איז צו לאנג. ער אטר נישט זיין לענגער ווי $1 {{PLURAL:$1|בייט|בייטן}} אין UTF-8 קאדירונג.",
        "title-invalid-leading-colon": "דער געבעטענער בלאט־טיטל הייבט אן מיט אן אומגילטיגן צווייפינטל.",
        "perfcached": "די פאלגנדע דאטן זענען גענומען פונעם 'זאַפאַס' און מעגלעך נישט אקטועל. מאקסימום {{PLURAL:$1|איין רעזולטאט איז|$1 רעזולטאטן זענען}} פאראן אין זאפאס.",
        "perfcachedts": "די פאלגנדע דאטן זענען פונעם זאַפאַס, וואס איז לעצט געווארן דערהײַנטיגט $1. מאקסימום {{PLURAL:$4|איין רעזולטאט איז|$4 רעזולטאטן זענען}} פאראן אין זאפאס",
        "passwordreset-emailtitle": "קאנטע פרטים אין {{SITENAME}}",
        "passwordreset-emailtext-ip": "עמעצער (מסתמא איר, פון IP אדרעס $1) האט געבעטן צוריקצושטעלן אייער פאסווארט פאר {{SITENAME}} ($4). די פאלגנדע באניצער {{PLURAL:$3|קאנטע איז|קאנטעס זענען}}\nפארבונדן מיט דעם ע־פאסט אדרעס:\n\n$2\n\n{{PLURAL:$3|דאס פראוויזארישע פאסווארט|די פראוויזארישע פאסווערטער}} וועלן אויסגיין נאך {{PLURAL:$5|איין טאג|$5 טעג}}.\nאיר זאלט אריינלאגירן און קלויבן א נייע פאסווארט אצינד. טאמער א צווייטער האט געשיקט די בקשה,\nאדער ווען איר געדענקט יא אייער פריעריקע פאסווארט, און וויל עס נישט ענדערן,\n קענט איר איגנארירן דעם אנזאג און ניצן ווייטער דאס אלטע פאסווארט.",
        "passwordreset-emailtext-user": "באניצער $1 אויף  {{SITENAME}} האט געבעטן צוריקצושטעלן אייער פאסווארט פאר {{SITENAME}} ($4).\nדי פאלגנדע באניצער {{PLURAL:$3|קאנטע איז|קאנטעס זענען}} פארבונדן מיט דעם ע־פאסט אדרעס:\n\n$2\n\n{{PLURAL:$3|דאס פראוויזארישע פאסווארט|די פראוויזארישע פאסווערטער}} וועלן אויסגיין נאך {{PLURAL:$5|איין טאג|$5 טעג}}.\nאיר זאלט אריינלאגירן און קלויבן א נייע פאסווארט אצינד. טאמער א צווייטער האט געשיקט די בקשה,\nאדער ווען איר געדענקט יא אייער פריעריקע פאסווארט, און וויל עס נישט ענדערן,\n קענט איר איגנארירן דעם אנזאג און ניצן ווייטער דאס אלטע פאסווארט.",
-       "passwordreset-emailelement": "באַניצער נאָמען: $1\nפראוויזארישער פּאַראָל: $2",
+       "passwordreset-emailelement": "באַניצער נאָמען: \n$1\n\nפראוויזארישער פּאַראָל: \n$2",
        "passwordreset-emailsent": "מ'האט געשיקט א פאסווארט צוריקשטעלן ע-פּאָסט.",
        "passwordreset-emailsent-capture": "מען האט געשיקט א פאסווארט צוריקשטעלן בליצבריוו, וואס ווערט געוויזן אונטן.",
        "passwordreset-emailerror-capture": "מען האט געשאפן א פאסווארט צוריקשטעלן בליצבריוו, וואס ווערט געוויזן אונטן, אבער שיקן צום {{GENDER:$2|באניצער}}איז דורכגעפאלן: $1",
        "rows": "שורות:",
        "columns": "עמודים:",
        "searchresultshead": "זוכן",
-       "stub-threshold": "שוועל פֿאַר <a href=\"#\" class=\"stub\">שטומף לינק</a> פֿאָרמאַטירונג (בייטן):",
+       "stub-threshold": "שוועל פֿאַר שטומף לינק פֿאָרמאַטירונג ($1):",
+       "stub-threshold-sample-link": "ביישפיל",
        "stub-threshold-disabled": "אַנולירט",
        "recentchangesdays": "צאל פון טעג צו ווייזן אין די לעצטע ענדערונגן:",
        "recentchangesdays-max": "מאַקסימום $1 {{PLURAL:$1|טאָג|טעג}}",
        "action-editmyprivateinfo": "רעדאקטירן אײַער פריוואטע אינפארמאציע",
        "action-editcontentmodel": "רעדאקטירן אינהאלט־מאדעל פון א בלאט",
        "action-managechangetags": "שאפן און אויסמעקן טאגן פון דער דאטנבאזע",
+       "action-applychangetags": "אנווענדן טאגן צוזאמען מיט אייערע ענדערונגען",
        "nchanges": "{{PLURAL:$1|ענדערונג|$1 ענדערונגען}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|זײַט לעצטן וויזיט}}",
        "enhancedrc-history": "היסטאריע",
        "uploadstash-nofiles": "איר האט נישט קיין טעקעס אין זאפאס.",
        "uploadstash-errclear": "אוועקנעמען די טעקעס דורכגעפאלן.",
        "uploadstash-refresh": "דערפֿרישן די רשימה פון טעקעס",
+       "invalid-chunk-offset": "אומגילטיקער סטארטפונקט",
        "img-auth-accessdenied": "צוטריט אָפגעזאָגט",
        "img-auth-notindir": "געשיכטעס שטעג איז נישט אין דער קאנפיגורטער ארויפלאד־דירעקטאריע.",
        "img-auth-badtitle": "קען נישט שאפֿן א גילטיקן טיטל פֿון \"$1\"",
        "booksources-text": "אונטן איז א ליסטע פון סייטס וואס פֿארקויפֿן נייע און גענוצטע ביכער און האבן אויך נאך אינפֿארמאציע וועגן די ביכער וואס איר זוכט:",
        "booksources-invalid-isbn": "דאָס געגעבענע ISBN זעט נישט אויס צו זיין גילטיק; קאנטראלירט פֿאַר גרײַזן בײַם קאפּירן פון דעם ערשטיקן מקור.",
        "specialloguserlabel": "אויספֿירער:",
-       "speciallogtitlelabel": "ציל (טיטל אדער באניצער):",
+       "speciallogtitlelabel": "ציל (טיטל אדער {{ns:user}}:באניצער־נאמען פאר א באניצער):",
        "log": "לאגביכער",
        "all-logs-page": "אלע פובליקע לאגביכער",
        "alllogstext": "קאמבינירטער אויסשטעל פון אלע לאגביכער פון {{SITENAME}} בנמצא.\nמען קען פֿאַרשמעלרן די אויסוואל דורך אויסוויילן א סארט לאג, באַניצער נאמען אדער אנרירנדע בלעטער.",
        "tooltip-ca-nstab-main": "זעט דעם אינהאַלט בלאַט",
        "tooltip-ca-nstab-user": "זעט דעם באניצער בלאט",
        "tooltip-ca-nstab-media": "קוקט אין דעם מעדיע בלאט",
-       "tooltip-ca-nstab-special": "×\93×\90ס ×\90×\99×\96 ×\90 ×¡×¤×¢×¦×\99×¢×\9cער ×\91×\9c×\90×\98, ×\9e'קע×\9f ×\90×\99×\9d × ×\99ש×\98 ×¢× ×\93×¢רן",
+       "tooltip-ca-nstab-special": "×\93×\90ס ×\90×\99×\96 ×\90 ×¡×¤×¢×¦×\99×¢×\9cער ×\91×\9c×\90×\98, ×\9e'קע×\9f ×\90×\99×\9d × ×\99ש×\98 ×¨×¢×\93×\90ק×\98×\99רן",
        "tooltip-ca-nstab-project": "באקוקט דעם פראיעקט בלאט",
        "tooltip-ca-nstab-image": "באקוקט דעם טעקע בלאט",
        "tooltip-ca-nstab-mediawiki": "באקוקט די סיסטעם מעלדונגען",
index 4f05a3c..36384e4 100644 (file)
        "passwordreset-emailtitle": "Àwọn ẹ̀kúnrẹ́rẹ́ àpamọ́ lórí {{SITENAME}}",
        "passwordreset-emailtext-ip": "Ẹnìkan (bóyá ẹ̀yin ni, láti àdírẹ̀sì IP $1) tọrọ àtúntò ọ̀rọ̀ìpamọ́ yín fún {{SITENAME}} ($4). {{PLURAL:$3|Àkópamọ́|Àwọn àkópamọ́}} oníṣe ìsàlẹ̀ yìí ní ìbáṣe pọ̀ mọ́ àdírẹ̀sì e-mail yìí:\n\n$2\n\n{{PLURAL:$3|Ọ̀rọ̀ìpamọ́ onígbàdíẹ̀ yìí|Àwọn ọ̀rọ̀ìpamọ́ onígbàdíẹ̀ wọ̀nyí}} yíò dópin lẹ́yìn {{PLURAL:$5|ọjọ́ kan|ọjọ́ $5}}.\nẸ gbọ́dọ̀ lọ yan ọ̀rọ̀ìpamọ́ tuntun báyìí. Tóbá jẹ́ pé ẹ̀lòmíràn ló ṣe ìtọrọ yìí, tàbí tọ́bá jẹ́ pé ẹ ti rántí ọ̀rọ̀ìpamọ́ àtètèkọ́ṣe yín, tí ẹ kọ̀ sí fẹ́ yíipadà mọ́, ẹ lé ṣàìkàsí ìránṣẹ́ yìí, kí ẹ sì tẹ̀síwájú ní lo ọ̀rọ̀ìpamọ́ àtijọ́ yín.",
        "passwordreset-emailtext-user": "Oníṣe $1 lórí {{SITENAME}} tọrọ àtúntò ọ̀rọ̀ìpamọ́ yín fùn {{SITENAME}} ($4). {{PLURAL:$3|Àkópamọ́|Àwọn àkópamọ́}} oníṣe ìsàlẹ̀ yìí ní ìbáṣe pọ̀ mọ́ àdírẹ̀sì e-mail yìí:\n\n$2\n\n{{PLURAL:$3|Ọ̀rọ̀ìpamọ́ onígbàdíẹ̀ yìí|Àwọn ọ̀rọ̀ìpamọ́ onígbàdíẹ̀ wọ̀nyí}} yíò dópin lẹ́yìn {{PLURAL:$5|ọjọ́ kan|ọjọ́ $5}}.\nẸ gbọ́dọ̀ lọ yan ọ̀rọ̀ìpamọ́ tuntun báyìí. Tóbá jẹ́ pé ẹ̀lòmíràn ló ṣe ìtọrọ yìí, tàbí tọ́bá jẹ́ pé ẹ ti rántí ọ̀rọ̀ìpamọ́ àtètèkọ́ṣe yín, tí ẹ kọ̀ sí fẹ́ yíipadà mọ́, ẹ lé ṣàìkàsí ìránṣẹ́ yìí, kí ẹ sì tẹ̀síwájú ní lo ọ̀rọ̀ìpamọ́ àtijọ́ yín.",
-       "passwordreset-emailelement": "Orúkọ oníṣe: $1\nỌ̀rọ̀ìpamọ́ ìgbàdíẹ̀: $2",
+       "passwordreset-emailelement": "Orúkọ oníṣe: \n$1\n\nỌ̀rọ̀ìpamọ́ ìgbàdíẹ̀: \n$2",
        "passwordreset-emailsent": "E-mail àtúntò ọ̀rọ̀ìpamọ́ ti jẹ́ fífiránṣẹ́.",
        "passwordreset-emailsent-capture": "E-mail àtúntò ọ̀rọ̀ìpamọ́ kan ti jẹ́ fífiránṣẹ́. Òhun nìyí nísàlẹ̀.",
        "passwordreset-emailerror-capture": "E-mail ìyípadà ọ̀rọ̀ìpamọ́ jẹ́ dídá, òhun lóhàn nísàlẹ̀ yìí, sùgbọ́n ìfiránṣẹ́ rẹ̀ sí {{GENDER:$2|oníṣe}} náà kùnà: $1",
        "emailuser": "Ẹ fi e-mail ránṣẹ́ sí oníṣe yìí",
        "emailuser-title-target": "E-mail sí {{GENDER:$1|oníṣe}} yìí",
        "emailuser-title-notarget": "E-mail sí oníṣe",
-       "emailpage": "E-mail sí oníṣe",
        "emailpagetext": "Ẹ le lo fọ́ọ̀mù ìsàlẹ̀ yìí láti fi e-mail ránṣẹ́ sí {{GENDER:$1|oníṣe}} yìí.\nÀdírẹ́ẹ̀sì e-mail tí ẹ tìbọ sínú [[Special:Preferences|àwọn ìfẹ́ràn oníṣe yín]] yíò hàn bíi \"Láti\" àdírẹ́ẹ̀sì e-mail náà, kí agbaìránṣẹ́ ó le baà fi ìdáhùn ránṣẹ́ tààrà sí yín.",
        "defemailsubject": "E-mail {{SITENAME}} látọwọ́ oníṣe \"$1\"",
        "usermaildisabled": "Àdálẹ́kun e-mail oníṣe",
index 2a0fac2..d5dc7ad 100644 (file)
        "passwordreset-emailtitle": "{{SITENAME}}嘅戶口資料",
        "passwordreset-emailtext-ip": "有人(可能係閣下自己,來自IP地址$1)請求更改閣下喺{{SITENAME}}($4)嘅密碼。同爾個電子郵件有關聯嘅用戶包括:\n\n$2\n\n{{PLURAL:$3|爾個|爾啲}}臨時密碼會喺{{$5}}日之後失效。\n\n如果係閣下自己請求改密碼嘅,請馬上登錄{{SITENAME}}並且更改密碼。如果閣下諗返起自己個密碼,或者根本無申請過改密碼嘅話,請忽略爾條訊息,繼續用返舊密碼。",
        "passwordreset-emailtext-user": "{{SITENAME}}用戶$1請求更改閣下喺{{SITENAME}}道嘅密碼$4。同爾個電子郵件有關聯嘅用戶包括:\n\n$2\n\n{{PLURAL:$3|爾個|爾啲}}臨時密碼會喺{{$5}}日之後失效。\n\n如果係閣下自己請求改密碼嘅,請馬上登錄{{SITENAME}}並且更改密碼。如果閣下諗返起自己個密碼,或者根本無申請過改密碼嘅話,請忽略爾條訊息,繼續用返舊密碼。",
-       "passwordreset-emailelement": "用戶名:$1\n臨時密碼:$2",
+       "passwordreset-emailelement": "用戶名:\n$1\n\n臨時密碼:\n$2",
        "passwordreset-emailsent": "密碼重設電郵經已送出。",
        "passwordreset-emailsent-capture": "密碼重設電郵經已送出,下面有顯示。",
        "passwordreset-emailerror-capture": "密碼重設電郵經已送出,下面有顯示,但送畀{{GENDER:$2|user}}時失敗: $1",
index ac3cb4e..c48a976 100644 (file)
        "nstab-special": "特殊页面",
        "nstab-project": "项目页面",
        "nstab-image": "文件",
-       "nstab-mediawiki": "息",
+       "nstab-mediawiki": "息",
        "nstab-template": "模板",
        "nstab-help": "帮助页面",
        "nstab-category": "分类",
        "passwordreset-emailtitle": "在 {{SITENAME}} 的帐户详细信息",
        "passwordreset-emailtext-ip": "有人(可能是您,来自IP地址$1)请求重设{{SITENAME}}($4)上相关账户的密码。以下$3个账户与该电子邮件地址关联:\n\n$2\n\n这个临时密码将会在{{PLURAL:$5|一天|$5天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。",
        "passwordreset-emailtext-user": "用户$1请求重设{{SITENAME}}($4)上您的账户的密码。{{PLURAL:$3|以下账户|此账户}}与该电子邮件地址关联:\n\n$2\n\n这个临时密码将会在{{PLURAL:$5|一天|$5天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。",
-       "passwordreset-emailelement": "用户名:$1\n临时密码:$2",
+       "passwordreset-emailelement": "用户名:\n$1\n\n临时密码:\n$2",
        "passwordreset-emailsent": "密码重置邮件已发送。",
        "passwordreset-emailsent-capture": "密码重设电子邮件已发送,并在下面显示。",
        "passwordreset-emailerror-capture": "重置密码邮件已生成,但是无法向{{GENDER:$2|下列用户}} 发送:$1",
        "changeemail-password": "你的{{SITENAME}}密码:",
        "changeemail-submit": "更改电子邮件地址",
        "changeemail-throttled": "您最近尝试了太多次登录。请等待$1后再试。",
+       "changeemail-nochange": "请输入一个不同的新的电子邮件地址。",
        "resettokens": "重置密钥",
        "resettokens-text": "你可以在这里重置允许访问与你的账户有关的特定私人数据的密钥。\n\n如果你意外将它们分享给他人,或是你的账户已经被入侵,你应该重置它们。",
        "resettokens-no-tokens": "没有可以重置的密钥。",
        "userjspreview": "'''请记住你现在只是在测试/预览你的用户JavaScript。它尚未保存!'''",
        "sitecsspreview": "'''请记住你现在只是在预览该CSS。它尚未保存!'''",
        "sitejspreview": "'''请记住你现在只是在预览该JavaScript代码。它尚未保存!'''",
-       "userinvalidcssjstitle": "'''警告:''' 不存在皮肤\"$1\"。注意自定义的 .css 和 .js 页要使用小写标题,例如,{{ns:user}}:Foo/vector.css 不同于 {{ns:user}}:Foo/Vector.css。",
+       "userinvalidcssjstitle": "<strong>警告:</strong>不存在皮肤“$1”。注意自定义的 .css 和 .js 页要使用小写标题,例如,{{ns:user}}:Foo/vector.css 不同于 {{ns:user}}:Foo/Vector.css。",
        "updated": "(已更新)",
        "note": "'''注意:'''",
        "previewnote": "'''请记住这只是预览。'''你的更改还没有保存!",
        "rows": "行数:",
        "columns": "列数:",
        "searchresultshead": "搜索",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">短链接</a>格式阈值(字节):",
+       "stub-threshold": "短链接格式阈值($1):",
+       "stub-threshold-sample-link": "样例",
        "stub-threshold-disabled": "停用",
        "recentchangesdays": "最近更改中显示的天数:",
        "recentchangesdays-max": "最多$1天",
        "booksources-text": "下面是销售新书和二手书的其他网站的链接的列表,也可能有关于你正在寻找的图书的更多信息:",
        "booksources-invalid-isbn": "提供的ISBN号码并不正确,请检查原始复制来源号码是否有误。",
        "specialloguserlabel": "执行者:",
-       "speciallogtitlelabel": "目标(标题或用户):",
+       "speciallogtitlelabel": "目标(标题,或对于用户使用{{ns:user}}:用户名):",
        "log": "日志",
        "all-logs-page": "所有公开日志",
        "alllogstext": "所有{{SITENAME}}公开日志的联合展示。您可以通过选择日志类型、输入用户名(区分大小写)或相关页面(区分大小写)筛选日志条目。",
        "tooltip-t-recentchangeslinked": "链自本页的页面的最近更改",
        "tooltip-feed-rss": "本页面的RSS源",
        "tooltip-feed-atom": "本页面的Atom源",
-       "tooltip-t-contributions": "该用户的贡献的列表",
+       "tooltip-t-contributions": "由此用户做出的贡献列表",
        "tooltip-t-emailuser": "给该用户发送电子邮件",
        "tooltip-t-info": "关于此页面的更多信息",
        "tooltip-t-upload": "上传文件",
        "tooltip-ca-nstab-main": "查看内容页面",
        "tooltip-ca-nstab-user": "查看用户页面",
        "tooltip-ca-nstab-media": "查看媒体文件页面",
-       "tooltip-ca-nstab-special": "这是特殊页面,你无法编辑该页",
+       "tooltip-ca-nstab-special": "这是特殊页面,并且它不能被编辑",
        "tooltip-ca-nstab-project": "查看项目页面",
        "tooltip-ca-nstab-image": "查看文件页面",
        "tooltip-ca-nstab-mediawiki": "查看系统消息",
        "common.css": "/* 放置于这里的CSS将应用于所有皮肤 */",
        "print.css": "/* 放置于这里的CSS将影响打印输出 */",
        "noscript.css": "/* 放置于这里的CSS将影响停用JavaScript的用户 */",
-       "group-autoconfirmed.css": "/* 放置于这里的CSS将只影响自动确认用户 */",
-       "group-user.css": "/* 放置于此的CSS将只影响注册用户 */",
-       "group-bot.css": "/* 放置于这里的CSS将只影响机器人 */",
-       "group-sysop.css": "/* 放置于这里的CSS将只影响管理员 */",
-       "group-bureaucrat.css": "/* 放置于这里的CSS将只影响行政员 */",
+       "group-autoconfirmed.css": "/* 这里放置的CSS将只影响自动确认用户 */",
+       "group-user.css": "/* 这里放置的CSS将只影响注册用户 */",
+       "group-bot.css": "/* 这里放置的CSS将只影响机器人 */",
+       "group-sysop.css": "/* 这里放置的CSS将只影响管理员 */",
+       "group-bureaucrat.css": "/* 这里放置的CSS将只影响行政员 */",
        "common.js": "/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */",
        "group-autoconfirmed.js": "/* 这里的任何JavaScript将只为自动确认用户加载 */",
        "group-user.js": "/* 放置于此的JavaScript将只为注册用户加载 */",
index b795821..738b896 100644 (file)
@@ -86,7 +86,7 @@
        "tog-enotifusertalkpages": "當我的對話頁面有變更時,傳送電子郵件通知我",
        "tog-enotifminoredits": "當頁面與檔案有小修訂時,傳送電子郵件通知我",
        "tog-enotifrevealaddr": "在通知郵件中顯示我的電子郵件地址",
-       "tog-shownumberswatching": "顯示正在監視的使用者數",
+       "tog-shownumberswatching": "顯示監視使用者數量",
        "tog-oldsig": "現有簽名:",
        "tog-fancysig": "將簽名視為 Wikitext 語言 (不自動產生連結)",
        "tog-uselivepreview": "使用即時預覽",
@@ -97,7 +97,7 @@
        "tog-watchlisthideliu": "隱藏監視清單中已登入使用者的編輯",
        "tog-watchlisthideanons": "隱藏監視清單中匿名使用者的編輯",
        "tog-watchlisthidepatrolled": "隱藏監視清單中已巡查的編輯",
-       "tog-ccmeonemails": "傳送郵件給他人時,也送一份副本到我的電子郵件信箱",
+       "tog-ccmeonemails": "我給他人寄出郵件時,也寄出一份副本到我的電子郵件信箱",
        "tog-diffonly": "比對差異時下方不顯示頁面內容",
        "tog-showhiddencats": "顯示隱藏分類",
        "tog-norollbackdiff": "執行還原後略過差異比對",
        "editfont-monospace": "等距字型",
        "editfont-sansserif": "無襯線字型",
        "editfont-serif": "襯線字型",
-       "sunday": "星期日",
-       "monday": "星期一",
-       "tuesday": "星期二",
-       "wednesday": "星期三",
-       "thursday": "星期四",
-       "friday": "星期五",
-       "saturday": "星期六",
+       "sunday": "日",
+       "monday": "一",
+       "tuesday": "二",
+       "wednesday": "三",
+       "thursday": "四",
+       "friday": "五",
+       "saturday": "六",
        "sun": "日",
        "mon": "一",
        "tue": "二",
        "permalink": "靜態連結",
        "print": "列印",
        "view": "檢視",
-       "view-foreign": "ç\94¨ $1 æª¢è¦\96",
+       "view-foreign": "å\9c¨ $1 æª¢è¦\96",
        "edit": "編輯",
        "edit-local": "編輯本地說明",
        "create": "建立",
        "redirectedfrom": "(已重新導向自 $1)",
        "redirectpagesub": "重新導向頁面",
        "redirectto": "重新導向至:",
-       "lastmodifiedat": "此頁面最後修於 $1 $2。",
+       "lastmodifiedat": "此頁面最後修於 $1 $2。",
        "viewcount": "此頁面已被檢視過 $1 次。",
        "protectedpage": "受保護頁面",
        "jumpto": "前往:",
        "mainpage-description": "首頁",
        "policy-url": "Project:Policy",
        "portal": "社群入口",
-       "portal-url": "Project:Community portal",
+       "portal-url": "Project:社群入口",
        "privacy": "隱私政策",
        "privacypage": "Project:隱私政策",
        "badaccess": "權限錯誤",
        "feedlinks": "訂閱:",
        "feed-invalid": "無效的訂閱 Feed 類型。",
        "feed-unavailable": "目前未提供 RSS 或 Atom",
-       "site-rss-feed": "$1 的 RSS feed",
-       "site-atom-feed": "$1 的 Atom feed",
-       "page-rss-feed": "訂閱 \"$1\" 的 RSS feed",
-       "page-atom-feed": "訂閱 \"$1\" 的 Atom feed",
+       "site-rss-feed": "$1 的 RSS 摘要",
+       "site-atom-feed": "$1 的 Atom 摘要",
+       "page-rss-feed": "\"$1\" 的 RSS 摘要",
+       "page-atom-feed": "\"$1\" 的 Atom 摘要",
        "red-link-title": "$1 (頁面不存在)",
        "sort-descending": "降冪排序",
        "sort-ascending": "昇冪排序",
        "userlogin-yourname": "使用者名稱",
        "userlogin-yourname-ph": "輸入您的使用者名稱",
        "createacct-another-username-ph": "輸入使用者名稱",
-       "yourpassword": "您的密碼:",
+       "yourpassword": "密碼:",
        "userlogin-yourpassword": "密碼",
        "userlogin-yourpassword-ph": "輸入您的密碼",
        "createacct-yourpassword-ph": "輸入密碼",
        "passwordreset-emailtitle": "於 {{SITENAME}} 的帳號詳細資訊",
        "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件地址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略本訊息並且繼續使用您原本的密碼。",
        "passwordreset-emailtext-user": "使用者 $1 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件位址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
-       "passwordreset-emailelement": "使用者名稱:$1\n臨時密碼:$2",
+       "passwordreset-emailelement": "使用者名稱:\n$1\n\n臨時密碼:\n$2",
        "passwordreset-emailsent": "已寄出重設密碼的電子郵件。",
        "passwordreset-emailsent-capture": "已寄出重設密碼的電子郵件,並於下方顯示。",
        "passwordreset-emailerror-capture": "下列為重設密碼的電子郵件內容,傳送給{{GENDER:$2|使用者}}失敗:$1",
        "rows": "列數:",
        "columns": "欄數:",
        "searchresultshead": "搜尋",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">短頁面連結</a>格式門檻值 (位元組):",
+       "stub-threshold": "短頁面連結格式門檻值 ($1):",
+       "stub-threshold-sample-link": "樣本",
        "stub-threshold-disabled": "已停用",
        "recentchangesdays": "近期變更顯示的天數:",
        "recentchangesdays-max": "最多 $1 {{PLURAL:$1|天}}",
        "action-deletedhistory": "檢視此頁面的刪除歷史",
        "action-browsearchive": "搜尋已刪除頁面",
        "action-undelete": "取消刪除此頁面",
-       "action-suppressrevision": "複查與還原此隱藏修訂",
+       "action-suppressrevision": "檢閱與還原此隱藏修訂",
        "action-suppressionlog": "檢視此非公開日誌",
        "action-block": "封鎖此使用者的編輯權限",
        "action-protect": "變更此頁面的保護層級",
        "booksources-text": "下列清單包含其他銷售新書籍或二手書籍的網站連結,可會有你想尋找書籍的進一部資訊:",
        "booksources-invalid-isbn": "您提供的 ISBN 不正確,請檢查複製的來源是否有誤。",
        "specialloguserlabel": "執行者:",
-       "speciallogtitlelabel": "目標 (標題或使用者):",
+       "speciallogtitlelabel": "ç\9b®æ¨\99 (æ¨\99é¡\8cæ\88\96以 {{ns:user}}:使ç\94¨è\80\85 è¡¨ç¤ºä½¿ç\94¨è\80\85)ï¼\9a",
        "log": "日誌",
        "all-logs-page": "所有公開日誌",
        "alllogstext": "合併顯示所有 {{SITENAME}} 中所有類型的日誌。\n您可以點選下拉式選單選擇日誌的類型,指定使用者名稱 (區分大小寫) 或影響的頁面 (區分大小寫)。",
        "mailnologin": "沒有傳送位址",
        "mailnologintext": "您必須先 [[Special:UserLogin|登入]]\n並在 [[Special:Preferences|偏好設定]]\n中設定一個有效的電子郵件地址才可以傳送郵件給其他使用者。",
        "emailuser": "Email 聯絡此使用者",
-       "emailuser-title-target": "E-mail 聯絡此{{GENDER:$1|使用者}}",
-       "emailuser-title-notarget": "E-mail 聯絡使用者",
+       "emailuser-title-target": "Email 聯絡此{{GENDER:$1|使用者}}",
+       "emailuser-title-notarget": "Email 聯絡使用者",
        "emailpagetext": "您可以使用以下表格傳送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件地址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。",
        "defemailsubject": "{{SITENAME}} 使用者 \"$1\" 寄來的電子郵件",
        "usermaildisabled": "使用者電子郵件已停用",
        "file-info-png-frames": "$1 畫格",
        "file-no-thumb-animation": "<strong>注意:由於技術限制,此檔案縮圖無動畫效果。</strong>",
        "file-no-thumb-animation-gif": "<strong>注意:由於技術限制,此類型高解析度 GIF 圖片無動畫效果。</strong>",
-       "newimages": "æ\9c\80æ\96°æª\94æ¡\88圖庫",
+       "newimages": "æ\96°æª\94圖庫",
        "imagelisttext": "以下為 <strong>$1</strong> 清單,$2 排序。",
        "newimages-summary": "此特殊頁面中顯示最新上傳的檔案。",
        "newimages-legend": "搜尋",
        "hours-ago": "$1 小時前",
        "minutes-ago": "$1 分鐘前",
        "seconds-ago": "$1 秒鐘前",
-       "monday-at": "星期一於 $1",
-       "tuesday-at": "星期二於 $1",
-       "wednesday-at": "星期三於 $1",
-       "thursday-at": "星期四於 $1",
-       "friday-at": "星期五於 $1",
-       "saturday-at": "星期六於 $1",
-       "sunday-at": "星期日於 $1",
+       "monday-at": "週一在 $1",
+       "tuesday-at": "週二在 $1",
+       "wednesday-at": "週三在 $1",
+       "thursday-at": "週四在 $1",
+       "friday-at": "週五在 $1",
+       "saturday-at": "週六在 $1",
+       "sunday-at": "週日在 $1",
        "yesterday-at": "昨天於 $1",
        "bad_image_list": "請依照下列格式:\n\n僅清單項目有效 (以 * 開頭)。\n每一行的第一個連結必須是不良檔案的連結。\n同一行除第一個以外的連結會被作為例外清單,例如:檔案所在的頁面。",
-       "variantname-zh-hans": "‪中文(简体)",
+       "variantname-zh-hans": "‪简体中文",
        "variantname-zh-hant": "‪繁體中文",
        "variantname-zh-cn": "大陸簡體",
        "variantname-zh-tw": "台灣正體",
        "namespacesall": "全部",
        "monthsall": "全部",
        "confirmemail": "確認電子郵件地址",
-       "confirmemail_noemail": "您尚未在 [[Special:Preferences|偏好設定]] 中輸入一個有效的電子郵件地址。",
+       "confirmemail_noemail": "您尚未在您的[[Special:Preferences|偏好設定]]裡設定一個有效的電子郵件地址。",
        "confirmemail_text": "{{SITENAME}} 要求您在使用郵件功能之前驗證您的電子郵件地址。\n點選以下按鈕可向您的電子郵件傳送一封確認郵件。該郵件包含有一行代碼連結;\n請在您的瀏覽器中載入此連結以確認您的電子郵件地址是有效的。",
        "confirmemail_pending": "確認碼已透過電子郵件傳送給您,\n若您才剛建立好您的帳號,可能需要稍後幾分鐘才能收到。\n若沒有收到,請再重新申請一次確認碼。",
        "confirmemail_send": "電子郵件確認碼",
        "confirmemail_sent": "確認郵件已寄出。",
        "confirmemail_oncreate": "確認碼已傳送至您的電子郵件地址。\n登入動作不需要使用此代碼,但開啟在 Wiki 中任何以電子郵件為基礎的功能會需要先提供此代碼。",
-       "confirmemail_sendfailed": "{{SITENAME}}無法傳送確認郵件,請檢查電子郵件地址是否包含非法字元。\n\n郵件傳送員回應: $1",
+       "confirmemail_sendfailed": "{{SITENAME}} 無法傳送您的確認郵件,請檢查電子郵件地址是否含有無效字元。\n\n寄件者傳回: $1",
        "confirmemail_invalid": "無效的確認碼,該代碼可能已經過期。",
        "confirmemail_needlogin": "請 $1 以確認您的電子郵件地址。",
-       "confirmemail_success": "您的電子郵件已經被確認。您現在可以 [[Special:UserLogin|登入]] 並使用此網站了。",
+       "confirmemail_success": "您的電子郵件已經被確認。您現在可以[[Special:UserLogin|登入]]並且享受此網站了。",
        "confirmemail_loggedin": "已確認您的電子郵件地址。",
        "confirmemail_subject": "{{SITENAME}} 電子郵件地址確認",
        "confirmemail_body": "不明人士 (可能是您自己,來自 IP 位址 $1) 已在 {{SITENAME}} 註冊了一個帳號 \"$2\" 並使用了此電子郵件地址。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
        "version-extensions": "已安裝的擴充套件",
        "version-skins": "已安裝的外觀",
        "version-specialpages": "特殊頁面",
-       "version-parserhooks": "解析器連結 (Hook)",
+       "version-parserhooks": "剖析器鉤",
        "version-variables": "變數",
        "version-antispam": "垃圾訊息防止",
        "version-other": "其他",
        "version-mediahandlers": "媒體處理器",
-       "version-hooks": "é\80£çµ\90 (Hooks)",
+       "version-hooks": "é\89¤",
        "version-parser-extensiontags": "解析器擴充標籤",
-       "version-parser-function-hooks": "語法函數連結",
+       "version-parser-function-hooks": "剖析器函數鉤",
        "version-hook-name": "鉤名",
        "version-hook-subscribedby": "署名",
        "version-version": "($1)",
index 74a4542..bb5e9ab 100644 (file)
     "prefs-personal": "使用者資料",
     "prefs-rc": "近期變動",
     "prefs-watchlist-days": "監視列表中顯示記錄的最長天數:",
-    "saveprefs": "保存偏好設定",
     "resetprefs": "重設參數",
     "searchresultshead": "搜尋結果設定",
     "recentchangesdays": "近期變動中的顯示日數:",
     "lonelypagestext": "以下頁面尚未被這個wiki中的其它頁面連結。",
     "uncategorizedimages": "待分類圖片",
     "unusedimages": "未使用圖片",
-    "popularpages": "熱門頁面",
     "mostimages": "最多連結圖片",
     "prefixindex": "所有頁面之前綴",
     "deadendpagestext": "以下頁面沒有連結到這個wiki中的其它頁面。",
     "sp-contributions-blocklog": "封鎖記錄",
     "sp-contributions-userrights": "使用者權限管理",
     "sp-contributions-username": "IP位址或使用者名稱:",
-    "whatlinkshere-title": "鏈接到$1的頁面",
     "blockip": "封鎖使用者",
     "ipadressorusername": "IP地址或使用者名:",
     "ipbreason-dropdown": "*一般的封鎖理由\n** 屢次增加不實資料\n** 刪除頁面內容\n** 外部連結廣告\n** 在頁面中增加無意義文字\n** 無禮的行為、攻擊/騷擾別人\n** 濫用多個帳號\n** 不能接受的使用者名",
index 40627a2..4f7638a 100644 (file)
@@ -116,7 +116,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Peugah_haba_lon' ),
        'Newimages'                 => array( 'Beureukaih_baro' ),
        'Newpages'                  => array( 'On_baro' ),
-       'Popularpages'              => array( 'On_meuceuhu' ),
        'Preferences'               => array( 'Geunalak' ),
        'Prefixindex'               => array( 'Dapeuta_neuaway' ),
        'Protectedpages'            => array( 'On_nyang_geupeulindong' ),
index 7482841..320efa3 100644 (file)
@@ -151,7 +151,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nuwe_beelde', 'Nuwebeelde', 'Nuwe_lêers', 'Nuwelêers' ),
        'Newpages'                  => array( 'Nuwe_bladsye', 'Nuwebladsye' ),
        'PasswordReset'             => array( 'WagwoordHerstel' ),
-       'Popularpages'              => array( 'PopulêreBladsye' ),
        'Preferences'               => array( 'Voorkeure' ),
        'Prefixindex'               => array( 'VoorvoegselIndeks' ),
        'Protectedpages'            => array( 'BeskermdeBladsye' ),
index 588cf34..98b8b66 100644 (file)
@@ -44,7 +44,6 @@ $namespaceGenderAliases = array(
 );
 
 $specialPageAliases = array(
-       'Popularpages'              => array( 'Faqe të famshme' ),
        'Search'                    => array( 'Kërko' ),
 );
 
index 7ec924e..4f84bfb 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'A_mía_descusión', 'A_mía_pachina_de_descusión' ),
        'Newimages'                 => array( 'Nuevos_fichers', 'Nuevas_imáchens', 'Nuevas_imachens', 'Nuebas_imachens' ),
        'Newpages'                  => array( 'Pachinas_nuevas', 'Pachinas_recients', 'Pachinas_nuebas', 'Pachinas_más_nuebas', 'Pachinas_más_rezients', 'Pachinas_rezients' ),
-       'Popularpages'              => array( 'Pachinas_populars', 'Pachinas_más_populars' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'Pachinas_por_prefixo', 'Mirar_por_prefixo' ),
        'Protectedpages'            => array( 'Pachinas_protechitas', 'Pachinas_protechidas' ),
index 7817990..5441237 100644 (file)
@@ -373,7 +373,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'لغة_الصفحة' ),
        'PasswordReset'             => array( 'إعادة_ضبط_كلمة_السر' ),
        'PermanentLink'             => array( 'وصلة_دائمة', 'رابط_دائم' ),
-       'Popularpages'              => array( 'صفحات_مشهورة' ),
        'Preferences'               => array( 'تفضيلات' ),
        'Prefixindex'               => array( 'فهرس_بادئة' ),
        'Protectedpages'            => array( 'صفحات_محمية' ),
index f88650b..c833b02 100644 (file)
@@ -70,7 +70,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'ܠܦܦ̈ܐ_ܚܕ̈ܬܐ', 'ܨܘܪ̈ܬܐ_ܚܕ̈ܬܬܐ' ),
        'Newpages'                  => array( 'ܦܐܬܬ̈ܐ_ܚܕ̈ܬܬܐ' ),
        'PermanentLink'             => array( 'ܐܣܘܪܐ_ܦܝܘܫܐ' ),
-       'Popularpages'              => array( 'ܦܐܬܬ̈ܐ_ܡܫܡܗ̈ܐ' ),
        'Preferences'               => array( 'ܨܒܝܢܝܘ̈ܬܐ' ),
        'Protectedpages'            => array( 'ܦܐܬܬ̈ܐ_ܢܛܝܪ̈ܬܐ' ),
        'Protectedtitles'           => array( 'ܟܘܢܝ̈ܐ_ܢܛܝܪ̈ܐ' ),
index 4d0b3db..e2078ad 100644 (file)
@@ -102,7 +102,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'لغه_الصفحه' ),
        'PasswordReset'             => array( 'ضبط_الباسوورد' ),
        'PermanentLink'             => array( 'وصله_دايمه' ),
-       'Popularpages'              => array( 'صفح_مشهوره' ),
        'Preferences'               => array( 'تفضيلات' ),
        'Prefixindex'               => array( 'فهرس_بدايه' ),
        'Protectedpages'            => array( 'صفح_محميه' ),
index f9f1b5b..e173661 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'পৰৱৰ্তী_পৃষ্ঠা' ),
        'PasswordReset'             => array( 'গুপ্তশব্দ_ঘূৰাই_আনক' ),
        'PermanentLink'             => array( 'স্থায়ী_সংযোগ' ),
-       'Popularpages'              => array( 'জনপ্ৰিয়_পৃষ্ঠাসমূহ' ),
        'Preferences'               => array( 'পচন্দ' ),
        'Protectedpages'            => array( 'সুৰক্ষিত_পৃষ্ঠাসমূহ' ),
        'Protectedtitles'           => array( 'সুৰক্ষিত_শিৰোনামসমূহ' ),
index ea64271..34b2ba0 100644 (file)
@@ -72,7 +72,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'ЦІиял_гьумерал' ),
        'PasswordReset'             => array( 'Сброс_пароля' ),
        'PermanentLink'             => array( 'Даимаб_ссылка' ),
-       'Popularpages'              => array( 'Машгьурал_гьумерал' ),
        'Preferences'               => array( 'Рекъезабиял' ),
        'Prefixindex'               => array( 'ЦІаразул_бетІералде_бихьизаби' ),
        'Protectedpages'            => array( 'ЦІунарал_гьумерал' ),
index 0892ec9..0c8b1e6 100644 (file)
@@ -62,7 +62,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'JinafaPrilara' ),
        'Newimages'                 => array( 'WarzafEwaveem' ),
        'Newpages'                  => array( 'WarzafBueem' ),
-       'Popularpages'              => array( 'LorupenBueem' ),
        'Preferences'               => array( 'Lodamaceem' ),
        'Protectedpages'            => array( 'NendanBueem' ),
        'Protectedtitles'           => array( 'NendanVergumvelteem' ),
index aaf6c2b..50ed217 100644 (file)
@@ -91,7 +91,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Яңы_биттәр' ),
        'PasswordReset'             => array( 'Паролде_яңыртыу' ),
        'PermanentLink'             => array( 'Даими_һылтанма' ),
-       'Popularpages'              => array( 'Популяр_биттәр' ),
        'Preferences'               => array( 'Көйләүҙәр' ),
        'Protectedpages'            => array( 'Һаҡланған_биттәр' ),
        'Protectedtitles'           => array( 'Һаҡланған_исемдәр' ),
index f9ee1be..b32067c 100644 (file)
@@ -97,7 +97,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'منی گپ' ),
        'Newimages'                 => array( 'نوکین عکسان' ),
        'Newpages'                  => array( 'نوکین صفحات' ),
-       'Popularpages'              => array( 'مردمی صفحات' ),
        'Preferences'               => array( 'ترجیحات' ),
        'Prefixindex'               => array( 'ایندکس پیشوند' ),
        'Protectedpages'            => array( 'صفحات محافظتی' ),
index 5a2a7a0..2309d79 100644 (file)
@@ -72,7 +72,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Мае_размовы' ),
        'Newimages'                 => array( 'Новыя_файлы' ),
        'Newpages'                  => array( 'Новыя_старонкі' ),
-       'Popularpages'              => array( 'Папулярныя_старонкі' ),
        'Protectedpages'            => array( 'Абароненыя_старонкі' ),
        'Protectedtitles'           => array( 'Забароненыя_старонкі' ),
        'Randompage'                => array( 'Выпадковая_старонка' ),
index 2425817..322255f 100644 (file)
@@ -85,7 +85,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Моята_беседа' ),
        'Newimages'                 => array( 'Нови_файлове' ),
        'Newpages'                  => array( 'Нови_страници' ),
-       'Popularpages'              => array( 'Най-посещавани_страници' ),
        'Preferences'               => array( 'Настройки' ),
        'Prefixindex'               => array( 'Всички_страници_с_представка', 'Представка' ),
        'Protectedpages'            => array( 'Защитени_страници' ),
index 0c9fa26..45a13bf 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'وّرق_ئی_زبان' ),
        'PasswordReset'             => array( 'چیهرگالی_نادینتین' ),
        'PermanentLink'             => array( 'دایمین_لینک' ),
-       'Popularpages'              => array( 'مشهورین_وّرق_ئان' ),
        'Preferences'               => array( 'تنزیمات' ),
        'Prefixindex'               => array( 'دیمۆندین_نمایگ' ),
        'Protectedpages'            => array( 'قُلپ_بوته_ئین_ورق_ئان' ),
index 07246a4..4cd2022 100644 (file)
@@ -99,7 +99,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Barakas_hanyar' ),
        'Newpages'                  => array( 'Tungkaran_hanyar' ),
        'PermanentLink'             => array( 'Tautan_tatap' ),
-       'Popularpages'              => array( 'Tungkaran_popular' ),
        'Preferences'               => array( 'Kakatujuan' ),
        'Protectedpages'            => array( 'Tungkaran_nang_dilindungi' ),
        'Protectedtitles'           => array( 'Judul_nang_dilindungi' ),
index 66cef9e..040beda 100644 (file)
@@ -71,7 +71,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MaC\'haozeadennoù' ),
        'Newimages'                 => array( 'RestroùNevez', 'SkeudennoùNevez' ),
        'Newpages'                  => array( 'PajennoùNevez' ),
-       'Popularpages'              => array( 'PajennoùPoblek' ),
        'Preferences'               => array( 'Penndibaboù' ),
        'Protectedpages'            => array( 'PajennoùGwarezet' ),
        'Protectedtitles'           => array( 'TitloùGwarezet' ),
index e553b7f..a5f33fe 100644 (file)
@@ -90,7 +90,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MojRazgovor' ),
        'Newimages'                 => array( 'Nove_datoteke', 'Nove_slike' ),
        'Newpages'                  => array( 'NoveStranice' ),
-       'Popularpages'              => array( 'PopularneStranice' ),
        'Preferences'               => array( 'Postavke' ),
        'Prefixindex'               => array( 'IndeksPrefiksa' ),
        'Protectedpages'            => array( 'ZasticeneStranice' ),
index f9a58ca..8ae5e4c 100644 (file)
@@ -60,7 +60,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Минии_хэлэлсэл' ),
        'Myuploads'                 => array( 'Минии_ашаалһан_зүйл' ),
        'Newpages'                  => array( 'Шэнэ_хуудаһан' ),
-       'Popularpages'              => array( 'Оло_уншагдаһан_хуудаһан' ),
        'Protectedpages'            => array( 'Хамгаалалтатай_хуудаһан' ),
        'Protectedtitles'           => array( 'Хамгаалалтатай_гаршаг' ),
        'Recentchanges'             => array( 'Сайтдахи_хубилалтанууд' ),
index 29c9a16..9169f97 100644 (file)
@@ -82,7 +82,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Discussió_personal' ),
        'Newimages'                 => array( 'Imatges_noves', 'Fitxers_nous' ),
        'Newpages'                  => array( 'Pàgines_noves' ),
-       'Popularpages'              => array( 'Pàgines_populars' ),
        'Preferences'               => array( 'Preferències' ),
        'Prefixindex'               => array( 'Cerca_per_prefix' ),
        'Protectedpages'            => array( 'Pàgines_protegides' ),
index 1bc4385..f175246 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( '新其頁面' ),
        'PasswordReset'             => array( '密碼重置' ),
        'PermanentLink'             => array( '永久鏈接' ),
-       'Popularpages'              => array( '受歡迎其頁面' ),
        'Preferences'               => array( '喜好' ),
        'Prefixindex'               => array( '前綴索引' ),
        'Protectedpages'            => array( '受保護其頁面' ),
index 514ec17..f146a86 100644 (file)
@@ -126,7 +126,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Керла_агӀонаш' ),
        'PasswordReset'             => array( 'Пароль_кхоссар' ),
        'PermanentLink'             => array( 'Гуттарлера_хьажорг' ),
-       'Popularpages'              => array( 'ГӀараяьлла_агӀонаш' ),
        'Preferences'               => array( 'ГӀирсаш' ),
        'Prefixindex'               => array( 'Хьалха_агӀонийн_цӀераш_хӀотто_еза' ),
        'Protectedpages'            => array( 'ГӀаролла_дина_агӀонаш' ),
index 027161f..cdde53a 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'لێدوانەکەم' ),
        'Newimages'                 => array( 'پەڕگە_نوێکان' ),
        'Newpages'                  => array( 'پەڕە_نوێکان' ),
-       'Popularpages'              => array( 'پەڕە_ناودارەکان' ),
        'Preferences'               => array( 'ھەڵبژاردەکان' ),
        'Protectedpages'            => array( 'پەڕە_پارێزراوەکان' ),
        'Protectedtitles'           => array( 'بابەتە_پارێزراوەکان' ),
index b796aca..609629f 100644 (file)
@@ -98,7 +98,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Moje_diskuse' ),
        'Newimages'                 => array( 'Nové_obrázky', 'Galerie_nových_obrázků', 'Nove_obrazky' ),
        'Newpages'                  => array( 'Nové_stránky', 'Nove_stranky', 'Nejnovější_stránky', 'Nejnovejsi_stranky' ),
-       'Popularpages'              => array( 'Nejnavštěvovanější_stránky', 'Nejnavstevovanejsi_stranky' ),
        'Preferences'               => array( 'Nastavení', 'Nastaveni' ),
        'Protectedpages'            => array( 'Zamčené_stránky', 'Zamcene_stranky' ),
        'Protectedtitles'           => array( 'Zamčené_názvy', 'Zamcene_nazvy', 'Stránky_které_nelze_vytvořit' ),
index 075369e..d2096e9 100644 (file)
@@ -87,7 +87,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Min_diskussionsside' ),
        'Newimages'                 => array( 'Nye_filer' ),
        'Newpages'                  => array( 'Nye_sider' ),
-       'Popularpages'              => array( 'Populære_sider' ),
        'Preferences'               => array( 'Indstillinger' ),
        'Prefixindex'               => array( 'Præfiksindeks' ),
        'Protectedpages'            => array( 'Beskyttede_sider' ),
index c9994e2..b5c1475 100644 (file)
@@ -105,7 +105,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Seitensprache' ),
        'PasswordReset'             => array( 'Passwort_neu_vergeben' ),
        'PermanentLink'             => array( 'Permanenter_Link', 'Permalink' ),
-       'Popularpages'              => array( 'Beliebteste_Seiten' ),
        'Preferences'               => array( 'Einstellungen' ),
        'Prefixindex'               => array( 'Präfixindex' ),
        'Protectedpages'            => array( 'Geschützte_Seiten' ),
index 445aba0..6adf6f1 100644 (file)
@@ -118,7 +118,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Zıwanê_Pele' ),
        'PasswordReset'             => array( 'ParolaPeysereştış' ),
        'PermanentLink'             => array( 'GıreyoDaimi' ),
-       'Popularpages'              => array( 'PelêPopuleri' ),
        'Preferences'               => array( 'Tercihi' ),
        'Prefixindex'               => array( 'VerbendZerrek' ),
        'Protectedpages'            => array( 'PelêKeŞevekiyayiyé' ),
index f291a1d..06b90f3 100644 (file)
@@ -89,7 +89,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mója_diskusija' ),
        'Newimages'                 => array( 'Nowe_dataje' ),
        'Newpages'                  => array( 'Nowe_boki' ),
-       'Popularpages'              => array( 'Woblubowane_boki' ),
        'Preferences'               => array( 'Nastajenja' ),
        'Prefixindex'               => array( 'Indeks_prefiksow' ),
        'Protectedpages'            => array( 'Šćitane_boki' ),
index 0334344..5f239fb 100644 (file)
@@ -117,7 +117,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'ΤαΑρχείαΜου', 'ΤαΑνεβάσματάΜου', 'ΟιΕπιφορτώσειςΜου' ),
        'Newimages'                 => array( 'ΝέαΑρχεία', 'ΝέεςΕικόνες' ),
        'Newpages'                  => array( 'ΝέεςΣελίδες' ),
-       'Popularpages'              => array( 'ΔημοφιλείςΣελίδες' ),
        'Preferences'               => array( 'Προτιμήσεις' ),
        'Prefixindex'               => array( 'ΕυρετήριοΠροθεμάτων' ),
        'Protectedpages'            => array( 'ΠροστατευμένεςΣελίδες' ),
index 57a79bc..4e6f12b 100644 (file)
@@ -644,4 +644,3 @@ $preloadedMessages = array(
        'whatlinkshere',
        'word-separator',
 );
-
index e31710b..958fa6f 100644 (file)
@@ -109,7 +109,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Novaj_paĝoj' ),
        'PasswordReset'             => array( 'Ŝanĝo_de_pasvorto' ),
        'PermanentLink'             => array( 'Daŭra_ligilo' ),
-       'Popularpages'              => array( 'Popularaj_paĝoj' ),
        'Preferences'               => array( 'Preferoj' ),
        'Prefixindex'               => array( 'Indekso_de_prefiksoj' ),
        'Protectedpages'            => array( 'Protektitaj_paĝoj' ),
index 52e363c..dfd97f5 100644 (file)
@@ -99,7 +99,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PáginasNuevas', 'Páginas_nuevas' ),
        'PasswordReset'             => array( 'RestablecerContraseña' ),
        'PermanentLink'             => array( 'EnlacePermanente' ),
-       'Popularpages'              => array( 'PáginasMásVisitadas', 'PáginasPopulares', 'Páginas_más_visitadas' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'PáginasPorPrefijo', 'Páginas_por_prefijo' ),
        'Protectedpages'            => array( 'PáginasProtegidas', 'Páginas_protegidas' ),
index 1aaabd6..b8ef360 100644 (file)
@@ -94,7 +94,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Atribuudiga_leheküljed' ),
        'PasswordReset'             => array( 'Parooli_lähtestamine' ),
        'PermanentLink'             => array( 'Püsilink' ),
-       'Popularpages'              => array( 'Loetumad_leheküljed' ),
        'Preferences'               => array( 'Eelistused' ),
        'Prefixindex'               => array( 'Kõik_pealkirjad_eesliitega' ),
        'Protectedpages'            => array( 'Kaitstud_leheküljed' ),
index dd1cc55..fa359fc 100644 (file)
@@ -105,7 +105,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'زبان_صفحه' ),
        'PasswordReset'             => array( 'بازنشاندن_گذرواژه' ),
        'PermanentLink'             => array( 'پیوند_دائمی' ),
-       'Popularpages'              => array( 'صفحه‌های_محبوب' ),
        'Preferences'               => array( 'ترجیحات' ),
        'Prefixindex'               => array( 'نمایه_پیشوندی' ),
        'Protectedpages'            => array( 'صفحه‌های_محافظت‌شده' ),
index 1219911..fd5db32 100644 (file)
@@ -98,7 +98,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Sivun_kieli' ),
        'PasswordReset'             => array( 'Unohtuneen_salasanan_vaihto' ),
        'PermanentLink'             => array( 'Ikilinkki' ),
-       'Popularpages'              => array( 'Suositut_sivut' ),
        'Preferences'               => array( 'Asetukset' ),
        'Prefixindex'               => array( 'Etuliiteluettelo' ),
        'Protectedpages'            => array( 'Suojatut_sivut' ),
index b9e8b54..b64922e 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Pages_avec_la_propriété' ),
        'PasswordReset'             => array( 'Réinitialisation_du_mot_de_passe', 'RéinitialisationDuMotDePasse' ),
        'PermanentLink'             => array( 'LienPermanent', 'Lien_permanent' ),
-       'Popularpages'              => array( 'Pages_les_plus_visitées', 'Pages_les_plus_visitees', 'Pageslesplusvisitées', 'Pageslesplusvisitees' ),
        'Preferences'               => array( 'Préférences' ),
        'Prefixindex'               => array( 'Index', 'Préfixes', 'Prefixes' ),
        'Protectedpages'            => array( 'Pages_protégées', 'PagesProtégées', 'Pages_protegees', 'PagesProtegees' ),
index 51a0e13..6c25ae9 100644 (file)
@@ -102,7 +102,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Novéls_fichiérs', 'NovélsFichiérs', 'Émâges_novèles', 'ÉmâgesNovèles' ),
        'Newpages'                  => array( 'Pâges_novèles', 'PâgesNovèles' ),
        'PermanentLink'             => array( 'Lim_fixo', 'LimFixo' ),
-       'Popularpages'              => array( 'Pâges_les_ples_consultâs', 'PâgesLesPlesConsultâs' ),
        'Preferences'               => array( 'Prèferences' ),
        'Prefixindex'               => array( 'Endèxe_des_prèfixos', 'EndèxeDesPrèfixos' ),
        'Protectedpages'            => array( 'Pâges_protègiês', 'PâgesProtègiês' ),
index 52fdee8..03ac8e5 100644 (file)
@@ -64,7 +64,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MêsDiscussions' ),
        'Newimages'                 => array( 'GnovisFiguris' ),
        'Newpages'                  => array( 'GnovisPagjinis' ),
-       'Popularpages'              => array( 'PagjinisPopolârs' ),
        'Preferences'               => array( 'Preferencis' ),
        'Prefixindex'               => array( 'Prefìs' ),
        'Protectedpages'            => array( 'PagjinisProtezudis' ),
index e02baf0..473e212 100644 (file)
@@ -94,7 +94,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Myn oerlis' ),
        'Newimages'                 => array( 'Nije ôfbylden', 'Nije ôfbyldings', 'Nije ôfbyldingen', 'List mei nije ôfbylden', 'Nije Ofbylden' ),
        'Newpages'                  => array( 'Nije siden' ),
-       'Popularpages'              => array( 'Populêre siden', 'Grage siden' ),
        'Preferences'               => array( 'Ynstellings', 'Ynsteld' ),
        'Prefixindex'               => array( 'Alle siden neffens foarheaksel' ),
        'Protectedpages'            => array( 'Befeilige siden', 'Skoattele siden' ),
index 390e658..059b8a0 100644 (file)
@@ -66,7 +66,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'SözleşmäkSayfam', 'SözleşmäkYapraım' ),
        'Newimages'                 => array( 'EniDosyeler', 'EniPätretler' ),
        'Newpages'                  => array( 'EniYazılar', 'EniSayfalar', 'EniYapraklar' ),
-       'Popularpages'              => array( 'EnAnılmışSayfalar', 'EnAnılmışYazılar' ),
        'Preferences'               => array( 'Seçimner' ),
        'Prefixindex'               => array( 'Prefiksİndeksi' ),
        'Randompage'                => array( 'Razgele', 'RazgeleYazı', 'RazgeleSayfa', 'RazgeleYaprak' ),
index 8ab5bcc..e00988c 100644 (file)
@@ -113,7 +113,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Páxinas_con_propiedades' ),
        'PasswordReset'             => array( 'Restablecer_o_contrasinal', 'Restablecer_contrasinal' ),
        'PermanentLink'             => array( 'Ligazón_permanente' ),
-       'Popularpages'              => array( 'Páxinas_populares' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'Índice_de_prefixos' ),
        'Protectedpages'            => array( 'Páxinas_protexidas' ),
index d165495..52833cb 100644 (file)
@@ -68,7 +68,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Neji_Syte' ),
        'PasswordReset'             => array( 'Passwort_zruggsetze' ),
        'PermanentLink'             => array( 'Permalink' ),
-       'Popularpages'              => array( 'Beliebteschti_Syte' ),
        'Preferences'               => array( 'Ystellige' ),
        'Prefixindex'               => array( 'Vorsilbeverzeichnis' ),
        'Protectedpages'            => array( 'Gschitzti_Syte' ),
index 3fc9f6b..937b50d 100644 (file)
@@ -74,7 +74,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'મારીચર્ચા' ),
        'Newimages'                 => array( 'નવીફાઇલો', 'નવાંચિત્રો' ),
        'Newpages'                  => array( 'નવાપાનાં' ),
-       'Popularpages'              => array( 'લોકપ્રિયપાનાં' ),
        'Preferences'               => array( 'પસંદ' ),
        'Prefixindex'               => array( 'ઉપસર્ગ' ),
        'Protectedpages'            => array( 'સંરક્ષિતપાનાં' ),
index 3d7fc43..e806118 100644 (file)
@@ -108,7 +108,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'שפת_הדף' ),
        'PasswordReset'             => array( 'איפוס_סיסמה' ),
        'PermanentLink'             => array( 'קישור_קבוע' ),
-       'Popularpages'              => array( 'הדפים_הנצפים_ביותר', 'דפים_פופולריים' ),
        'Preferences'               => array( 'העדפות', 'ההעדפות_שלי' ),
        'Prefixindex'               => array( 'דפים_המתחילים_ב' ),
        'Protectedpages'            => array( 'דפים_מוגנים' ),
index 65077c1..6452b00 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'Moje_datoteke' ),
        'Newimages'                 => array( 'Nove_datoteke', 'Nove_slike' ),
        'Newpages'                  => array( 'Nove_stranice' ),
-       'Popularpages'              => array( 'Popularne_stranice' ),
        'Preferences'               => array( 'Postavke' ),
        'Prefixindex'               => array( 'Prefiks_indeks', 'Stranice_po_prefiksu' ),
        'Protectedpages'            => array( 'Zaštićene_stranice' ),
index fb8fdb3..e06512b 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nowe_dataje' ),
        'Newpages'                  => array( 'Nowe_strony' ),
        'PermanentLink'             => array( 'Trajny_wotkaz' ),
-       'Popularpages'              => array( 'Najwoblubowaniše_strony' ),
        'Preferences'               => array( 'Nastajenja' ),
        'Prefixindex'               => array( 'Prefiksindeks' ),
        'Protectedpages'            => array( 'Škitane_strony' ),
index 18e4a2d..d345fab 100644 (file)
@@ -94,7 +94,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PajNouvo' ),
        'PasswordReset'             => array( 'ResètMopas2' ),
        'PermanentLink'             => array( 'LyenPouToutTan' ),
-       'Popularpages'              => array( 'PajPopilè' ),
        'Preferences'               => array( 'Preferans' ),
        'Prefixindex'               => array( 'EndèksPrefiks' ),
        'Protectedpages'            => array( 'PajPwoteje' ),
index 0019a4b..3309314 100644 (file)
@@ -98,7 +98,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Új_fájlok', 'Új_képek', 'Új_képek_galériája' ),
        'Newpages'                  => array( 'Új_lapok' ),
        'PasswordReset'             => array( 'Jelszó_helyreállítása' ),
-       'Popularpages'              => array( 'Népszerű_lapok', 'Népszerű_oldalak' ),
        'Preferences'               => array( 'Beállításaim' ),
        'Prefixindex'               => array( 'Keresés_előtag_szerint' ),
        'Protectedpages'            => array( 'Védett_lapok' ),
index ea23ef0..1b95c78 100644 (file)
@@ -223,7 +223,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Իմքննարկումները' ),
        'Newimages'                 => array( 'Նորպատկերներ' ),
        'Newpages'                  => array( 'Նորէջերը' ),
-       'Popularpages'              => array( 'Հանրաճանաչէջերը' ),
        'Preferences'               => array( 'Նախընտրությունները' ),
        'Prefixindex'               => array( 'Որոնումնախածանցով' ),
        'Randompage'                => array( 'Պատահականէջ' ),
index 0d4fd18..41f9fdf 100644 (file)
@@ -93,7 +93,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Paginas_nove', 'Nove_paginas' ),
        'PasswordReset'             => array( 'Reinitialisar_contrasigno' ),
        'PermanentLink'             => array( 'Ligamine_permanente' ),
-       'Popularpages'              => array( 'Paginas_popular' ),
        'Preferences'               => array( 'Preferentias' ),
        'Prefixindex'               => array( 'Indice_de_prefixos' ),
        'Protectedpages'            => array( 'Paginas_protegite' ),
index 3510931..1fcfa7e 100644 (file)
@@ -252,7 +252,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Halaman_baru', 'HalamanBaru' ),
        'PasswordReset'             => array( 'Reset_sandi', 'ResetSandi' ),
        'PermanentLink'             => array( 'Pranala_permanen' ),
-       'Popularpages'              => array( 'Halaman_populer', 'HalamanPopuler' ),
        'Preferences'               => array( 'Preferensi' ),
        'Prefixindex'               => array( 'Indeks_awalan', 'IndeksAwalan' ),
        'Protectedpages'            => array( 'Halaman_yang_dilindungi', 'HalamanDilindungi' ),
index 748f82b..699da88 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Nov_págines' ),
        'PasswordReset'             => array( 'Recomensar_parol-clave' ),
        'PermanentLink'             => array( 'Catenun_permanen' ),
-       'Popularpages'              => array( 'Págines_populari' ),
        'Preferences'               => array( 'Preferenties' ),
        'Prefixindex'               => array( 'Index_de_prefixe' ),
        'Protectedpages'            => array( 'Págines_gardat' ),
index effce71..7500a23 100644 (file)
@@ -169,7 +169,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nýjar_myndir' ),
        'Newpages'                  => array( 'Nýjustu_greinar' ),
        'PasswordReset'             => array( 'Endursetja_lykilorð' ),
-       'Popularpages'              => array( 'Vinsælar_síður' ),
        'Preferences'               => array( 'Stillingar' ),
        'Prefixindex'               => array( 'Forskeyti' ),
        'Protectedpages'            => array( 'Verndaðar_síður' ),
index a369d1d..c072a42 100644 (file)
@@ -111,7 +111,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'PagineConProprietà' ),
        'PasswordReset'             => array( 'ReimpostaPassword' ),
        'PermanentLink'             => array( 'LinkPermanente' ),
-       'Popularpages'              => array( 'PaginePiùVisitate' ),
        'Preferences'               => array( 'Preferenze' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PagineProtette' ),
index caca23d..ecf64ab 100644 (file)
@@ -125,7 +125,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'ページ言語' ),
        'PasswordReset'             => array( 'パスワード再設定', 'パスワードの再設定', 'パスワードのリセット', 'パスワードリセット' ),
        'PermanentLink'             => array( '固定リンク', 'パーマリンク' ),
-       'Popularpages'              => array( '人気ページ' ),
        'Preferences'               => array( '個人設定', 'オプション' ),
        'Prefixindex'               => array( '前方一致ページ一覧', '始点指定ページ一覧' ),
        'Protectedpages'            => array( '保護されているページ' ),
index 598f101..01a2b66 100644 (file)
@@ -79,7 +79,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'ჩემი_ატვირთვები' ),
        'Newimages'                 => array( 'ახალი_ფაილები' ),
        'Newpages'                  => array( 'ახალი_გვერდები' ),
-       'Popularpages'              => array( 'პოპგვერდები' ),
        'Preferences'               => array( 'კონფიგურაცია' ),
        'Protectedpages'            => array( 'დაცული_გვერდები' ),
        'Protectedtitles'           => array( 'დაცული_სათაურები' ),
index 44b7224..af1be4f 100644 (file)
@@ -70,7 +70,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Menin\' sa\'wbetim' ),
        'Newimages'                 => array( 'Taza su\'wretler' ),
        'Newpages'                  => array( 'Taza betler' ),
-       'Popularpages'              => array( 'Ko\'p ko\'rilgen betler' ),
        'Preferences'               => array( 'Sazlawlar' ),
        'Protectedpages'            => array( 'Qorg\'alg\'an betler' ),
        'Randompage'                => array( 'Qa\'legen', 'Qa\'legen bet' ),
index 8749ccb..516da1d 100644 (file)
@@ -348,7 +348,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'تالقىلاۋىم' ),
        'Newimages'                 => array( 'جاڭا_سۋرەتتەر' ),
        'Newpages'                  => array( 'جاڭا_بەتتەر' ),
-       'Popularpages'              => array( 'ەڭ_كوپ_قارالعان_بەتتەر', 'ايگىلى_بەتتەر' ),
        'Preferences'               => array( 'باپتالىمدار', 'باپتاۋ' ),
        'Prefixindex'               => array( 'ٴباستاۋىش_ٴتىزىمى' ),
        'Protectedpages'            => array( 'قورعالعان_بەتتەر' ),
index 680c2ea..01aaab9 100644 (file)
@@ -322,7 +322,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Талқылауым' ),
        'Newimages'                 => array( 'Жаңа_суреттер' ),
        'Newpages'                  => array( 'Жаңа_беттер' ),
-       'Popularpages'              => array( 'Ең_көп_қаралған_беттер', 'Әйгілі_беттер' ),
        'Preferences'               => array( 'Бапталымдар', 'Баптау' ),
        'Prefixindex'               => array( 'Бастауыш_тізімі' ),
        'Protectedpages'            => array( 'Қорғалған_беттер' ),
index b7f8c6f..7a9cbaa 100644 (file)
@@ -316,7 +316,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Talqılawım' ),
        'Newimages'                 => array( 'Jaña_swretter' ),
        'Newpages'                  => array( 'Jaña_better' ),
-       'Popularpages'              => array( 'Eñ_köp_qaralğan_better', 'Äýgili_better' ),
        'Preferences'               => array( 'Baptalımdar', 'Baptaw' ),
        'Prefixindex'               => array( 'Bastawış_tizimi' ),
        'Protectedpages'            => array( 'Qorğalğan_better' ),
index 289e5c2..4c41209 100644 (file)
@@ -147,7 +147,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'ទំព័រថ្មីៗ' ),
        'PasswordReset'             => array( 'កំណត់ពាក្យសំងាត់ឡើងវិញ' ),
        'PermanentLink'             => array( 'តំណភ្ជាប់អចិន្ត្រែយ៍' ),
-       'Popularpages'              => array( 'ទំព័រដែលមានប្រជាប្រិយ' ),
        'Preferences'               => array( 'ចំណង់ចំណូលចិត្ត' ),
        'Prefixindex'               => array( 'លិបិក្រមបុព្វបទ' ),
        'Protectedpages'            => array( 'ទំព័របានការពារ' ),
index d34e249..38265ae 100644 (file)
@@ -35,6 +35,7 @@
  * @author Pi.C.Noizecehx
  * @author Priviet
  * @author PuzzletChung
+ * @author Revi
  * @author TheAlpha for knowledge
  * @author ToePeu
  * @author Yjs5497
@@ -139,7 +140,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( '문서언어' ),
        'PasswordReset'             => array( '비밀번호재설정', '비밀번호초기화' ),
        'PermanentLink'             => array( '고유링크', '영구링크' ),
-       'Popularpages'              => array( '인기있는문서' ),
        'Preferences'               => array( '환경설정' ),
        'Prefixindex'               => array( '접두어찾기' ),
        'Protectedpages'            => array( '보호된문서' ),
@@ -339,7 +339,7 @@ $magicWords = array(
        'numberingroup'             => array( '1', '권한별사용자수', '그룹별사용자수', 'NUMBERINGROUP', 'NUMINGROUP' ),
        'staticredirect'            => array( '1', '__넘겨주기고정__', '__STATICREDIRECT__' ),
        'protectionlevel'           => array( '1', '보호수준', 'PROTECTIONLEVEL' ),
-       'cascadingsources'          => array( '1', '계단식원본', 'CASCADINGSOURCES' ),
+       'cascadingsources'          => array( '1', '연쇄식원본', '계단식원본', 'CASCADINGSOURCES' ),
        'formatdate'                => array( '0', '날짜형식', 'formatdate', 'dateformat' ),
        'url_path'                  => array( '0', '경로', 'PATH' ),
        'url_wiki'                  => array( '0', '위키', 'WIKI' ),
index 6b62160..659f97f 100644 (file)
@@ -87,7 +87,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Джангы_бетле' ),
        'PasswordReset'             => array( 'Паролну_ийиу' ),
        'PermanentLink'             => array( 'Дайым_джибериу' ),
-       'Popularpages'              => array( 'Популяр_бетле' ),
        'Preferences'               => array( 'Джарашдырыула' ),
        'Protectedpages'            => array( 'Джакъланнган_бетле' ),
        'Protectedtitles'           => array( 'Джакъланнган_атла' ),
index b1c9d3b..11c1a49 100644 (file)
@@ -158,7 +158,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Ming_Klaafsigg', 'Klaaf' ),
        'Newimages'                 => array( 'Neu_Dateie' ),
        'Newpages'                  => array( 'Neu_Atikelle' ),
-       'Popularpages'              => array( 'Miehts_affjeroofe_Sigge' ),
        'Preferences'               => array( 'Ming_Enstellunge', 'Enstellunge' ),
        'Prefixindex'               => array( 'Sigge_met_Aanfang' ),
        'Protectedpages'            => array( 'Siggeschotz' ),
index b093b58..fc4dbd0 100644 (file)
@@ -118,7 +118,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'FolennowNowyth' ),
        'PasswordReset'             => array( 'DassetyaGerTremena' ),
        'PermanentLink'             => array( 'KevrenFast' ),
-       'Popularpages'              => array( 'FolennowGerysDa' ),
        'Preferences'               => array( 'Dewisyansow' ),
        'Prefixindex'               => array( 'MenegvaRagerow' ),
        'Protectedpages'            => array( 'FolennowDifresys' ),
index 9f3d904..8ea1978 100644 (file)
@@ -120,7 +120,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Disputatio_mea' ),
        'Newimages'                 => array( 'Fasciculi_novi', 'Imagines_novae' ),
        'Newpages'                  => array( 'Paginae_novae' ),
-       'Popularpages'              => array( 'Paginae_saepe_monstratae' ),
        'Preferences'               => array( 'Praeferentiae' ),
        'Prefixindex'               => array( 'Praefixa', 'Quaerere_per_praefixa' ),
        'Protectedpages'            => array( 'Paginae_protectae' ),
index cbeb69e..96d11ae 100644 (file)
@@ -129,7 +129,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'HojasMuevas' ),
        'PasswordReset'             => array( 'Meter_á_zero_el_kóddiche' ),
        'PermanentLink'             => array( 'AtamientoPermanente' ),
-       'Popularpages'              => array( 'HojasMásVisitadas' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'Fijhrist_de_prefiksos' ),
        'Protectedpages'            => array( 'HojasGuardadas' ),
index 203788c..45cde70 100644 (file)
@@ -116,7 +116,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Sprooch_vun_der_Säit' ),
        'PasswordReset'             => array( 'Zrécksetze_vum_Passwuert' ),
        'PermanentLink'             => array( 'Permanente_Link' ),
-       'Popularpages'              => array( 'Beléifst_Säiten' ),
        'Preferences'               => array( 'Astellungen' ),
        'Prefixindex'               => array( 'Indexsich' ),
        'Protectedpages'            => array( 'Protegéiert_Säiten' ),
index 4efd38c..babd32b 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mien_euverlèk' ),
        'Newimages'                 => array( 'Nuuj_plaetjes' ),
        'Newpages'                  => array( 'Nuuj_pagina\'s' ),
-       'Popularpages'              => array( 'Populair_pagina\'s' ),
        'Preferences'               => array( 'Veurkäöre' ),
        'Prefixindex'               => array( 'Alle_artikele' ),
        'Protectedpages'            => array( 'Beveiligde_pagina\'s' ),
index 8cc1a21..b5de509 100644 (file)
@@ -87,7 +87,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mæ Discûscioîn' ),
        'Newimages'                 => array( 'Immaggini reçenti' ),
        'Newpages'                  => array( 'Paggine ciû reçenti' ),
-       'Popularpages'              => array( 'Paggine ciû viscitæ' ),
        'Preferences'               => array( 'Preferense' ),
        'Prefixindex'               => array( 'Prefisci' ),
        'Protectedpages'            => array( 'Paggine protezûe' ),
index 94a7a39..699e904 100644 (file)
@@ -34,6 +34,8 @@ $namespaceNames = array(
 );
 
 $namespaceAliases = array(
+       'پوروجە' => NS_PROJECT,
+       'چأک_چئنە_پوروجە' => NS_PROJECT_TALK,
        'أسگ' => NS_FILE,
        'چأک_چئنە_أسگ' => NS_FILE_TALK,
 );
@@ -106,7 +108,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'بألگە_زوٙن' ),
        'PasswordReset'             => array( 'د_نۊ_زئنە_کئردئن_رازینە_گوڤاردئن' ),
        'PermanentLink'             => array( 'ھوم_پئیڤأند_دایئمی' ),
-       'Popularpages'              => array( 'بألگە_یا_حاستئنی' ),
        'Preferences'               => array( 'میزوٙنکاریا' ),
        'Prefixindex'               => array( 'دئماڤأن_سیاأ' ),
        'Protectedpages'            => array( 'بألگە_یا_پور_و_پیم_بیە' ),
index a2ce260..fdaeecd 100644 (file)
@@ -107,7 +107,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mano_aptarimas' ),
        'Newimages'                 => array( 'Nauji_paveikslėliai' ),
        'Newpages'                  => array( 'Naujausi_puslapiai' ),
-       'Popularpages'              => array( 'Populiarūs_puslapiai' ),
        'Preferences'               => array( 'Nustatymai' ),
        'Prefixindex'               => array( 'Prasidedantys' ),
        'Protectedpages'            => array( 'Užrakinti_puslapiai' ),
index 274b724..874dfb3 100644 (file)
@@ -101,7 +101,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'МоньКорхнемазе' ),
        'Newimages'                 => array( 'ОдНяйфне' ),
        'Newpages'                  => array( 'ОдЛопат' ),
-       'Popularpages'              => array( 'СидестаЛопатне' ),
        'Preferences'               => array( 'Латцематне' ),
        'Prefixindex'               => array( 'ВалынгольксИндекс' ),
        'Protectedpages'            => array( 'АралафЛопат' ),
index 4c962ad..3e4bfd5 100644 (file)
@@ -187,7 +187,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Fitenim-pejy', 'Fitenimpejy' ),
        'PasswordReset'             => array( 'Famerenan-tenimiafina', 'Famerenantenimiafina' ),
        'PermanentLink'             => array( 'Rohy_maharitra', 'RohyMaharitra' ),
-       'Popularpages'              => array( 'Pejy_be_mpitsidika_indrindra' ),
        'Preferences'               => array( 'Safidy' ),
        'Prefixindex'               => array( 'Index' ),
        'Protectedpages'            => array( 'Pejy_voaaro' ),
index 451e373..cbe9a8f 100644 (file)
@@ -116,7 +116,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'LamanJoProperti', 'Laman_jo_properti' ),
        'PasswordReset'             => array( 'TukaSandi', 'Tuka_baliak_sandi' ),
        'PermanentLink'             => array( 'PautanPamanen', 'Pautan_pamanen' ),
-       'Popularpages'              => array( 'LamanPopuler', 'Laman_populer' ),
        'Preferences'               => array( 'Rujuakan' ),
        'Prefixindex'               => array( 'DaptaAwalan' ),
        'Protectedpages'            => array( 'LamanTalinduang', 'Laman_nan_dilinduang' ),
index 9f74d16..3c7b31d 100644 (file)
@@ -159,7 +159,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'ЈазикНаСтраницата' ),
        'PasswordReset'             => array( 'ПроменаНаЛозинка' ),
        'PermanentLink'             => array( 'ПостојанаВрска' ),
-       'Popularpages'              => array( 'ПопуларниСтраници' ),
        'Preferences'               => array( 'Нагодувања' ),
        'Prefixindex'               => array( 'ИндексНаПретставки' ),
        'Protectedpages'            => array( 'ЗаштитениСтраници' ),
index d23e47f..4de1f31 100644 (file)
@@ -148,7 +148,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'താളിന്റെഭാഷ' ),
        'PasswordReset'             => array( 'രഹസ്യവാക്ക്‌‌പുനക്രമീകരണം' ),
        'PermanentLink'             => array( 'സ്ഥിരംകണ്ണി' ),
-       'Popularpages'              => array( 'ജനപ്രിയതാളുകൾ' ),
        'Preferences'               => array( 'ക്രമീകരണങ്ങൾ' ),
        'Prefixindex'               => array( 'പൂർവ്വപദസൂചിക' ),
        'Protectedpages'            => array( 'സംരക്ഷിത_താളുകൾ' ),
index 5cdb35f..8c284e4 100644 (file)
@@ -128,7 +128,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'माझ्या_चर्चा' ),
        'Newimages'                 => array( 'नवीन_संचिका', 'नवीन_चित्रे' ),
        'Newpages'                  => array( 'नवीन_पाने' ),
-       'Popularpages'              => array( 'प्रसिद्ध_पाने' ),
        'Preferences'               => array( 'पसंती' ),
        'Prefixindex'               => array( 'उपसर्गसुची' ),
        'Protectedpages'            => array( 'सुरक्षित_पाने' ),
index fb972b0..69d5652 100644 (file)
@@ -170,7 +170,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Bahasa_laman' ),
        'PasswordReset'             => array( 'Tetap_semula_kata_kunci' ),
        'PermanentLink'             => array( 'Pautan_kekal' ),
-       'Popularpages'              => array( 'Laman_popular' ),
        'Preferences'               => array( 'Keutamaan' ),
        'Prefixindex'               => array( 'Indeks_awalan' ),
        'Protectedpages'            => array( 'Laman_dilindungi' ),
index 2529cc9..a043864 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'DiskussjonijietTiegħi' ),
        'Newimages'                 => array( 'StampiĠodda', 'FajlsĠodda' ),
        'Newpages'                  => array( 'PaġniĠodda' ),
-       'Popularpages'              => array( 'PaġniPopolari' ),
        'Preferences'               => array( 'Preferenzi' ),
        'Prefixindex'               => array( 'IndiċiPrefiss' ),
        'Protectedpages'            => array( 'PaġniProtetti' ),
index ac3342b..fe3db11 100644 (file)
@@ -79,7 +79,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'МоньКортамом' ),
        'Newimages'                 => array( 'ОдАртовкст' ),
        'Newpages'                  => array( 'ОдЛопат' ),
-       'Popularpages'              => array( 'ЛисийСовийМартоЛопат' ),
        'Protectedpages'            => array( 'ВанстоньЛопат' ),
        'Protectedtitles'           => array( 'ВанстоньКонякст' ),
        'Randompage'                => array( 'КодамоПонгсьЛопа' ),
index 6f9cf1f..08d3e93 100644 (file)
@@ -160,7 +160,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Sider_med_egenskap' ),
        'PasswordReset'             => array( 'Nullstill_passord' ),
        'PermanentLink'             => array( 'Permanent_lenke' ),
-       'Popularpages'              => array( 'Populære_sider' ),
        'Preferences'               => array( 'Innstillinger' ),
        'Prefixindex'               => array( 'Prefiksindeks' ),
        'Protectedpages'            => array( 'Beskyttede_sider' ),
index f87d770..87f460f 100644 (file)
@@ -179,7 +179,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Miene Diskuschoonssiet' ),
        'Newimages'                 => array( 'Nee Datein' ),
        'Newpages'                  => array( 'Nee Sieden' ),
-       'Popularpages'              => array( 'Veel besöchte Sieden' ),
        'Preferences'               => array( 'Instellungen' ),
        'Prefixindex'               => array( 'Sieden de anfangt mit' ),
        'Protectedpages'            => array( 'Schuulte Sieden' ),
index 5e82e82..7625fef 100644 (file)
@@ -278,7 +278,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Ziejen_mit_eigenschap' ),
        'PasswordReset'             => array( 'Wachtwoord_opniej_instellen' ),
        'PermanentLink'             => array( 'Vaste_verwiezing' ),
-       'Popularpages'              => array( 'Populaere_artikels' ),
        'Preferences'               => array( 'Veurkeuren' ),
        'Prefixindex'               => array( 'Veurvoegselindex' ),
        'Protectedpages'            => array( 'Beveiligden_ziejen' ),
index 7d7fa05..27af255 100644 (file)
@@ -335,7 +335,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Paginataal' ),
        'PasswordReset'             => array( 'WachtwoordOpnieuwInstellen' ),
        'PermanentLink'             => array( 'PermanenteVerwijzing' ),
-       'Popularpages'              => array( 'PopulairePaginas', 'PopulairePagina’s', 'PopulairePagina\'s' ),
        'Preferences'               => array( 'Voorkeuren' ),
        'Prefixindex'               => array( 'Voorvoegselindex' ),
        'Protectedpages'            => array( 'BeveiligdePaginas', 'BeveiligdePagina\'s', 'BeschermdePaginas', 'BeschermdePagina’s', 'BeschermdePagina\'s' ),
index 606f720..4cdb3d7 100644 (file)
@@ -274,7 +274,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nye_filer' ),
        'Newpages'                  => array( 'Nye_sider' ),
        'PermanentLink'             => array( 'Permanent_lenkje', 'Permanent_lenke' ),
-       'Popularpages'              => array( 'Populære_sider' ),
        'Preferences'               => array( 'Innstillingar' ),
        'Prefixindex'               => array( 'Prefiksindeks' ),
        'Protectedpages'            => array( 'Verna_sider' ),
index 64220d8..443cd90 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mas_discussions', 'Masdiscussions' ),
        'Newimages'                 => array( 'Imatges_novèls', 'ImatgesNovèls' ),
        'Newpages'                  => array( 'Paginas_novèlas' ),
-       'Popularpages'              => array( 'Paginas_mai_visitadas', 'Paginas_las_mai_visitadas', 'Paginasmaivisitadas' ),
        'Preferences'               => array( 'Preferéncias' ),
        'Prefixindex'               => array( 'Indèx' ),
        'Protectedpages'            => array( 'Paginas_protegidas' ),
index f3bea17..5df9cdf 100644 (file)
@@ -131,7 +131,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'ନୂଆଫାଇଲ' ),
        'Newpages'                  => array( 'ନୂଆପୃଷ୍ଠା' ),
        'PermanentLink'             => array( 'ଚିରକାଳଲିଙ୍କ' ),
-       'Popularpages'              => array( 'ଜଣାଶୁଣାପୃଷ୍ଠା' ),
        'Preferences'               => array( 'ପସନ୍ଦ' ),
        'Prefixindex'               => array( 'ଆଗରେଯୋଡ଼ାହେବାଇଣ୍ଡେକ୍ସ' ),
        'Protectedpages'            => array( 'କିଳାଯାଇଥିବାପୃଷ୍ଠା' ),
index 3c65610..1790209 100644 (file)
@@ -109,7 +109,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'НогФæрстæ' ),
        'PasswordReset'             => array( 'ПарольНогКæнын' ),
        'PermanentLink'             => array( 'УдгасÆрвитæн' ),
-       'Popularpages'              => array( 'АрæхФæрстæ' ),
        'Preferences'               => array( 'Уагæвæрдтæ' ),
        'Prefixindex'               => array( 'РазæфтуантыИндекс' ),
        'Protectedpages'            => array( 'ÆхгæдФæрстæ' ),
index 3e3090c..988e0b0 100644 (file)
@@ -128,7 +128,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'ਸਫ਼ੇ_ਦੀ_ਭਾਸ਼ਾ' ),
        'PasswordReset'             => array( 'ਪਾਸਵਰਡ_ਰੀਸੈੱਟ' ),
        'PermanentLink'             => array( 'ਪੱਕਾ_ਲਿੰਕ', 'ਪੱਕੀ_ਕੜੀ' ),
-       'Popularpages'              => array( 'ਮਸ਼ਹੂਰ_ਸਫ਼ੇ' ),
        'Preferences'               => array( 'ਪਸੰਦਾਂ' ),
        'Prefixindex'               => array( 'ਅਗੇਤਰ_ਤਤਕਰਾ' ),
        'Protectedpages'            => array( 'ਸੁਰੱਖਿਅਤ_ਸਫ਼ੇ' ),
index 4c82276..8f1fbf4 100644 (file)
@@ -187,7 +187,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Strony_z_własnością' ),
        'PasswordReset'             => array( 'Wyczyść_hasło' ),
        'PermanentLink'             => array( 'Niezmienny_link' ),
-       'Popularpages'              => array( 'Popularne_strony' ),
        'Preferences'               => array( 'Preferencje' ),
        'Prefixindex'               => array( 'Strony_według_prefiksu' ),
        'Protectedpages'            => array( 'Zabezpieczone_strony' ),
index fbc9419..df393a6 100644 (file)
@@ -64,7 +64,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'زما_خبرې_اترې' ),
        'Newimages'                 => array( 'نوي_انځورونه' ),
        'Newpages'                  => array( 'نوي_مخونه' ),
-       'Popularpages'              => array( 'نامتومخونه' ),
        'Preferences'               => array( 'غوره_توبونه' ),
        'Prefixindex'               => array( 'د_مختاړيو_ليکلړ' ),
        'Protectedpages'            => array( 'ژغورلي_مخونه' ),
index 7a293f6..814a7f4 100644 (file)
@@ -174,7 +174,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Propriedades_de_página' ),
        'PasswordReset'             => array( 'Redefinir_autenticação' ),
        'PermanentLink'             => array( 'Ligação_permanente', 'Link_permanente' ),
-       'Popularpages'              => array( 'Páginas_populares', 'Artigos_populares' ),
        'Preferences'               => array( 'Preferências' ),
        'Prefixindex'               => array( 'Índice_por_prefixo', 'Índice_de_prefixo' ),
        'Protectedpages'            => array( 'Páginas_protegidas', 'Artigos_protegidos' ),
index 8a63470..cc69fd4 100644 (file)
@@ -177,7 +177,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Arquivos_novos', 'Imagens_novas', 'Ficheiros_novos' ),
        'Newpages'                  => array( 'Páginas_novas', 'Artigos_novos' ),
        'PermanentLink'             => array( 'Ligação_permanente', 'Link_permanente' ),
-       'Popularpages'              => array( 'Páginas_populares', 'Artigos_populares' ),
        'Preferences'               => array( 'Preferências' ),
        'Prefixindex'               => array( 'Índice_de_prefixo', 'Índice_por_prefixo' ),
        'Protectedpages'            => array( 'Páginas_protegidas', 'Artigos_protegidos' ),
index 97afe6b..9a3b57e 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'MusuqPanqa' ),
        'PasswordReset'             => array( 'YaykunaRimaKutichina' ),
        'PermanentLink'             => array( 'KakuqTinki' ),
-       'Popularpages'              => array( 'WatukuqsapaPanqa', 'RikuqsapaPanqa', 'QhawaqsapaPanqa' ),
        'Preferences'               => array( 'Allinkachina', 'Allinkachinakuna' ),
        'Prefixindex'               => array( 'QallarinaKaskaSutisuyu' ),
        'Protectedpages'            => array( 'AmachasqaPanqa' ),
index 3d62d43..b13be7b 100644 (file)
@@ -243,7 +243,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Imagini_noi' ),
        'Newpages'                  => array( 'Pagini_noi' ),
        'PasswordReset'             => array( 'Resetare_parolă' ),
-       'Popularpages'              => array( 'Pagini_populare' ),
        'Preferences'               => array( 'Preferințe' ),
        'Prefixindex'               => array( 'Index' ),
        'Protectedpages'            => array( 'Pagini_protejate' ),
index a74c9db..1c5e371 100644 (file)
@@ -194,7 +194,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Новые_страницы' ),
        'PasswordReset'             => array( 'Сброс_пароля' ),
        'PermanentLink'             => array( 'Постоянная_ссылка' ),
-       'Popularpages'              => array( 'Популярные_страницы' ),
        'Preferences'               => array( 'Настройки' ),
        'Prefixindex'               => array( 'Указатель_по_началу_названия' ),
        'Protectedpages'            => array( 'Защищённые_страницы' ),
index cb23741..255ed66 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Новы_сторінкы' ),
        'PasswordReset'             => array( 'Ресет_гесла' ),
        'PermanentLink'             => array( 'Тырвалый_одказ' ),
-       'Popularpages'              => array( 'Популарны_сторінкы' ),
        'Preferences'               => array( 'Наставлїня' ),
        'Protectedpages'            => array( 'Замкнуты_сторінкы' ),
        'Protectedtitles'           => array( 'Замкнуты_назвы' ),
index 423055a..35bc37a 100644 (file)
@@ -142,7 +142,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'नूतनसंचिका', 'नूतनचित्रानि' ),
        'Newpages'                  => array( 'नूतनपृष्टानि' ),
        'PasswordReset'             => array( 'सङ्केतशब्दपुन:प्रयु्क्ता' ),
-       'Popularpages'              => array( 'लोकप्रियपृष्टानि' ),
        'Preferences'               => array( 'इष्टतमानि' ),
        'Prefixindex'               => array( 'उपसर्गअनुक्रमणी' ),
        'Protectedpages'            => array( 'सुरक्षितपृष्टानि' ),
index 6cc09a9..9016a0b 100644 (file)
@@ -110,7 +110,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PaginePiùRecenti' ),
        'PasswordReset'             => array( 'ReimpostaPassword' ),
        'PermanentLink'             => array( 'LinkPermanente' ),
-       'Popularpages'              => array( 'PaginePiùVisitate' ),
        'Preferences'               => array( 'Preferenze' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PagineProtette' ),
index adfc05e..2339c07 100644 (file)
@@ -66,7 +66,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'مون سان ڳالهه' ),
        'Newimages'                 => array( 'نوان عڪس' ),
        'Newpages'                  => array( 'نوان صفحا' ),
-       'Popularpages'              => array( 'مقبول صفحا' ),
        'Preferences'               => array( 'ترجيحات' ),
        'Prefixindex'               => array( 'اڳياڙي ڏسڻي' ),
        'Protectedpages'            => array( 'تحفظيل صفحا' ),
index 4ab9c11..fe98236 100644 (file)
@@ -68,7 +68,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MéDischussioni' ),
        'Newimages'                 => array( 'ImmaginiRizzenti' ),
        'Newpages'                  => array( 'PàginiPiùRizzenti' ),
-       'Popularpages'              => array( 'PàginiPiùVisitaddi' ),
        'Preferences'               => array( 'Prifirènzi' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PàginiPrutiggiddi' ),
index 1917f32..66fa2e4 100644 (file)
@@ -80,7 +80,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mu_ságastallan' ),
        'Newimages'                 => array( 'Ođđa_govat', 'Ođđa_fiillat' ),
        'Newpages'                  => array( 'Ođđa_siiddut' ),
-       'Popularpages'              => array( 'Bivnnuhis_siiddut' ),
        'Preferences'               => array( 'Válljemat', 'Ásahusat' ),
        'Protectedpages'            => array( 'Suodjaluvvon_siiddut' ),
        'Protectedtitles'           => array( 'Suodjaluvvon_bajilčállagat', 'Suodjaluvvon_siidonamat' ),
index f8aa19f..9fb137a 100644 (file)
@@ -76,7 +76,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'Moje_postavljene_datoteke' ),
        'Newimages'                 => array( 'Nove_datoteke', 'Nove_slike' ),
        'Newpages'                  => array( 'Nove_stranice' ),
-       'Popularpages'              => array( 'Popularne_stranice' ),
        'Preferences'               => array( 'Postavke' ),
        'Prefixindex'               => array( 'Prefiks_indeks', 'Stranice_po_prefiksu' ),
        'Protectedpages'            => array( 'Zaštićene_stranice' ),
index 1ac48a0..e13e014 100644 (file)
@@ -107,7 +107,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'මගේ_සාකච්ඡාව' ),
        'Newimages'                 => array( 'නව_ගොනු', 'නව_රූප' ),
        'Newpages'                  => array( 'නව_පිටුව' ),
-       'Popularpages'              => array( 'ජනප්‍රිය_පිටු' ),
        'Preferences'               => array( 'අභිරුචියන්' ),
        'Prefixindex'               => array( 'උපසර්ග_සූචිය' ),
        'Protectedpages'            => array( 'ආරක්‍ෂිත_පිටුව' ),
index 83155da..26d474f 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MojaDiskusia' ),
        'Newimages'                 => array( 'NovéSúbory' ),
        'Newpages'                  => array( 'NovéStránky' ),
-       'Popularpages'              => array( 'PopulárneStránky' ),
        'Preferences'               => array( 'Nastavenia' ),
        'Prefixindex'               => array( 'IndexPredpon' ),
        'Protectedpages'            => array( 'ZamknutéStránky' ),
index ea6b569..bc7afb9 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MojPogovor' ),
        'Newimages'                 => array( 'NoveDatoteke', 'NoveSlike' ),
        'Newpages'                  => array( 'NoveStrani' ),
-       'Popularpages'              => array( 'PriljubljeneStrani' ),
        'Preferences'               => array( 'Nastavitve' ),
        'Protectedpages'            => array( 'ZaščiteneStrani' ),
        'Protectedtitles'           => array( 'ZaščiteniNaslovi' ),
index 71180c3..c647010 100644 (file)
@@ -96,7 +96,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'NgarkimeteMia' ),
        'Newimages'                 => array( 'SkedaTëReja' ),
        'Newpages'                  => array( 'FaqeteReja' ),
-       'Popularpages'              => array( 'FaqetëFamshme' ),
        'Preferences'               => array( 'Preferencat' ),
        'Protectedpages'            => array( 'FaqeteMbrojtura' ),
        'Protectedtitles'           => array( 'TitujteMbrojtur' ),
index 0f89cca..a325067 100644 (file)
@@ -143,7 +143,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'НовеДатотеке', 'НовиФајлови', 'НовеСлике' ),
        'Newpages'                  => array( 'НовеСтране' ),
        'PermanentLink'             => array( 'Привремена_веза' ),
-       'Popularpages'              => array( 'Популарне_странице' ),
        'Preferences'               => array( 'Подешавања', 'Поставке' ),
        'Protectedpages'            => array( 'ЗаштићенеСтранице', 'Заштићене_странице' ),
        'Protectedtitles'           => array( 'ЗаштићениНаслови', 'Заштићени_наслови' ),
index 9092e9e..b4643f0 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'ObrolanKuring' ),
        'Newimages'                 => array( 'GambarAnyar' ),
        'Newpages'                  => array( 'KacaAnyar' ),
-       'Popularpages'              => array( 'KacaPayu' ),
        'Preferences'               => array( 'Preferensi' ),
        'Prefixindex'               => array( 'IndeksAwalan' ),
        'Protectedpages'            => array( 'KacaDikonci' ),
index 48e3511..f85659f 100644 (file)
@@ -156,7 +156,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Sidspråk' ),
        'PasswordReset'             => array( 'Återställ_lösenord' ),
        'PermanentLink'             => array( 'Permanent_länk' ),
-       'Popularpages'              => array( 'Populära_sidor' ),
        'Preferences'               => array( 'Inställningar' ),
        'Protectedpages'            => array( 'Skyddade_sidor' ),
        'Protectedtitles'           => array( 'Skyddade_titlar' ),
index c653de3..311b6cc 100644 (file)
@@ -89,7 +89,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MajadilianoYangu' ),
        'Newimages'                 => array( 'FailiMpya', 'FailimpyazaPicha' ),
        'Newpages'                  => array( 'KurasaMpya' ),
-       'Popularpages'              => array( 'KurasaMaarufu' ),
        'Preferences'               => array( 'Mapendekezo' ),
        'Prefixindex'               => array( 'KurasaKuu' ),
        'Protectedpages'            => array( 'KurasaZilizolindwa' ),
index 5a5e44b..808df08 100644 (file)
@@ -101,7 +101,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'నాచర్చ' ),
        'Newimages'                 => array( 'కొత్తఫైళ్లు', 'కొత్తబొమ్మలు' ),
        'Newpages'                  => array( 'కొత్తపేజీలు' ),
-       'Popularpages'              => array( 'ప్రాచుర్యంపొందినపేజీలు' ),
        'Preferences'               => array( 'అభిరుచులు' ),
        'Protectedpages'            => array( 'సంరక్షితపేజీలు' ),
        'Randompage'                => array( 'యాదృచ్చికపేజీ' ),
index 140073a..99b2ab4 100644 (file)
@@ -110,7 +110,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'หน้าใหม่' ),
        'PasswordReset'             => array( 'ตั้งรหัสผ่านใหม่' ),
        'PermanentLink'             => array( 'ลิงก์ถาวร' ),
-       'Popularpages'              => array( 'หน้าที่ได้รับความนิยม' ),
        'Preferences'               => array( 'การตั้งค่า', 'ตั้งค่า' ),
        'Prefixindex'               => array( 'ดัชนีตามคำขึ้นต้น' ),
        'Protectedpages'            => array( 'หน้าที่ถูกป้องกัน' ),
index 799dc34..c111a02 100644 (file)
@@ -104,7 +104,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Bagong_mga_pahina' ),
        'PasswordReset'             => array( 'Muling_Pagtatakda_ng_Hudyat' ),
        'PermanentLink'             => array( 'Pamalagiang_Kawing' ),
-       'Popularpages'              => array( 'Sikat_na_mga_pahina' ),
        'Preferences'               => array( 'Mga_nais' ),
        'Prefixindex'               => array( 'Talatuntunan_ng_unlapi' ),
        'Protectedpages'            => array( 'Mga_pahinang_nakasanggalang' ),
index 0f61a96..ffd23f7 100644 (file)
@@ -153,7 +153,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'YeniSayfalar' ),
        'PasswordReset'             => array( 'ParolaSıfırlama' ),
        'PermanentLink'             => array( 'KalıcıBağ' ),
-       'Popularpages'              => array( 'PopülerSayfalar' ),
        'Preferences'               => array( 'Tercihler', 'Ayarlar' ),
        'Prefixindex'               => array( 'ÖnekDizini' ),
        'Protectedpages'            => array( 'KorunanSayfalar' ),
index 0487c8f..8a61e33 100644 (file)
@@ -145,7 +145,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Бәхәсем' ),
        'Newimages'                 => array( 'Яңа_файл' ),
        'Newpages'                  => array( 'Яңа_бит' ),
-       'Popularpages'              => array( 'Популяр_битләр' ),
        'Preferences'               => array( 'Көйләнмәләр' ),
        'Protectedpages'            => array( 'Якланган_битләр' ),
        'Protectedtitles'           => array( 'Якланган_башлыклар' ),
index 2caaefa..4cc1859 100644 (file)
@@ -176,7 +176,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Нові_сторінки' ),
        'PasswordReset'             => array( 'Скинути_пароль' ),
        'PermanentLink'             => array( 'Постійне_посилання' ),
-       'Popularpages'              => array( 'Популярні_сторінки' ),
        'Preferences'               => array( 'Налаштування' ),
        'Prefixindex'               => array( 'Покажчик_за_початком_назви' ),
        'Protectedpages'            => array( 'Захищені_сторінки' ),
index 81a6d2f..1de001a 100644 (file)
@@ -104,7 +104,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'جدید_املاف', 'جدید_تصاویر' ),
        'Newpages'                  => array( 'جدید_صفحات' ),
        'PermanentLink'             => array( 'مستقل_ربط' ),
-       'Popularpages'              => array( 'مقبول_صفحات' ),
        'Preferences'               => array( 'ترجیحات' ),
        'Prefixindex'               => array( 'اشاریہ_سابقہ' ),
        'Protectedpages'            => array( 'محفوظ_صفحات' ),
index 9242d83..ebfc64a 100644 (file)
@@ -117,7 +117,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PagineNove' ),
        'PasswordReset'             => array( 'ReinpostaPassword' ),
        'PermanentLink'             => array( 'LinkParmanente' ),
-       'Popularpages'              => array( 'PaginePiassèVisità' ),
        'Preferences'               => array( 'Preferense' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PagineProtete' ),
index 2724a60..56ee88c 100644 (file)
@@ -125,7 +125,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Ngôn_ngữ_trang' ),
        'PasswordReset'             => array( 'Tái_tạo_mật_khẩu', 'Đặt_lại_mật_khẩu' ),
        'PermanentLink'             => array( 'Liên_kết_thường_trực' ),
-       'Popularpages'              => array( 'Trang_phổ_biến' ),
        'Preferences'               => array( 'Tùy_chọn', 'Tuỳ_chọn' ),
        'Prefixindex'               => array( 'Tiền_tố' ),
        'Protectedpages'            => array( 'Trang_khóa', 'Trang_khoá' ),
index ed61df4..37d7015 100644 (file)
@@ -110,7 +110,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'מיינע_ארויפלאדונגען' ),
        'Newimages'                 => array( 'נייע_בילדער' ),
        'Newpages'                  => array( 'נייע_בלעטער' ),
-       'Popularpages'              => array( 'פאפולערע_בלעטער' ),
        'Preferences'               => array( 'פרעפערענצן' ),
        'Prefixindex'               => array( 'בלעטער_וואס_הייבן_אן_מיט' ),
        'Protectedpages'            => array( 'געשיצטע_בלעטער' ),
index 8c4c93f..e1bb672 100644 (file)
@@ -151,7 +151,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( '新版' ),
        'PasswordReset'             => array( '重設密碼' ),
        'PermanentLink'             => array( '永久鏈' ),
-       'Popularpages'              => array( '最歡迎頁' ),
        'Preferences'               => array( '喜好設定' ),
        'Prefixindex'               => array( '全部頁嘅前綴' ),
        'Protectedpages'            => array( '保護頁' ),
index 8ee87f0..617dd46 100644 (file)
@@ -144,7 +144,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( '新建文件', '新建檔案' ),
        'Newpages'                  => array( '最新页面', '最新頁面' ),
        'PasswordReset'             => array( '重置密码', '重設密碼' ),
-       'Popularpages'              => array( '热点页面', '熱點頁面' ),
        'Preferences'               => array( '参数设置', '偏好設定', '參數設置' ),
        'Prefixindex'               => array( '前缀索引', '前綴索引', '字首索引' ),
        'Protectedpages'            => array( '已保护页面', '已保護頁面' ),
index 84d4373..57c9a61 100644 (file)
@@ -199,7 +199,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( '页面语言' ),
        'PasswordReset'             => array( '重设密码' ),
        'PermanentLink'             => array( '固定链接', '永久链接' ),
-       'Popularpages'              => array( '热点页面' ),
        'Preferences'               => array( '参数设置', '设置' ),
        'Prefixindex'               => array( '前缀索引' ),
        'Protectedpages'            => array( '已保护页面' ),
index 6e5dea1..1f6bcfa 100644 (file)
@@ -183,7 +183,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( '頁面語言' ),
        'PasswordReset'             => array( '重設密碼' ),
        'PermanentLink'             => array( '靜態連結', '永久連結' ),
-       'Popularpages'              => array( '熱門頁面', '熱點頁面' ),
        'Preferences'               => array( '偏好設定' ),
        'Prefixindex'               => array( '字首索引', '前綴索引' ),
        'Protectedpages'            => array( '受保護頁面', '已保護頁面' ),
index f19c64f..8e4e531 100644 (file)
@@ -3001,9 +3001,6 @@ outreachwiki
 over
 overridable
 override
-oversight
-oversighted
-oversighter
 overwrite
 overwroteimage
 own
@@ -4244,8 +4241,6 @@ unmakesafe
 unmark
 unmerge
 unmodified
-unoversight
-unoversighted
 unpadded
 unpatrolled
 unpatrolledletter
index 91c60c1..4899143 100644 (file)
@@ -46,7 +46,6 @@ s23wiki|http://s23.org/wiki/$1|0|http://s23.org/w/api.php
 seattlewireless|http://seattlewireless.net/$1|0|
 senseislibrary|http://senseis.xmp.net/?$1|0|
 shoutwiki|http://www.shoutwiki.com/wiki/$1|0|http://www.shoutwiki.com/w/api.php
-sourceforge|http://sourceforge.net/$1|0|
 sourcewatch|http://www.sourcewatch.org/index.php?title=$1|0|http://www.sourcewatch.org/api.php
 squeak|http://wiki.squeak.org/squeak/$1|0|
 tejo|http://www.tejo.org/vikio/$1|0|
index 0628773..12352e7 100644 (file)
@@ -48,7 +48,6 @@ REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local,iw_api) VALUES
 ('seattlewireless','http://seattlewireless.net/$1',0,''),
 ('senseislibrary','http://senseis.xmp.net/?$1',0,''),
 ('shoutwiki','http://www.shoutwiki.com/wiki/$1',0,'http://www.shoutwiki.com/w/api.php'),
-('sourceforge','http://sourceforge.net/$1',0,''),
 ('sourcewatch','http://www.sourcewatch.org/index.php?title=$1',0,'http://www.sourcewatch.org/api.php'),
 ('squeak','http://wiki.squeak.org/squeak/$1',0,''),
 ('tejo','http://www.tejo.org/vikio/$1',0,''),
index 2d3a922..3a00bd4 100644 (file)
 分佈著      分布着
 散布著      散布着
 散佈著      散布着
+遍佈著      遍布着
+遍布著      遍布着
 三十六著   三十六着
 走為上著   走为上着
 記憶體      内存
 數位照相機        数码照相机
 單眼相機   单反相机
 單鏡反光機        单反相机
+桌上型電腦        台式电脑
 韌體 固件
 唯讀 只读
 作業系統   操作系统
@@ -2512,6 +2515,7 @@ IP位址  IP地址
 結他 吉他
 了結他      了结他
 連結他      连结他
+鏈結 链接
 已開發國家        发达国家
 太空飛行員        宇航员
 太空衣      宇航服
index 69bce98..525100e 100644 (file)
@@ -41,6 +41,7 @@
 分布 分佈
 分布于      分佈於
 宣布 宣佈
+承宣布政   承宣布政
 公布 公佈
 摆布 擺佈
 擺布 擺佈
 分佈著      分佈着
 散布著      散佈着
 散佈著      散佈着
+遍佈著      遍佈着
+遍布著      遍佈着
 三十六著   三十六着
 走為上著   走為上着
 鬧著 鬧着
@@ -2884,6 +2887,7 @@ IP地址  IP位址
 数字照相机        数碼照相機
 單眼相機   單鏡反光機
 单反相机   單鏡反光機
+台式电脑   桌上型電腦
 形上學      形而上學
 吉尼斯世界纪录  健力士世界紀錄
 吉他 結他
index 6c93bb5..22456a7 100644 (file)
 磁盘 磁碟
 磁道 磁軌
 端口 埠
-算子 運算元
 芯片 晶片
 译码 解碼
 软驱 軟碟機
 数据库      資料庫
 打印机      印表機
 打印機      印表機
-字节 位元組
-字節 位元組
 打印 列印
-攻打印      攻打印
+攻打 攻打 #分詞用
+打印度      打印度
 硬件 硬體
 二极管      二極體
 二極管      二極體
@@ -650,6 +648,7 @@ IP地址    IP位址
 数码照相机        數位照相機
 數碼照相機        數位照相機
 单反相机   單眼相機
+台式电脑   桌上型電腦
 形而上學   形上學
 形而上学   形上學
 当且仅当   若且唯若
@@ -733,6 +732,8 @@ IP地址    IP位址
 數碼訊號   數位訊號
 移动网络   行動網路
 流動網絡   行動網路
+网络游戏   網路遊戲
+網絡遊戲   網路遊戲
 咪高峰      麥克風
 電單車      機車
 搜索引擎   搜尋引擎
index b23faef..13a0b98 100644 (file)
@@ -2,7 +2,7 @@
 “    「
 ‘    『
 ’    』
-’s   ’s
+’s   ’s
 手塚治虫   手塚治虫
 無言不仇   無言不讎
 視如寇仇   視如寇讎
@@ -69,9 +69,6 @@
 乾象曆      乾象曆
 乾象历      乾象曆
 不好干預   不好干預
-不干預      不干預
-不干擾      不干擾
-不干牠      不干牠
 范文瀾      范文瀾
 機械系      機械系
 頂多 頂多
 員山庄      員山庄
 昵称 暱稱
 單于 單于
-鮮于樞      鮮于樞
+鮮于 鮮于
 賦范 賦范
 茅于軾      茅于軾
 陳有后      陳有后
 水里高級商工     水里高級商工
 水里鳳林   水里鳳林
 水里濁水溪        水里濁水溪
+洞里薩      洞里薩
 划不來      划不來
 划來划去   划來划去
 划動 划動
index c7e4eca..b97ca6e 100644 (file)
 採區
 採運
 採風
+採血
 官地為寀
 寮寀
 蔘綏
 不占算
 不好干涉
 不好干預
-不干預
-不干涉
-不干休
-不干犯
-不干擾
-不干你
-不干我
-不干他
-不干她
-不干它
-不干事
 不斗膽
 不每只
 不采聲
 好斗篷
 好斗膽
 好斗蓬
+墨斗
 小几
 尸利
 尸祿
 這裡
 中文裡
 洞裡
+洞里薩
 界裡
 眼睛裡
 百科裡
 有只用
 葉叶琹
 胡子昂
+胡子嬰
 包括
 特别致
 分别致
 舞后
 甄后
 郭后
+高后
+升高後
+提高後
 0年 # 協助分詞
 1年
 2年
 于再清
 茅于軾
 張樂于張徐
-鮮于樞
+鮮于
+朝鮮於
 于寶軒
 于震
 於震前
 羅馬曆
 羅馬歷史
 羅馬歷代
+曆數書
 你誇
 誇你
 誇我
 蒸製
 烹製
 醃製
+和製漢
+壓製機
+壓製出
 體徵
 綜合徵
 价川
 腌臢
 風颳
 颳大風
+黃白術
index 96e01fe..088f677 100644 (file)
@@ -39,9 +39,12 @@ class NamespaceConflictChecker extends Maintenance {
         */
        protected $db;
 
-       private $resolvableCount = 0;
+       private $resolvablePages = 0;
        private $totalPages = 0;
 
+       private $resolvableLinks = 0;
+       private $totalLinks = 0;
+
        public function __construct() {
                parent::__construct();
                $this->mDescription = "";
@@ -172,7 +175,43 @@ class NamespaceConflictChecker extends Maintenance {
                }
 
                $this->output( "{$this->totalPages} pages to fix, " .
-                       "{$this->resolvableCount} were resolvable.\n" );
+                       "{$this->resolvablePages} were resolvable.\n\n" );
+
+               foreach ( $spaces as $name => $ns ) {
+                       if ( $ns != 0 ) {
+                               // Fix up link destinations for non-interwiki links only.
+                               //
+                               // For example if a page has [[Foo:Bar]] and then a Foo namespace
+                               // is introduced, pagelinks needs to be updated to have
+                               // page_namespace = NS_FOO.
+                               //
+                               // If instead an interwiki prefix was introduced called "Foo",
+                               // the link should instead be moved to the iwlinks table. If a new
+                               // language is introduced called "Foo", or if there is a pagelink
+                               // [[fr:Bar]] when interlanguage magic links are turned on, the
+                               // link would have to be moved to the langlinks table. Let's put
+                               // those cases in the too-hard basket for now. The consequences are
+                               // not especially severe.
+                               //
+                               // @fixme Handle interwiki links, and pagelinks to Category:, File:
+                               // which probably need reparsing.
+
+                               $this->checkLinkTable( 'pagelinks', 'pl', $ns, $name, $options );
+                               $this->checkLinkTable( 'templatelinks', 'tl', $ns, $name, $options );
+
+                               // The redirect table has interwiki links randomly mixed in, we
+                               // need to filter those out. For example [[w:Foo:Bar]] would
+                               // have rd_interwiki=w and rd_namespace=0, which would match the
+                               // query for a conflicting namespace "Foo" if filtering wasn't done.
+                               $this->checkLinkTable( 'redirect', 'rd', $ns, $name, $options,
+                                       array( 'rd_interwiki' => null ) );
+                               $this->checkLinkTable( 'redirect', 'rd', $ns, $name, $options,
+                                       array( 'rd_interwiki' => '' ) );
+                       }
+               }
+
+               $this->output( "{$this->totalLinks} links to fix, " .
+                       "{$this->resolvableLinks} were resolvable.\n" );
 
                return $ok;
        }
@@ -215,7 +254,8 @@ class NamespaceConflictChecker extends Maintenance {
 
                        // Find the new title and determine the action to take
 
-                       $newTitle = $this->getDestinationTitle( $ns, $name, $row, $options );
+                       $newTitle = $this->getDestinationTitle( $ns, $name,
+                               $row->page_namespace, $row->page_title, $options );
                        $logStatus = false;
                        if ( !$newTitle ) {
                                $logStatus = 'invalid title';
@@ -271,26 +311,101 @@ class NamespaceConflictChecker extends Maintenance {
                                                $newTitle->getPrefixedDBkey() . " (merge)$dryRunNote\n" );
 
                                        if ( $options['fix'] ) {
-                                               $pageOK = $this->mergePage( $row->page_id, $newTitle );
+                                               $pageOK = $this->mergePage( $row, $newTitle );
                                        }
                                        break;
                        }
 
                        if ( $pageOK ) {
-                               $this->resolvableCount++;
+                               $this->resolvablePages++;
                        } else {
                                $ok = false;
                        }
                }
 
-               // @fixme Also needs to do like self::getTargetList() on the
-               // *_namespace and *_title fields of pagelinks, templatelinks, and
-               // redirects, and schedule a LinksUpdate job or similar for each found
-               // *_from.
-
                return $ok;
        }
 
+       /**
+        * Check and repair the destination fields in a link table
+        * @param string $table The link table name
+        * @param string $fieldPrefix The field prefix in the link table
+        * @param int $ns Destination namespace id
+        * @param string $name
+        * @param array $options Associative array of validated command-line options
+        * @param array $extraConds Extra conditions for the SQL query
+        */
+       private function checkLinkTable( $table, $fieldPrefix, $ns, $name, $options,
+               $extraConds = array()
+       ) {
+               $batchConds = array();
+               $fromField = "{$fieldPrefix}_from";
+               $namespaceField = "{$fieldPrefix}_namespace";
+               $titleField = "{$fieldPrefix}_title";
+               $batchSize = 500;
+               while ( true ) {
+                       $res = $this->db->select(
+                               $table,
+                               array( $fromField, $namespaceField, $titleField ),
+                               array_merge( $batchConds, $extraConds, array(
+                                       $namespaceField => 0,
+                                       $titleField . $this->db->buildLike( "$name:", $this->db->anyString() )
+                               ) ),
+                               __METHOD__,
+                               array(
+                                       'ORDER BY' => array( $titleField, $fromField ),
+                                       'LIMIT' => $batchSize
+                               )
+                       );
+
+                       if ( $res->numRows() == 0 ) {
+                               break;
+                       }
+                       foreach ( $res as $row ) {
+                               $logTitle = "from={$row->$fromField} ns={$row->$namespaceField} " .
+                                       "dbk={$row->$titleField}";
+                               $destTitle = $this->getDestinationTitle( $ns, $name,
+                                       $row->$namespaceField, $row->$titleField, $options );
+                               $this->totalLinks++;
+                               if ( !$destTitle ) {
+                                       $this->output( "$table $logTitle *** INVALID\n" );
+                                       continue;
+                               }
+                               $this->resolvableLinks++;
+                               if ( !$options['fix'] ) {
+                                       $this->output( "$table $logTitle -> " .
+                                               $destTitle->getPrefixedDBkey() . " DRY RUN\n" );
+                                       continue;
+                               }
+
+                               $this->db->update( $table,
+                                       // SET
+                                       array(
+                                               $namespaceField => $destTitle->getNamespace(),
+                                               $titleField => $destTitle->getDBkey()
+                                       ),
+                                       // WHERE
+                                       array(
+                                               $namespaceField => 0,
+                                               $titleField => $row->$titleField,
+                                               $fromField => $row->$fromField
+                                       ),
+                                       __METHOD__
+                               );
+                               $this->output( "$table $logTitle -> " .
+                                       $destTitle->getPrefixedDBkey() . "\n" );
+                       }
+                       $encLastTitle = $this->db->addQuotes( $row->$titleField );
+                       $encLastFrom = $this->db->addQuotes( $row->$fromField );
+
+                       $batchConds = array(
+                               "$titleField > $encLastTitle " .
+                               "OR ($titleField = $encLastTitle AND $fromField > $encLastFrom)" );
+
+                       wfWaitForSlaves();
+               }
+       }
+
        /**
         * Move the given pseudo-namespace, either replacing the colon with a hyphen
         * (useful for pseudo-namespaces that conflict with interwiki links) or move
@@ -338,21 +453,22 @@ class NamespaceConflictChecker extends Maintenance {
        }
 
        /**
-        * Get the preferred destination title for a given target page row.
+        * Get the preferred destination title for a given target page.
         * @param integer $ns The destination namespace ID
         * @param string $name The conflicting prefix
-        * @param stdClass $row
+        * @param integer $sourceNs The source namespace
+        * @param integer $sourceDbk The source DB key (i.e. page_title)
         * @param array $options Associative array of validated command-line options
         * @return Title|false
         */
-       private function getDestinationTitle( $ns, $name, $row, $options ) {
-               $dbk = substr( $row->page_title, strlen( "$name:" ) );
+       private function getDestinationTitle( $ns, $name, $sourceNs, $sourceDbk, $options ) {
+               $dbk = substr( $sourceDbk, strlen( "$name:" ) );
                if ( $ns == 0 ) {
                        // An interwiki; try an alternate encoding with '-' for ':'
                        $dbk = "$name-" . $dbk;
                }
                $destNS = $ns;
-               if ( $row->page_namespace == NS_TALK && MWNamespace::isSubject( $ns ) ) {
+               if ( $sourceNs == NS_TALK && MWNamespace::isSubject( $ns ) ) {
                        // This is an associated talk page moved with the --move-talk feature.
                        $destNS = MWNamespace::getTalk( $destNS );
                }
@@ -392,8 +508,6 @@ class NamespaceConflictChecker extends Maintenance {
        /**
         * Move a page
         *
-        * @fixme Update pl_from_namespace etc.
-        *
         * @param integer $id The page_id
         * @param Title $newTitle The new title
         * @return bool
@@ -409,8 +523,20 @@ class NamespaceConflictChecker extends Maintenance {
                        ),
                        __METHOD__ );
 
-               // @fixme Needs updating the *_from_namespace fields in categorylinks,
-               // pagelinks, templatelinks and imagelinks.
+               // Update *_from_namespace in links tables
+               $fromNamespaceTables = array(
+                       array( 'pagelinks', 'pl' ),
+                       array( 'templatelinks', 'tl' ),
+                       array( 'imagelinks', 'il' ) );
+               foreach ( $fromNamespaceTables as $tableInfo ) {
+                       list( $table, $fieldPrefix ) = $tableInfo;
+                       $this->db->update( $table,
+                               // SET
+                               array( "{$fieldPrefix}_from_namespace" => $newTitle->getNamespace() ),
+                               // WHERE
+                               array( "{$fieldPrefix}_from" => $id ),
+                               __METHOD__ );
+               }
 
                return true;
        }
@@ -444,7 +570,17 @@ class NamespaceConflictChecker extends Maintenance {
         * @param integer $id The page_id
         * @param Title $newTitle The new title
         */
-       private function mergePage( $id, Title $newTitle ) {
+       private function mergePage( $row, Title $newTitle ) {
+               $id = $row->page_id;
+
+               // Construct the WikiPage object we will need later, while the
+               // page_id still exists. Note that this cannot use makeTitleSafe(),
+               // we are deliberately constructing an invalid title.
+               $sourceTitle = Title::makeTitle( $row->page_namespace, $row->page_title );
+               $sourceTitle->resetArticleID( $id );
+               $wikiPage = new WikiPage( $sourceTitle );
+               $wikiPage->loadPageData( 'fromdbmaster' );
+
                $destId = $newTitle->getArticleId();
                $this->db->begin( __METHOD__ );
                $this->db->update( 'revision',
@@ -456,10 +592,18 @@ class NamespaceConflictChecker extends Maintenance {
 
                $this->db->delete( 'page', array( 'page_id' => $id ), __METHOD__ );
 
-               // @fixme Need WikiPage::doDeleteUpdates() or similar to avoid orphan
-               // rows in the links tables.
-
+               // Call LinksDeletionUpdate to delete outgoing links from the old title,
+               // and update category counts.
+               //
+               // Calling external code with a fake broken Title is a fairly dubious
+               // idea. It's necessary because it's quite a lot of code to duplicate,
+               // but that also makes it fragile since it would be easy for someone to
+               // accidentally introduce an assumption of title validity to the code we
+               // are calling.
+               $update = new LinksDeletionUpdate( $wikiPage );
+               $update->doUpdate();
                $this->db->commit( __METHOD__ );
+
                return true;
        }
 }
index 763d97e..06e1449 100644 (file)
@@ -73,7 +73,7 @@ class RefreshLinks extends Maintenance {
        private function doRefreshLinks( $start, $newOnly = false,
                $end = null, $redirectsOnly = false, $oldRedirectsOnly = false
        ) {
-               global $wgParser, $wgUseTidy;
+               global $wgParser;
 
                $reportingInterval = 100;
                $dbr = wfGetDB( DB_SLAVE );
@@ -88,9 +88,6 @@ class RefreshLinks extends Maintenance {
                # Don't generate extension images (e.g. Timeline)
                $wgParser->clearTagHooks();
 
-               # Don't use HTML tidy
-               $wgUseTidy = false;
-
                $what = $redirectsOnly ? "redirects" : "links";
 
                if ( $oldRedirectsOnly ) {
index 14a1502..63d5e9f 100644 (file)
@@ -159,6 +159,7 @@ class SyncFileBackend extends Maintenance {
                        $this->error( "Error: given starting ID greater than ending ID.", 1 );
                }
 
+               $next = null;
                do {
                        $limit = min( $this->mBatchSize, $end - $start + 1 ); // don't go pass ending ID
                        $this->output( "Doing id $start to " . ( $start + $limit - 1 ) . "...\n" );
index de36d26..aa0c7ea 100644 (file)
@@ -3,7 +3,9 @@
 -- not have to run it by itself unless doing a manual install.
 
 -- This is a shared schema file used for both MySQL and SQLite installs.
-
+--
+-- For more documentation on the database schema, see
+-- https://www.mediawiki.org/wiki/Manual:Database_layout
 --
 -- General notes:
 --
index cf17aef..d2dc213 100644 (file)
@@ -3,7 +3,7 @@
                var $label, labelText;
 
                function syncText() {
-                       var value = $(this).val()
+                       var value = $( this ).val()
                                .replace( /[\[\]\{\}|#<>%+? ]/g, '_' )
                                .replace( /&/, '&amp;' )
                                .replace( /__+/g, '_' )
@@ -20,7 +20,7 @@
                                .find( '.mw-help-field-hint' )
                                        .show()
                                        .click( function () {
-                                               $(this)
+                                               $( this )
                                                        .closest( '.mw-help-field-container' )
                                                                .find( '.mw-help-field-data' )
                                                                        .slideToggle( 'fast' );
@@ -29,7 +29,7 @@
                // Show/hide code for DB-specific options
                // FIXME: Do we want slow, fast, or even non-animated (instantaneous) showing/hiding here?
                $( '.dbRadio' ).each( function () {
-                       $( document.getElementById( $(this).attr( 'rel' ) ) ).hide();
+                       $( document.getElementById( $( this ).attr( 'rel' ) ) ).hide();
                } );
                $( document.getElementById( $( '.dbRadio:checked' ).attr( 'rel' ) ) ).show();
                $( '.dbRadio' ).click( function () {
 
                // Show/hide random stuff (email, upload)
                $( '.showHideRadio' ).click( function () {
-                       var $wrapper = $( '#' + $(this).attr( 'rel' ) );
-                       if ( $(this).is( ':checked' ) ) {
+                       var $wrapper = $( '#' + $( this ).attr( 'rel' ) );
+                       if ( $( this ).is( ':checked' ) ) {
                                $wrapper.show( 'slow' );
                        } else {
                                $wrapper.hide( 'slow' );
                        }
                } );
                $( '.hideShowRadio' ).click( function () {
-                       var $wrapper = $( '#' + $(this).attr( 'rel' ) );
-                       if ( $(this).is( ':checked' ) ) {
+                       var $wrapper = $( '#' + $( this ).attr( 'rel' ) );
+                       if ( $( this ).is( ':checked' ) ) {
                                $wrapper.hide( 'slow' );
                        } else {
                                $wrapper.show( 'slow' );
@@ -80,9 +80,9 @@
 
                // Enable/disable "other" textboxes
                $( '.enableForOther' ).click( function () {
-                       var $textbox = $( document.getElementById( $(this).attr( 'rel' ) ) );
+                       var $textbox = $( document.getElementById( $( this ).attr( 'rel' ) ) );
                        // FIXME: Ugh, this is ugly
-                       if ( $(this).val() === 'other' ) {
+                       if ( $( this ).val() === 'other' ) {
                                $textbox.removeProp( 'readonly' ).closest( '.config-block' ).slideDown( 'fast' );
                        } else {
                                $textbox.prop( 'readonly', true ).closest( '.config-block' ).slideUp( 'fast' );
diff --git a/mw-config/images/help-question-hover.gif b/mw-config/images/help-question-hover.gif
new file mode 100644 (file)
index 0000000..515138d
Binary files /dev/null and b/mw-config/images/help-question-hover.gif differ
diff --git a/mw-config/images/help-question.gif b/mw-config/images/help-question.gif
new file mode 100644 (file)
index 0000000..b4fc9c5
Binary files /dev/null and b/mw-config/images/help-question.gif differ
index e28aef4..c00dbed 100644 (file)
@@ -9,11 +9,11 @@
   "devDependencies": {
     "grunt": "0.4.5",
     "grunt-cli": "0.1.13",
-    "grunt-banana-checker": "0.2.2",
+    "grunt-banana-checker": "0.3.0",
     "grunt-contrib-copy": "0.8.0",
-    "grunt-contrib-jshint": "0.11.2",
+    "grunt-contrib-jshint": "0.11.3",
     "grunt-contrib-watch": "0.6.1",
-    "grunt-jscs": "1.8.0",
+    "grunt-jscs": "2.1.0",
     "grunt-jsonlint": "1.0.4",
     "grunt-karma": "0.11.0",
     "karma": "0.12.36",
index be06225..4e59312 100644 (file)
@@ -847,6 +847,12 @@ return array(
                        'resources/src/mediawiki/mediawiki.template.mustache.js',
                ),
                'targets' => array( 'desktop', 'mobile' ),
+               'dependencies' => 'mediawiki.template',
+       ),
+       'mediawiki.template.regexp' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.template.regexp.js',
+               'targets' => array( 'desktop', 'mobile' ),
+               'dependencies' => 'mediawiki.template',
        ),
        'mediawiki.apipretty' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css',
@@ -1024,6 +1030,10 @@ return array(
                        'colon-separator',
                ),
        ),
+       'mediawiki.htmlform.styles' => array(
+               'styles' => 'resources/src/mediawiki/mediawiki.htmlform.css',
+               'position' => 'top',
+       ),
        'mediawiki.htmlform.ooui.styles' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.htmlform.ooui.css',
                'position' => 'top',
@@ -1170,6 +1180,10 @@ return array(
        ),
        'mediawiki.Uri' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.Uri.js',
+               'templates' => array(
+                       'strict.regexp' => 'resources/src/mediawiki/mediawiki.Uri.strict.regexp',
+                       'loose.regexp' => 'resources/src/mediawiki/mediawiki.Uri.loose.regexp',
+               ),
                'dependencies' => 'mediawiki.util',
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -1353,6 +1367,13 @@ return array(
                        'prefs-editing'
                ),
        ),
+       'mediawiki.action.view.filepage' => array(
+               'styles' => array(
+                       'resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css' => array( 'media' => 'print' ),
+                       'resources/src/mediawiki.action/mediawiki.action.view.filepage.css',
+               ),
+               'position' => 'top',
+       ),
 
        /* MediaWiki Language */
 
@@ -1581,7 +1602,14 @@ return array(
        ),
        'mediawiki.special.movePage' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.movePage.js',
-               'dependencies' => 'jquery.byteLimit',
+               'dependencies' => array(
+                       'jquery.byteLimit',
+                       'mediawiki.widgets',
+               ),
+       ),
+       'mediawiki.special.movePage.styles' => array(
+               'styles' => 'resources/src/mediawiki.special/mediawiki.special.movePage.css',
+               'position' => 'top',
        ),
        'mediawiki.special.pageLanguage' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
@@ -1669,15 +1697,6 @@ return array(
                        'resources/src/mediawiki.special/mediawiki.special.userlogin.login.css',
                ),
        ),
-       'mediawiki.special.userlogin.common.js' => array(
-               'scripts' => array(
-                       'resources/src/mediawiki.special/mediawiki.special.userlogin.common.js',
-               ),
-               'messages' => array(
-                       'createacct-captcha',
-                       'createacct-imgcaptcha-ph',
-               ),
-       ),
        'mediawiki.special.userlogin.signup.js' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js',
                'messages' => array(
@@ -1740,11 +1759,10 @@ return array(
        'mediawiki.legacy.commonPrint' => array(
                'position' => 'top',
                'styles' => array(
-                       // @todo: Remove mediawiki.page.gallery when cache has cleared
-                       'resources/src/mediawiki.page/mediawiki.page.gallery.print.css' => array( 'media' => 'print' ),
+                       // @todo: Remove mediawiki.action.view.filepage.print.css when cache has cleared
+                       'resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css' => array( 'media' => 'print' ),
                        'resources/src/mediawiki.legacy/commonPrint.css' => array( 'media' => 'print' )
                ),
-               'group' => 'print',
        ),
        'mediawiki.legacy.protect' => array(
                'scripts' => 'resources/src/mediawiki.legacy/protect.js',
@@ -1755,8 +1773,9 @@ return array(
        'mediawiki.legacy.shared' => array(
                'position' => 'top',
                'styles' => array(
-                       // @todo: Remove when mediawiki.page.gallery in cached html.
-                       'resources/src/mediawiki.page/mediawiki.page.gallery.css',
+                       // @todo: Remove mediawiki.action.view.filepage.css
+                       // and mediawiki.legacy/images/checker.png when cache has cleared
+                       'resources/src/mediawiki.action/mediawiki.action.view.filepage.css',
                        'resources/src/mediawiki.legacy/shared.css' => array( 'media' => 'screen' )
                ),
        ),
@@ -1859,8 +1878,10 @@ return array(
                        'resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js',
                ),
                'skinStyles' => array(
                        'default' => array(
@@ -1899,6 +1920,7 @@ return array(
                'skinStyles' => array(
                        'default' => array(
                                'resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.base.css',
+                               'resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css',
                        ),
                ),
                'position' => 'top',
index 493920d..610e1ee 100644 (file)
@@ -11,7 +11,8 @@
                        "مشعل الحربي",
                        "ترجمان05",
                        "Abanima",
-                       "محمد أحمد عبد الفتاح"
+                       "محمد أحمد عبد الفتاح",
+                       "Hiba Alshawi"
                ]
        },
        "ooui-outline-control-move-down": "انقل العنصر للأسفل",
@@ -26,6 +27,8 @@
        "ooui-dialog-process-dismiss": "أغلق",
        "ooui-dialog-process-retry": "حاول مرة أخرى",
        "ooui-dialog-process-continue": "استمر",
+       "ooui-selectfile-button-select": "أختر ملف",
        "ooui-selectfile-not-supported": "تحديد الملفات غير مدعوم",
-       "ooui-selectfile-placeholder": "لم يختر أي ملف"
+       "ooui-selectfile-placeholder": "لم يختر أي ملف",
+       "ooui-selectfile-dragdrop-placeholder": "ترك ملف هنا"
 }
index 3ecbe50..11761c6 100644 (file)
@@ -18,7 +18,8 @@
        "ooui-dialog-process-dismiss": "Descartar",
        "ooui-dialog-process-retry": "Vuelvi a intentalo",
        "ooui-dialog-process-continue": "Siguir",
+       "ooui-selectfile-button-select": "Seleicionar un ficheru",
        "ooui-selectfile-not-supported": "Nun hai encontu pa la seleición de ficheros",
        "ooui-selectfile-placeholder": "Nun se seleicionó nengún ficheru",
-       "ooui-selectfile-dragdrop-placeholder": "Soltar el ficheru equí (o facer clic pa restolar)"
+       "ooui-selectfile-dragdrop-placeholder": "Soltar el ficheru equí"
 }
index 9481a2c..02d57e0 100644 (file)
@@ -24,6 +24,8 @@
        "ooui-dialog-process-dismiss": "বাতিল করুন",
        "ooui-dialog-process-retry": "আবার চেষ্টা করুন",
        "ooui-dialog-process-continue": "অগ্রসর হোন",
+       "ooui-selectfile-button-select": "একটি ফাইল নির্বাচন করুন",
        "ooui-selectfile-not-supported": "চিত্র নির্বাচন সমর্থন করছে না।",
-       "ooui-selectfile-placeholder": " কোন চিত্র নির্বাচিত হয়নি।"
+       "ooui-selectfile-placeholder": " কোন চিত্র নির্বাচিত হয়নি।",
+       "ooui-selectfile-dragdrop-placeholder": "এখানে ফাইল ছাড়ুন"
 }
index ee735ce..b48dfb5 100644 (file)
@@ -25,7 +25,8 @@
        "ooui-dialog-process-dismiss": "Ausblenden",
        "ooui-dialog-process-retry": "Erneut versuchen",
        "ooui-dialog-process-continue": "Fortfahren",
+       "ooui-selectfile-button-select": "Eine Datei auswählen",
        "ooui-selectfile-not-supported": "Die Dateiauswahl wird nicht unterstützt",
        "ooui-selectfile-placeholder": "Keine Datei ausgewählt",
-       "ooui-selectfile-dragdrop-placeholder": "Dateien hier ablegen (oder klicken zum Durchsuchen)"
+       "ooui-selectfile-dragdrop-placeholder": "Dateien hier ablegen"
 }
diff --git a/resources/lib/oojs-ui/i18n/en-ca.json b/resources/lib/oojs-ui/i18n/en-ca.json
new file mode 100644 (file)
index 0000000..218ece2
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Skyllful"
+               ]
+       },
+       "ooui-outline-control-move-down": "Move item down",
+       "ooui-outline-control-move-up": "Move item up",
+       "ooui-outline-control-remove": "Remove item",
+       "ooui-toolbar-more": "More",
+       "ooui-toolgroup-expand": "More",
+       "ooui-toolgroup-collapse": "Less",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Cancel",
+       "ooui-dialog-process-error": "Something went wrong",
+       "ooui-dialog-process-dismiss": "Dismiss",
+       "ooui-dialog-process-retry": "Try again",
+       "ooui-dialog-process-continue": "Continue",
+       "ooui-selectfile-not-supported": "File(s) not supported",
+       "ooui-selectfile-placeholder": "No file selected",
+       "ooui-selectfile-dragdrop-placeholder": "Drop file here (or click to browse your computer)",
+       "ooui-semicolon-separator": ";"
+}
index db2399f..7cf2eb1 100644 (file)
@@ -28,8 +28,9 @@
        "ooui-dialog-process-dismiss": "Dismiss",
        "ooui-dialog-process-retry": "Try again",
        "ooui-dialog-process-continue": "Continue",
+       "ooui-selectfile-button-select": "Select a file",
        "ooui-selectfile-not-supported": "File selection is not supported",
        "ooui-selectfile-placeholder": "No file is selected",
-       "ooui-selectfile-dragdrop-placeholder": "Drop file here (or click to browse)",
+       "ooui-selectfile-dragdrop-placeholder": "Drop file here",
        "ooui-semicolon-separator": "; "
 }
index 3f690fc..fa11a36 100644 (file)
@@ -30,7 +30,8 @@
        "ooui-dialog-process-dismiss": "Descartar",
        "ooui-dialog-process-retry": "Intentar de nuevo",
        "ooui-dialog-process-continue": "Continuar",
+       "ooui-selectfile-button-select": "Selecciona un archivo",
        "ooui-selectfile-not-supported": "No se admite la selección de archivos",
        "ooui-selectfile-placeholder": "Ningún archivo seleccionado",
-       "ooui-selectfile-dragdrop-placeholder": "Soltar el archivo aquí (o pulsa para examinar)"
+       "ooui-selectfile-dragdrop-placeholder": "Suelta el archivo aquí"
 }
index 1283c8d..59b7ccd 100644 (file)
@@ -18,7 +18,8 @@
        "ooui-dialog-process-dismiss": "Hülga",
        "ooui-dialog-process-retry": "Proovi uuesti",
        "ooui-dialog-process-continue": "Jätka",
+       "ooui-selectfile-button-select": "Vali fail",
        "ooui-selectfile-not-supported": "Faili valiku tugi puudub",
        "ooui-selectfile-placeholder": "Faili ei ole valitud",
-       "ooui-selectfile-dragdrop-placeholder": "Lohista fail siia (või klõpsa, et sirvida)"
+       "ooui-selectfile-dragdrop-placeholder": "Lohista fail siia"
 }
index 93c66c5..e507325 100644 (file)
@@ -20,6 +20,7 @@
        "ooui-dialog-process-dismiss": "Utzi",
        "ooui-dialog-process-retry": "Saiatu berriro",
        "ooui-dialog-process-continue": "Jarraitu",
+       "ooui-selectfile-button-select": "Fitxategi bat aukeratu",
        "ooui-selectfile-not-supported": "Fitxategi aukeraketa ez da onartzen",
        "ooui-selectfile-placeholder": "Ez da fitxategirik hautatu"
 }
index e20997a..11bd4b8 100644 (file)
@@ -13,7 +13,8 @@
                        "Armin1392",
                        "Alirezaaa",
                        "Leyth",
-                       "الناز"
+                       "الناز",
+                       "فلورانس"
                ]
        },
        "ooui-outline-control-move-down": "انتقال مورد به پایین",
@@ -29,5 +30,6 @@
        "ooui-dialog-process-retry": "دوباره امتحان کنید",
        "ooui-dialog-process-continue": "ادامه",
        "ooui-selectfile-not-supported": "انتخاب پرونده پشتیبانی نمی‌شود",
-       "ooui-selectfile-placeholder": "هیچ پرونده‌ای انتخاب نشده است"
+       "ooui-selectfile-placeholder": "هیچ پرونده‌ای انتخاب نشده است",
+       "ooui-selectfile-dragdrop-placeholder": "رها کردن فایل در اینجا (و یا کلیک کنید به فهرست)"
 }
index c96a74e..bdf015f 100644 (file)
@@ -30,5 +30,6 @@
        "ooui-dialog-process-retry": "Yritä uudelleen",
        "ooui-dialog-process-continue": "Jatka",
        "ooui-selectfile-not-supported": "Tiedoston valitsemista ei tueta",
-       "ooui-selectfile-placeholder": "Tiedostoa ei ole valittu"
+       "ooui-selectfile-placeholder": "Tiedostoa ei ole valittu",
+       "ooui-selectfile-dragdrop-placeholder": "Pudota tiedosto (tai selaa tiedostoja napsauttamalla)"
 }
index fe8ec04..92015a4 100644 (file)
@@ -44,7 +44,8 @@
        "ooui-dialog-process-dismiss": "Rejeter",
        "ooui-dialog-process-retry": "Réessayer",
        "ooui-dialog-process-continue": "Continuer",
+       "ooui-selectfile-button-select": "Sélectionner un fichier",
        "ooui-selectfile-not-supported": "La sélection de fichier n’est pas prise en charge",
        "ooui-selectfile-placeholder": "Aucun fichier sélectionné",
-       "ooui-selectfile-dragdrop-placeholder": "Déposer le fichier ici (ou cliquez pour parcourir)"
+       "ooui-selectfile-dragdrop-placeholder": "Déposer le fichier ici"
 }
index 0f7ac78..4cb2839 100644 (file)
@@ -19,7 +19,8 @@
        "ooui-dialog-process-dismiss": "Agochar",
        "ooui-dialog-process-retry": "Inténteo de novo",
        "ooui-dialog-process-continue": "Continuar",
+       "ooui-selectfile-button-select": "Seleccionar un ficheiro",
        "ooui-selectfile-not-supported": "Non está soportada a selección de ficheiros",
        "ooui-selectfile-placeholder": "Non se seleccionou ningún ficheiro",
-       "ooui-selectfile-dragdrop-placeholder": "Solte un ficheiro aquí (ou prema para buscalo)"
+       "ooui-selectfile-dragdrop-placeholder": "Solte un ficheiro aquí"
 }
diff --git a/resources/lib/oojs-ui/i18n/glk.json b/resources/lib/oojs-ui/i18n/glk.json
new file mode 100644 (file)
index 0000000..9b15046
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "V6rg"
+               ]
+       },
+       "ooui-outline-control-move-down": "مأسمکه جابجا بۊکۊن جير",
+       "ooui-outline-control-move-up": "مأسمکه جابجا بۊکۊن جؤر",
+       "ooui-outline-control-remove": "مأسمکه حذفأکۊن",
+       "ooui-toolbar-more": "ويشتر",
+       "ooui-toolgroup-expand": "ويشتر",
+       "ooui-toolgroup-collapse": "کمتر",
+       "ooui-dialog-message-accept": "خؤ",
+       "ooui-dialog-message-reject": "لغو",
+       "ooui-dialog-process-error": "ىک مؤشکلي هنأ",
+       "ooui-dialog-process-dismiss": "وأبدي",
+       "ooui-dialog-process-retry": "هنده حقسأى بۊکۊنين",
+       "ooui-dialog-process-continue": "سره",
+       "ooui-selectfile-button-select": "ىکته فاىله دؤجين بۊکۊنين",
+       "ooui-selectfile-not-supported": "نشأنهىکته فاىله دؤجين گۊدن",
+       "ooui-selectfile-placeholder": "هيچ فاىلي دؤجين نۊبؤ",
+       "ooui-selectfile-dragdrop-placeholder": "فاىله ائره فدي"
+}
index b652d63..650d67d 100644 (file)
@@ -27,7 +27,8 @@
        "ooui-dialog-process-dismiss": "לוותר",
        "ooui-dialog-process-retry": "לנסות שוב",
        "ooui-dialog-process-continue": "המשך",
+       "ooui-selectfile-button-select": "נא לבחור קובץ",
        "ooui-selectfile-not-supported": "בחירת קבצים אינה נתמכת",
        "ooui-selectfile-placeholder": "לא נבחר שום קובץ",
-       "ooui-selectfile-dragdrop-placeholder": "נא לשחרר את הקובץ כאן (או ללחוץ לעיון)"
+       "ooui-selectfile-dragdrop-placeholder": "נא לשחרר את הקובץ כאן"
 }
index 631b3f5..d0df027 100644 (file)
@@ -6,7 +6,8 @@
                        "Penn Station",
                        "Shirayuki",
                        "Takot",
-                       "Los688"
+                       "Los688",
+                       "Sujiniku"
                ]
        },
        "ooui-outline-control-move-down": "項目を下に移動させる",
@@ -21,6 +22,8 @@
        "ooui-dialog-process-dismiss": "閉じる",
        "ooui-dialog-process-retry": "もう一度お試しください",
        "ooui-dialog-process-continue": "続行",
+       "ooui-selectfile-button-select": "ファイルを選択",
        "ooui-selectfile-not-supported": "ファイルの選択はサポートされていません",
-       "ooui-selectfile-placeholder": "ファイルが選択されていません"
+       "ooui-selectfile-placeholder": "ファイルが選択されていません",
+       "ooui-selectfile-dragdrop-placeholder": "ファイルをここにドロップ"
 }
index e54099d..e64889f 100644 (file)
@@ -17,7 +17,8 @@
        "ooui-dialog-process-dismiss": "បិទ",
        "ooui-dialog-process-retry": "ព្យាយាមម្ដងទៀត",
        "ooui-dialog-process-continue": "បន្ត",
+       "ooui-selectfile-button-select": "ជ្រើសរើសឯកសារ",
        "ooui-selectfile-not-supported": "ការជ្រើសរើសឯកសារមិនអាចប្រើបានទេ",
        "ooui-selectfile-placeholder": "គ្មានឯកសារណាមួយត្រូវបានជ្រើសរើស",
-       "ooui-selectfile-dragdrop-placeholder": "ទម្លាក់ឯកសារនៅទីនេះ(ឬចុចដើម្បីរាវរក)"
+       "ooui-selectfile-dragdrop-placeholder": "ទម្លាក់ឯកសារនៅទីនេះ"
 }
index 792b6fc..f99c29f 100644 (file)
@@ -16,6 +16,7 @@
        "ooui-dialog-process-dismiss": "Maach fott, ha_sch jelässe",
        "ooui-dialog-process-retry": "Norr_ens versöhke",
        "ooui-dialog-process-continue": "Wigger maache",
+       "ooui-selectfile-button-select": "Söhg en Dattei uß",
        "ooui-selectfile-not-supported": "Mer ogerschtözze et Datteij_Ußwähle nit.",
        "ooui-selectfile-placeholder": "Kein Dattei es ußjewählt"
 }
index 65bce10..39bc670 100644 (file)
@@ -22,6 +22,7 @@
        "ooui-dialog-process-dismiss": "Verwerfen",
        "ooui-dialog-process-retry": "Nach eng Kéier probéieren",
        "ooui-dialog-process-continue": "Virufueren",
+       "ooui-selectfile-button-select": "E Fichier eraussichen",
        "ooui-selectfile-placeholder": "Et ass kee Fichier erausgesicht",
-       "ooui-selectfile-dragdrop-placeholder": "Fichier hei deposéieren (oder klickt fir ze sichen)"
+       "ooui-selectfile-dragdrop-placeholder": "Fichier hei ofleeën"
 }
index 20aa2f1..fbd22d0 100644 (file)
@@ -19,7 +19,8 @@
        "ooui-dialog-process-dismiss": "Paslėpti",
        "ooui-dialog-process-retry": "Bandykite dar kartą",
        "ooui-dialog-process-continue": "Tęsti",
+       "ooui-selectfile-button-select": "Pasirinkti failą",
        "ooui-selectfile-not-supported": "Failų pasirinkimas nepalaikomas",
        "ooui-selectfile-placeholder": "Nėra pasirinktų failų",
-       "ooui-selectfile-dragdrop-placeholder": "Atitempkite failą čia (arba paspauskite paieškai)"
+       "ooui-selectfile-dragdrop-placeholder": "Atitempkite failą čia"
 }
index dd55db4..46f37fe 100644 (file)
@@ -18,7 +18,8 @@
        "ooui-dialog-process-dismiss": "Тргни",
        "ooui-dialog-process-retry": "Обиди се пак",
        "ooui-dialog-process-continue": "Продолжи",
+       "ooui-selectfile-button-select": "Одберете податотека",
        "ooui-selectfile-not-supported": "Изборот на податотеки не е поддржан",
        "ooui-selectfile-placeholder": "Немате одбрано податотека",
-       "ooui-selectfile-dragdrop-placeholder": "Тука пуштете ја податотеката (или стиснете за да прелистате)"
+       "ooui-selectfile-dragdrop-placeholder": "Тука пуштете ја податотеката"
 }
index 9c07f41..b7e37b4 100644 (file)
@@ -4,7 +4,8 @@
                        "Chelin",
                        "Chrisportelli",
                        "PiRSquared17",
-                       "C.R."
+                       "C.R.",
+                       "Candalua"
                ]
        },
        "ooui-outline-control-move-down": "Mòve abbascio",
@@ -19,6 +20,8 @@
        "ooui-dialog-process-dismiss": "Passa 'a vacca",
        "ooui-dialog-process-retry": "Prova n'ata vota",
        "ooui-dialog-process-continue": "Continua",
+       "ooui-selectfile-button-select": "Sceglie nu file",
        "ooui-selectfile-not-supported": "Filtro 'e selezione nun suppurtato",
-       "ooui-selectfile-placeholder": "Nun s'è scigliuto nisciuno file"
+       "ooui-selectfile-placeholder": "Nun s'è scigliuto nisciuno file",
+       "ooui-selectfile-dragdrop-placeholder": "Lassa 'o file ccà"
 }
index 9dd84b0..486e87f 100644 (file)
@@ -32,7 +32,8 @@
        "ooui-dialog-process-dismiss": "Ukryj",
        "ooui-dialog-process-retry": "Spróbuj ponownie",
        "ooui-dialog-process-continue": "Kontynuuj",
+       "ooui-selectfile-button-select": "Wybierz plik",
        "ooui-selectfile-not-supported": "Wybór pliku nie jest obsługiwany",
        "ooui-selectfile-placeholder": "Nie wybrano pliku",
-       "ooui-selectfile-dragdrop-placeholder": "Umieść plik tutaj (lub kliknij, aby je przeglądać)"
+       "ooui-selectfile-dragdrop-placeholder": "Umieść plik tutaj"
 }
index c371bbc..228291a 100644 (file)
@@ -16,6 +16,7 @@
        "ooui-dialog-process-dismiss": "تړل",
        "ooui-dialog-process-retry": "بيا هڅه",
        "ooui-dialog-process-continue": "پرله پورې",
+       "ooui-selectfile-button-select": "يوه دوتنه وټاکئ",
        "ooui-selectfile-not-supported": "د دوتنې د ټاکنې ملاتړ نه دی شوی",
        "ooui-selectfile-placeholder": "کومه دوتنه نه ده ټاکل شوې"
 }
index aab0aed..8379cac 100644 (file)
@@ -26,5 +26,6 @@
        "ooui-dialog-process-retry": "Tentar novamente",
        "ooui-dialog-process-continue": "Continuar",
        "ooui-selectfile-not-supported": "A seleção de ficheiros não é suportada",
-       "ooui-selectfile-placeholder": "Nenhum ficheiro selecionado"
+       "ooui-selectfile-placeholder": "Nenhum ficheiro selecionado",
+       "ooui-selectfile-dragdrop-placeholder": "Soltar ficheiro aqui (ou clicar para navegar)"
 }
index 607229d..cd9c0c2 100644 (file)
@@ -32,8 +32,9 @@
        "ooui-dialog-process-dismiss": "Label for process dialog dismiss error button, visible when describing errors\n{{Identical|Dismiss}}",
        "ooui-dialog-process-retry": "Label for process dialog retry action button, visible when describing recoverable errors\n{{Identical|Try again}}",
        "ooui-dialog-process-continue": "Label for process dialog retry action button, visible when describing only warnings\n{{Identical|Continue}}",
-       "ooui-selectfile-not-supported": "Label for the file selection dialog if file selection is not supported",
-       "ooui-selectfile-placeholder": "Label for the file selection dialog when no file is currently selected",
-       "ooui-selectfile-dragdrop-placeholder": "Label for the file selection dialog when no file is currently selected in the drag drop UI. Suggests clicking to open the browse dialog.",
+       "ooui-selectfile-button-select": "Label for the file selection widget's select file button",
+       "ooui-selectfile-not-supported": "Label for the file selection widget if file selection is not supported",
+       "ooui-selectfile-placeholder": "Label for the file selection widget when no file is currently selected",
+       "ooui-selectfile-dragdrop-placeholder": "Label for the file selection widget's drop target",
        "ooui-semicolon-separator": "{{optional}} Semicolon used as a separator"
 }
index bf44621..69daa18 100644 (file)
@@ -20,7 +20,8 @@
        "ooui-dialog-process-dismiss": "Renunțare",
        "ooui-dialog-process-retry": "Reîncearcă",
        "ooui-dialog-process-continue": "Continuă",
+       "ooui-selectfile-button-select": "Alege un fișier",
        "ooui-selectfile-not-supported": "Selecția de fișiere nu este acceptată",
        "ooui-selectfile-placeholder": "Niciun fișier selectat",
-       "ooui-selectfile-dragdrop-placeholder": "Trageți fișierul aici (sau faceți clic pentru a răsfoi)"
+       "ooui-selectfile-dragdrop-placeholder": "Trageți fișierul aici"
 }
index 42005fe..73a5a6c 100644 (file)
@@ -16,6 +16,8 @@
        "ooui-dialog-process-dismiss": "Scitte",
        "ooui-dialog-process-retry": "Pruève arrete",
        "ooui-dialog-process-continue": "Condinue",
+       "ooui-selectfile-button-select": "Scacchie 'nu file",
        "ooui-selectfile-not-supported": "'U scacchiamende d'u file non g'è supportate",
-       "ooui-selectfile-placeholder": "Nisciune file scacchiate"
+       "ooui-selectfile-placeholder": "Nisciune file scacchiate",
+       "ooui-selectfile-dragdrop-placeholder": "Scitte 'u file aqquà"
 }
index 7435416..6c62d36 100644 (file)
@@ -32,6 +32,8 @@
        "ooui-dialog-process-dismiss": "Закрыть",
        "ooui-dialog-process-retry": "Попробовать ещё раз",
        "ooui-dialog-process-continue": "Продолжить",
+       "ooui-selectfile-button-select": "Выберите файл",
        "ooui-selectfile-not-supported": "Выбор файла не поддерживается",
-       "ooui-selectfile-placeholder": "Не выбран файл"
+       "ooui-selectfile-placeholder": "Не выбран файл",
+       "ooui-selectfile-dragdrop-placeholder": "Перетащите файл сюда"
 }
index 9cd8ea3..3ffbc48 100644 (file)
@@ -27,6 +27,8 @@
        "ooui-dialog-process-dismiss": "Stäng",
        "ooui-dialog-process-retry": "Försök igen",
        "ooui-dialog-process-continue": "Fortsätt",
+       "ooui-selectfile-button-select": "Välj en fil",
        "ooui-selectfile-not-supported": "Filval stöds inte",
-       "ooui-selectfile-placeholder": "Ingen fil är vald"
+       "ooui-selectfile-placeholder": "Ingen fil är vald",
+       "ooui-selectfile-dragdrop-placeholder": "Släpp filen här"
 }
index 9e727e4..a38afbf 100644 (file)
@@ -32,7 +32,8 @@
        "ooui-dialog-process-dismiss": "Приховати",
        "ooui-dialog-process-retry": "Спробуйте ще раз",
        "ooui-dialog-process-continue": "Продовжити",
+       "ooui-selectfile-button-select": "Оберіть файл",
        "ooui-selectfile-not-supported": "Вибір файлу не підтримується",
        "ooui-selectfile-placeholder": "Жодного файлу не вибрано",
-       "ooui-selectfile-dragdrop-placeholder": "Помістіть файл сюди (або натисніть, щоб переглянути)"
+       "ooui-selectfile-dragdrop-placeholder": "Помістіть файл сюди"
 }
index 4de584b..1ccc67b 100644 (file)
@@ -9,5 +9,9 @@
        "ooui-outline-control-move-down": "Sposta in baso",
        "ooui-outline-control-move-up": "Sposta in sima",
        "ooui-toolbar-more": "Altro",
-       "ooui-dialog-message-accept": "Va ben"
+       "ooui-dialog-message-accept": "Va ben",
+       "ooui-dialog-process-error": "Xe 'ndà storto calcossa",
+       "ooui-dialog-process-dismiss": "Scondi",
+       "ooui-dialog-process-retry": "Proa da novo",
+       "ooui-dialog-process-continue": "Và vanti"
 }
index 7d4252d..ff14801 100644 (file)
@@ -21,5 +21,6 @@
        "ooui-dialog-process-retry": "Thử lại",
        "ooui-dialog-process-continue": "Tiếp tục",
        "ooui-selectfile-not-supported": "Không hỗ trợ việc chọn tập tin",
-       "ooui-selectfile-placeholder": "Không có tập tin nào được chọn"
+       "ooui-selectfile-placeholder": "Không có tập tin nào được chọn",
+       "ooui-selectfile-dragdrop-placeholder": "Thả tập tin vào đây (hoặc nhấn chuột để duyệt)"
 }
index b5b51a0..9934d9d 100644 (file)
@@ -32,7 +32,8 @@
        "ooui-dialog-process-dismiss": "关闭",
        "ooui-dialog-process-retry": "重试",
        "ooui-dialog-process-continue": "继续",
+       "ooui-selectfile-button-select": "选择一个文件",
        "ooui-selectfile-not-supported": "文件选择不受支持",
        "ooui-selectfile-placeholder": "没有选定文件",
-       "ooui-selectfile-dragdrop-placeholder": "将文件拖动至此(或点击以浏览)"
+       "ooui-selectfile-dragdrop-placeholder": "将文件拖动至此"
 }
index 195bb3a..f70efe1 100644 (file)
@@ -30,6 +30,8 @@
        "ooui-dialog-process-dismiss": "關閉",
        "ooui-dialog-process-retry": "再試一次",
        "ooui-dialog-process-continue": "繼續",
+       "ooui-selectfile-button-select": "選擇一個檔案",
        "ooui-selectfile-not-supported": "無法支援所選擇的檔案",
-       "ooui-selectfile-placeholder": "未選擇檔案"
+       "ooui-selectfile-placeholder": "未選擇檔案",
+       "ooui-selectfile-dragdrop-placeholder": "拖曳檔案到此處"
 }
index 1d07fe9..ede6ea9 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.6
+ * OOjs UI v0.12.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-08-26T00:14:44Z
+ * Date: 2015-09-08T20:56:08Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
 }
 .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
        /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
-       /*.oo-ui-transition(opacity 200ms);*/
+       /*.oo-ui-transition(opacity @medium-ease);*/
 }
 .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover,
 .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
        border-radius: 0.3em;
        text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
        border: 1px #c9c9c9 solid;
-       -webkit-transition: border-color 100ms ease-in-out;
-          -moz-transition: border-color 100ms ease-in-out;
-           -ms-transition: border-color 100ms ease-in-out;
-            -o-transition: border-color 100ms ease-in-out;
-               transition: border-color 100ms ease-in-out;
+       -webkit-transition: border-color 100ms ease;
+          -moz-transition: border-color 100ms ease;
+           -ms-transition: border-color 100ms ease;
+            -o-transition: border-color 100ms ease;
+               transition: border-color 100ms ease;
        background: #eeeeee;
        filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
 .oo-ui-menuLayout-menu,
 .oo-ui-menuLayout-content {
        position: absolute;
-       -webkit-transition: all ease-in-out 200ms;
-          -moz-transition: all ease-in-out 200ms;
-           -ms-transition: all ease-in-out 200ms;
-            -o-transition: all ease-in-out 200ms;
-               transition: all ease-in-out 200ms;
+       -webkit-transition: all 200ms ease;
+          -moz-transition: all 200ms ease;
+           -ms-transition: all 200ms ease;
+            -o-transition: all 200ms ease;
+               transition: all 200ms ease;
 }
 .oo-ui-menuLayout-menu {
        height: 18em;
        margin: 0.375em;
        border-radius: 0.3125em;
        border: 1px solid transparent;
-       -webkit-transition: border-color 300ms ease-in-out;
-          -moz-transition: border-color 300ms ease-in-out;
-           -ms-transition: border-color 300ms ease-in-out;
-            -o-transition: border-color 300ms ease-in-out;
-               transition: border-color 300ms ease-in-out;
+       -webkit-transition: border-color 250ms ease;
+          -moz-transition: border-color 250ms ease;
+           -ms-transition: border-color 250ms ease;
+            -o-transition: border-color 250ms ease;
+               transition: border-color 250ms ease;
 }
 .oo-ui-toolGroup-empty {
        display: none;
        bottom: -9px;
        height: 9px;
        opacity: 0.5;
-       -webkit-transition: opacity 500ms ease-in-out;
-          -moz-transition: opacity 500ms ease-in-out;
-           -ms-transition: opacity 500ms ease-in-out;
-            -o-transition: opacity 500ms ease-in-out;
-               transition: opacity 500ms ease-in-out;
+       -webkit-transition: opacity 500ms ease;
+          -moz-transition: opacity 500ms ease;
+           -ms-transition: opacity 500ms ease;
+            -o-transition: opacity 500ms ease;
+               transition: opacity 500ms ease;
 }
 .oo-ui-optionWidget {
        position: relative;
        border-radius: 1em;
        box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
        border: 1px #c9c9c9 solid;
-       -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-          -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-           -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-            -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-               transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+       -webkit-transition: left 250ms ease, margin-left 250ms ease;
+          -moz-transition: left 250ms ease, margin-left 250ms ease;
+           -ms-transition: left 250ms ease, margin-left 250ms ease;
+            -o-transition: left 250ms ease, margin-left 250ms ease;
+               transition: left 250ms ease, margin-left 250ms ease;
        background: #eeeeee;
        filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
 .oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
        border-radius: 1em;
        box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
-       -webkit-transition: opacity 200ms ease-in-out;
-          -moz-transition: opacity 200ms ease-in-out;
-           -ms-transition: opacity 200ms ease-in-out;
-            -o-transition: opacity 200ms ease-in-out;
-               transition: opacity 200ms ease-in-out;
+       -webkit-transition: opacity 250ms ease;
+          -moz-transition: opacity 250ms ease;
+           -ms-transition: opacity 250ms ease;
+            -o-transition: opacity 250ms ease;
+               transition: opacity 250ms ease;
        background: #cde7f4;
        filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
 .oo-ui-progressBarWidget-bar {
        height: 1em;
        border-right: 1px solid #cccccc;
-       -webkit-transition: width 200ms, margin-left 200ms;
-          -moz-transition: width 200ms, margin-left 200ms;
-           -ms-transition: width 200ms, margin-left 200ms;
-            -o-transition: width 200ms, margin-left 200ms;
-               transition: width 200ms, margin-left 200ms;
+       -webkit-transition: width 250ms ease, margin-left 250ms ease;
+          -moz-transition: width 250ms ease, margin-left 250ms ease;
+           -ms-transition: width 250ms ease, margin-left 250ms ease;
+            -o-transition: width 250ms ease, margin-left 250ms ease;
+               transition: width 250ms ease, margin-left 250ms ease;
        background: #cde7f4;
        filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
        border-width: 6px;
 }
 .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
-       -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-          -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-           -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-            -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-               transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+       -webkit-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+          -moz-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+           -ms-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+            -o-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+               transition: width 100ms ease, height 100ms ease, left 100ms ease;
 }
 .oo-ui-popupWidget-head {
        height: 2.5em;
        border: 1px solid #cccccc;
        box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #dddddd;
        border-radius: 0.25em;
-       -webkit-transition: border-color 200ms, box-shadow 200ms;
-          -moz-transition: border-color 200ms, box-shadow 200ms;
-           -ms-transition: border-color 200ms, box-shadow 200ms;
-            -o-transition: border-color 200ms, box-shadow 200ms;
-               transition: border-color 200ms, box-shadow 200ms;
+       -webkit-transition: border-color 250ms ease, box-shadow 250ms ease;
+          -moz-transition: border-color 250ms ease, box-shadow 250ms ease;
+           -ms-transition: border-color 250ms ease, box-shadow 250ms ease;
+            -o-transition: border-color 250ms ease, box-shadow 250ms ease;
+               transition: border-color 250ms ease, box-shadow 250ms ease;
 }
 .oo-ui-textInputWidget input.oo-ui-pendingElement-pending,
 .oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending {
 }
 .oo-ui-selectFileWidget {
        display: inline-block;
-       position: relative;
        vertical-align: middle;
        width: 100%;
        max-width: 50em;
        margin-right: 0.5em;
 }
-.oo-ui-selectFileWidget-handle {
-       width: 100%;
-       display: inline-block;
-       cursor: pointer;
-       overflow: hidden;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
+.oo-ui-selectFileWidget-selectButton {
+       display: table-cell;
+       vertical-align: middle;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator,
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
-       position: absolute;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       position: relative;
+       overflow: hidden;
 }
-.oo-ui-selectFileWidget-handle > input[type="file"] {
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > input[type="file"] {
        position: absolute;
        margin: 0;
        top: 0;
        opacity: 0;
        z-index: 1;
        cursor: pointer;
+       /* Push the button part of the native control out of view, as it changes the cursor */
+       padding-top: 100px;
+}
+.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] {
+       display: none;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info {
+       width: 100%;
+       display: table-cell;
+       vertical-align: middle;
+       position: relative;
+       overflow: hidden;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label {
+       position: absolute;
+       top: 0;
+       bottom: 0;
+       left: 0;
+       right: 0;
+       text-overflow: ellipsis;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
+       position: absolute;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
        z-index: 2;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget-dropTarget {
        cursor: default;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > input[type="file"],
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle > input[type="file"] {
-       display: none;
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget {
+       cursor: pointer;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-clearButton,
 .oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton {
 .oo-ui-selectFileWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-selectFileWidget-handle {
-       height: 2.5em;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       margin: 0 0 0 0.5em;
+}
+.oo-ui-selectFileWidget-info {
+       height: 2.4em;
        border: 1px solid rgba(0, 0, 0, 0.1);
        border-radius: 0.25em;
-       padding: 0 0.5em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        right: 0;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        left: 0.25em;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-label {
-       line-height: 2.5em;
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       line-height: 2.3em;
        margin: 0;
-       display: inline-block;
        overflow: hidden;
-       width: 100%;
        white-space: nowrap;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
        text-overflow: ellipsis;
+       left: 0.5em;
+       right: 0.5em;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        top: 0;
        width: 0.9375em;
        height: 0.9375em;
        margin: 0.775em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget:hover .oo-ui-selectFileWidget-handle {
-       border-color: #aaaaaa;
-}
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
        color: #cccccc;
        text-shadow: 0 1px 1px #ffffff;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-label {
        color: #cccccc;
 }
-.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-handle {
-       padding-left: 3em;
+.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       left: 2.75em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle {
-       padding-right: 3em;
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 3em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 0;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
-       padding-right: 5em;
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 5em;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 2em;
 }
-.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
-       padding-right: 1em;
+.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 1em;
 }
-.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
-       padding-right: 2em;
+.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label,
+.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 2em;
 }
-.oo-ui-selectFileWidget.oo-ui-selectFileWidget-dragdrop-ui .oo-ui-selectFileWidget-handle {
-       height: 3.5em;
+.oo-ui-selectFileWidget-dropTarget {
+       line-height: 3.5em;
        border: 1px dashed #aaaaaa;
        padding: 0.5em 1em;
+       margin-bottom: 0.5em;
        background: #ffffff;
        text-align: center;
        vertical-align: middle;
 }
-.oo-ui-selectFileWidget.oo-ui-selectFileWidget-dragdrop-ui .oo-ui-selectFileWidget-handle .oo-ui-iconElement-icon {
-       margin: 0.6em 0;
-}
-.oo-ui-selectFileWidget.oo-ui-selectFileWidget-dragdrop-ui .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-label {
-       color: #000000;
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget:hover,
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop oo-ui-selectfilewidget-droptarget {
+       background-color: #e1f3ff;
 }
-.oo-ui-selectFileWidget.oo-ui-selectFileWidget-dragdrop-ui .oo-ui-selectFileWidget-handle:hover,
-.oo-ui-selectFileWidget.oo-ui-selectFileWidget-dragdrop-ui.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileWidget-handle {
-       background-color: #eeeeee;
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropTarget,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-dropTarget {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
 }
 .oo-ui-outlineOptionWidget {
        position: relative;
 .oo-ui-windowManager-modal > .oo-ui-dialog {
        background-color: rgba(255, 255, 255, 0.5);
        opacity: 0;
-       -webkit-transition: opacity 250ms ease-in-out;
-          -moz-transition: opacity 250ms ease-in-out;
-           -ms-transition: opacity 250ms ease-in-out;
-            -o-transition: opacity 250ms ease-in-out;
-               transition: opacity 250ms ease-in-out;
+       -webkit-transition: opacity 250ms ease;
+          -moz-transition: opacity 250ms ease;
+           -ms-transition: opacity 250ms ease;
+            -o-transition: opacity 250ms ease;
+               transition: opacity 250ms ease;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
        top: 1em;
            -ms-transform: scale(0.5);
             -o-transform: scale(0.5);
                transform: scale(0.5);
-       -webkit-transition: all 250ms ease-in-out;
-          -moz-transition: all 250ms ease-in-out;
-           -ms-transition: all 250ms ease-in-out;
-            -o-transition: all 250ms ease-in-out;
-               transition: all 250ms ease-in-out;
+       -webkit-transition: all 250ms ease;
+          -moz-transition: all 250ms ease;
+           -ms-transition: all 250ms ease;
+            -o-transition: all 250ms ease;
+               transition: all 250ms ease;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
        /* Fade window overlay */
index 6d6d46a..83452d0 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.6
+ * OOjs UI v0.12.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-08-26T00:14:36Z
+ * Date: 2015-09-08T20:55:55Z
  */
 /**
  * @class
index f23902a..87ae9a5 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.6
+ * OOjs UI v0.12.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-08-26T00:14:44Z
+ * Date: 2015-09-08T20:56:08Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
        margin: 0.1em 0;
        padding: 0.2em 0.8em;
        border-radius: 2px;
-       -webkit-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-          -moz-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-           -ms-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-            -o-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-               transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+       -webkit-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
+          -moz-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
+           -ms-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
+            -o-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
+               transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
 }
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
 .oo-ui-menuLayout-menu,
 .oo-ui-menuLayout-content {
        position: absolute;
-       -webkit-transition: all ease-in-out 200ms;
-          -moz-transition: all ease-in-out 200ms;
-           -ms-transition: all ease-in-out 200ms;
-            -o-transition: all ease-in-out 200ms;
-               transition: all ease-in-out 200ms;
+       -webkit-transition: all 200ms ease;
+          -moz-transition: all 200ms ease;
+           -ms-transition: all 200ms ease;
+            -o-transition: all 200ms ease;
+               transition: all 200ms ease;
 }
 .oo-ui-menuLayout-menu {
        height: 18em;
 .oo-ui-horizontalLayout > .oo-ui-widget:last-child {
        margin-right: 0;
 }
+.oo-ui-horizontalLayout .oo-ui-fieldLayout {
+       margin-bottom: 0;
+}
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
        z-index: 4;
        border-radius: 1em;
        border: 1px #555555 solid;
        background: #ffffff;
-       -webkit-transition: background-color 0.1s ease-in-out;
-          -moz-transition: background-color 0.1s ease-in-out;
-           -ms-transition: background-color 0.1s ease-in-out;
-            -o-transition: background-color 0.1s ease-in-out;
-               transition: background-color 0.1s ease-in-out;
+       -webkit-transition: background-color 100ms ease;
+          -moz-transition: background-color 100ms ease;
+           -ms-transition: background-color 100ms ease;
+            -o-transition: background-color 100ms ease;
+               transition: background-color 100ms ease;
        margin-right: 0.5em;
 }
 .oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
        margin-top: -1px;
        border-radius: 1em;
        background: #555555;
-       -webkit-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-          -moz-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-           -ms-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-            -o-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-               transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+       -webkit-transition: left 100ms ease, margin-left 100ms ease;
+          -moz-transition: left 100ms ease, margin-left 100ms ease;
+           -ms-transition: left 100ms ease, margin-left 100ms ease;
+            -o-transition: left 100ms ease, margin-left 100ms ease;
+               transition: left 100ms ease, margin-left 100ms ease;
 }
 .oo-ui-toggleSwitchWidget-glow {
        display: none;
        border-width: 9px;
 }
 .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
-       -webkit-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
-          -moz-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
-           -ms-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
-            -o-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
-               transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+       -webkit-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+          -moz-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+           -ms-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+            -o-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+               transition: width 100ms ease, height 100ms ease, left 100ms ease;
 }
 .oo-ui-popupWidget-head {
        height: 2.5em;
 }
 .oo-ui-checkboxInputWidget input[type="checkbox"] + span {
        cursor: pointer;
-       -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-          -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-           -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-            -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-               transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+       -webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+          -moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+           -ms-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+            -o-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+               transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
 .oo-ui-radioInputWidget input[type="radio"] + span {
        cursor: pointer;
-       -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-          -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-           -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-            -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-               transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+       -webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+          -moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+           -ms-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+            -o-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+               transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
        border: solid 1px #cccccc;
        box-shadow: inset 0 0 0 0 #347bff;
        border-radius: 0.1em;
-       -webkit-transition: box-shadow 0.1s ease-in-out;
-          -moz-transition: box-shadow 0.1s ease-in-out;
-           -ms-transition: box-shadow 0.1s ease-in-out;
-            -o-transition: box-shadow 0.1s ease-in-out;
-               transition: box-shadow 0.1s ease-in-out;
+       -webkit-transition: box-shadow 100ms ease;
+          -moz-transition: box-shadow 100ms ease;
+           -ms-transition: box-shadow 100ms ease;
+            -o-transition: box-shadow 100ms ease;
+               transition: box-shadow 100ms ease;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
-       -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-          -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-           -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-            -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-               transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+       -webkit-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+          -moz-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+           -ms-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+            -o-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+               transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
 }
 .oo-ui-selectFileWidget {
        display: inline-block;
-       position: relative;
        vertical-align: middle;
        width: 100%;
        max-width: 50em;
        margin-right: 0.5em;
 }
-.oo-ui-selectFileWidget-handle {
-       width: 100%;
-       display: inline-block;
-       cursor: pointer;
-       overflow: hidden;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
+.oo-ui-selectFileWidget-selectButton {
+       display: table-cell;
+       vertical-align: middle;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator,
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
-       position: absolute;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       position: relative;
+       overflow: hidden;
 }
-.oo-ui-selectFileWidget-handle > input[type="file"] {
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > input[type="file"] {
        position: absolute;
        margin: 0;
        top: 0;
        opacity: 0;
        z-index: 1;
        cursor: pointer;
+       /* Push the button part of the native control out of view, as it changes the cursor */
+       padding-top: 100px;
+}
+.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] {
+       display: none;
+}
+.oo-ui-selectFileWidget-info {
+       width: 100%;
+       display: table-cell;
+       vertical-align: middle;
+       position: relative;
+       overflow: hidden;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label {
+       position: absolute;
+       top: 0;
+       bottom: 0;
+       left: 0;
+       right: 0;
+       text-overflow: ellipsis;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
+       position: absolute;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
        z-index: 2;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget-dropTarget {
        cursor: default;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > input[type="file"],
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle > input[type="file"] {
-       display: none;
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget {
+       cursor: pointer;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-clearButton,
 .oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton {
 .oo-ui-selectFileWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-selectFileWidget-handle {
-       height: 2.5em;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       margin: 0 0 0 0.5em;
+}
+.oo-ui-selectFileWidget-info {
+       height: 2.4em;
        border: 1px solid #cccccc;
        border-radius: 0.1em;
-       padding: 0 1em;
-       background: #ffffff;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        right: 0;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        left: 0.25em;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-label {
-       line-height: 2.5em;
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       line-height: 2.3em;
        margin: 0;
-       display: inline-block;
        overflow: hidden;
-       width: 100%;
        white-space: nowrap;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
        text-overflow: ellipsis;
+       left: 1em;
+       right: 1em;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        top: 0;
        width: 0.9375em;
        height: 0.9375em;
        margin: 0.775em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget:hover .oo-ui-selectFileWidget-handle {
-       border-color: #aaaaaa;
-}
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
        color: #cccccc;
        text-shadow: 0 1px 1px #ffffff;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-label {
        color: #cccccc;
 }
-.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-handle {
-       padding-left: 3em;
+.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       left: 2.75em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle {
-       padding-right: 3em;
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 3em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 0;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
-       padding-right: 5em;
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 5em;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 2em;
 }
-.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
-       padding-right: 1em;
+.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 1em;
 }
-.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
-       padding-right: 2em;
+.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label,
+.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 2em;
 }
-.oo-ui-selectFileWidget.oo-ui-selectFileWidget-dragdrop-ui .oo-ui-selectFileWidget-handle {
-       height: 3.5em;
+.oo-ui-selectFileWidget-dropTarget {
+       line-height: 3.5em;
        border: 1px dashed #cccccc;
-       border-radius: 0;
        padding: 0.5em 1em;
+       margin-bottom: 0.5em;
        background: #ffffff;
        text-align: center;
        vertical-align: middle;
 }
-.oo-ui-selectFileWidget.oo-ui-selectFileWidget-dragdrop-ui .oo-ui-selectFileWidget-handle .oo-ui-iconElement-icon {
-       margin: 0.6em 0;
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget:hover {
+       background-color: #eeeeee;
 }
-.oo-ui-selectFileWidget.oo-ui-selectFileWidget-dragdrop-ui .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-label {
-       color: #000000;
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileWidget-dropTarget {
+       background: rgba(52, 123, 255, 0.1);
 }
-.oo-ui-selectFileWidget.oo-ui-selectFileWidget-dragdrop-ui .oo-ui-selectFileWidget-handle:hover,
-.oo-ui-selectFileWidget.oo-ui-selectFileWidget-dragdrop-ui.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileWidget-handle {
-       background-color: #eeeeee;
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropTarget,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-dropTarget {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
 }
 .oo-ui-outlineOptionWidget {
        position: relative;
 .oo-ui-windowManager-modal > .oo-ui-dialog {
        background-color: rgba(255, 255, 255, 0.5);
        opacity: 0;
-       -webkit-transition: opacity 250ms ease-in-out;
-          -moz-transition: opacity 250ms ease-in-out;
-           -ms-transition: opacity 250ms ease-in-out;
-            -o-transition: opacity 250ms ease-in-out;
-               transition: opacity 250ms ease-in-out;
+       -webkit-transition: opacity 250ms ease;
+          -moz-transition: opacity 250ms ease;
+           -ms-transition: opacity 250ms ease;
+            -o-transition: opacity 250ms ease;
+               transition: opacity 250ms ease;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
        top: 1em;
            -ms-transform: scale(0.5);
             -o-transform: scale(0.5);
                transform: scale(0.5);
-       -webkit-transition: all 250ms ease-in-out;
-          -moz-transition: all 250ms ease-in-out;
-           -ms-transition: all 250ms ease-in-out;
-            -o-transition: all 250ms ease-in-out;
-               transition: all 250ms ease-in-out;
+       -webkit-transition: all 250ms ease;
+          -moz-transition: all 250ms ease;
+           -ms-transition: all 250ms ease;
+            -o-transition: all 250ms ease;
+               transition: all 250ms ease;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
        /* Fade window overlay */
index ecb210a..a291570 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.6
+ * OOjs UI v0.12.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-08-26T00:14:36Z
+ * Date: 2015-09-08T20:55:55Z
  */
 /**
  * @class
@@ -57,12 +57,6 @@ OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) {
                }
        }
 
-       if ( element instanceof OO.ui.SelectFileWidget ) {
-               if ( !element.isDisabled() && element.active ) {
-                       variants.invert = true;
-               }
-       }
-
        for ( variant in variants ) {
                classes[ variants[ variant ] ? 'on' : 'off' ].push( 'oo-ui-image-' + variant );
        }
index e5f54fc..81677ed 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.6
+ * OOjs UI v0.12.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-08-26T00:14:36Z
+ * Date: 2015-09-08T20:55:55Z
  */
 ( function ( OO ) {
 
@@ -279,12 +279,14 @@ OO.ui.infuse = function ( idOrNode ) {
                'ooui-dialog-process-retry': 'Try again',
                // Label for process dialog retry action button, visible when describing only warnings
                'ooui-dialog-process-continue': 'Continue',
-               // Default placeholder for file selection widgets
+               // Label for the file selection widget's select file button
+               'ooui-selectfile-button-select': 'Select a file',
+               // Label for the file selection widget if file selection is not supported
                'ooui-selectfile-not-supported': 'File selection is not supported',
-               // Default placeholder for file selection widgets
+               // Label for the file selection widget when no file is currently selected
                'ooui-selectfile-placeholder': 'No file is selected',
-               // Default placeholder for file selection widgets when using drag drop UI
-               'ooui-selectfile-dragdrop-placeholder': 'Drop file here (or click to browse)',
+               // Label for the file selection widget's drop target
+               'ooui-selectfile-dragdrop-placeholder': 'Drop file here',
                // Semicolon separator
                'ooui-semicolon-separator': '; '
        };
@@ -5976,7 +5978,7 @@ OO.ui.mixin.LookupElement.prototype.populateLookupMenu = function () {
        var widget = this,
                value = this.getValue();
 
-       if ( this.lookupsDisabled ) {
+       if ( this.lookupsDisabled || this.isReadOnly() ) {
                return;
        }
 
@@ -6142,9 +6144,8 @@ OO.ui.mixin.LookupElement.prototype.setReadOnly = function ( readOnly ) {
        // Note: Calling #setReadOnly this way assumes this is mixed into an OO.ui.TextInputWidget
        OO.ui.TextInputWidget.prototype.setReadOnly.call( this, readOnly );
 
-       this.setLookupsDisabled( readOnly );
        // During construction, #setReadOnly is called before the OO.ui.mixin.LookupElement constructor
-       if ( readOnly && this.lookupMenu ) {
+       if ( this.isReadOnly() && this.lookupMenu ) {
                this.closeLookupMenu();
        }
 
@@ -7558,10 +7559,12 @@ OO.ui.Toolbar.prototype.onWindowResize = function () {
  * This must be called after it is attached to a visible document and before doing anything else.
  */
 OO.ui.Toolbar.prototype.initialize = function () {
-       this.initialized = true;
-       this.narrowThreshold = this.$group.width() + this.$actions.width();
-       $( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
-       this.onWindowResize();
+       if ( !this.initialized ) {
+               this.initialized = true;
+               this.narrowThreshold = this.$group.width() + this.$actions.width();
+               $( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
+               this.onWindowResize();
+       }
 };
 
 /**
@@ -13697,7 +13700,6 @@ OO.ui.DropdownWidget.prototype.onKeyPress = function ( e ) {
  * @mixins OO.ui.mixin.IndicatorElement
  * @mixins OO.ui.mixin.PendingElement
  * @mixins OO.ui.mixin.LabelElement
- * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -13705,39 +13707,40 @@ OO.ui.DropdownWidget.prototype.onKeyPress = function ( e ) {
  * @cfg {string} [placeholder] Text to display when no file is selected.
  * @cfg {string} [notsupported] Text to display when file support is missing in the browser.
  * @cfg {boolean} [droppable=true] Whether to accept files by drag and drop.
- * @cfg {boolean} [dragDropUI=false] Whether to render the drag and drop UI.
+ * @cfg {boolean} [showDropTarget=false] Whether to show a drop target. Requires droppable to be true.
+ * @cfg {boolean} [dragDropUI=false] Deprecated alias for showDropTarget
  */
 OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
-       var dragHandler,
-               placeholderMsg = ( config && config.dragDropUI ) ?
-                       'ooui-selectfile-dragdrop-placeholder' :
-                       'ooui-selectfile-placeholder';
+       var dragHandler;
+
+       // TODO: Remove in next release
+       if ( config && config.dragDropUI ) {
+               config.showDropTarget = true;
+       }
 
        // Configuration initialization
        config = $.extend( {
                accept: null,
-               placeholder: OO.ui.msg( placeholderMsg ),
+               placeholder: OO.ui.msg( 'ooui-selectfile-placeholder' ),
                notsupported: OO.ui.msg( 'ooui-selectfile-not-supported' ),
                droppable: true,
-               dragDropUI: false
+               showDropTarget: false
        }, config );
 
        // Parent constructor
        OO.ui.SelectFileWidget.parent.call( this, config );
 
-       // Properties (must be set before TabIndexedElement constructor call)
-       this.$handle = $( '<span>' );
-
        // Mixin constructors
        OO.ui.mixin.IconElement.call( this, config );
        OO.ui.mixin.IndicatorElement.call( this, config );
-       OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$handle } ) );
+       OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$info } ) );
        OO.ui.mixin.LabelElement.call( this, $.extend( {}, config, { autoFitLabel: true } ) );
-       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
 
        // Properties
-       this.active = false;
-       this.dragDropUI = config.dragDropUI;
+       this.$info = $( '<span>' );
+
+       // Properties
+       this.showDropTarget = config.showDropTarget;
        this.isSupported = this.constructor.static.isSupported();
        this.currentFile = null;
        if ( Array.isArray( config.accept ) ) {
@@ -13749,6 +13752,12 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        this.notsupported = config.notsupported;
        this.onFileSelectedHandler = this.onFileSelected.bind( this );
 
+       this.selectButton = new OO.ui.ButtonWidget( {
+               classes: [ 'oo-ui-selectFileWidget-selectButton' ],
+               label: 'Select a file',
+               disabled: this.disabled || !this.isSupported
+       } );
+
        this.clearButton = new OO.ui.ButtonWidget( {
                classes: [ 'oo-ui-selectFileWidget-clearButton' ],
                framed: false,
@@ -13757,7 +13766,7 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        } );
 
        // Events
-       this.$handle.on( {
+       this.selectButton.$button.on( {
                keypress: this.onKeyPress.bind( this )
        } );
        this.clearButton.connect( this, {
@@ -13765,7 +13774,7 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        } );
        if ( config.droppable ) {
                dragHandler = this.onDragEnterOrOver.bind( this );
-               this.$handle.on( {
+               this.$element.on( {
                        dragenter: dragHandler,
                        dragover: dragHandler,
                        dragleave: this.onDragLeave.bind( this ),
@@ -13777,22 +13786,20 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        this.addInput();
        this.updateUI();
        this.$label.addClass( 'oo-ui-selectFileWidget-label' );
-       this.$handle
-               .addClass( 'oo-ui-selectFileWidget-handle' )
+       this.$info
+               .addClass( 'oo-ui-selectFileWidget-info' )
                .append( this.$icon, this.$label, this.clearButton.$element, this.$indicator );
        this.$element
                .addClass( 'oo-ui-selectFileWidget' )
-               .append( this.$handle );
-       if ( config.droppable ) {
-               if ( config.dragDropUI ) {
-                       this.$element.addClass( 'oo-ui-selectFileWidget-dragdrop-ui' );
-                       this.$element.on( {
-                               mouseover: this.onMouseOver.bind( this ),
-                               mouseleave: this.onMouseLeave.bind( this )
+               .append( this.$info, this.selectButton.$element );
+       if ( config.droppable && config.showDropTarget ) {
+               this.$dropTarget = $( '<div>' )
+                       .addClass( 'oo-ui-selectFileWidget-dropTarget' )
+                       .text( OO.ui.msg( 'ooui-selectfile-dragdrop-placeholder' ) )
+                       .on( {
+                               click: this.onDropTargetClick.bind( this )
                        } );
-               } else {
-                       this.$element.addClass( 'oo-ui-selectFileWidget-droppable' );
-               }
+               this.$element.prepend( this.$dropTarget );
        }
 };
 
@@ -13803,7 +13810,6 @@ OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IconElement );
 OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IndicatorElement );
 OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.PendingElement );
 OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.LabelElement );
-OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.TabIndexedElement );
 
 /* Static Properties */
 
@@ -13868,14 +13874,17 @@ OO.ui.SelectFileWidget.prototype.updateUI = function () {
                this.$element.addClass( 'oo-ui-selectFileWidget-notsupported' );
                this.$element.removeClass( 'oo-ui-selectFileWidget-empty' );
                this.setLabel( this.notsupported );
-       } else if ( this.currentFile ) {
-               this.$element.removeClass( 'oo-ui-selectFileWidget-empty' );
-               this.setLabel( this.currentFile.name +
-                       ( this.currentFile.type !== '' ? OO.ui.msg( 'ooui-semicolon-separator' ) + this.currentFile.type : '' )
-               );
        } else {
-               this.$element.addClass( 'oo-ui-selectFileWidget-empty' );
-               this.setLabel( this.placeholder );
+               this.$element.addClass( 'oo-ui-selectFileWidget-supported' );
+               if ( this.currentFile ) {
+                       this.$element.removeClass( 'oo-ui-selectFileWidget-empty' );
+                       this.setLabel( this.currentFile.name +
+                               ( this.currentFile.type !== '' ? OO.ui.msg( 'ooui-semicolon-separator' ) + this.currentFile.type : '' )
+                       );
+               } else {
+                       this.$element.addClass( 'oo-ui-selectFileWidget-empty' );
+                       this.setLabel( this.placeholder );
+               }
        }
 
        if ( this.$input ) {
@@ -13884,7 +13893,7 @@ OO.ui.SelectFileWidget.prototype.updateUI = function () {
 };
 
 /**
- * Add the input to the handle
+ * Add the input to the widget
  *
  * @private
  */
@@ -13907,31 +13916,30 @@ OO.ui.SelectFileWidget.prototype.addInput = function () {
        if ( this.accept ) {
                this.$input.attr( 'accept', this.accept.join( ', ' ) );
        }
-       this.$handle.append( this.$input );
+       this.selectButton.$button.append( this.$input );
 };
 
 /**
  * Determine if we should accept this file
  *
  * @private
- * @param {File} file
+ * @param {string} File MIME type
  * @return {boolean}
  */
-OO.ui.SelectFileWidget.prototype.isFileAcceptable = function ( file ) {
-       var i, mime, mimeTest;
+OO.ui.SelectFileWidget.prototype.isAllowedType = function ( mimeType ) {
+       var i, mimeTest;
 
-       if ( !this.accept || file.type === '' ) {
+       if ( !this.accept || !mimeType ) {
                return true;
        }
 
-       mime = file.type;
        for ( i = 0; i < this.accept.length; i++ ) {
                mimeTest = this.accept[ i ];
-               if ( mimeTest === mime ) {
+               if ( mimeTest === mimeType ) {
                        return true;
                } else if ( mimeTest.substr( -2 ) === '/*' ) {
                        mimeTest = mimeTest.substr( 0, mimeTest.length - 1 );
-                       if ( mime.substr( 0, mimeTest.length ) === mimeTest ) {
+                       if ( mimeType.substr( 0, mimeTest.length ) === mimeTest ) {
                                return true;
                        }
                }
@@ -13947,13 +13955,10 @@ OO.ui.SelectFileWidget.prototype.isFileAcceptable = function ( file ) {
  * @param {jQuery.Event} e
  */
 OO.ui.SelectFileWidget.prototype.onFileSelected = function ( e ) {
-       var file = null;
+       var file = OO.getProp( e.target, 'files', 0 ) || null;
 
-       if ( e.target.files && e.target.files[ 0 ] ) {
-               file = e.target.files[ 0 ];
-               if ( !this.isFileAcceptable( file ) ) {
-                       file = null;
-               }
+       if ( file && !this.isAllowedType( file.type ) ) {
+               file = null;
        }
 
        this.setValue( file );
@@ -13985,6 +13990,19 @@ OO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {
        }
 };
 
+/**
+ * Handle drop target click events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.SelectFileWidget.prototype.onDropTargetClick = function () {
+       if ( this.isSupported && !this.isDisabled() && this.$input ) {
+               this.$input.click();
+               return false;
+       }
+};
+
 /**
  * Handle drag enter and over events
  *
@@ -13992,7 +14010,8 @@ OO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {
  * @param {jQuery.Event} e Drag event
  */
 OO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {
-       var file = null,
+       var itemOrFile,
+               droppableFile = false,
                dt = e.originalEvent.dataTransfer;
 
        e.preventDefault();
@@ -14000,28 +14019,27 @@ OO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {
 
        if ( this.isDisabled() || !this.isSupported ) {
                this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
-               this.setActive( false );
                dt.dropEffect = 'none';
                return false;
        }
 
-       if ( dt && dt.files && dt.files[ 0 ] ) {
-               file = dt.files[ 0 ];
-               if ( !this.isFileAcceptable( file ) ) {
-                       file = null;
+       // DataTransferItem and File both have a type property, but in Chrome files
+       // have no information at this point.
+       itemOrFile = OO.getProp( dt, 'items', 0 ) || OO.getProp( dt, 'files', 0 );
+       if ( itemOrFile ) {
+               if ( this.isAllowedType( itemOrFile.type ) ) {
+                       droppableFile = true;
                }
-       } else if ( dt && dt.types && dt.types.indexOf( 'Files' ) !== -1 ) {
-               // We know we have files so set 'file' to something truthy, we just
-               // can't know any details about them.
-               // * https://bugzilla.mozilla.org/show_bug.cgi?id=640534
-               file = 'Files exist, but details are unknown';
+       // dt.types is Array-like, but not an Array
+       } else if ( Array.prototype.indexOf.call( OO.getProp( dt, 'types' ) || [], 'Files' ) !== -1 ) {
+               // File information is not available at this point for security so just assume
+               // it is acceptable for now.
+               // https://bugzilla.mozilla.org/show_bug.cgi?id=640534
+               droppableFile = true;
        }
-       if ( file ) {
-               this.$element.addClass( 'oo-ui-selectFileWidget-canDrop' );
-               this.setActive( true );
-       } else {
-               this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
-               this.setActive( false );
+
+       this.$element.toggleClass( 'oo-ui-selectFileWidget-canDrop', droppableFile );
+       if ( !droppableFile ) {
                dt.dropEffect = 'none';
        }
 
@@ -14036,7 +14054,6 @@ OO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {
  */
 OO.ui.SelectFileWidget.prototype.onDragLeave = function () {
        this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
-       this.setActive( false );
 };
 
 /**
@@ -14052,17 +14069,14 @@ OO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {
        e.preventDefault();
        e.stopPropagation();
        this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
-       this.setActive( false );
 
        if ( this.isDisabled() || !this.isSupported ) {
                return false;
        }
 
-       if ( dt && dt.files && dt.files[ 0 ] ) {
-               file = dt.files[ 0 ];
-               if ( !this.isFileAcceptable( file ) ) {
-                       file = null;
-               }
+       file = OO.getProp( dt, 'files', 0 );
+       if ( file && !this.isAllowedType( file.type ) ) {
+               file = null;
        }
        if ( file ) {
                this.setValue( file );
@@ -14071,47 +14085,16 @@ OO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {
        return false;
 };
 
-/**
- * Handle mouse over events.
- *
- * @private
- * @param {jQuery.Event} e Mouse over event
- */
-OO.ui.SelectFileWidget.prototype.onMouseOver = function () {
-       this.setActive( true );
-};
-
-/**
- * Handle mouse leave events.
- *
- * @private
- * @param {jQuery.Event} e Mouse over event
- */
-OO.ui.SelectFileWidget.prototype.onMouseLeave = function () {
-       this.setActive( false );
-};
-
 /**
  * @inheritdoc
  */
-OO.ui.SelectFileWidget.prototype.setDisabled = function ( state ) {
-       OO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, state );
-       if ( this.clearButton ) {
-               this.clearButton.setDisabled( state );
+OO.ui.SelectFileWidget.prototype.setDisabled = function ( disabled ) {
+       OO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, disabled );
+       if ( this.selectButton ) {
+               this.selectButton.setDisabled( disabled );
        }
-       return this;
-};
-
-/**
- * Set 'active' (hover) state, only matters for widgets with `dragDropUI: true`.
- *
- * @param {boolean} value Whether widget is active
- * @chainable
- */
-OO.ui.SelectFileWidget.prototype.setActive = function ( value ) {
-       if ( this.dragDropUI ) {
-               this.active = value;
-               this.updateThemeClasses();
+       if ( this.clearButton ) {
+               this.clearButton.setDisabled( disabled );
        }
        return this;
 };
index 9769e03..3709f21 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png and b/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png differ
index 4922543..8d96876 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="settings">
-        <path id="gear" d="M20.87 13.476c.078-.482.13-.972.13-1.476s-.052-.994-.13-1.476l-2.464-.26c-.15-.555-.367-1.08-.648-1.57l1.558-1.923c-.576-.803-1.28-1.51-2.087-2.084l-1.927 1.558c-.488-.28-1.015-.5-1.57-.648l-.26-2.463C12.996 3.053 12.506 3 12 3s-.994.052-1.476.13l-.26 2.464c-.554.15-1.08.367-1.57.648L6.772 4.685c-.804.576-1.51 1.28-2.085 2.086l1.558 1.927c-.28.488-.5 1.015-.648 1.57l-2.463.26c-.08.48-.132.97-.132 1.475s.052.995.13 1.477l2.464.26c.15.554.367 1.08.648 1.57l-1.558 1.92c.576.805 1.28 1.51 2.087 2.086l1.925-1.558c.488.28 1.015.5 1.57.648l.26 2.463c.48.076.97.13 1.475.13s.994-.054 1.476-.13l.26-2.466c.553-.15 1.08-.367 1.57-.648l1.92 1.558c.806-.576 1.51-1.28 2.087-2.087l-1.558-1.925c.28-.488.5-1.015.647-1.57l2.463-.26zM12 15.998c-2.21 0-3.998-1.79-3.998-3.998S9.792 8.002 12 8.002s3.998 1.79 3.998 3.998-1.79 3.998-3.998 3.998z"/>
+        <path id="gear" d="M20.87 13.476c.078-.482.13-.972.13-1.476s-.052-.994-.13-1.476l-2.464-.26c-.15-.555-.367-1.08-.648-1.57l1.558-1.923c-.576-.802-1.28-1.51-2.087-2.083L15.3 6.245c-.488-.28-1.015-.5-1.57-.648l-.26-2.463C12.996 3.054 12.506 3 12 3s-.994.052-1.476.13l-.26 2.464c-.554.15-1.08.367-1.57.648L6.772 4.685c-.804.576-1.51 1.28-2.085 2.086L6.245 8.7c-.28.488-.5 1.015-.648 1.57l-2.463.26c-.08.48-.132.97-.132 1.475s.052.995.13 1.477l2.464.26c.15.554.367 1.08.648 1.57l-1.558 1.92c.576.805 1.28 1.51 2.087 2.086l1.925-1.558c.488.28 1.015.5 1.57.648l.26 2.463c.48.075.97.13 1.475.13s.994-.055 1.476-.13l.26-2.467c.552-.15 1.08-.367 1.57-.648l1.92 1.558c.805-.576 1.51-1.28 2.086-2.087L17.758 15.3c.28-.487.5-1.014.647-1.57l2.463-.26zM12 15.998c-2.21 0-3.998-1.79-3.998-3.998S9.792 8.002 12 8.002s3.998 1.79 3.998 3.998-1.79 3.998-3.998 3.998z"/>
     </g>
 </svg>
index 918c5b6..1c2abb7 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="arched-arrow-ltr">
-        <path id="arrow" d="M19.925 14.937l-2.39-6.9-1.48 2.328c-.965-.845-2.7-1.85-5.514-1.823-4.884.046-6.52 4.244-6.52 4.244s2.752-2.64 6.924-1.95c1.73.287 3.007 1.207 3.675 1.792l-1.475 2.32 6.782-.01z"/>
+        <path id="arrow" d="M19.925 14.937l-2.39-6.9-1.48 2.328c-.965-.845-2.7-1.85-5.514-1.823-4.883.046-6.52 4.244-6.52 4.244s2.753-2.64 6.925-1.95c1.73.287 3.007 1.207 3.675 1.792l-1.475 2.32 6.782-.01z"/>
     </g>
 </svg>
index ad07634..e9dce68 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png differ
index 2f0edb7..23ed091 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-arab-ain">
-        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.124-.25.342-.662.65l-.09.065c-1.235.93-2.422 1.393-3.56 1.393-1.142 0-2.045-.33-2.71-.99-.65-.66-.975-1.56-.975-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.606-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.717-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.328-1.527-.05-2.054.827l.015.074 1.123.866.052.005c1.403-.497 2.417-.74 3.042-.725-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.385.05c-1.743.24-2.992.716-3.745 1.43-.463.463-.697.972-.702 1.524"/>
+        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.123-.25.34-.66.65l-.09.064c-1.236.93-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.71-.99-.65-.66-.976-1.56-.976-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.607-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.718-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.33-1.527-.05-2.054.826l.016.074 1.123.866.05.005c1.404-.496 2.418-.74 3.043-.724-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.386.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
     </g>
 </svg>
index 0ade40c..46d579b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png differ
index ba7ffe1..7e6769d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-arab-dad">
-        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.474 0-.985.205-1.535.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006m-6.803 3.293c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.066.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.193.31-.474.555-.845.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.144.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
+        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.475 0-.986.205-1.536.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.005M10.382 14.6c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.065.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.143.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
     </g>
 </svg>
index 0a16f8c..5e16e38 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png differ
index 0dc8b52..7471d1a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-armn-to">
-        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.277.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.215.178.392.29.53.12.133.25.23.386.29.14.05.276.074.406.074m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.345.49.735.64 1.17.15.43.226 1.09.226 1.61h1.356v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.812-.845 1.114-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.314-.626-.704-.835-1.173-.203-.473-.304-1.028-.304-1.663s.102-1.182.32-1.64c.21-.46.494-.685.85-.977.352-.297.76-.513 1.22-.648.455-.14.932-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.456-.58-.77-.767-.31-.193-.597-.332-.983-.426-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.278.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.214.18.39.29.53.12.132.25.23.387.29.14.05.276.073.406.073m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.344.49.734.64 1.17.15.43.226 1.09.226 1.61h1.357v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.81-.845 1.113-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.315-.626-.705-.835-1.174-.203-.473-.304-1.028-.304-1.663s.1-1.182.32-1.64c.21-.46.493-.685.85-.977.35-.297.76-.513 1.22-.648.454-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.457-.58-.77-.767-.31-.192-.598-.33-.984-.425-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.103z"/>
     </g>
 </svg>
index d87d0fc..383ef32 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-cyrl-be">
-        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.395-.255-1.067-.397-2.02-.397H10v3"/>
+        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.396-.255-1.068-.397-2.02-.397H10v3"/>
     </g>
 </svg>
index 3c0a879..e349905 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-cyrl-zhe">
-        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.116-.337.3-.452.55-.115.25-.286.762-.512 1.537-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.273-.268-.62-.392-1.04-.222-.76-.39-1.264-.505-1.52-.11-.253-.26-.442-.45-.57-.185-.122-.49-.184-.916-.184L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
+        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.115-.337.3-.452.55-.115.25-.286.76-.512 1.536-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.272-.268-.62-.392-1.04-.222-.76-.39-1.263-.505-1.52-.11-.252-.26-.44-.45-.57-.184-.12-.49-.183-.915-.183L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
     </g>
 </svg>
index e809453..cc4be63 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png differ
index 277f17e..05b46e2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-g">
-        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.516-.94 1.268-1.66 2.258-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.335-1.022-.5-1.707-.5-1.038 0-1.864.323-2.48.972-.61.65-.914 1.612-.914 2.89 0 1.376.31 2.41.93 3.102.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.867"/>
+        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.517-.94 1.27-1.66 2.26-2.16.753-.386 1.692-.58 2.815-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.336-1.022-.5-1.707-.5-1.038 0-1.864.322-2.48.97-.61.65-.914 1.613-.914 2.89 0 1.377.31 2.41.93 3.103.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.866"/>
     </g>
 </svg>
index 1b0a659..f36e52c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png and b/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png differ
index 8de2583..2f0e406 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="regular-expression">
-        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.655 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
-        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.444.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.666.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.803.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .583.336.875 1.008.875.48 0 .865-.138 1.152-.415.29-.276.436-.644.436-1.102v-.627"/>
+        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.654 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
+        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.443.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.665.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .582.336.874 1.008.874.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
     </g>
 </svg>
index 4eedfbc..86dc8b3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/close.png and b/resources/lib/oojs-ui/themes/apex/images/icons/close.png differ
index f05a965..d058d65 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="close">
-        <path id="x" d="M18.717 6.697l-1.414-1.414L12 10.586 6.697 5.283 5.283 6.697 10.586 12l-5.303 5.303 1.414 1.414L12 13.414l5.303 5.303 1.414-1.414L13.414 12z"/>
+        <path id="cross" d="M17.717 7.697l-1.414-1.414L12 10.586 7.697 6.283 6.283 7.697 10.586 12l-4.303 4.303 1.414 1.414L12 13.414l4.303 4.303 1.414-1.414L13.414 12z"/>
     </g>
 </svg>
index ee58c9a..6e678e2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/code.png and b/resources/lib/oojs-ui/themes/apex/images/icons/code.png differ
index fe5309d..d3893b0 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
     <g id="code">
-        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.478.808-.587C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.306.238.76.238 1.487v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
+        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.588C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.307.238.76.238 1.488v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
         <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
     </g>
 </svg>
index 10927e1..4b59b2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png differ
index e836361..1d7980d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M2 2h3v1H3v6h6V7h1v3H2z"/>
-        <path id="arrow" d="M6.21 2H10v3.79L8.58 4.367 6.446 6.5 5.5 5.553 7.632 3.42z"/>
+        <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
+        <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
     </g>
 </svg>
index 7a3454e..2978654 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png differ
index 9fdc8ca..7e25d03 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M7 3h2v6H3V7H2v3h8V2H7z"/>
-        <path id="arrow" d="M2 5.79l1.42-1.422L5.554 6.5l.947-.947L4.37 3.42 5.788 2H2z"/>
+        <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
+        <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
     </g>
 </svg>
index 5c66688..9f418b8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png differ
index bbfdaa0..67e6943 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="find">
-        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.372c.19.19.534.153.78-.094s.315-.59.126-.78L16.66 16.59l-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.804 1.84-1.816 1.84-1.01 0-1.844-.83-1.844-1.843s.833-1.814 1.845-1.814z"/>
+        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.154.78-.093s.315-.59.126-.78l-2.37-2.377-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.805 1.84-1.817 1.84-1.01 0-1.844-.83-1.844-1.844s.832-1.814 1.844-1.814z"/>
         <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53c.284-.797.787-1.486 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
     </g>
 </svg>
index 28aab68..b63eb84 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png differ
index e70ae48..962165d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="find">
-        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.372c-.19.19-.534.153-.78-.094s-.315-.59-.126-.78L8.34 16.59l.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.804 1.84 1.816 1.84 1.01 0 1.844-.83 1.844-1.843s-.833-1.814-1.845-1.814z"/>
+        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.154-.78-.093s-.315-.59-.126-.78l2.37-2.377.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.805 1.84 1.817 1.84 1.01 0 1.844-.83 1.844-1.844s-.832-1.814-1.844-1.814z"/>
         <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53c-.284-.797-.787-1.486-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
     </g>
 </svg>
index a9a0ebb..825435d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="help">
-        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.917 9.916 9.917 5.48 0 9.917-4.438 9.917-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.918 9.916 9.918 5.48 0 9.918-4.438 9.918-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
             <path id="bottom" d="M11 16h2v2h-2z"/>
index 1b513d0..0d8052f 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="help">
-        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.917-9.916 9.917-5.48 0-9.917-4.438-9.917-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.918-9.916 9.918-5.48 0-9.918-4.438-9.918-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
             <path id="bottom" d="M13 16h-2v2h2z"/>
index 9375751..10d1b81 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="history">
         <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.462 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.083 0 4.465-3.616 8.084-8.08 8.084-1.145 0-2.23-.247-3.213-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
+        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.46 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.615 8.084-8.08 8.084-1.144 0-2.23-.247-3.212-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
     </g>
 </svg>
index 3147340..6cff2ff 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="info">
         <path id="circled-i" d="M11.5 17C8.462 17 6 14.536 6 11.5 6 8.463 8.462 6 11.5 6c3.036 0 5.5 2.462 5.5 5.5 0 3.036-2.464 5.5-5.5 5.5zm0-12C7.91 5 5 7.91 5 11.5S7.91 18 11.5 18s6.5-2.91 6.5-6.5S15.09 5 11.5 5zm.5 5v4h1v1h-3v-1h1v-3h-1v-1zm-1-2h1v1h-1z"/>
     </g>
index 3285ad9..9f603ea 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png differ
index 04cdebb..99980c0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-arab-keheh-jeem">
-        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.872 1.125-.064.263-.035.572.063.78.19.406.54.575.844.814l.094-.122.53.625c.14.165.344.514.47.94.137.462.08.724 0 1.124H11.22c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.935-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.357.026-.768.24-1.03.72-.247.447-.435.838-.657 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.204-.51.4-.72.562-.3.26-.703.688-.907 1-.402.615-.693 1.084-.874 1.78-.18.69.003 1.34.468 1.75.426.377.846.52 1.28.564.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.384-1.47-.594-.27-.283-.306-.64-.155-1.22.036-.14.097-.322.25-.53.17-.228.364-.435.594-.656.45-.436 1.01-.737 1.46-.938-.044.205-.106.442-.054.687.05.23.25.38.44.47.26.12.506.153.69.154 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.443-.673-.83-1-1.22 1.258-.814 2.717-1.238 3.97-1.687.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .378.286.75.556 1.097.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
+        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125-.065.263-.036.572.062.78.19.406.54.575.844.814l.094-.12.53.624c.14.165.344.514.47.94.137.462.08.724 0 1.124h-3.44c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.358.026-.77.24-1.03.72-.248.447-.436.838-.658 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.203-.51.4-.72.56-.3.26-.703.69-.907 1-.402.616-.693 1.085-.874 1.78-.18.69.003 1.34.468 1.75.426.378.846.52 1.28.565.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.385-1.47-.595-.27-.283-.306-.64-.155-1.22.035-.14.096-.322.25-.53.17-.228.363-.435.593-.656.45-.437 1.01-.738 1.46-.94-.044.206-.106.443-.054.688.05.23.25.38.44.47.26.12.505.153.69.154 1.42.01 2.86 0 4.28 0 .245 0 .45-.163.592-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.442-.673-.83-1-1.22 1.258-.813 2.717-1.237 3.97-1.686.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.098.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
     </g>
 </svg>
index 3c5adc3..03493be 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png differ
index f315377..a9c7def 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-arab-meem">
-        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.696-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.008-.11-.01-.24-.053-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.376.125-.05-.247 1.557-1.71 2.707-2.566 3.45-2.566.382 0 .67.13.862.394.134.195.25.6.343 1.21l.203 1.2c.105.586.24.895.408.925"/>
+        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.695-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.01-.11-.01-.24-.052-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.377.125-.05-.247 1.556-1.71 2.706-2.566 3.45-2.566.38 0 .67.13.86.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
     </g>
 </svg>
index 15795c5..b5e55cc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png differ
index f0d10d9..a653a27 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-armn-sha">
-        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.327 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.582 0-1.136.095-1.662.284-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.215-1.344.323-2.106.323-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.435-.573-.97-.678-1.606-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
+        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.328 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.583 0-1.137.094-1.663.283-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.216-1.344.324-2.106.324-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.274.66-1.836.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
     </g>
 </svg>
index 2b8b6e4..f46dea5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png differ
index 2018e60..0a0d110 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-c">
-        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.628-1.78-.628-1.368 0-2.475.63-3.32 1.892-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.777 0 1.476-.26 2.1-.785.628-.522 1.08-1.26 1.368-2.216"/>
+        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.893-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.778 0 1.477-.26 2.1-.785.63-.522 1.08-1.26 1.37-2.216"/>
     </g>
 </svg>
index c044c86..feadca0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-d">
-        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.502.063 1.952.188.644.17 1.194.472 1.65.91.456.43.8.97 1.03 1.62.23.65.346 1.378.346 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.947 1.072-1.456 1.416-.504.335-1.1.586-1.794.75-.526.126-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.238.41-.098.76-.243 1.05-.434.38-.247.726-.57 1.037-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
+        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.645.17 1.195.472 1.65.91.457.43.8.97 1.03 1.62.23.65.347 1.378.347 2.186 0 .966-.146 1.847-.436 2.644-.283.79-.66 1.49-1.126 2.095-.46.6-.947 1.072-1.456 1.416-.504.334-1.1.585-1.794.75-.526.125-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24.41-.097.76-.242 1.05-.433.38-.247.727-.57 1.038-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
     </g>
 </svg>
index 7f2512e..7f9da2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png differ
index 867f458..65670ef 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-geor-kan">
-        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.616c-.055.26-.083.497-.083.712 0 .972.52 1.458 1.564 1.458 1.31 0 2.104-.723 2.386-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.547-1.39-1.64-1.39h-1.116l.248-1.26h1.118c1.202-.004 1.908-.55 2.118-1.64.04-.18.058-.355.058-.52 0-1.144-.9-1.715-2.697-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
+        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.617c-.055.26-.083.497-.083.712 0 .97.52 1.457 1.564 1.457 1.31 0 2.105-.723 2.387-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.546-1.39-1.64-1.39h-1.115l.248-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.697-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
     </g>
 </svg>
index c3b1e6e..4a7b1fc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png differ
index 1c5a4ca..615e5f2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-s">
-        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.655.302.86.207.193.733.405 1.58.632l.937.232c1.06.274 1.795.622 2.208 1.046.413.42.62 1.008.62 1.767 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.302-1.867-.55l.315-1.61c.573.355 1.147.624 1.72.805.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.884-1 .884-1.697 0-.464-.12-.815-.356-1.053-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.044-1.108 3.464-1.108.553 0 1.1.05 1.642.147.542.098 1.085.245 1.627.442"/>
+        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.654.302.86.207.192.733.404 1.58.63l.937.233c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.314-1.61c.573.356 1.147.625 1.72.806.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.356-1.054-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.1 1.085.246 1.627.443"/>
     </g>
 </svg>
index cae0e77..b4f0875 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/language.png and b/resources/lib/oojs-ui/themes/apex/images/icons/language.png differ
index 694d225..956aba1 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="language">
-        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.968-.15 1.648-.333 2.04-.545.454-.21.785-.48.998-.813.21-.303.314-.663.314-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.042.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.144.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.585-.514.03-.92.045-1.222.045-.393 0-.71-.016-.95-.046l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.738.228-1.766l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.572-.09.633-.09s.647-.15 1.765-.453l.046 1.04c-.966.243-2.144.44-3.53.59-.063.663-.093 1.086-.093 1.266.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.133-1.252-.224-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.195.137.316.137.364 0 .908-.364 1.63-1.09zm.774-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
+        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.97-.15 1.65-.333 2.04-.545.455-.21.786-.48 1-.813.21-.303.313-.663.313-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.043.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.143.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.584-.514.03-.92.045-1.222.045-.393 0-.71-.015-.95-.045l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.74.228-1.767l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.573-.09.634-.09s.647-.15 1.765-.453l.045 1.04c-.966.242-2.144.44-3.53.59-.063.662-.093 1.085-.093 1.265.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.132-1.252-.223-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.194.137.315.137.364 0 .908-.365 1.63-1.09zm.775-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
         <path id="english" d="M9.497 15.98h1.85L8.265 7.033h-1.85l-3.08 8.95h1.85L5.74 14h3.21l.547 1.98zm-3.49-3.376L7.34 8.822l1.343 3.782H6.008z"/>
     </g>
 </svg>
index 710872b..23c9539 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="link">
-        <path id="right" d="M19.188 12c0 1.1-.89 2.016-1.988 2.016L13.005 14c.538 1.09.963 2 1.997 2h3C19.658 16 21 13.657 21 12s-1.342-4-2.998-4h-3c-1.034 0-1.46.91-1.998 2l4.195-.016c1.095 0 1.986.917 1.986 2.017z"/>
+        <path id="right" d="M19.188 12c0 1.1-.89 2.016-1.988 2.016L13.005 14c.538 1.09.963 2 1.997 2h3C19.658 16 21 13.657 21 12s-1.342-4-2.998-4h-3c-1.034 0-1.46.91-1.998 2l4.195-.016c1.094 0 1.985.917 1.985 2.017z"/>
         <path id="center" d="M8 12c0 .535.42 1 .938 1h6.11c.517 0 .937-.465.937-1 0-.534-.42-1-.938-1h-6.11C8.42 11 8 11.466 8 12z"/>
         <path id="left" d="M4.816 12c0-1.1.89-2.016 1.988-2.016L11 10c-.54-1.09-.964-2-1.998-2h-3c-1.656 0-2.998 2.343-2.998 4s1.342 4 2.998 4h3c1.034 0 1.46-.91 1.998-2l-4.195.016c-1.098 0-1.99-.917-1.99-2.017z"/>
     </g>
index a7b7ae8..85baad2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="lock">
         <path d="M12 6c-2.21 0-4 1.79-4 4v1H7v7h10v-7h-1v-1c0-2.21-1.79-4-4-4zm0 2c1.105 0 2 .895 2 2v1h-4v-1c0-1.105.895-2 2-2z"/>
index 48d2c7e..35b6375 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="move-rtl">
-        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.716L13.65 19.2z"/>
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.717L13.65 19.2z"/>
     </g>
 </svg>
index b7fb2e7..9334b50 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" id="svg3116">
     <g id="alert">
         <path d="M12 18c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="path3119"/>
index b8736a0..00ace19 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png and b/resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png differ
index 5f10d4d..844013d 100644 (file)
@@ -3,7 +3,7 @@
     <g id="regular-expression">
         <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312h-1.45c-.575-.635-1.013-1.376-1.314-2.223-.3-.847-.45-1.758-.45-2.732"/>
         <path id="dot" d="M10 16c0 .552-.448 1-1 1s-1-.448-1-1 .448-1 1-1 1 .448 1 1z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.475-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.383-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.157h1.534"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.844-.737 1.582-1.307 2.21h-1.453c.527-.688.936-1.457 1.225-2.308.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66-.28-.862-.697-1.654-1.248-2.374h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
+        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.474-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.382-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.158h1.534"/>
+        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.843-.737 1.58-1.307 2.21h-1.453c.527-.69.936-1.458 1.225-2.31.29-.854.434-1.74.434-2.66 0-.91-.14-1.796-.422-2.66-.28-.86-.697-1.653-1.248-2.373h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
     </g>
 </svg>
index 070e4bf..137150b 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="search">
-        <path id="search" d="M16.02 15.96l-2.373-2.375-.17-.1c.404-.565.644-1.26.644-2.008C14.12 9.557 12.566 8 10.647 8c-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.643l.098.17 2.375 2.373c.19.19.542.143.79-.104s.292-.6.103-.79zm-5.376-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.995-2.213 2.216-2.213 1.222 0 2.213.992 2.213 2.213 0 1.222-.993 2.213-2.214 2.213z"/>
+        <path id="search" d="M16.02 15.96l-2.373-2.375-.17-.1c.404-.565.644-1.26.644-2.008C14.12 9.557 12.567 8 10.648 8 8.727 8 7.17 9.557 7.17 11.478c0 1.92 1.556 3.477 3.477 3.477.75 0 1.442-.24 2.01-.643l.098.17 2.375 2.373c.19.19.542.143.79-.104s.292-.6.103-.79zm-5.376-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.996-2.213 2.217-2.213 1.222 0 2.213.992 2.213 2.213 0 1.222-.993 2.213-2.214 2.213z"/>
     </g>
 </svg>
index 6eefe90..e064672 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="secure">
-        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.485-.485 1.45-.487 1.935-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
+        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.486-.485 1.45-.487 1.936-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
     </g>
 </svg>
index 7ec6263..3799767 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="settings">
         <path id="gear" d="M3 4h3v2H3zm9 0h9v2h-9zM8 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1H8c-.552 0-1-.448-1-1V4c0-.552.448-1 1-1zm-5 8h9v2H3zm15 0h3v2h-3zm-4-1h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2H3zm12 0h6v2h-6zm-4-1h2c.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>
index e632f8a..7f65881 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png and b/resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png differ
index bb81880..dbf6ed5 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="special-character">
-        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.125.513-.19 1.08-.19 1.7 0 .512.06 1 .175 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.602.044.75.035.457.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.895.92 1.157 1.54.27.614.403 1.33.403 2.15 0 .65-.108 1.242-.32 1.78-.216.53-.515.996-.9 1.397-.38.4-.83.732-1.356.99-.525.255-.707.43-1.336.523l-.092.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.038c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.066-1.186-.194-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
+        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.124.513-.19 1.08-.19 1.7 0 .512.06 1 .176 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.458.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.896.92 1.158 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.38.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.093.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.695 2.002-1.362.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.067-1.186-.195-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
     </g>
 </svg>
index 71fa960..46092a6 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="strikethrough-s">
         <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
-        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.474 0-.966-.074-1.466-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.716-.148-1.204-.352-1.406-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
+        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.473 0-.965-.074-1.465-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.155.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.715-.148-1.203-.352-1.405-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
     </g>
 </svg>
index 71671c0..5265e04 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 77c66a0..466672e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="text-style">
-        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.288 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
+        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
         <path id="underline" d="M6 19h12v1H6v-1z"/>
     </g>
 </svg>
index 6f3da1e..f443f84 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="unLock">
         <path d="M8 6c-2.21 0-4 1.79-4 4v1h2v-1c0-1.105.895-2 2-2s2 .895 2 2v1H9v7h10v-7h-7v-1c0-2.21-1.79-4-4-4z"/>
index 96305a6..1aabf8b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="unLock">
         <path d="M15 6c2.21 0 4 1.79 4 4v1h-2v-1c0-1.105-.895-2-2-2s-2 .895-2 2v1h1v7H4v-7h7v-1c0-2.21 1.79-4 4-4z"/>
index 7378298..f5aaf5d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="underline-u">
-        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.654-1.666.98-2.98.98-1.32 0-2.32-.324-2.996-.98C8.336 14.37 8 13.405 8 12.126V6"/>
+        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.655-1.666.98-2.98.98-1.32 0-2.32-.323-2.996-.98C8.336 14.37 8 13.406 8 12.127V6"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index cddc0db..868bcc9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="alert">
         <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 6zM5 7h2V2H5zm0 3h2V8H5z"/>
index c4f7998..e0f13e6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="ltr">
         <path id="arrow" d="M3 9V2l6 3.5z"/>
index b49613e..c88c364 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="rtl">
         <path id="arrow" d="M3 5.5L9 9V2z"/>
index b18405d..3c010c1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="clear">
         <path id="circle-with-cross" d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
index 051ed5f..d1e0cba 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="required">
         <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
index 985e602..2718a9b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png differ
index e5c4010..9b3c199 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.646l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.213S6.21 7.207 4.99 7.207z"/>
+        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.647l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.214s-.99 2.213-2.21 2.213z"/>
     </g>
 </svg>
index 4213d67..b7a8d22 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png differ
index 759f57e..3201301 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.646l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21-1.222 0-2.213.99-2.213 2.213S5.79 7.207 7.01 7.207z"/>
+        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.647l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21S4.8 3.77 4.8 4.995 5.79 7.207 7.01 7.207z"/>
     </g>
 </svg>
index e413e75..cadec2a 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0, 0, 16, 16">
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
     <g id="transparency">
         <path d="M0 0h8v8H0zm8 8h8v8H8z" fill="#ccc"/>
         <path d="M8 0h8v8H8zM0 8h8v8H0z" fill="#fff"/>
index 4f786c5..ba0b477 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png differ
index a0f0670..7813622 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087 1.5-.997c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.093L19 16.62l-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
+    <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087L9 17.61c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.093L19 16.62l-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
 </svg>
index 1358969..c2a2e5e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png differ
index d0bd78b..a68158d 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087 1.5-.997c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.093L19 16.62l-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
+    <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087L9 17.61c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.093L19 16.62l-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
 </svg>
index 37b57fe..327e1dd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png differ
index 5b29c98..df95976 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M-472.8 494.7l6.3 5.7-6.3 5.7v-3.8h-1.3c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <path d="M13.3 6.3l6.3 5.7-6.3 5.7v-3.8H12c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9V6.3z" id="path3034"/>
 </svg>
index 7d2113f..649cd14 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png differ
index 20835d2..9abef4f 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <path d="M-472.8 494.7l6.3 5.7-6.3 5.7v-3.8h-1.3c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M13.3 6.3l6.3 5.7-6.3 5.7v-3.8H12c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9V6.3z" id="path3034"/>
 </svg>
index a50b306..f04017c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png differ
index 6f69940..d957f70 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M-476.3 494.7l-6.3 5.7 6.3 5.7v-3.8h1.3c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <path d="M10.7 6.3L4.4 12l6.3 5.7v-3.8H12c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9V6.3z" id="path3034"/>
 </svg>
index ed69a01..d591768 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png differ
index e919d37..6ec2fcc 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <path d="M-476.3 494.7l-6.3 5.7 6.3 5.7v-3.8h1.3c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M10.7 6.3L4.4 12l6.3 5.7v-3.8H12c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9V6.3z" id="path3034"/>
 </svg>
index b498481..30d7d20 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png differ
index 4363d3e..e1a7c67 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-arab-ain">
-        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.124-.25.342-.662.65l-.09.065c-1.235.93-2.422 1.393-3.56 1.393-1.142 0-2.045-.33-2.71-.99-.65-.66-.975-1.56-.975-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.606-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.717-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.328-1.527-.05-2.054.827l.015.074 1.123.866.052.005c1.403-.497 2.417-.74 3.042-.725-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.385.05c-1.743.24-2.992.716-3.745 1.43-.463.463-.697.972-.702 1.524"/>
+        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.123-.25.34-.66.65l-.09.064c-1.236.93-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.71-.99-.65-.66-.976-1.56-.976-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.607-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.718-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.33-1.527-.05-2.054.826l.016.074 1.123.866.05.005c1.404-.496 2.418-.74 3.043-.724-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.386.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
     </g>
 </svg>
index ad07634..e9dce68 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png differ
index 2f0edb7..23ed091 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-arab-ain">
-        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.124-.25.342-.662.65l-.09.065c-1.235.93-2.422 1.393-3.56 1.393-1.142 0-2.045-.33-2.71-.99-.65-.66-.975-1.56-.975-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.606-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.717-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.328-1.527-.05-2.054.827l.015.074 1.123.866.052.005c1.403-.497 2.417-.74 3.042-.725-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.385.05c-1.743.24-2.992.716-3.745 1.43-.463.463-.697.972-.702 1.524"/>
+        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.123-.25.34-.66.65l-.09.064c-1.236.93-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.71-.99-.65-.66-.976-1.56-.976-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.607-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.718-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.33-1.527-.05-2.054.826l.016.074 1.123.866.05.005c1.404-.496 2.418-.74 3.043-.724-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.386.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
     </g>
 </svg>
index 42518e7..9eb593b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png differ
index 6a2a9e3..8b75d71 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-arab-dad">
-        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.474 0-.985.205-1.535.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006m-6.803 3.293c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.066.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.193.31-.474.555-.845.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.144.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
+        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.475 0-.986.205-1.536.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.005M10.382 14.6c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.065.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.143.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
     </g>
 </svg>
index 0ade40c..46d579b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png differ
index ba7ffe1..7e6769d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-arab-dad">
-        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.474 0-.985.205-1.535.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.006m-6.803 3.293c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.066.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.193.31-.474.555-.845.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.144.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
+        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.475 0-.986.205-1.536.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.005M10.382 14.6c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.065.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.143.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
     </g>
 </svg>
index c11de3e..03a7931 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png differ
index e3a0813..0176bb2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-armn-to">
-        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.277.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.215.178.392.29.53.12.133.25.23.386.29.14.05.276.074.406.074m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.345.49.735.64 1.17.15.43.226 1.09.226 1.61h1.356v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.812-.845 1.114-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.314-.626-.704-.835-1.173-.203-.473-.304-1.028-.304-1.663s.102-1.182.32-1.64c.21-.46.494-.685.85-.977.352-.297.76-.513 1.22-.648.455-.14.932-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.456-.58-.77-.767-.31-.193-.597-.332-.983-.426-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.278.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.214.18.39.29.53.12.132.25.23.387.29.14.05.276.073.406.073m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.344.49.734.64 1.17.15.43.226 1.09.226 1.61h1.357v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.81-.845 1.113-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.315-.626-.705-.835-1.174-.203-.473-.304-1.028-.304-1.663s.1-1.182.32-1.64c.21-.46.493-.685.85-.977.35-.297.76-.513 1.22-.648.454-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.457-.58-.77-.767-.31-.192-.598-.33-.984-.425-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.103z"/>
     </g>
 </svg>
index 0a16f8c..5e16e38 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png differ
index 0dc8b52..7471d1a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-armn-to">
-        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.277.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.215.178.392.29.53.12.133.25.23.386.29.14.05.276.074.406.074m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.345.49.735.64 1.17.15.43.226 1.09.226 1.61h1.356v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.812-.845 1.114-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.314-.626-.704-.835-1.173-.203-.473-.304-1.028-.304-1.663s.102-1.182.32-1.64c.21-.46.494-.685.85-.977.352-.297.76-.513 1.22-.648.455-.14.932-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.456-.58-.77-.767-.31-.193-.597-.332-.983-.426-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.278.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.214.18.39.29.53.12.132.25.23.387.29.14.05.276.073.406.073m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.344.49.734.64 1.17.15.43.226 1.09.226 1.61h1.357v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.81-.845 1.113-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.315-.626-.705-.835-1.174-.203-.473-.304-1.028-.304-1.663s.1-1.182.32-1.64c.21-.46.493-.685.85-.977.35-.297.76-.513 1.22-.648.454-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.457-.58-.77-.767-.31-.192-.598-.33-.984-.425-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.103z"/>
     </g>
 </svg>
index 5716249..396215d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-cyrl-be">
-        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.395-.255-1.067-.397-2.02-.397H10v3"/>
+        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.396-.255-1.068-.397-2.02-.397H10v3"/>
     </g>
 </svg>
index d87d0fc..383ef32 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-cyrl-be">
-        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.395-.255-1.067-.397-2.02-.397H10v3"/>
+        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.396-.255-1.068-.397-2.02-.397H10v3"/>
     </g>
 </svg>
index 6085d9c..3d7523a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-cyrl-zhe">
-        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.116-.337.3-.452.55-.115.25-.286.762-.512 1.537-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.273-.268-.62-.392-1.04-.222-.76-.39-1.264-.505-1.52-.11-.253-.26-.442-.45-.57-.185-.122-.49-.184-.916-.184L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
+        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.115-.337.3-.452.55-.115.25-.286.76-.512 1.536-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.272-.268-.62-.392-1.04-.222-.76-.39-1.263-.505-1.52-.11-.252-.26-.44-.45-.57-.184-.12-.49-.183-.915-.183L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
     </g>
 </svg>
index 3c0a879..e349905 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-cyrl-zhe">
-        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.116-.337.3-.452.55-.115.25-.286.762-.512 1.537-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.273-.268-.62-.392-1.04-.222-.76-.39-1.264-.505-1.52-.11-.253-.26-.442-.45-.57-.185-.122-.49-.184-.916-.184L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
+        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.115-.337.3-.452.55-.115.25-.286.76-.512 1.536-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.272-.268-.62-.392-1.04-.222-.76-.39-1.263-.505-1.52-.11-.252-.26-.44-.45-.57-.184-.12-.49-.183-.915-.183L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
     </g>
 </svg>
index 18de673..5dc39ee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png differ
index c840c51..88733e0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-g">
-        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.516-.94 1.268-1.66 2.258-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.335-1.022-.5-1.707-.5-1.038 0-1.864.323-2.48.972-.61.65-.914 1.612-.914 2.89 0 1.376.31 2.41.93 3.102.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.867"/>
+        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.517-.94 1.27-1.66 2.26-2.16.753-.386 1.692-.58 2.815-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.336-1.022-.5-1.707-.5-1.038 0-1.864.322-2.48.97-.61.65-.914 1.613-.914 2.89 0 1.377.31 2.41.93 3.103.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.866"/>
     </g>
 </svg>
index e809453..cc4be63 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png differ
index 277f17e..05b46e2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-g">
-        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.516-.94 1.268-1.66 2.258-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.335-1.022-.5-1.707-.5-1.038 0-1.864.323-2.48.972-.61.65-.914 1.612-.914 2.89 0 1.376.31 2.41.93 3.102.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.867"/>
+        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.517-.94 1.27-1.66 2.26-2.16.753-.386 1.692-.58 2.815-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.336-1.022-.5-1.707-.5-1.038 0-1.864.322-2.48.97-.61.65-.914 1.613-.914 2.89 0 1.377.31 2.41.93 3.103.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.866"/>
     </g>
 </svg>
index 576e89d..2717b5a 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9-.3.3-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8z"/>
     <g>
         <path d="M12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
index 1a1ce2e..212e16d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png differ
index 1708674..a90feeb 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="regular-expression">
-        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.655 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
-        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.444.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.666.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.803.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .583.336.875 1.008.875.48 0 .865-.138 1.152-.415.29-.276.436-.644.436-1.102v-.627"/>
+        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.654 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
+        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.443.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.665.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .582.336.874 1.008.874.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
     </g>
 </svg>
index 1b0a659..f36e52c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png differ
index 8de2583..2f0e406 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="regular-expression">
-        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.655 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
-        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.444.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.666.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.803.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .583.336.875 1.008.875.48 0 .865-.138 1.152-.415.29-.276.436-.644.436-1.102v-.627"/>
+        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.654 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
+        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.443.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.665.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .582.336.874 1.008.874.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
     </g>
 </svg>
index 6d8abc3..32d5ae8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png differ
index 89c5e25..cd7ce21 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M18.4 8.1c.8-.8.8-2 0-2.8L12 11.8 6.4 6.2 5 7.6l5.6 5.6-5 5c-.8.8-.8 2 0 2.8l6.4-6.4 5.6 5.6 1.4-1.4-5.6-5.6 5-5.1z"/>
+    <g id="close">
+        <path id="cross" d="M17.4 9.1c.8-.8.8-2 0-2.8L12 11.8 7.4 7.2 6 8.6l4.6 4.6-4 4c-.8.8-.8 2 0 2.8l5.4-5.4 4.6 4.6 1.4-1.4-4.6-4.6z"/>
+    </g>
 </svg>
index ea65697..b05cc97 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png differ
index 4dfa16a..1427670 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18.4 8.1c.8-.8.8-2 0-2.8L12 11.8 6.4 6.2 5 7.6l5.6 5.6-5 5c-.8.8-.8 2 0 2.8l6.4-6.4 5.6 5.6 1.4-1.4-5.6-5.6 5-5.1z"/>
+    <g id="close">
+        <path id="cross" d="M17.4 9.1c.8-.8.8-2 0-2.8L12 11.8 7.4 7.2 6 8.6l4.6 4.6-4 4c-.8.8-.8 2 0 2.8l5.4-5.4 4.6 4.6 1.4-1.4-4.6-4.6z"/>
+    </g>
 </svg>
index 004a518..731baf9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png differ
index d20fff1..ee8a82d 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M5.6 8.1c-.8-.8-.8-2 0-2.8l6.4 6.5 5.6-5.6L19 7.6l-5.6 5.6 5 5c.8.8.8 2 0 2.8L12 14.6l-5.6 5.6L5 18.8l5.6-5.6-5-5.1z" id="path140"/>
+    <g id="close">
+        <path id="cross" d="M6.6 9.1c-.8-.8-.8-2 0-2.8l5.4 5.5 4.6-4.6L18 8.6l-4.6 4.6 4 4c.8.8.8 2 0 2.8L12 14.6l-4.6 4.6L6 17.8l4.6-4.6z"/>
+    </g>
 </svg>
index 1cb898d..3752520 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png differ
index 3666a34..6e0ca93 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5.6 8.1c-.8-.8-.8-2 0-2.8l6.4 6.5 5.6-5.6L19 7.6l-5.6 5.6 5 5c.8.8.8 2 0 2.8L12 14.6l-5.6 5.6L5 18.8l5.6-5.6-5-5.1z" id="path140"/>
+    <g id="close">
+        <path id="cross" d="M6.6 9.1c-.8-.8-.8-2 0-2.8l5.4 5.5 4.6-4.6L18 8.6l-4.6 4.6 4 4c.8.8.8 2 0 2.8L12 14.6l-4.6 4.6L6 17.8l4.6-4.6z"/>
+    </g>
 </svg>
index 23c5983..97e0c2c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png differ
index fab61c1..d62d230 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="code">
-        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.478.808-.587C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.306.238.76.238 1.487v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
+        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.588C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.307.238.76.238 1.488v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
         <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
     </g>
 </svg>
index ee58c9a..6e678e2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png differ
index fe5309d..d3893b0 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
     <g id="code">
-        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.478.808-.587C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.306.238.76.238 1.487v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
+        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.588C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.307.238.76.238 1.488v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
         <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
     </g>
 </svg>
index 3be50ba..eec3102 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png differ
index 99ded02..0526f75 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="external">
-        <path id="box" d="M2 2h3v1H3v6h6V7h1v3H2z"/>
-        <path id="arrow" d="M6.21 2H10v3.79L8.58 4.367 6.446 6.5 5.5 5.553 7.632 3.42z"/>
+        <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
+        <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
     </g>
 </svg>
index 10927e1..4b59b2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png differ
index e836361..1d7980d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M2 2h3v1H3v6h6V7h1v3H2z"/>
-        <path id="arrow" d="M6.21 2H10v3.79L8.58 4.367 6.446 6.5 5.5 5.553 7.632 3.42z"/>
+        <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
+        <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
     </g>
 </svg>
index eaeaf6e..bf0ef13 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png differ
index d1d7093..d747aa6 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="external">
-        <path id="box" d="M7 3h2v6H3V7H2v3h8V2H7z"/>
-        <path id="arrow" d="M2 5.79l1.42-1.422L5.554 6.5l.947-.947L4.37 3.42 5.788 2H2z"/>
+        <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
+        <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
     </g>
 </svg>
index 7a3454e..2978654 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png differ
index 9fdc8ca..7e25d03 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M7 3h2v6H3V7H2v3h8V2H7z"/>
-        <path id="arrow" d="M2 5.79l1.42-1.422L5.554 6.5l.947-.947L4.37 3.42 5.788 2H2z"/>
+        <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
+        <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
     </g>
 </svg>
index dd95034..010b224 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png differ
index dc37aa1..5764ee6 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="find">
-        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.372c.19.19.534.153.78-.094s.315-.59.126-.78L16.66 16.59l-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.804 1.84-1.816 1.84-1.01 0-1.844-.83-1.844-1.843s.833-1.814 1.845-1.814z"/>
+        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.154.78-.093s.315-.59.126-.78l-2.37-2.377-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.805 1.84-1.817 1.84-1.01 0-1.844-.83-1.844-1.844s.832-1.814 1.844-1.814z"/>
         <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53c.284-.797.787-1.486 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
     </g>
 </svg>
index 5c66688..9f418b8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png differ
index bbfdaa0..67e6943 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="find">
-        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.372c.19.19.534.153.78-.094s.315-.59.126-.78L16.66 16.59l-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.804 1.84-1.816 1.84-1.01 0-1.844-.83-1.844-1.843s.833-1.814 1.845-1.814z"/>
+        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.154.78-.093s.315-.59.126-.78l-2.37-2.377-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.805 1.84-1.817 1.84-1.01 0-1.844-.83-1.844-1.844s.832-1.814 1.844-1.814z"/>
         <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53c.284-.797.787-1.486 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
     </g>
 </svg>
index 9f23f4a..4a70b13 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png differ
index 083c2d3..6854553 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="find">
-        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.372c-.19.19-.534.153-.78-.094s-.315-.59-.126-.78L8.34 16.59l.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.804 1.84 1.816 1.84 1.01 0 1.844-.83 1.844-1.843s-.833-1.814-1.845-1.814z"/>
+        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.154-.78-.093s-.315-.59-.126-.78l2.37-2.377.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.805 1.84 1.817 1.84 1.01 0 1.844-.83 1.844-1.844s-.832-1.814-1.844-1.814z"/>
         <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53c-.284-.797-.787-1.486-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
     </g>
 </svg>
index 28aab68..b63eb84 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png differ
index e70ae48..962165d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="find">
-        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.372c-.19.19-.534.153-.78-.094s-.315-.59-.126-.78L8.34 16.59l.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.804 1.84 1.816 1.84 1.01 0 1.844-.83 1.844-1.843s-.833-1.814-1.845-1.814z"/>
+        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.154-.78-.093s-.315-.59-.126-.78l2.37-2.377.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.805 1.84 1.817 1.84 1.01 0 1.844-.83 1.844-1.844s-.832-1.814-1.844-1.814z"/>
         <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53c-.284-.797-.787-1.486-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
     </g>
 </svg>
index b97eae3..fff92e7 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <path d="M11.4 5.4V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm-5.2-.5c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 7c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm-3 4c0-1.7 1.3-3 3-3v6c-1.7 0-3-1.3-3-3z"/>
 </svg>
index 3f56009..fdefd97 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="help">
-        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.917 9.916 9.917 5.48 0 9.917-4.438 9.917-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.918 9.916 9.918 5.48 0 9.918-4.438 9.918-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
             <path id="bottom" d="M11 16h2v2h-2z"/>
index a9a0ebb..825435d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="help">
-        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.917 9.916 9.917 5.48 0 9.917-4.438 9.917-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.918 9.916 9.918 5.48 0 9.918-4.438 9.918-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
             <path id="bottom" d="M11 16h2v2h-2z"/>
index 6866809..b369813 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="help">
-        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.917-9.916 9.917-5.48 0-9.917-4.438-9.917-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.918-9.916 9.918-5.48 0-9.918-4.438-9.918-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
             <path id="bottom" d="M13 16h-2v2h2z"/>
index 1b513d0..0d8052f 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="help">
-        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.917-9.916 9.917-5.48 0-9.917-4.438-9.917-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.918-9.916 9.918-5.48 0-9.918-4.438-9.918-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
             <path id="bottom" d="M13 16h-2v2h2z"/>
index 6fcd856..31287cd 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="history">
         <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.462 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.083 0 4.465-3.616 8.084-8.08 8.084-1.145 0-2.23-.247-3.213-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
+        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.46 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.615 8.084-8.08 8.084-1.144 0-2.23-.247-3.212-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
     </g>
 </svg>
index 9375751..10d1b81 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="history">
         <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.462 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.083 0 4.465-3.616 8.084-8.08 8.084-1.145 0-2.23-.247-3.213-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
+        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.46 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.615 8.084-8.08 8.084-1.144 0-2.23-.247-3.212-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
     </g>
 </svg>
index cf194aa..d899142 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png differ
index 938c32e..b359c47 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-arab-keheh-jeem">
-        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.872 1.125-.064.263-.035.572.063.78.19.406.54.575.844.814l.094-.122.53.625c.14.165.344.514.47.94.137.462.08.724 0 1.124H11.22c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.935-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.357.026-.768.24-1.03.72-.247.447-.435.838-.657 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.204-.51.4-.72.562-.3.26-.703.688-.907 1-.402.615-.693 1.084-.874 1.78-.18.69.003 1.34.468 1.75.426.377.846.52 1.28.564.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.384-1.47-.594-.27-.283-.306-.64-.155-1.22.036-.14.097-.322.25-.53.17-.228.364-.435.594-.656.45-.436 1.01-.737 1.46-.938-.044.205-.106.442-.054.687.05.23.25.38.44.47.26.12.506.153.69.154 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.443-.673-.83-1-1.22 1.258-.814 2.717-1.238 3.97-1.687.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .378.286.75.556 1.097.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
+        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125-.065.263-.036.572.062.78.19.406.54.575.844.814l.094-.12.53.624c.14.165.344.514.47.94.137.462.08.724 0 1.124h-3.44c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.358.026-.77.24-1.03.72-.248.447-.436.838-.658 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.203-.51.4-.72.56-.3.26-.703.69-.907 1-.402.616-.693 1.085-.874 1.78-.18.69.003 1.34.468 1.75.426.378.846.52 1.28.565.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.385-1.47-.595-.27-.283-.306-.64-.155-1.22.035-.14.096-.322.25-.53.17-.228.363-.435.593-.656.45-.437 1.01-.738 1.46-.94-.044.206-.106.443-.054.688.05.23.25.38.44.47.26.12.505.153.69.154 1.42.01 2.86 0 4.28 0 .245 0 .45-.163.592-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.442-.673-.83-1-1.22 1.258-.813 2.717-1.237 3.97-1.686.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.098.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
     </g>
 </svg>
index 3285ad9..9f603ea 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png differ
index 04cdebb..99980c0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-arab-keheh-jeem">
-        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.872 1.125-.064.263-.035.572.063.78.19.406.54.575.844.814l.094-.122.53.625c.14.165.344.514.47.94.137.462.08.724 0 1.124H11.22c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.935-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.357.026-.768.24-1.03.72-.247.447-.435.838-.657 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.204-.51.4-.72.562-.3.26-.703.688-.907 1-.402.615-.693 1.084-.874 1.78-.18.69.003 1.34.468 1.75.426.377.846.52 1.28.564.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.384-1.47-.594-.27-.283-.306-.64-.155-1.22.036-.14.097-.322.25-.53.17-.228.364-.435.594-.656.45-.436 1.01-.737 1.46-.938-.044.205-.106.442-.054.687.05.23.25.38.44.47.26.12.506.153.69.154 1.42.01 2.86 0 4.28 0 .246 0 .45-.163.593-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.443-.673-.83-1-1.22 1.258-.814 2.717-1.238 3.97-1.687.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .378.286.75.556 1.097.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
+        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125-.065.263-.036.572.062.78.19.406.54.575.844.814l.094-.12.53.624c.14.165.344.514.47.94.137.462.08.724 0 1.124h-3.44c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.358.026-.77.24-1.03.72-.248.447-.436.838-.658 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.203-.51.4-.72.56-.3.26-.703.69-.907 1-.402.616-.693 1.085-.874 1.78-.18.69.003 1.34.468 1.75.426.378.846.52 1.28.565.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.385-1.47-.595-.27-.283-.306-.64-.155-1.22.035-.14.096-.322.25-.53.17-.228.363-.435.593-.656.45-.437 1.01-.738 1.46-.94-.044.206-.106.443-.054.688.05.23.25.38.44.47.26.12.505.153.69.154 1.42.01 2.86 0 4.28 0 .245 0 .45-.163.592-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.442-.673-.83-1-1.22 1.258-.813 2.717-1.237 3.97-1.686.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.098.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
     </g>
 </svg>
index 37282ef..960653e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png differ
index 4b9da20..a0f9c0c 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-arab-meem">
-        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.696-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.008-.11-.01-.24-.053-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.376.125-.05-.247 1.557-1.71 2.707-2.566 3.45-2.566.382 0 .67.13.862.394.134.195.25.6.343 1.21l.203 1.2c.105.586.24.895.408.925"/>
+        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.695-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.01-.11-.01-.24-.052-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.377.125-.05-.247 1.556-1.71 2.706-2.566 3.45-2.566.38 0 .67.13.86.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
     </g>
 </svg>
index 3c5adc3..03493be 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png differ
index f315377..a9c7def 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-arab-meem">
-        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.696-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.008-.11-.01-.24-.053-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.376.125-.05-.247 1.557-1.71 2.707-2.566 3.45-2.566.382 0 .67.13.862.394.134.195.25.6.343 1.21l.203 1.2c.105.586.24.895.408.925"/>
+        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.695-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.01-.11-.01-.24-.052-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.377.125-.05-.247 1.556-1.71 2.706-2.566 3.45-2.566.38 0 .67.13.86.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
     </g>
 </svg>
index 91497a7..7f6d412 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png differ
index c75dda0..fd60619 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-armn-sha">
-        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.327 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.582 0-1.136.095-1.662.284-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.215-1.344.323-2.106.323-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.435-.573-.97-.678-1.606-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
+        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.328 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.583 0-1.137.094-1.663.283-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.216-1.344.324-2.106.324-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.274.66-1.836.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
     </g>
 </svg>
index 15795c5..b5e55cc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png differ
index f0d10d9..a653a27 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-armn-sha">
-        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.327 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.582 0-1.136.095-1.662.284-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.215-1.344.323-2.106.323-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.435-.573-.97-.678-1.606-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
+        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.328 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.583 0-1.137.094-1.663.283-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.216-1.344.324-2.106.324-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.274.66-1.836.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
     </g>
 </svg>
index f7851fa..a2a2c82 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png differ
index 761aea3..f2850c4 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-c">
-        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.628-1.78-.628-1.368 0-2.475.63-3.32 1.892-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.777 0 1.476-.26 2.1-.785.628-.522 1.08-1.26 1.368-2.216"/>
+        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.893-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.778 0 1.477-.26 2.1-.785.63-.522 1.08-1.26 1.37-2.216"/>
     </g>
 </svg>
index 2b8b6e4..f46dea5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png differ
index 2018e60..0a0d110 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-c">
-        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.628-1.78-.628-1.368 0-2.475.63-3.32 1.892-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.777 0 1.476-.26 2.1-.785.628-.522 1.08-1.26 1.368-2.216"/>
+        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.893-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.778 0 1.477-.26 2.1-.785.63-.522 1.08-1.26 1.37-2.216"/>
     </g>
 </svg>
index e9ce6db..8ca4218 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-d">
-        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.502.063 1.952.188.644.17 1.194.472 1.65.91.456.43.8.97 1.03 1.62.23.65.346 1.378.346 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.947 1.072-1.456 1.416-.504.335-1.1.586-1.794.75-.526.126-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.238.41-.098.76-.243 1.05-.434.38-.247.726-.57 1.037-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
+        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.645.17 1.195.472 1.65.91.457.43.8.97 1.03 1.62.23.65.347 1.378.347 2.186 0 .966-.146 1.847-.436 2.644-.283.79-.66 1.49-1.126 2.095-.46.6-.947 1.072-1.456 1.416-.504.334-1.1.585-1.794.75-.526.125-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24.41-.097.76-.242 1.05-.433.38-.247.727-.57 1.038-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
     </g>
 </svg>
index c044c86..feadca0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-d">
-        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.502.063 1.952.188.644.17 1.194.472 1.65.91.456.43.8.97 1.03 1.62.23.65.346 1.378.346 2.186 0 .966-.146 1.847-.436 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.947 1.072-1.456 1.416-.504.335-1.1.586-1.794.75-.526.126-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.238.41-.098.76-.243 1.05-.434.38-.247.726-.57 1.037-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
+        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.645.17 1.195.472 1.65.91.457.43.8.97 1.03 1.62.23.65.347 1.378.347 2.186 0 .966-.146 1.847-.436 2.644-.283.79-.66 1.49-1.126 2.095-.46.6-.947 1.072-1.456 1.416-.504.334-1.1.585-1.794.75-.526.125-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24.41-.097.76-.242 1.05-.433.38-.247.727-.57 1.038-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
     </g>
 </svg>
index c3feced..68e90a9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png differ
index d77fe40..8669961 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-geor-kan">
-        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.616c-.055.26-.083.497-.083.712 0 .972.52 1.458 1.564 1.458 1.31 0 2.104-.723 2.386-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.547-1.39-1.64-1.39h-1.116l.248-1.26h1.118c1.202-.004 1.908-.55 2.118-1.64.04-.18.058-.355.058-.52 0-1.144-.9-1.715-2.697-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
+        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.617c-.055.26-.083.497-.083.712 0 .97.52 1.457 1.564 1.457 1.31 0 2.105-.723 2.387-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.546-1.39-1.64-1.39h-1.115l.248-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.697-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
     </g>
 </svg>
index 7f2512e..7f9da2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png differ
index 867f458..65670ef 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-geor-kan">
-        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.616c-.055.26-.083.497-.083.712 0 .972.52 1.458 1.564 1.458 1.31 0 2.104-.723 2.386-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.547-1.39-1.64-1.39h-1.116l.248-1.26h1.118c1.202-.004 1.908-.55 2.118-1.64.04-.18.058-.355.058-.52 0-1.144-.9-1.715-2.697-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
+        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.617c-.055.26-.083.497-.083.712 0 .97.52 1.457 1.564 1.457 1.31 0 2.105-.723 2.387-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.546-1.39-1.64-1.39h-1.115l.248-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.697-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
     </g>
 </svg>
index eb3dc91..954bfbf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png differ
index ef5a411..9515299 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-s">
-        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.655.302.86.207.193.733.405 1.58.632l.937.232c1.06.274 1.795.622 2.208 1.046.413.42.62 1.008.62 1.767 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.302-1.867-.55l.315-1.61c.573.355 1.147.624 1.72.805.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.884-1 .884-1.697 0-.464-.12-.815-.356-1.053-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.044-1.108 3.464-1.108.553 0 1.1.05 1.642.147.542.098 1.085.245 1.627.442"/>
+        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.654.302.86.207.192.733.404 1.58.63l.937.233c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.314-1.61c.573.356 1.147.625 1.72.806.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.356-1.054-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.1 1.085.246 1.627.443"/>
     </g>
 </svg>
index c3b1e6e..4a7b1fc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png differ
index 1c5a4ca..615e5f2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-s">
-        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.655.302.86.207.193.733.405 1.58.632l.937.232c1.06.274 1.795.622 2.208 1.046.413.42.62 1.008.62 1.767 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.302-1.867-.55l.315-1.61c.573.355 1.147.624 1.72.805.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.884-1 .884-1.697 0-.464-.12-.815-.356-1.053-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.044-1.108 3.464-1.108.553 0 1.1.05 1.642.147.542.098 1.085.245 1.627.442"/>
+        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.654.302.86.207.192.733.404 1.58.63l.937.233c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.314-1.61c.573.356 1.147.625 1.72.806.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.356-1.054-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.1 1.085.246 1.627.443"/>
     </g>
 </svg>
index 81930e3..ad816df 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png differ
index d857a04..abc618e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="language">
-        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.968-.15 1.648-.333 2.04-.545.454-.21.785-.48.998-.813.21-.303.314-.663.314-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.042.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.144.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.585-.514.03-.92.045-1.222.045-.393 0-.71-.016-.95-.046l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.738.228-1.766l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.572-.09.633-.09s.647-.15 1.765-.453l.046 1.04c-.966.243-2.144.44-3.53.59-.063.663-.093 1.086-.093 1.266.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.133-1.252-.224-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.195.137.316.137.364 0 .908-.364 1.63-1.09zm.774-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
+        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.97-.15 1.65-.333 2.04-.545.455-.21.786-.48 1-.813.21-.303.313-.663.313-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.043.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.143.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.584-.514.03-.92.045-1.222.045-.393 0-.71-.015-.95-.045l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.74.228-1.767l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.573-.09.634-.09s.647-.15 1.765-.453l.045 1.04c-.966.242-2.144.44-3.53.59-.063.662-.093 1.085-.093 1.265.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.132-1.252-.223-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.194.137.315.137.364 0 .908-.365 1.63-1.09zm.775-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
         <path id="english" d="M9.497 15.98h1.85L8.265 7.033h-1.85l-3.08 8.95h1.85L5.74 14h3.21l.547 1.98zm-3.49-3.376L7.34 8.822l1.343 3.782H6.008z"/>
     </g>
 </svg>
index cae0e77..b4f0875 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png differ
index 694d225..956aba1 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="language">
-        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.968-.15 1.648-.333 2.04-.545.454-.21.785-.48.998-.813.21-.303.314-.663.314-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.042.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.144.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.585-.514.03-.92.045-1.222.045-.393 0-.71-.016-.95-.046l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.738.228-1.766l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.572-.09.633-.09s.647-.15 1.765-.453l.046 1.04c-.966.243-2.144.44-3.53.59-.063.663-.093 1.086-.093 1.266.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.133-1.252-.224-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.195.137.316.137.364 0 .908-.364 1.63-1.09zm.774-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
+        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.97-.15 1.65-.333 2.04-.545.455-.21.786-.48 1-.813.21-.303.313-.663.313-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.043.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.143.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.584-.514.03-.92.045-1.222.045-.393 0-.71-.015-.95-.045l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.74.228-1.767l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.573-.09.634-.09s.647-.15 1.765-.453l.045 1.04c-.966.242-2.144.44-3.53.59-.063.662-.093 1.085-.093 1.265.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.132-1.252-.223-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.194.137.315.137.364 0 .908-.365 1.63-1.09zm.775-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
         <path id="english" d="M9.497 15.98h1.85L8.265 7.033h-1.85l-3.08 8.95h1.85L5.74 14h3.21l.547 1.98zm-3.49-3.376L7.34 8.822l1.343 3.782H6.008z"/>
     </g>
 </svg>
index 99d6f01..166ce47 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g>
         <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
     </g>
index 99d6f01..166ce47 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g>
         <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
     </g>
index ed0006c..ca5beaf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png differ
index 7b545ca..9cf9d28 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <g>
-        <path d="M-471.2 493.6c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="g3097">
+        <path d="M15.387 4.33c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z" id="path3099"/>
     </g>
 </svg>
index 3db2467..25980e6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png differ
index 0d3c186..dd3df73 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <g>
-        <path d="M-471.2 493.6c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="g3097">
+        <path d="M15.387 4.33c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z" id="path3099"/>
     </g>
 </svg>
index 0246e4d..72bbf34 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png differ
index 59885e9..3bda245 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="menu">
-        <path id="lines" d="M-481 505h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1h-12c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1z"/>
+        <path id="lines" d="M6 15.5h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1H6c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1z"/>
     </g>
 </svg>
index de7b1d2..45daeab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png differ
index 9ef19fe..b84ab86 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="menu">
-        <path id="lines" d="M-481 505h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1h-12c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1z"/>
+        <path id="lines" d="M6 15.5h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1H6c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1z"/>
     </g>
 </svg>
index 55e5ac7..45b0050 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <path d="M19.1 17.5c-3.3 1.4-7.1-.2-8.5-3.5-1.4-3.3.2-7.1 3.5-8.5.2-.1.5-.2.7-.3-1.6-.4-3.2-.3-4.8.4C6 7.3 4 12 5.7 16c1.7 4.1 6.4 6 10.5 4.3 1.7-.7 3-1.9 3.8-3.4-.3.3-.6.4-.9.6z"/>
 </svg>
index 8ca43a3..9c859e4 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="move-rtl">
-        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.716L13.65 19.2z"/>
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.717L13.65 19.2z"/>
     </g>
 </svg>
index 48d2c7e..35b6375 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="move-rtl">
-        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.716L13.65 19.2z"/>
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.717L13.65 19.2z"/>
     </g>
 </svg>
index 04139da..dedbc2d 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z"/>
 </svg>
index 48273f4..386ccc2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" id="svg3116"><style>* { fill: #FFFFFF }</style>
     <g id="alert">
         <path d="M12 18c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="path3119"/>
index b7fb2e7..9334b50 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" id="svg3116">
     <g id="alert">
         <path d="M12 18c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="path3119"/>
index dbde6ed..472bb4f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png differ
index e514672..9304bdb 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <g>
-        <path d="M-468.9 498.1c.2-.1.5-.2.6-.5s.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5s.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="g3226">
+        <path d="M18.1 8.65c.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7H8.2s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z" id="path3228"/>
     </g>
 </svg>
index 5f14322..72c7e3d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png differ
index c2925ca..4885f43 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <g>
-        <path d="M-468.9 498.1c.2-.1.5-.2.6-.5s.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5s.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="g3226">
+        <path d="M18.1 8.65c.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7H8.2s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z" id="path3228"/>
     </g>
 </svg>
index 0b7d107..47fd687 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png differ
index be46adf..f5dcce5 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g>
-        <path d="M-479.5 499.3c.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7v-3.1c0-3.1-1.5-5.2-1.9-5.8-.5-.5-1-1-1.7-1.4-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6 0 1.1.4 1.6 1zm7.8-2.7c-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6.2 1.2.6 1.6 1.2.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7V504c0-3.1-1.5-5.4-1.9-6-.4-.5-1-1-1.7-1.4z"/>
+        <path d="M5.9 8.65c-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.7c1 .2 1.5.2 2.6.6.7.4 1.2.9 1.7 1.4.5.5 1.9 2.6 1.9 5.8v3.1H6.6c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.1zm11.2-.1c.5.5 1.9 2.9 1.9 6v2.9h-4.7c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.2-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.6c1 .2 1.5.2 2.6.6.6.4 1.2.9 1.7 1.4z"/>
     </g>
 </svg>
index e5039fc..2b4c8d7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png differ
index dd7bfb1..91fe300 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g>
-        <path d="M-479.5 499.3c.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7v-3.1c0-3.1-1.5-5.2-1.9-5.8-.5-.5-1-1-1.7-1.4-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6 0 1.1.4 1.6 1zm7.8-2.7c-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6.2 1.2.6 1.6 1.2.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7V504c0-3.1-1.5-5.4-1.9-6-.4-.5-1-1-1.7-1.4z"/>
+        <path d="M5.9 8.65c-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.7c1 .2 1.5.2 2.6.6.7.4 1.2.9 1.7 1.4.5.5 1.9 2.6 1.9 5.8v3.1H6.6c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.1zm11.2-.1c.5.5 1.9 2.9 1.9 6v2.9h-4.7c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.2-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.6c1 .2 1.5.2 2.6.6.6.4 1.2.9 1.7 1.4z"/>
     </g>
 </svg>
index 0d34e60..21b4d79 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png differ
index e7889c3..5d2ff77 100644 (file)
@@ -3,7 +3,7 @@
     <g id="regular-expression">
         <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312h-1.45c-.575-.635-1.013-1.376-1.314-2.223-.3-.847-.45-1.758-.45-2.732"/>
         <path id="dot" d="M10 16c0 .552-.448 1-1 1s-1-.448-1-1 .448-1 1-1 1 .448 1 1z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.475-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.383-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.157h1.534"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.844-.737 1.582-1.307 2.21h-1.453c.527-.688.936-1.457 1.225-2.308.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66-.28-.862-.697-1.654-1.248-2.374h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
+        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.474-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.382-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.158h1.534"/>
+        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.843-.737 1.58-1.307 2.21h-1.453c.527-.69.936-1.458 1.225-2.31.29-.854.434-1.74.434-2.66 0-.91-.14-1.796-.422-2.66-.28-.86-.697-1.653-1.248-2.373h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
     </g>
 </svg>
index b8736a0..00ace19 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png differ
index 5f10d4d..844013d 100644 (file)
@@ -3,7 +3,7 @@
     <g id="regular-expression">
         <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312h-1.45c-.575-.635-1.013-1.376-1.314-2.223-.3-.847-.45-1.758-.45-2.732"/>
         <path id="dot" d="M10 16c0 .552-.448 1-1 1s-1-.448-1-1 .448-1 1-1 1 .448 1 1z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.475-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.383-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.157h1.534"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.844-.737 1.582-1.307 2.21h-1.453c.527-.688.936-1.457 1.225-2.308.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66-.28-.862-.697-1.654-1.248-2.374h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
+        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.474-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.382-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.158h1.534"/>
+        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.843-.737 1.58-1.307 2.21h-1.453c.527-.69.936-1.458 1.225-2.31.29-.854.434-1.74.434-2.66 0-.91-.14-1.796-.422-2.66-.28-.86-.697-1.653-1.248-2.373h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
     </g>
 </svg>
index ce6f7b2..8660556 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="secure">
-        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.485-.485 1.45-.487 1.935-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
+        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.486-.485 1.45-.487 1.936-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
     </g>
 </svg>
index 6eefe90..e064672 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="secure">
-        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.485-.485 1.45-.487 1.935-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
+        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.486-.485 1.45-.487 1.936-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
     </g>
 </svg>
index fb025f3..b3d2e94 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g>
         <path d="M17.6 20h-5.4v-.5c.2 0 .5-.1.9-.1.3-.1.5-.2.5-.3V19s0-.1-.1-.2l-.8-2H9.3c-.1.2-.2.4-.3.7-.1.3-.2.5-.2.7-.1.3-.1.4-.2.6v.2c0 .1.1.3.3.4.2.1.6.2 1.1.2v.4H6v-.5c.2 0 .3 0 .5-.1.2 0 .3-.1.5-.2s.4-.2.5-.4l.3-.6c.5-1.3 1.1-2.6 1.6-3.9.5-1.3 1.1-2.7 1.8-4.3h1.4c.9 2.2 1.6 4 2.1 5.3.5 1.3 1 2.4 1.3 3.2.1.1.1.3.2.4.1.1.2.2.4.3.1.1.3.1.5.2s.3.1.5.1v.5zm-5.2-4L11 12.4 9.6 16h2.8z"/>
     </g>
index bd995db..34d46bc 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g>
         <path d="M6 19.5c.1 0 .3 0 .5-.1s.3-.1.5-.2.3-.2.4-.3c.1-.1.2-.2.2-.4.4-.9.8-1.9 1.3-3.2.5-1.3 1.2-3.1 2.1-5.3h1.4c.7 1.6 1.2 3 1.8 4.3.5 1.3 1.1 2.6 1.6 3.9l.3.6c.1.2.3.3.5.4.1.1.3.1.5.2.2 0 .4.1.5.1v.5h-4v-.5c.5 0 .9-.1 1.1-.2.2-.1.3-.2.3-.4v-.2c0-.1-.1-.3-.2-.6-.1-.2-.2-.4-.2-.7-.1-.3-.2-.5-.3-.7h-3.4l-.8 2c0 .1-.1.1-.1.2v.1c0 .1.2.2.5.3.3.1.6.1.9.1v.6H6v-.5zm8-3.5l-1.4-3.6-1.4 3.6H14z"/>
     </g>
index 10e7967..008efd0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png differ
index fbba082..5f3d914 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="special-character">
-        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.125.513-.19 1.08-.19 1.7 0 .512.06 1 .175 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.602.044.75.035.457.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.895.92 1.157 1.54.27.614.403 1.33.403 2.15 0 .65-.108 1.242-.32 1.78-.216.53-.515.996-.9 1.397-.38.4-.83.732-1.356.99-.525.255-.707.43-1.336.523l-.092.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.038c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.066-1.186-.194-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
+        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.124.513-.19 1.08-.19 1.7 0 .512.06 1 .176 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.458.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.896.92 1.158 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.38.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.093.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.695 2.002-1.362.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.067-1.186-.195-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
     </g>
 </svg>
index e632f8a..7f65881 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png differ
index bb81880..dbf6ed5 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="special-character">
-        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.125.513-.19 1.08-.19 1.7 0 .512.06 1 .175 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.602.044.75.035.457.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.895.92 1.157 1.54.27.614.403 1.33.403 2.15 0 .65-.108 1.242-.32 1.78-.216.53-.515.996-.9 1.397-.38.4-.83.732-1.356.99-.525.255-.707.43-1.336.523l-.092.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.038c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.066-1.186-.194-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
+        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.124.513-.19 1.08-.19 1.7 0 .512.06 1 .176 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.458.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.896.92 1.158 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.38.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.093.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.695 2.002-1.362.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.067-1.186-.195-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
     </g>
 </svg>
index b707280..fd1c16d 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="strikethrough-s">
         <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
-        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.474 0-.966-.074-1.466-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.716-.148-1.204-.352-1.406-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
+        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.473 0-.965-.074-1.465-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.155.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.715-.148-1.203-.352-1.405-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
     </g>
 </svg>
index 71fa960..46092a6 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="strikethrough-s">
         <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
-        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.474 0-.966-.074-1.466-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.716-.148-1.204-.352-1.406-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
+        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.473 0-.965-.074-1.465-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.155.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.715-.148-1.203-.352-1.405-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
     </g>
 </svg>
index b79e14c..aab025e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00AF89 }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 61848c7..1fe8f5a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 71e05f1..394e431 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index d4b7032..0f140c3 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347BFF }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 36e56b2..ed26598 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FF5D00 }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 71671c0..5265e04 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.386-.707-1.154-.707-1.704V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.574 1.515.574 2.094 0 .576-.58.576-1.52 0-2.097-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 33089a0..0367cfe 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="text-style">
-        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.288 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
+        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
         <path id="underline" d="M6 19h12v1H6v-1z"/>
     </g>
 </svg>
index 77c66a0..466672e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="text-style">
-        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.288 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
+        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
         <path id="underline" d="M6 19h12v1H6v-1z"/>
     </g>
 </svg>
index 342493b..c998822 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="underline-u">
-        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.654-1.666.98-2.98.98-1.32 0-2.32-.324-2.996-.98C8.336 14.37 8 13.405 8 12.126V6"/>
+        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.655-1.666.98-2.98.98-1.32 0-2.32-.323-2.996-.98C8.336 14.37 8 13.406 8 12.127V6"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index 7378298..f5aaf5d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="underline-u">
-        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.654-1.666.98-2.98.98-1.32 0-2.32-.324-2.996-.98C8.336 14.37 8 13.405 8 12.126V6"/>
+        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.655-1.666.98-2.98.98-1.32 0-2.32-.323-2.996-.98C8.336 14.37 8 13.406 8 12.127V6"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index 3207aaf..0d17c02 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="alert">
         <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 6zM5 7h2V2H5zm0 3h2V8H5z"/>
index cddc0db..868bcc9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="alert">
         <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 6zM5 7h2V2H5zm0 3h2V8H5z"/>
index f18841d..fcb50d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png differ
index 6330d97..7567b5d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="down">
-        <path id="arrow" d="M883.3 341H116.7L500 724.3 883.3 341"/>
+        <path id="arrow" d="M1 4h10L6 9 1 4"/>
     </g>
 </svg>
index 15ec586..034fe2b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png differ
index d8979ae..f5c76f3 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000">
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="down">
-        <path id="arrow" d="M883.3 341H116.7L500 724.3 883.3 341"/>
+        <path id="arrow" d="M1 4h10L6 9 1 4"/>
     </g>
 </svg>
index 476dbcc..63384fa 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="ltr">
-        <path id="arrow" d="M-489 496v10l5-5-5-5"/>
+        <path id="arrow" d="M4 1v10l5-5-5-5"/>
     </g>
 </svg>
index d824ff1..059372d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="ltr">
-        <path id="arrow" d="M-489 496v10l5-5-5-5"/>
+        <path id="arrow" d="M4 1v10l5-5-5-5"/>
     </g>
 </svg>
index 276052b..a9e9ce3 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="rtl">
-        <path id="arrow" d="M-485 506v-10l-5 5 5 5"/>
+        <path id="arrow" d="M8 11V1L3 6l5 5"/>
     </g>
 </svg>
index 88ad88b..c6498e8 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="rtl">
-        <path id="arrow" d="M-485 506v-10l-5 5 5 5"/>
+        <path id="arrow" d="M8 11V1L3 6l5 5"/>
     </g>
 </svg>
index e33ba06..2d11d4f 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="up">
-        <path id="arrow" d="M-492 503h10l-5-5-5 5"/>
+        <path id="arrow" d="M1 8h10L6 3 1 8"/>
     </g>
 </svg>
index 0640cc3..5eada07 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="up">
-        <path id="arrow" d="M-492 503h10l-5-5-5 5"/>
+        <path id="arrow" d="M1 8h10L6 3 1 8"/>
     </g>
 </svg>
index ba5fd1d..5b03054 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="clear">
         <path id="circle-with-cross" d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
index b18405d..3c010c1 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="clear">
         <path id="circle-with-cross" d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
index 0d2e79a..4068699 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="required">
         <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
index 051ed5f..d1e0cba 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="required">
         <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
index fbd6af1..68fcab8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png differ
index 322b5b1..cf4de68 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="search">
-        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.646l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.213S6.21 7.207 4.99 7.207z"/>
+        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.647l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.214s-.99 2.213-2.21 2.213z"/>
     </g>
 </svg>
index 985e602..2718a9b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png differ
index e5c4010..9b3c199 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.646l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.213S6.21 7.207 4.99 7.207z"/>
+        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.647l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.214s-.99 2.213-2.21 2.213z"/>
     </g>
 </svg>
index bcafcd6..c8ebef4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png differ
index a90817d..41fe9bd 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="search">
-        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.646l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21-1.222 0-2.213.99-2.213 2.213S5.79 7.207 7.01 7.207z"/>
+        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.647l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21S4.8 3.77 4.8 4.995 5.79 7.207 7.01 7.207z"/>
     </g>
 </svg>
index 4213d67..b7a8d22 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png differ
index 759f57e..3201301 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.646l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21-1.222 0-2.213.99-2.213 2.213S5.79 7.207 7.01 7.207z"/>
+        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.647l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21S4.8 3.77 4.8 4.995 5.79 7.207 7.01 7.207z"/>
     </g>
 </svg>
index e413e75..cadec2a 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0, 0, 16, 16">
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
     <g id="transparency">
         <path d="M0 0h8v8H0zm8 8h8v8H8z" fill="#ccc"/>
         <path d="M8 0h8v8H8zM0 8h8v8H0z" fill="#fff"/>
index 1ac34a5..92f8eb9 100644 (file)
@@ -150,14 +150,14 @@ function updateTooltip( element ) {
                if ( id ) {
                        $label = $( 'label[for="' + id + '"]' );
                        if ( $label.length === 1 ) {
-                               updateTooltipOnElement( element, $label[0] );
+                               updateTooltipOnElement( element, $label[ 0 ] );
                        }
                }
 
                // Search it as parent, because the form control can also be inside the label element itself
                $labelParent = $element.parents( 'label' );
                if ( $labelParent.length === 1 ) {
-                       updateTooltipOnElement( element, $labelParent[0] );
+                       updateTooltipOnElement( element, $labelParent[ 0 ] );
                }
        }
 }
index 9a196b5..e1115d6 100644 (file)
@@ -69,16 +69,16 @@ $.fn.autoEllipsis = function ( options ) {
                // Try cache
                if ( options.matchText ) {
                        if ( !( text in matchTextCache ) ) {
-                               matchTextCache[text] = {};
+                               matchTextCache[ text ] = {};
                        }
-                       if ( !( options.matchText in matchTextCache[text] ) ) {
-                               matchTextCache[text][options.matchText] = {};
+                       if ( !( options.matchText in matchTextCache[ text ] ) ) {
+                               matchTextCache[ text ][ options.matchText ] = {};
                        }
-                       if ( !( w in matchTextCache[text][options.matchText] ) ) {
-                               matchTextCache[text][options.matchText][w] = {};
+                       if ( !( w in matchTextCache[ text ][ options.matchText ] ) ) {
+                               matchTextCache[ text ][ options.matchText ][ w ] = {};
                        }
-                       if ( options.position in matchTextCache[text][options.matchText][w] ) {
-                               $container.html( matchTextCache[text][options.matchText][w][options.position] );
+                       if ( options.position in matchTextCache[ text ][ options.matchText ][ w ] ) {
+                               $container.html( matchTextCache[ text ][ options.matchText ][ w ][ options.position ] );
                                if ( options.tooltip ) {
                                        $container.attr( 'title', text );
                                }
@@ -86,13 +86,13 @@ $.fn.autoEllipsis = function ( options ) {
                        }
                } else {
                        if ( !( text in cache ) ) {
-                               cache[text] = {};
+                               cache[ text ] = {};
                        }
-                       if ( !( w in cache[text] ) ) {
-                               cache[text][w] = {};
+                       if ( !( w in cache[ text ] ) ) {
+                               cache[ text ][ w ] = {};
                        }
-                       if ( options.position in cache[text][w] ) {
-                               $container.html( cache[text][w][options.position] );
+                       if ( options.position in cache[ text ][ w ] ) {
+                               $container.html( cache[ text ][ w ][ options.position ] );
                                if ( options.tooltip ) {
                                        $container.attr( 'title', text );
                                }
@@ -120,19 +120,19 @@ $.fn.autoEllipsis = function ( options ) {
                                        break;
                                case 'center':
                                        // TODO: Use binary search like for 'right'
-                                       i = [Math.round( trimmableText.length / 2 ), Math.round( trimmableText.length / 2 )];
+                                       i = [ Math.round( trimmableText.length / 2 ), Math.round( trimmableText.length / 2 ) ];
                                        // Begin with making the end shorter
                                        side = 1;
-                                       while ( $trimmableText.outerWidth() + pw > w && i[0] > 0 ) {
-                                               $trimmableText.text( trimmableText.slice( 0, i[0] ) + '...' + trimmableText.slice( i[1] ) );
+                                       while ( $trimmableText.outerWidth() + pw > w && i[ 0 ] > 0 ) {
+                                               $trimmableText.text( trimmableText.slice( 0, i[ 0 ] ) + '...' + trimmableText.slice( i[ 1 ] ) );
                                                // Alternate between trimming the end and begining
                                                if ( side === 0 ) {
                                                        // Make the begining shorter
-                                                       i[0]--;
+                                                       i[ 0 ]--;
                                                        side = 1;
                                                } else {
                                                        // Make the end shorter
-                                                       i[1]++;
+                                                       i[ 1 ]++;
                                                        side = 0;
                                                }
                                        }
@@ -152,9 +152,9 @@ $.fn.autoEllipsis = function ( options ) {
                }
                if ( options.matchText ) {
                        $container.highlightText( options.matchText );
-                       matchTextCache[text][options.matchText][w][options.position] = $container.html();
+                       matchTextCache[ text ][ options.matchText ][ w ][ options.position ] = $container.html();
                } else {
-                       cache[text][w][options.position] = $container.html();
+                       cache[ text ][ w ][ options.position ] = $container.html();
                }
 
        } );
index afff463..6203239 100644 (file)
                // until the limit is statisfied.
                if ( fn ) {
                        // stop, when there is nothing to slice - bug 41450
-                       while ( $.byteLength( fn( inpParts.join( '' ) ) ) > byteLimit && inpParts[1].length > 0 ) {
-                               inpParts[1] = inpParts[1].slice( 0, -1 );
+                       while ( $.byteLength( fn( inpParts.join( '' ) ) ) > byteLimit && inpParts[ 1 ].length > 0 ) {
+                               inpParts[ 1 ] = inpParts[ 1 ].slice( 0, -1 );
                        }
                } else {
                        while ( $.byteLength( inpParts.join( '' ) ) > byteLimit ) {
-                               inpParts[1] = inpParts[1].slice( 0, -1 );
+                               inpParts[ 1 ] = inpParts[ 1 ].slice( 0, -1 );
                        }
                }
 
index 04f8047..a3cc8fc 100644 (file)
@@ -28,7 +28,7 @@
        }
 
        // We override the animation for all of these color styles
-       $.each([
+       $.each( [
                'backgroundColor',
                'borderBottomColor',
                'borderLeftColor',
                'color',
                'outlineColor'
        ], function ( i, attr ) {
-               $.fx.step[attr] = function ( fx ) {
+               $.fx.step[ attr ] = function ( fx ) {
                        if ( !fx.colorInit ) {
                                fx.start = getColor( fx.elem, attr );
                                fx.end = $.colorUtil.getRGB( fx.end );
                                fx.colorInit = true;
                        }
 
-                       fx.elem.style[attr] = 'rgb(' + [
-                               Math.max( Math.min( parseInt( (fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10 ), 255 ), 0 ),
-                               Math.max( Math.min( parseInt( (fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10 ), 255 ), 0 ),
-                               Math.max( Math.min( parseInt( (fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10 ), 255 ), 0 )
+                       fx.elem.style[ attr ] = 'rgb(' + [
+                               Math.max( Math.min( parseInt( ( fx.pos * ( fx.end[ 0 ] - fx.start[ 0 ] ) ) + fx.start[ 0 ], 10 ), 255 ), 0 ),
+                               Math.max( Math.min( parseInt( ( fx.pos * ( fx.end[ 1 ] - fx.start[ 1 ] ) ) + fx.start[ 1 ], 10 ), 255 ), 0 ),
+                               Math.max( Math.min( parseInt( ( fx.pos * ( fx.end[ 2 ] - fx.start[ 2 ] ) ) + fx.start[ 2 ], 10 ), 255 ), 0 )
                        ].join( ',' ) + ')';
                };
        } );
index a6ff8bc..c14f2c8 100644 (file)
                        }
 
                        // Look for rgb(num,num,num)
-                       if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) {
+                       if ( result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec( color ) ) {
                                return [
-                                       parseInt( result[1], 10 ),
-                                       parseInt( result[2], 10 ),
-                                       parseInt( result[3], 10 )
+                                       parseInt( result[ 1 ], 10 ),
+                                       parseInt( result[ 2 ], 10 ),
+                                       parseInt( result[ 3 ], 10 )
                                ];
                        }
 
                        // Look for rgb(num%,num%,num%)
-                       if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) {
+                       if ( result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec( color ) ) {
                                return [
-                                       parseFloat( result[1] ) * 2.55,
-                                       parseFloat( result[2] ) * 2.55,
-                                       parseFloat( result[3] ) * 2.55
+                                       parseFloat( result[ 1 ] ) * 2.55,
+                                       parseFloat( result[ 2 ] ) * 2.55,
+                                       parseFloat( result[ 3 ] ) * 2.55
                                ];
                        }
 
                        // Look for #a0b1c2
-                       if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) {
+                       if ( result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec( color ) ) {
                                return [
-                                       parseInt( result[1], 16 ),
-                                       parseInt( result[2], 16 ),
-                                       parseInt( result[3], 16 )
+                                       parseInt( result[ 1 ], 16 ),
+                                       parseInt( result[ 2 ], 16 ),
+                                       parseInt( result[ 3 ], 16 )
                                ];
                        }
 
                        // Look for #fff
-                       if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) {
+                       if ( result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec( color ) ) {
                                return [
-                                       parseInt( result[1] + result[1], 16 ),
-                                       parseInt( result[2] + result[2], 16 ),
-                                       parseInt( result[3] + result[3], 16)
+                                       parseInt( result[ 1 ] + result[ 1 ], 16 ),
+                                       parseInt( result[ 2 ] + result[ 2 ], 16 ),
+                                       parseInt( result[ 3 ] + result[ 3 ], 16 )
                                ];
                        }
 
                        // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
-                       if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) {
+                       if ( result = /rgba\(0, 0, 0, 0\)/.exec( color ) ) {
                                return $.colorUtil.colors.transparent;
                        }
 
                        // Otherwise, we're most likely dealing with a named color
-                       return $.colorUtil.colors[$.trim(color).toLowerCase()];
+                       return $.colorUtil.colors[ $.trim( color ).toLowerCase() ];
                },
 
                /**
                 * @property {Object}
                 */
                colors: {
-                       aqua: [0, 255, 255],
-                       azure: [240, 255, 255],
-                       beige: [245, 245, 220],
-                       black: [0, 0, 0],
-                       blue: [0, 0, 255],
-                       brown: [165, 42, 42],
-                       cyan: [0, 255, 255],
-                       darkblue: [0, 0, 139],
-                       darkcyan: [0, 139, 139],
-                       darkgrey: [169, 169, 169],
-                       darkgreen: [0, 100, 0],
-                       darkkhaki: [189, 183, 107],
-                       darkmagenta: [139, 0, 139],
-                       darkolivegreen: [85, 107, 47],
-                       darkorange: [255, 140, 0],
-                       darkorchid: [153, 50, 204],
-                       darkred: [139, 0, 0],
-                       darksalmon: [233, 150, 122],
-                       darkviolet: [148, 0, 211],
-                       fuchsia: [255, 0, 255],
-                       gold: [255, 215, 0],
-                       green: [0, 128, 0],
-                       indigo: [75, 0, 130],
-                       khaki: [240, 230, 140],
-                       lightblue: [173, 216, 230],
-                       lightcyan: [224, 255, 255],
-                       lightgreen: [144, 238, 144],
-                       lightgrey: [211, 211, 211],
-                       lightpink: [255, 182, 193],
-                       lightyellow: [255, 255, 224],
-                       lime: [0, 255, 0],
-                       magenta: [255, 0, 255],
-                       maroon: [128, 0, 0],
-                       navy: [0, 0, 128],
-                       olive: [128, 128, 0],
-                       orange: [255, 165, 0],
-                       pink: [255, 192, 203],
-                       purple: [128, 0, 128],
-                       violet: [128, 0, 128],
-                       red: [255, 0, 0],
-                       silver: [192, 192, 192],
-                       white: [255, 255, 255],
-                       yellow: [255, 255, 0],
-                       transparent: [255, 255, 255]
+                       aqua: [ 0, 255, 255 ],
+                       azure: [ 240, 255, 255 ],
+                       beige: [ 245, 245, 220 ],
+                       black: [ 0, 0, 0 ],
+                       blue: [ 0, 0, 255 ],
+                       brown: [ 165, 42, 42 ],
+                       cyan: [ 0, 255, 255 ],
+                       darkblue: [ 0, 0, 139 ],
+                       darkcyan: [ 0, 139, 139 ],
+                       darkgrey: [ 169, 169, 169 ],
+                       darkgreen: [ 0, 100, 0 ],
+                       darkkhaki: [ 189, 183, 107 ],
+                       darkmagenta: [ 139, 0, 139 ],
+                       darkolivegreen: [ 85, 107, 47 ],
+                       darkorange: [ 255, 140, 0 ],
+                       darkorchid: [ 153, 50, 204 ],
+                       darkred: [ 139, 0, 0 ],
+                       darksalmon: [ 233, 150, 122 ],
+                       darkviolet: [ 148, 0, 211 ],
+                       fuchsia: [ 255, 0, 255 ],
+                       gold: [ 255, 215, 0 ],
+                       green: [ 0, 128, 0 ],
+                       indigo: [ 75, 0, 130 ],
+                       khaki: [ 240, 230, 140 ],
+                       lightblue: [ 173, 216, 230 ],
+                       lightcyan: [ 224, 255, 255 ],
+                       lightgreen: [ 144, 238, 144 ],
+                       lightgrey: [ 211, 211, 211 ],
+                       lightpink: [ 255, 182, 193 ],
+                       lightyellow: [ 255, 255, 224 ],
+                       lime: [ 0, 255, 0 ],
+                       magenta: [ 255, 0, 255 ],
+                       maroon: [ 128, 0, 0 ],
+                       navy: [ 0, 0, 128 ],
+                       olive: [ 128, 128, 0 ],
+                       orange: [ 255, 165, 0 ],
+                       pink: [ 255, 192, 203 ],
+                       purple: [ 128, 0, 128 ],
+                       violet: [ 128, 0, 128 ],
+                       red: [ 255, 0, 0 ],
+                       silver: [ 192, 192, 192 ],
+                       white: [ 255, 255, 255 ],
+                       yellow: [ 255, 255, 0 ],
+                       transparent: [ 255, 255, 255 ]
                },
 
                /**
                                min = Math.min( r, g, b ),
                                h,
                                s,
-                               l = (max + min) / 2;
+                               l = ( max + min ) / 2;
 
                        if ( max === min ) {
                                // achromatic
                                h = s = 0;
                        } else {
                                d = max - min;
-                               s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
+                               s = l > 0.5 ? d / ( 2 - max - min ) : d / ( max + min );
                                switch ( max ) {
                                        case r:
-                                               h = (g - b) / d + (g < b ? 6 : 0);
+                                               h = ( g - b ) / d + ( g < b ? 6 : 0 );
                                                break;
                                        case g:
-                                               h = (b - r) / d + 2;
+                                               h = ( b - r ) / d + 2;
                                                break;
                                        case b:
-                                               h = (r - g) / d + 4;
+                                               h = ( r - g ) / d + 4;
                                                break;
                                }
                                h /= 6;
                        }
 
-                       return [h, s, l];
+                       return [ h, s, l ];
                },
 
                /**
                                                t -= 1;
                                        }
                                        if ( t < 1 / 6 ) {
-                                               return p + (q - p) * 6 * t;
+                                               return p + ( q - p ) * 6 * t;
                                        }
                                        if ( t < 1 / 2 ) {
                                                return q;
                                        }
                                        if ( t < 2 / 3 ) {
-                                               return p + (q - p) * (2 / 3 - t) * 6;
+                                               return p + ( q - p ) * ( 2 / 3 - t ) * 6;
                                        }
                                        return p;
                                };
 
-                               q = l < 0.5 ? l * (1 + s) : l + s - l * s;
+                               q = l < 0.5 ? l * ( 1 + s ) : l + s - l * s;
                                p = 2 * l - q;
                                r = hue2rgb( p, q, h + 1 / 3 );
                                g = hue2rgb( p, q, h );
                                b = hue2rgb( p, q, h - 1 / 3 );
                        }
 
-                       return [r * 255, g * 255, b * 255];
+                       return [ r * 255, g * 255, b * 255 ];
                },
 
                /**
                 */
                getColorBrightness: function ( currentColor, mod ) {
                        var rgbArr = $.colorUtil.getRGB( currentColor ),
-                               hslArr = $.colorUtil.rgbToHsl(rgbArr[0], rgbArr[1], rgbArr[2] );
-                       rgbArr = $.colorUtil.hslToRgb(hslArr[0], hslArr[1], hslArr[2] + mod);
+                               hslArr = $.colorUtil.rgbToHsl( rgbArr[ 0 ], rgbArr[ 1 ], rgbArr[ 2 ] );
+                       rgbArr = $.colorUtil.hslToRgb( hslArr[ 0 ], hslArr[ 1 ], hslArr[ 2 ] + mod );
 
                        return 'rgb(' +
-                               [parseInt( rgbArr[0], 10), parseInt( rgbArr[1], 10 ), parseInt( rgbArr[2], 10 )].join( ',' ) +
+                               [ parseInt( rgbArr[ 0 ], 10 ), parseInt( rgbArr[ 1 ], 10 ), parseInt( rgbArr[ 2 ], 10 ) ].join( ',' ) +
                                ')';
                }
 
index 48341bc..221e6bb 100644 (file)
@@ -23,7 +23,7 @@
                expandField: function ( e, context ) {
                        context.config.beforeExpand.call( context.data.$field, context );
                        context.data.$field
-                               .animate( { 'width': context.data.expandedWidth }, 'fast', function () {
+                               .animate( { width: context.data.expandedWidth }, 'fast', function () {
                                        context.config.afterExpand.call( this, context );
                                } );
                },
                condenseField: function ( e, context ) {
                        context.config.beforeCondense.call( context.data.$field, context );
                        context.data.$field
-                               .animate( { 'width': context.data.condensedWidth }, 'fast', function () {
+                               .animate( { width: context.data.condensedWidth }, 'fast', function () {
                                        context.config.afterCondense.call( this, context );
                                } );
                },
                /**
                 * Sets the value of a property, and updates the widget accordingly
-                * @param property String Name of property
-                * @param value Mixed Value to set property with
+                *
+                * @param {String} property Name of property
+                * @param {Mixed} value Value to set property with
                 */
                configure: function ( context, property, value ) {
                        // TODO: Validate creation using fallback values
-                       context.config[property] = value;
+                       context.config[ property ] = value;
                }
 
        };
                        /* API */
                        // Handle various calling styles
                        if ( args.length > 0 ) {
-                               if ( typeof args[0] === 'object' ) {
+                               if ( typeof args[ 0 ] === 'object' ) {
                                        // Apply set of properties
-                                       for ( key in args[0] ) {
-                                               $.expandableField.configure( context, key, args[0][key] );
+                                       for ( key in args[ 0 ] ) {
+                                               $.expandableField.configure( context, key, args[ 0 ][ key ] );
                                        }
-                               } else if ( typeof args[0] === 'string' ) {
+                               } else if ( typeof args[ 0 ] === 'string' ) {
                                        if ( args.length > 1 ) {
                                                // Set property values
-                                               $.expandableField.configure( context, args[0], args[1] );
+                                               $.expandableField.configure( context, args[ 0 ], args[ 1 ] );
 
                                        // TODO: Do we need to check both null and undefined?
                                        } else if ( returnValue === null || returnValue === undefined ) {
                                                // Get property values, but don't give access to internal data - returns only the first
-                                               returnValue = ( args[0] in context.config ? undefined : context.config[args[0]] );
+                                               returnValue = ( args[ 0 ] in context.config ? undefined : context.config[ args[ 0 ] ] );
                                        }
                                }
                        }
index d7024cc..f70913f 100644 (file)
@@ -52,10 +52,10 @@ jQuery._farbtastic = function (container, callback) {
                        if (this.currentStyle.backgroundImage != 'none') {
                                var image = this.currentStyle.backgroundImage;
                                image = this.currentStyle.backgroundImage.slice(5, image.length - 2);
-                               $(this).css({
-                                       'backgroundImage': 'none',
-                                       'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
-                               });
+                               $(this).css( {
+                                       backgroundImage: 'none',
+                                       filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
+                               } );
                        }
                });
        }
index 64827fb..3064b42 100644 (file)
@@ -8,7 +8,7 @@ function serializeControls( controls ) {
                len = controls.length;
 
        for ( i = 0; i < len; i++ ) {
-               data[ controls[i].name ] = controls[i].value;
+               data[ controls[ i ].name ] = controls[ i ].value;
        }
 
        return data;
@@ -23,7 +23,7 @@ function serializeControls( controls ) {
  * @return {Object}
  */
 jQuery.fn.getAttrs = function () {
-       return serializeControls( this[0].attributes );
+       return serializeControls( this[ 0 ].attributes );
 };
 
 /**
index 8fca056..aa6590b 100644 (file)
 $.devicePixelRatio = function () {
        if ( window.devicePixelRatio !== undefined ) {
                // Most web browsers:
-               // * WebKit (Safari, Chrome, Android browser, etc)
+               // * WebKit/Blink (Safari, Chrome, Android browser, etc)
                // * Opera
                // * Firefox 18+
+               // * Microsoft Edge (Windows 10)
                return window.devicePixelRatio;
        } else if ( window.msMatchMedia !== undefined ) {
                // Windows 8 desktops / tablets, probably Windows Phone 8
                //
-               // IE 10 doesn't report pixel ratio directly, but we can get the
+               // IE 10/11 doesn't report pixel ratio directly, but we can get the
                // screen DPI and divide by 96. We'll bracket to [1, 1.5, 2.0] for
                // simplicity, but you may get different values depending on zoom
                // factor, size of screen and orientation in Metro IE.
@@ -52,6 +53,52 @@ $.devicePixelRatio = function () {
        }
 };
 
+/**
+ * Bracket a given device pixel ratio to one of [1, 1.5, 2].
+ *
+ * This is useful for grabbing images on the fly with sizes based on the display
+ * density, without causing slowdown and extra thumbnail renderings on devices
+ * that are slightly different from the most common sizes.
+ *
+ * The bracketed ratios match the default 'srcset' output on MediaWiki thumbnails,
+ * so will be consistent with default renderings.
+ *
+ * @static
+ * @inheritable
+ * @return {number} Device pixel ratio
+ */
+$.bracketDevicePixelRatio = function ( baseRatio ) {
+       if ( baseRatio > 1.5 ) {
+               return 2;
+       } else if ( baseRatio > 1 ) {
+               return 1.5;
+       } else {
+               return 1;
+       }
+};
+
+/**
+ * Get reported or approximate device pixel ratio, bracketed to [1, 1.5, 2].
+ *
+ * This is useful for grabbing images on the fly with sizes based on the display
+ * density, without causing slowdown and extra thumbnail renderings on devices
+ * that are slightly different from the most common sizes.
+ *
+ * The bracketed ratios match the default 'srcset' output on MediaWiki thumbnails,
+ * so will be consistent with default renderings.
+ *
+ * - 1.0 means 1 CSS pixel is 1 hardware pixel
+ * - 1.5 means 1 CSS pixel is 1.5 hardware pixels
+ * - 2.0 means 1 CSS pixel is 2 hardware pixels
+ *
+ * @static
+ * @inheritable
+ * @return {number} Device pixel ratio
+ */
+$.bracketedDevicePixelRatio = function () {
+       return $.bracketDevicePixelRatio( $.devicePixelRatio() );
+};
+
 /**
  * Implement responsive images based on srcset attributes, if browser has no
  * native srcset support.
@@ -106,11 +153,11 @@ $.matchSrcSet = function ( devicePixelRatio, srcset ) {
                selectedSrc = null;
        candidates = srcset.split( / *, */ );
        for ( i = 0; i < candidates.length; i++ ) {
-               candidate = candidates[i];
+               candidate = candidates[ i ];
                bits = candidate.split( / +/ );
-               src = bits[0];
-               if ( bits.length > 1 && bits[1].charAt( bits[1].length - 1 ) === 'x' ) {
-                       ratioStr = bits[1].slice( 0, -1 );
+               src = bits[ 0 ];
+               if ( bits.length > 1 && bits[ 1 ].charAt( bits[ 1 ].length - 1 ) === 'x' ) {
+                       ratioStr = bits[ 1 ].slice( 0, -1 );
                        ratio = parseFloat( ratioStr );
                        if ( ratio <= devicePixelRatio && ratio > selectedRatio ) {
                                selectedRatio = ratio;
index 1ec4db0..e37f19b 100644 (file)
                        var i,
                                patArray = pat.split( ' ' );
                        for ( i = 0; i < patArray.length; i++ ) {
-                               if ( patArray[i].length === 0 ) {
+                               if ( patArray[ i ].length === 0 ) {
                                        continue;
                                }
-                               $.highlightText.innerHighlight( node, patArray[i] );
+                               $.highlightText.innerHighlight( node, patArray[ i ] );
                        }
                        return node;
                },
@@ -30,7 +30,7 @@
                                // look for an occurrence of our pattern and store the starting position
                                match = node.data.match( new RegExp( '(^|\\s)' + mw.RegExp.escape( pat ), 'i' ) );
                                if ( match ) {
-                                       pos = match.index + match[1].length; // include length of any matched spaces
+                                       pos = match.index + match[ 1 ].length; // include length of any matched spaces
                                        // create the span wrapper for the matched text
                                        spannode = document.createElement( 'span' );
                                        spannode.className = 'highlight';
@@ -55,7 +55,7 @@
                        ) {
                                for ( i = 0; i < node.childNodes.length; ++i ) {
                                        // call the highlight function for each child node
-                                       $.highlightText.innerHighlight( node.childNodes[i], pat );
+                                       $.highlightText.innerHighlight( node.childNodes[ i ], pat );
                                }
                        }
                }
index 0b42354..f5932b2 100644 (file)
@@ -5,16 +5,16 @@
 
 /**
  * Gets a localized message, using parameters from options if present.
- * @ignore
  *
+ * @ignore
  * @param {Object} options
  * @param {string} key
  * @return {string} Localized message
  */
 function msg( options, key ) {
-       var args = options.params[key] || [];
+       var args = options.params[ key ] || [];
        // Format: mw.msg( key [, p1, p2, ...] )
-       args.unshift( options.prefix + ( options.keys[key] || key ) );
+       args.unshift( options.prefix + ( options.keys[ key ] || key ) );
        return mw.msg.apply( mw, args );
 }
 
@@ -108,7 +108,7 @@ function msg( options, key ) {
  */
 $.fn.localize = function ( options ) {
        var $target = this,
-               attributes = ['title', 'alt', 'placeholder'];
+               attributes = [ 'title', 'alt', 'placeholder' ];
 
        // Extend options
        options = $.extend( {
index 5484212..27ceb2b 100644 (file)
                                return false;
                        }
                        for ( var i = 0; i < arrThis.length; i++ ) {
-                               if ( $.isArray( arrThis[i] ) ) {
-                                       if ( !$.compareArray( arrThis[i], arrAgainst[i] ) ) {
+                               if ( $.isArray( arrThis[ i ] ) ) {
+                                       if ( !$.compareArray( arrThis[ i ], arrAgainst[ i ] ) ) {
                                                return false;
                                        }
-                               } else if ( arrThis[i] !== arrAgainst[i] ) {
+                               } else if ( arrThis[ i ] !== arrAgainst[ i ] ) {
                                        return false;
                                }
                        }
                                                        // Check if this property is also present in the other object
                                                        if ( prop in objectB ) {
                                                                // Compare the types of the properties
-                                                               type = typeof objectA[prop];
-                                                               if ( type === typeof objectB[prop] ) {
+                                                               type = typeof objectA[ prop ];
+                                                               if ( type === typeof objectB[ prop ] ) {
                                                                        // Recursively check objects inside this one
                                                                        switch ( type ) {
                                                                                case 'object' :
-                                                                                       if ( !$.compareObject( objectA[prop], objectB[prop] ) ) {
+                                                                                       if ( !$.compareObject( objectA[ prop ], objectB[ prop ] ) ) {
                                                                                                return false;
                                                                                        }
                                                                                        break;
                                                                                case 'function' :
                                                                                        // Functions need to be strings to compare them properly
-                                                                                       if ( objectA[prop].toString() !== objectB[prop].toString() ) {
+                                                                                       if ( objectA[ prop ].toString() !== objectB[ prop ].toString() ) {
                                                                                                return false;
                                                                                        }
                                                                                        break;
                                                                                default:
                                                                                        // Strings, numbers
-                                                                                       if ( objectA[prop] !== objectB[prop] ) {
+                                                                                       if ( objectA[ prop ] !== objectB[ prop ] ) {
                                                                                                return false;
                                                                                        }
                                                                                        break;
index d50422e..9c18a91 100644 (file)
  * @version 2.1.0
  * @license MIT
  */
-( function ($) {
+( function ( $ ) {
 
-       var isInputSupported = 'placeholder' in document.createElement('input'),
-               isTextareaSupported = 'placeholder' in document.createElement('textarea'),
+       var isInputSupported = 'placeholder' in document.createElement( 'input' ),
+               isTextareaSupported = 'placeholder' in document.createElement( 'textarea' ),
                prototype = $.fn,
                valHooks = $.valHooks,
                propHooks = $.propHooks,
                hooks,
                placeholder;
 
-       if (isInputSupported && isTextareaSupported) {
+       function safeActiveElement() {
+               // Avoid IE9 `document.activeElement` of death
+               // https://github.com/mathiasbynens/jquery-placeholder/pull/99
+               try {
+                       return document.activeElement;
+               } catch ( err ) {}
+       }
+
+       function args( elem ) {
+               // Return an object of element attributes
+               var newAttrs = {},
+                               rinlinejQuery = /^jQuery\d+$/;
+               $.each( elem.attributes, function ( i, attr ) {
+                       if ( attr.specified && !rinlinejQuery.test( attr.name ) ) {
+                               newAttrs[ attr.name ] = attr.value;
+                       }
+               } );
+               return newAttrs;
+       }
+
+       function clearPlaceholder( event, value ) {
+               var input = this,
+                               $input = $( input );
+               if ( input.value === $input.attr( 'placeholder' ) && $input.hasClass( 'placeholder' ) ) {
+                       if ( $input.data( 'placeholder-password' ) ) {
+                               $input = $input.hide().next().show().attr( 'id', $input.removeAttr( 'id' ).data( 'placeholder-id' ) );
+                               // If `clearPlaceholder` was called from `$.valHooks.input.set`
+                               if ( event === true ) {
+                                       $input[ 0 ].value = value;
+                                       return value;
+                               }
+                               $input.focus();
+                       } else {
+                               input.value = '';
+                               $input.removeClass( 'placeholder' );
+                               if ( input === safeActiveElement() ) {
+                                       input.select();
+                               }
+                       }
+               }
+       }
 
-               placeholder = prototype.placeholder = function (text) {
+       function setPlaceholder() {
+               var $replacement,
+                               input = this,
+                               $input = $( input ),
+                               id = this.id;
+               if ( !input.value ) {
+                       if ( input.type === 'password' ) {
+                               if ( !$input.data( 'placeholder-textinput' ) ) {
+                                       try {
+                                               $replacement = $input.clone().attr( { type: 'text' } );
+                                       } catch ( e ) {
+                                               $replacement = $( '<input>' ).attr( $.extend( args( this ), { type: 'text' } ) );
+                                       }
+                                       $replacement
+                                                       .removeAttr( 'name' )
+                                                       .data( {
+                                                               'placeholder-password': $input,
+                                                               'placeholder-id': id
+                                                       } )
+                                                       .bind( 'focus.placeholder drop.placeholder', clearPlaceholder );
+                                       $input
+                                                       .data( {
+                                                               'placeholder-textinput': $replacement,
+                                                               'placeholder-id': id
+                                                       } )
+                                                       .before( $replacement );
+                               }
+                               $input = $input.removeAttr( 'id' ).hide().prev().attr( 'id', id ).show();
+                               // Note: `$input[0] != input` now!
+                       }
+                       $input.addClass( 'placeholder' );
+                       $input[ 0 ].value = $input.attr( 'placeholder' );
+               } else {
+                       $input.removeClass( 'placeholder' );
+               }
+       }
+
+       function changePlaceholder( text ) {
+               var hasArgs = arguments.length,
+                               $input = this;
+               if ( hasArgs ) {
+                       if ( $input.attr( 'placeholder' ) !== text ) {
+                               $input.prop( 'placeholder', text );
+                               if ( $input.hasClass( 'placeholder' ) ) {
+                                       $input[ 0 ].value = text;
+                               }
+                       }
+               }
+       }
+
+       if ( isInputSupported && isTextareaSupported ) {
+
+               placeholder = prototype.placeholder = function ( text ) {
                        var hasArgs = arguments.length;
 
-                       if (hasArgs) {
-                               changePlaceholder.call(this, text);
+                       if ( hasArgs ) {
+                               changePlaceholder.call( this, text );
                        }
 
                        return this;
 
        } else {
 
-               placeholder = prototype.placeholder = function (text) {
+               placeholder = prototype.placeholder = function ( text ) {
                        var $this = this,
                                hasArgs = arguments.length;
 
-                       if (hasArgs) {
-                               changePlaceholder.call(this, text);
+                       if ( hasArgs ) {
+                               changePlaceholder.call( this, text );
                        }
 
                        $this
-                               .filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]')
+                               .filter( ( isInputSupported ? 'textarea' : ':input' ) + '[placeholder]' )
                                .filter( function () {
-                                       return !$(this).data('placeholder-enabled');
-                               })
-                               .bind({
+                                       return !$( this ).data( 'placeholder-enabled' );
+                               } )
+                               .bind( {
                                        'focus.placeholder drop.placeholder': clearPlaceholder,
                                        'blur.placeholder': setPlaceholder
-                               })
-                               .data('placeholder-enabled', true)
-                               .trigger('blur.placeholder');
+                               } )
+                               .data( 'placeholder-enabled', true )
+                               .trigger( 'blur.placeholder' );
                        return $this;
                };
 
                placeholder.textarea = isTextareaSupported;
 
                hooks = {
-                       'get': function (element) {
-                               var $element = $(element),
-                                       $passwordInput = $element.data('placeholder-password');
-                               if ($passwordInput) {
-                                       return $passwordInput[0].value;
+                       get: function ( element ) {
+                               var $element = $( element ),
+                                       $passwordInput = $element.data( 'placeholder-password' );
+                               if ( $passwordInput ) {
+                                       return $passwordInput[ 0 ].value;
                                }
 
-                               return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value;
+                               return $element.data( 'placeholder-enabled' ) && $element.hasClass( 'placeholder' ) ? '' : element.value;
                        },
-                       'set': function (element, value) {
-                               var $element = $(element),
-                                       $passwordInput = $element.data('placeholder-password');
-                               if ($passwordInput) {
-                                       $passwordInput[0].value = value;
+                       set: function ( element, value ) {
+                               var $element = $( element ),
+                                       $passwordInput = $element.data( 'placeholder-password' );
+                               if ( $passwordInput ) {
+                                       $passwordInput[ 0 ].value = value;
                                        return value;
                                }
 
-                               if (!$element.data('placeholder-enabled')) {
+                               if ( !$element.data( 'placeholder-enabled' ) ) {
                                        element.value = value;
                                        return value;
                                }
-                               if (!value) {
+                               if ( !value ) {
                                        element.value = value;
                                        // Issue #56: Setting the placeholder causes problems if the element continues to have focus.
-                                       if (element !== safeActiveElement()) {
+                                       if ( element !== safeActiveElement() ) {
                                                // We can't use `triggerHandler` here because of dummy text/password inputs :(
-                                               setPlaceholder.call(element);
+                                               setPlaceholder.call( element );
                                        }
-                               } else if ($element.hasClass('placeholder')) {
-                                       if (!clearPlaceholder.call(element, true, value)) {
+                               } else if ( $element.hasClass( 'placeholder' ) ) {
+                                       if ( !clearPlaceholder.call( element, true, value ) ) {
                                                element.value = value;
                                        }
                                } else {
                        }
                };
 
-               if (!isInputSupported) {
+               if ( !isInputSupported ) {
                        valHooks.input = hooks;
                        propHooks.value = hooks;
                }
-               if (!isTextareaSupported) {
+               if ( !isTextareaSupported ) {
                        valHooks.textarea = hooks;
                        propHooks.value = hooks;
                }
 
                $( function () {
                        // Look for forms
-                       $(document).delegate('form', 'submit.placeholder', function () {
+                       $( document ).delegate( 'form', 'submit.placeholder', function () {
                                // Clear the placeholder values so they don't get submitted
-                               var $inputs = $('.placeholder', this).each(clearPlaceholder);
+                               var $inputs = $( '.placeholder', this ).each( clearPlaceholder );
                                setTimeout( function () {
-                                       $inputs.each(setPlaceholder);
-                               }, 10);
-                       });
-               });
+                                       $inputs.each( setPlaceholder );
+                               }, 10 );
+                       } );
+               } );
 
                // Clear placeholder values upon page reload
-               $(window).bind('beforeunload.placeholder', function () {
-                       $('.placeholder').each( function () {
+               $( window ).bind( 'beforeunload.placeholder', function () {
+                       $( '.placeholder' ).each( function () {
                                this.value = '';
-                       });
-               });
+                       } );
+               } );
 
        }
-
-       function args(elem) {
-               // Return an object of element attributes
-               var newAttrs = {},
-                       rinlinejQuery = /^jQuery\d+$/;
-               $.each(elem.attributes, function (i, attr) {
-                       if (attr.specified && !rinlinejQuery.test(attr.name)) {
-                               newAttrs[attr.name] = attr.value;
-                       }
-               });
-               return newAttrs;
-       }
-
-       function clearPlaceholder(event, value) {
-               var input = this,
-                       $input = $(input);
-               if (input.value === $input.attr('placeholder') && $input.hasClass('placeholder')) {
-                       if ($input.data('placeholder-password')) {
-                               $input = $input.hide().next().show().attr('id', $input.removeAttr('id').data('placeholder-id'));
-                               // If `clearPlaceholder` was called from `$.valHooks.input.set`
-                               if (event === true) {
-                                       $input[0].value = value;
-                                       return value;
-                               }
-                               $input.focus();
-                       } else {
-                               input.value = '';
-                               $input.removeClass('placeholder');
-                               if (input === safeActiveElement()) {
-                                       input.select();
-                               }
-                       }
-               }
-       }
-
-       function setPlaceholder() {
-               var $replacement,
-                       input = this,
-                       $input = $(input),
-                       id = this.id;
-               if (!input.value) {
-                       if (input.type === 'password') {
-                               if (!$input.data('placeholder-textinput')) {
-                                       try {
-                                               $replacement = $input.clone().attr({ 'type': 'text' });
-                                       } catch (e) {
-                                               $replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' }));
-                                       }
-                                       $replacement
-                                               .removeAttr('name')
-                                               .data({
-                                                       'placeholder-password': $input,
-                                                       'placeholder-id': id
-                                               })
-                                               .bind('focus.placeholder drop.placeholder', clearPlaceholder);
-                                       $input
-                                               .data({
-                                                       'placeholder-textinput': $replacement,
-                                                       'placeholder-id': id
-                                               })
-                                               .before($replacement);
-                               }
-                               $input = $input.removeAttr('id').hide().prev().attr('id', id).show();
-                               // Note: `$input[0] != input` now!
-                       }
-                       $input.addClass('placeholder');
-                       $input[0].value = $input.attr('placeholder');
-               } else {
-                       $input.removeClass('placeholder');
-               }
-       }
-
-       function safeActiveElement() {
-               // Avoid IE9 `document.activeElement` of death
-               // https://github.com/mathiasbynens/jquery-placeholder/pull/99
-               try {
-                       return document.activeElement;
-               } catch (err) {}
-       }
-
-       function changePlaceholder(text) {
-               var hasArgs = arguments.length,
-                       $input = this;
-               if (hasArgs) {
-                       if ($input.attr('placeholder') !== text) {
-                               $input.prop('placeholder', text);
-                               if ($input.hasClass('placeholder')) {
-                                       $input[0].value = text;
-                               }
-                       }
-               }
-       }
-
-}(jQuery));
+}( jQuery ) );
index 556bf8c..785b273 100644 (file)
 
        /**
         * CompletenessTest
-        * @constructor
         *
+        * @constructor
         * @example
         *  var myTester = new CompletenessTest( myLib );
-        * @param masterVariable {Object} The root variable that contains all object
+        * @param {Object} masterVariable The root variable that contains all object
         *  members. CompletenessTest will recursively traverse objects and keep track
         *  of all methods.
-        * @param ignoreFn {Function} Optionally pass a function to filter out certain
+        * @param {Function} [ignoreFn] Optionally pass a function to filter out certain
         *  methods. Example: You may want to filter out instances of jQuery or some
         *  other constructor. Otherwise "missingTests" will include all methods that
         *  were not called from that instance.
                                elOutputWrapper.appendChild( elContainer );
 
                                util.each( style, function ( key, value ) {
-                                       elOutputWrapper.style[key] = value;
+                                       elOutputWrapper.style[ key ] = value;
                                } );
                                return elOutputWrapper;
                        }
                 * Depending on the action it either injects our listener into the methods, or
                 * reads from our tracker and records which methods have not been called by the test suite.
                 *
-                * @param currName {String|Null} Name of the given object member (Initially this is null).
-                * @param currVar {mixed} The variable to check (initially an object,
+                * @param {String|Null} currName Name of the given object member (Initially this is null).
+                * @param {mixed} currVar The variable to check (initially an object,
                 *  further down it could be anything).
-                * @param masterVariable {Object} Throughout our interation, always keep track of the master/root.
+                * @param {Object} masterVariable Throughout our interation, always keep track of the master/root.
                 *  Initially this is the same as currVar.
-                * @param parentPathArray {Array} Array of names that indicate our breadcrumb path starting at
+                * @param {Array} parentPathArray Array of names that indicate our breadcrumb path starting at
                 *  masterVariable. Not including currName.
                 */
                walkTheObject: function ( currObj, currName, masterVariable, parentPathArray ) {
 
                        if ( currName ) {
                                currPathArray.push( currName );
-                               currVal = currObj[currName];
+                               currVal = currObj[ currName ];
                        } else {
                                currName = '(root)';
                                currVal = currObj;
                 * was called during the test suite (as far as the tracker knows).
                 * If not it adds it to missingTests.
                 *
-                * @param fnName {String}
+                * @param {String} fnName
                 * @return {Boolean}
                 */
                hasTest: function ( fnName ) {
                        if ( !( fnName in this.methodCallTracker ) ) {
-                               this.missingTests[fnName] = true;
+                               this.missingTests[ fnName ] = true;
                                return false;
                        }
                        return true;
                 * Injects a function (such as a spy that updates methodCallTracker when
                 * it's called) inside another function.
                 *
-                * @param masterVariable {Object}
-                * @param objectPathArray {Array}
-                * @param injectFn {Function}
+                * @param {Object} masterVariable
+                * @param {Array} objectPathArray
+                * @param {Function} injectFn
                 */
                injectCheck: function ( obj, key, injectFn ) {
                        var spy,
                        // 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).
+                       // XXX: https://github.com/jshint/jshint/issues/2656
+                       /*jshint ignore:start */
                        /*jshint proto:true */
                        spy.__proto__ = val;
+                       /*jshint ignore:end */
 
                        // Objects are by reference, members (unless objects) are not.
                        obj[ key ] = spy;
index 361d3e0..41c555b 100644 (file)
@@ -67,7 +67,7 @@
 
                        opts = $.extend( {}, defaults, opts );
 
-                       var $spinner = $( '<div>', { 'class': 'mw-spinner', 'title': '...' } );
+                       var $spinner = $( '<div>', { 'class': 'mw-spinner', title: '...' } );
                        if ( opts.id !== undefined ) {
                                $spinner.attr( 'id', 'mw-spinner-' + opts.id );
                        }
index 7c9bec3..dc1c779 100644 (file)
@@ -142,6 +142,7 @@ $.suggestions = {
         * call to this function still pending will be canceled. If the value in the
         * textbox is empty or hasn't changed since the last time suggestions were fetched,
         * this function does nothing.
+        *
         * @param {boolean} delayed Whether or not to delay this by the currently configured amount of time
         */
        update: function ( context, delayed ) {
@@ -229,6 +230,7 @@ $.suggestions = {
 
        /**
         * Sets the value of a property, and updates the widget accordingly
+        *
         * @param {string} property Name of property
         * @param {Mixed} value Value to set property with
         */
@@ -246,10 +248,10 @@ $.suggestions = {
                        case 'update':
                        case '$region':
                        case 'expandFrom':
-                               context.config[property] = value;
+                               context.config[ property ] = value;
                                break;
                        case 'suggestions':
-                               context.config[property] = value;
+                               context.config[ property ] = value;
                                // Update suggestions
                                if ( context.data !== undefined ) {
                                        if ( context.data.$textbox.val().length === 0 ) {
@@ -277,7 +279,7 @@ $.suggestions = {
                                                                expandFrom = 'left';
 
                                                        // Catch invalid values, default to 'auto'
-                                                       } else if ( $.inArray( expandFrom, ['left', 'right', 'start', 'end', 'auto'] ) === -1 ) {
+                                                       } else if ( $.inArray( expandFrom, [ 'left', 'right', 'start', 'end', 'auto' ] ) === -1 ) {
                                                                expandFrom = 'auto';
                                                        }
 
@@ -336,11 +338,11 @@ $.suggestions = {
                                                expWidth = -1;
                                                for ( i = 0; i < context.config.suggestions.length; i++ ) {
                                                        /*jshint loopfunc:true */
-                                                       text = context.config.suggestions[i];
+                                                       text = context.config.suggestions[ i ];
                                                        $result = $( '<div>' )
                                                                .addClass( 'suggestions-result' )
                                                                .attr( 'rel', i )
-                                                               .data( 'text', context.config.suggestions[i] )
+                                                               .data( 'text', context.config.suggestions[ i ] )
                                                                .mousemove( function () {
                                                                        context.data.selectedWithMouse = true;
                                                                        $.suggestions.highlight(
@@ -352,7 +354,7 @@ $.suggestions = {
                                                                .appendTo( $results );
                                                        // Allow custom rendering
                                                        if ( typeof context.config.result.render === 'function' ) {
-                                                               context.config.result.render.call( $result, context.config.suggestions[i], context );
+                                                               context.config.result.render.call( $result, context.config.suggestions[ i ], context );
                                                        } else {
                                                                $result.text( text );
                                                        }
@@ -393,28 +395,29 @@ $.suggestions = {
                                }
                                break;
                        case 'maxRows':
-                               context.config[property] = Math.max( 1, Math.min( 100, value ) );
+                               context.config[ property ] = Math.max( 1, Math.min( 100, value ) );
                                break;
                        case 'delay':
-                               context.config[property] = Math.max( 0, Math.min( 1200, value ) );
+                               context.config[ property ] = Math.max( 0, Math.min( 1200, value ) );
                                break;
                        case 'cacheMaxAge':
-                               context.config[property] = Math.max( 1, value );
+                               context.config[ property ] = Math.max( 1, value );
                                break;
                        case 'maxExpandFactor':
-                               context.config[property] = Math.max( 1, value );
+                               context.config[ property ] = Math.max( 1, value );
                                break;
                        case 'cache':
                        case 'submitOnClick':
                        case 'positionFromLeft':
                        case 'highlightInput':
-                               context.config[property] = !!value;
+                               context.config[ property ] = !!value;
                                break;
                }
        },
 
        /**
         * Highlight a result in the results table
+        *
         * @param {jQuery|string} result `<tr>` to highlight, or 'prev' or 'next'
         * @param {boolean} updateTextbox If true, put the suggestion in the textbox
         */
@@ -484,6 +487,7 @@ $.suggestions = {
 
        /**
         * Respond to keypress event
+        *
         * @param {number} key Code of key pressed
         */
        keypress: function ( e, context, key ) {
@@ -595,18 +599,18 @@ $.fn.suggestions = function () {
 
                // Handle various calling styles
                if ( args.length > 0 ) {
-                       if ( typeof args[0] === 'object' ) {
+                       if ( typeof args[ 0 ] === 'object' ) {
                                // Apply set of properties
-                               for ( key in args[0] ) {
-                                       $.suggestions.configure( context, key, args[0][key] );
+                               for ( key in args[ 0 ] ) {
+                                       $.suggestions.configure( context, key, args[ 0 ][ key ] );
                                }
-                       } else if ( typeof args[0] === 'string' ) {
+                       } else if ( typeof args[ 0 ] === 'string' ) {
                                if ( args.length > 1 ) {
                                        // Set property values
-                                       $.suggestions.configure( context, args[0], args[1] );
+                                       $.suggestions.configure( context, args[ 0 ], args[ 1 ] );
                                } else if ( returnValue === null || returnValue === undefined ) {
                                        // Get property values, but don't give access to internal data - returns only the first
-                                       returnValue = ( args[0] in context.config ? undefined : context.config[args[0]] );
+                                       returnValue = ( args[ 0 ] in context.config ? undefined : context.config[ args[ 0 ] ] );
                                }
                        }
                }
index 8efbb1c..eaa138b 100644 (file)
@@ -70,8 +70,8 @@
                var i,
                        len = parsers.length;
                for ( i = 0; i < len; i++ ) {
-                       if ( parsers[i].id.toLowerCase() === name.toLowerCase() ) {
-                               return parsers[i];
+                       if ( parsers[ i ].id.toLowerCase() === name.toLowerCase() ) {
+                               return parsers[ i ];
                        }
                }
                return false;
                }
        }
 
-       function detectParserForColumn( table, rows, cellIndex ) {
+       function detectParserForColumn( table, rows, column ) {
                var l = parsers.length,
+                       cellIndex,
                        nodeValue,
                        // Start with 1 because 0 is the fallback parser
                        i = 1,
+                       lastRowIndex = -1,
                        rowIndex = 0,
                        concurrent = 0,
+                       empty = 0,
                        needed = ( rows.length > 4 ) ? 5 : rows.length;
 
                while ( i < l ) {
-                       if ( rows[rowIndex] && rows[rowIndex].cells[cellIndex] ) {
-                               nodeValue = $.trim( getElementSortKey( rows[rowIndex].cells[cellIndex] ) );
+                       if ( rows[ rowIndex ] ) {
+                               if ( rowIndex !== lastRowIndex ) {
+                                       lastRowIndex = rowIndex;
+                                       cellIndex = $( rows[ rowIndex ] ).data( 'columnToCell' )[ column ];
+                                       nodeValue = $.trim( getElementSortKey( rows[ rowIndex ].cells[ cellIndex ] ) );
+                               }
                        } else {
                                nodeValue = '';
                        }
 
                        if ( nodeValue !== '' ) {
-                               if ( parsers[i].is( nodeValue, table ) ) {
+                               if ( parsers[ i ].is( nodeValue, table ) ) {
                                        concurrent++;
                                        rowIndex++;
                                        if ( concurrent >= needed ) {
                                                // Confirmed the parser for multiple cells, let's return it
-                                               return parsers[i];
+                                               return parsers[ i ];
                                        }
                                } else {
                                        // Check next parser, reset rows
                                        i++;
                                        rowIndex = 0;
                                        concurrent = 0;
+                                       empty = 0;
                                }
                        } else {
                                // Empty cell
+                               empty++;
                                rowIndex++;
-                               if ( rowIndex > rows.length ) {
-                                       rowIndex = 0;
+                               if ( rowIndex >= rows.length ) {
+                                       if ( concurrent >= rows.length - empty ) {
+                                               // Confirmed the parser for all filled cells
+                                               return parsers[ i ];
+                                       }
+                                       // Check next parser, reset rows
                                        i++;
+                                       rowIndex = 0;
+                                       concurrent = 0;
+                                       empty = 0;
                                }
                        }
                }
 
                // 0 is always the generic parser (text)
-               return parsers[0];
+               return parsers[ 0 ];
        }
 
        function buildParserCache( table, $headers ) {
-               var sortType, cells, len, i, parser,
-                       rows = table.tBodies[0].rows,
+               var sortType, len, j, parser,
+                       rows = table.tBodies[ 0 ].rows,
+                       config = $( table ).data( 'tablesorter' ).config,
                        parsers = [];
 
-               if ( rows[0] ) {
-
-                       cells = rows[0].cells;
-                       len = cells.length;
-
-                       for ( i = 0; i < len; i++ ) {
+               if ( rows[ 0 ] ) {
+                       len = config.columns;
+                       for ( j = 0; j < len; j++ ) {
                                parser = false;
-                               sortType = $headers.eq( i ).data( 'sortType' );
+                               sortType = $headers.eq( config.columnToHeader[ j ] ).data( 'sortType' );
                                if ( sortType !== undefined ) {
                                        parser = getParserById( sortType );
                                }
 
                                if ( parser === false ) {
-                                       parser = detectParserForColumn( table, rows, i );
+                                       parser = detectParserForColumn( table, rows, j );
                                }
 
                                parsers.push( parser );
 
        function buildCache( table ) {
                var i, j, $row, cols,
-                       totalRows = ( table.tBodies[0] && table.tBodies[0].rows.length ) || 0,
-                       totalCells = ( table.tBodies[0].rows[0] && table.tBodies[0].rows[0].cells.length ) || 0,
+                       totalRows = ( table.tBodies[ 0 ] && table.tBodies[ 0 ].rows.length ) || 0,
                        config = $( table ).data( 'tablesorter' ).config,
                        parsers = config.parsers,
+                       len = parsers.length,
+                       cellIndex,
                        cache = {
                                row: [],
                                normalized: []
                        };
 
-               for ( i = 0; i < totalRows; ++i ) {
+               for ( i = 0; i < totalRows; i++ ) {
 
                        // Add the table data to main data array
-                       $row = $( table.tBodies[0].rows[i] );
+                       $row = $( table.tBodies[ 0 ].rows[ i ] );
                        cols = [];
 
                        // if this is a child row, add it to the last row's children and
                        // continue to the next row
                        if ( $row.hasClass( config.cssChildRow ) ) {
-                               cache.row[cache.row.length - 1] = cache.row[cache.row.length - 1].add( $row );
+                               cache.row[ cache.row.length - 1 ] = cache.row[ cache.row.length - 1 ].add( $row );
                                // go to the next for loop
                                continue;
                        }
 
                        cache.row.push( $row );
 
-                       for ( j = 0; j < totalCells; ++j ) {
-                               cols.push( parsers[j].format( getElementSortKey( $row[0].cells[j] ), table, $row[0].cells[j] ) );
+                       for ( j = 0; j < len; j++ ) {
+                               cellIndex = $row.data( 'columnToCell' )[ j ];
+                               cols.push( parsers[ j ].format( getElementSortKey( $row[ 0 ].cells[ cellIndex ] ) ) );
                        }
 
                        cols.push( cache.normalized.length ); // add position for rowCache
                        row = cache.row,
                        normalized = cache.normalized,
                        totalRows = normalized.length,
-                       checkCell = ( normalized[0].length - 1 ),
+                       checkCell = ( normalized[ 0 ].length - 1 ),
                        fragment = document.createDocumentFragment();
 
                for ( i = 0; i < totalRows; i++ ) {
-                       pos = normalized[i][checkCell];
+                       pos = normalized[ i ][ checkCell ];
 
-                       l = row[pos].length;
+                       l = row[ pos ].length;
 
                        for ( j = 0; j < l; j++ ) {
-                               fragment.appendChild( row[pos][j] );
+                               fragment.appendChild( row[ pos ][ j ] );
                        }
 
                }
-               table.tBodies[0].appendChild( fragment );
+               table.tBodies[ 0 ].appendChild( fragment );
 
                $( table ).trigger( 'sortEnd.tablesorter' );
        }
         *
         * After this, it will look at all rows at the bottom for footer rows
         * And place these in a tfoot using similar rules.
-        * @param $table jQuery object for a <table>
+        *
+        * @param {jQuery} $table object for a <table>
         */
        function emulateTHeadAndFoot( $table ) {
                var $thead, $tfoot, i, len,
                        $tfoot = $( '<tfoot>' );
                        len = $rows.length;
                        for ( i = len - 1; i >= 0; i-- ) {
-                               if ( $( $rows[i] ).children( 'td' ).length ) {
+                               if ( $( $rows[ i ] ).children( 'td' ).length ) {
                                        break;
                                }
-                               $tfoot.prepend( $( $rows[i] ) );
+                               $tfoot.prepend( $( $rows[ i ] ) );
                        }
                        $table.append( $tfoot );
                }
        }
 
+       function uniqueElements( array ) {
+               var uniques = [];
+               $.each( array, function ( index, elem ) {
+                       if ( elem !== undefined && $.inArray( elem, uniques ) === -1 ) {
+                               uniques.push( elem );
+                       }
+               } );
+               return uniques;
+       }
+
        function buildHeaders( table, msg ) {
                var config = $( table ).data( 'tablesorter' ).config,
                        maxSeen = 0,
                        colspanOffset = 0,
                        columns,
-                       i,
+                       k,
                        $cell,
                        rowspan,
                        colspan,
                        headerCount,
                        longestTR,
+                       headerIndex,
                        exploded,
                        $tableHeaders = $( [] ),
                        $tableRows = $( 'thead:eq(0) > tr', table );
                                        colspan = Number( cell.colSpan );
 
                                        // Skip the spots in the exploded matrix that are already filled
-                                       while ( exploded[rowIndex] && exploded[rowIndex][columnIndex] !== undefined ) {
+                                       while ( exploded[ rowIndex ] && exploded[ rowIndex ][ columnIndex ] !== undefined ) {
                                                ++columnIndex;
                                        }
 
                                        // in the exploded matrix rowspan times colspan times, with the proper offsets
                                        for ( matrixColumnIndex = columnIndex; matrixColumnIndex < columnIndex + colspan; ++matrixColumnIndex ) {
                                                for ( matrixRowIndex = rowIndex; matrixRowIndex < rowIndex + rowspan; ++matrixRowIndex ) {
-                                                       if ( !exploded[matrixRowIndex] ) {
-                                                               exploded[matrixRowIndex] = [];
+                                                       if ( !exploded[ matrixRowIndex ] ) {
+                                                               exploded[ matrixRowIndex ] = [];
                                                        }
-                                                       exploded[matrixRowIndex][matrixColumnIndex] = cell;
+                                                       exploded[ matrixRowIndex ][ matrixColumnIndex ] = cell;
                                                }
                                        }
                                } );
                                }
                        } );
                        // We cannot use $.unique() here because it sorts into dom order, which is undesirable
-                       $tableHeaders = $( uniqueElements( exploded[longestTR] ) ).filter( 'th' );
+                       $tableHeaders = $( uniqueElements( exploded[ longestTR ] ) ).filter( 'th' );
                }
 
                // as each header can span over multiple columns (using colspan=N),
                // we have to bidirectionally map headers to their columns and columns to their headers
-               $tableHeaders.each( function ( headerIndex ) {
+               config.columnToHeader = [];
+               config.headerToColumns = [];
+               config.headerList = [];
+               headerIndex = 0;
+               $tableHeaders.each( function () {
                        $cell = $( this );
                        columns = [];
 
-                       for ( i = 0; i < this.colSpan; i++ ) {
-                               config.columnToHeader[ colspanOffset + i ] = headerIndex;
-                               columns.push( colspanOffset + i );
-                       }
-
-                       config.headerToColumns[ headerIndex ] = columns;
-                       colspanOffset += this.colSpan;
-
-                       $cell.data( {
-                               headerIndex: headerIndex,
-                               order: 0,
-                               count: 0
-                       } );
-
-                       if ( $cell.hasClass( config.unsortableClass ) ) {
-                               $cell.data( 'sortDisabled', true );
-                       }
-
-                       if ( !$cell.data( 'sortDisabled' ) ) {
+                       if ( !$cell.hasClass( config.unsortableClass ) ) {
                                $cell
                                        .addClass( config.cssHeader )
                                        .prop( 'tabIndex', 0 )
                                        .attr( {
                                                role: 'columnheader button',
-                                               title: msg[1]
+                                               title: msg[ 1 ]
                                        } );
+
+                               for ( k = 0; k < this.colSpan; k++ ) {
+                                       config.columnToHeader[ colspanOffset + k ] = headerIndex;
+                                       columns.push( colspanOffset + k );
+                               }
+
+                               config.headerToColumns[ headerIndex ] = columns;
+
+                               $cell.data( {
+                                       headerIndex: headerIndex,
+                                       order: 0,
+                                       count: 0
+                               } );
+
+                               // add only sortable cells to headerList
+                               config.headerList[ headerIndex ] = this;
+                               headerIndex++;
                        }
 
-                       // add cell to headerList
-                       config.headerList[headerIndex] = this;
+                       colspanOffset += this.colSpan;
                } );
 
-               return $tableHeaders;
+               // number of columns with extended colspan, inclusive unsortable
+               // parsers[j], cache[][j], columnToHeader[j], columnToCell[j] have so many elements
+               config.columns = colspanOffset;
 
+               return $tableHeaders.not( '.' + config.unsortableClass );
+       }
+
+       function isValueInArray( v, a ) {
+               var i,
+                               len = a.length;
+               for ( i = 0; i < len; i++ ) {
+                       if ( a[ i ][ 0 ] === v ) {
+                               return true;
+                       }
+               }
+               return false;
        }
 
        /**
                $.each( headerToColumns, function ( headerIndex, columns ) {
 
                        $.each( columns, function ( i, columnIndex ) {
-                               var header = $headers[headerIndex],
+                               var header = $headers[ headerIndex ],
                                        $header = $( header );
 
                                if ( !isValueInArray( columnIndex, sortList ) ) {
                                } else {
                                        // Column shall be sorted: Apply designated count and order.
                                        $.each( sortList, function ( j, sortColumn ) {
-                                               if ( sortColumn[0] === i ) {
+                                               if ( sortColumn[ 0 ] === i ) {
                                                        $header.data( {
-                                                               order: sortColumn[1],
-                                                               count: sortColumn[1] + 1
+                                                               order: sortColumn[ 1 ],
+                                                               count: sortColumn[ 1 ] + 1
                                                        } );
                                                        return false;
                                                }
                } );
        }
 
-       function isValueInArray( v, a ) {
-               var i,
-                       len = a.length;
-               for ( i = 0; i < len; i++ ) {
-                       if ( a[i][0] === v ) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       function uniqueElements( array ) {
-               var uniques = [];
-               $.each( array, function ( index, elem ) {
-                       if ( elem !== undefined && $.inArray( elem, uniques ) === -1 ) {
-                               uniques.push( elem );
-                       }
-               } );
-               return uniques;
-       }
-
        function setHeadersCss( table, $headers, list, css, msg, columnToHeader ) {
                // Remove all header information and reset titles to default message
-               $headers.removeClass( css[0] ).removeClass( css[1] ).attr( 'title', msg[1] );
+               $headers.removeClass( css[ 0 ] ).removeClass( css[ 1 ] ).attr( 'title', msg[ 1 ] );
 
                for ( var i = 0; i < list.length; i++ ) {
-                       $headers.eq( columnToHeader[ list[i][0] ] )
-                               .addClass( css[ list[i][1] ] )
-                               .attr( 'title', msg[ list[i][1] ] );
+                       $headers.eq( columnToHeader[ list[ i ][ 0 ] ] )
+                               .addClass( css[ list[ i ][ 1 ] ] )
+                               .attr( 'title', msg[ list[ i ][ 1 ] ] );
                }
        }
 
                        sortFn = [],
                        len = sortList.length;
                for ( i = 0; i < len; i++ ) {
-                       sortFn[i] = ( sortList[i][1] ) ? sortTextDesc : sortText;
+                       sortFn[ i ] = ( sortList[ i ][ 1 ] ) ? sortTextDesc : sortText;
                }
                cache.normalized.sort( function ( array1, array2 ) {
                        var i, col, ret;
                        for ( i = 0; i < len; i++ ) {
-                               col = sortList[i][0];
-                               ret = sortFn[i].call( this, array1[col], array2[col] );
+                               col = sortList[ i ][ 0 ];
+                               ret = sortFn[ i ].call( this, array1[ col ], array2[ col ] );
                                if ( ret !== 0 ) {
                                        return ret;
                                }
                        }
                        // Fall back to index number column to ensure stable sort
-                       return sortText.call( this, array1[array1.length - 1], array2[array2.length - 1] );
+                       return sortText.call( this, array1[ array1.length - 1 ], array2[ array2.length - 1 ] );
                } );
                return cache;
        }
                        separatorTransformTable = mw.config.get( 'wgSeparatorTransformTable' ),
                        digitTransformTable = mw.config.get( 'wgDigitTransformTable' );
 
-               if ( separatorTransformTable === null || ( separatorTransformTable[0] === '' && digitTransformTable[2] === '' ) ) {
+               if ( separatorTransformTable === null || ( separatorTransformTable[ 0 ] === '' && digitTransformTable[ 2 ] === '' ) ) {
                        ts.transformTable = false;
                } else {
                        ts.transformTable = {};
 
                        // Unpack the transform table
-                       ascii = separatorTransformTable[0].split( '\t' ).concat( digitTransformTable[0].split( '\t' ) );
-                       localised = separatorTransformTable[1].split( '\t' ).concat( digitTransformTable[1].split( '\t' ) );
+                       ascii = separatorTransformTable[ 0 ].split( '\t' ).concat( digitTransformTable[ 0 ].split( '\t' ) );
+                       localised = separatorTransformTable[ 1 ].split( '\t' ).concat( digitTransformTable[ 1 ].split( '\t' ) );
 
                        // Construct regex for number identification
                        for ( i = 0; i < ascii.length; i++ ) {
-                               ts.transformTable[localised[i]] = ascii[i];
-                               digits.push( mw.RegExp.escape( localised[i] ) );
+                               ts.transformTable[ localised[ i ] ] = ascii[ i ];
+                               digits.push( mw.RegExp.escape( localised[ i ] ) );
                        }
                }
                digitClass = '[' + digits.join( '', digits ) + ']';
                ts.monthNames = {};
 
                for ( i = 0; i < 12; i++ ) {
-                       name = mw.language.months.names[i].toLowerCase();
-                       ts.monthNames[name] = i + 1;
+                       name = mw.language.months.names[ i ].toLowerCase();
+                       ts.monthNames[ name ] = i + 1;
                        regex.push( mw.RegExp.escape( name ) );
-                       name = mw.language.months.genitive[i].toLowerCase();
-                       ts.monthNames[name] = i + 1;
+                       name = mw.language.months.genitive[ i ].toLowerCase();
+                       ts.monthNames[ name ] = i + 1;
                        regex.push( mw.RegExp.escape( name ) );
-                       name = mw.language.months.abbrev[i].toLowerCase().replace( '.', '' );
-                       ts.monthNames[name] = i + 1;
+                       name = mw.language.months.abbrev[ i ].toLowerCase().replace( '.', '' );
+                       ts.monthNames[ name ] = i + 1;
                        regex.push( mw.RegExp.escape( name ) );
                }
 
 
                // Build RegEx
                // Any date formated with . , ' - or /
-               ts.dateRegex[0] = new RegExp( /^\s*(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{2,4})\s*?/i );
+               ts.dateRegex[ 0 ] = new RegExp( /^\s*(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{2,4})\s*?/i );
 
                // Written Month name, dmy
-               ts.dateRegex[1] = new RegExp( '^\\s*(\\d{1,2})[\\,\\.\\-\\/\'\\s]+(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]+(\\d{2,4})\\s*$', 'i' );
+               ts.dateRegex[ 1 ] = new RegExp( '^\\s*(\\d{1,2})[\\,\\.\\-\\/\'\\s]+(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]+(\\d{2,4})\\s*$', 'i' );
 
                // Written Month name, mdy
-               ts.dateRegex[2] = new RegExp( '^\\s*(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]+(\\d{1,2})[\\,\\.\\-\\/\'\\s]+(\\d{2,4})\\s*$', 'i' );
+               ts.dateRegex[ 2 ] = new RegExp( '^\\s*(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]+(\\d{1,2})[\\,\\.\\-\\/\'\\s]+(\\d{2,4})\\s*$', 'i' );
 
        }
 
         * Replace all rowspanned cells in the body with clones in each row, so sorting
         * need not worry about them.
         *
-        * @param $table jQuery object for a <table>
+        * @param {jQuery} $table jQuery object for a <table>
         */
        function explodeRowspans( $table ) {
                var spanningRealCellIndex, rowSpan, colSpan,
                                col = 0,
                                l = this.cells.length;
                        for ( i = 0; i < l; i++ ) {
-                               $( this.cells[i] ).data( 'tablesorter', {
+                               $( this.cells[ i ] ).data( 'tablesorter', {
                                        realCellIndex: col,
                                        realRowIndex: this.rowIndex
                                } );
-                               col += this.cells[i].colSpan;
+                               col += this.cells[ i ].colSpan;
                        }
                } );
 
                }
 
                while ( rowspanCells.length ) {
-                       if ( $.data( rowspanCells[0], 'tablesorter' ).needResort ) {
+                       if ( $.data( rowspanCells[ 0 ], 'tablesorter' ).needResort ) {
                                resortCells();
                        }
 
                        cell.rowSpan = 1;
                        $nextRows = $( cell ).parent().nextAll();
                        for ( i = 0; i < rowSpan - 1; i++ ) {
-                               $tds = $( $nextRows[i].cells ).filter( filterfunc );
+                               $tds = $( $nextRows[ i ].cells ).filter( filterfunc );
                                $clone = $( cell ).clone();
                                $clone.data( 'tablesorter', {
                                        realCellIndex: spanningRealCellIndex,
                }
        }
 
+       /**
+        * Build index to handle colspanned cells in the body.
+        * Set the cell index for each column in an array,
+        * so that colspaned cells set multiple in this array.
+        * columnToCell[collumnIndex] point at the real cell in this row.
+        *
+        * @param {jQuery} $table object for a <table>
+        */
+       function manageColspans( $table ) {
+               var i, j, k, $row,
+                       $rows = $table.find( '> tbody > tr' ),
+                       totalRows = $rows.length || 0,
+                       config = $table.data( 'tablesorter' ).config,
+                       columns = config.columns,
+                       columnToCell, cellsInRow, index;
+
+               for ( i = 0; i < totalRows; i++ ) {
+
+                       $row = $rows.eq( i );
+                       // if this is a child row, continue to the next row (as buildCache())
+                       if ( $row.hasClass( config.cssChildRow ) ) {
+                               // go to the next for loop
+                               continue;
+                       }
+
+                       columnToCell = [];
+                       cellsInRow = ( $row[ 0 ].cells.length ) || 0;  // all cells in this row
+                       index = 0; // real cell index in this row
+                       for ( j = 0; j < columns; index++ ) {
+                               if ( index === cellsInRow ) {
+                                       // Row with cells less than columns: add empty cell
+                                       $row.append( '<td>' );
+                                       cellsInRow++;
+                               }
+                               for ( k = 0; k < $row[ 0 ].cells[ index ].colSpan; k++ ) {
+                                       columnToCell[ j++ ] = index;
+                               }
+                       }
+                       // Store it in $row
+                       $row.data( 'columnToCell', columnToCell );
+               }
+       }
+
        function buildCollationTable() {
                ts.collationTable = mw.config.get( 'tableSorterCollation' );
                ts.collationRegex = null;
                $.each( sortObjects, function ( i, sortObject ) {
                        $.each( sortObject, function ( columnIndex, order ) {
                                var orderIndex = ( order === 'desc' ) ? 1 : 0;
-                               sortList.push( [parseInt( columnIndex, 10 ), orderIndex] );
+                               sortList.push( [ parseInt( columnIndex, 10 ), orderIndex ] );
                        } );
                } );
                return sortList;
                                cssChildRow: 'expand-child',
                                sortMultiSortKey: 'shiftKey',
                                unsortableClass: 'unsortable',
-                               parsers: {},
+                               parsers: [],
                                cancelSelection: true,
                                sortList: [],
                                headerList: [],
                                headerToColumns: [],
-                               columnToHeader: []
+                               columnToHeader: [],
+                               columns: 0
                        },
 
                        dateRegex: [],
                        monthNames: {},
 
                        /**
-                        * @param $tables {jQuery}
-                        * @param settings {Object} (optional)
+                        * @param {jQuery} $tables
+                        * @param {Object} [settings]
                         */
                        construct: function ( $tables, settings ) {
                                return $tables.each( function ( i, table ) {
                                                }
 
                                                explodeRowspans( $table );
+                                               manageColspans( $table );
 
                                                // Try to auto detect column type, and store in tables config
                                                config.parsers = buildParserCache( table, $headers );
 
                                        // Apply event handling to headers
                                        // this is too big, perhaps break it out?
-                                       $headers.not( '.' + config.unsortableClass ).on( 'keypress click', function ( e ) {
+                                       $headers.on( 'keypress click', function ( e ) {
                                                var cell, $cell, columns, newSortList, i,
                                                        totalRows,
                                                        j, s, o;
                                                // cells get event .change() and bubbles up to the <table> here
                                                cache = buildCache( table );
 
-                                               totalRows = ( $table[0].tBodies[0] && $table[0].tBodies[0].rows.length ) || 0;
-                                               if ( !table.sortDisabled && totalRows > 0 ) {
+                                               totalRows = ( $table[ 0 ].tBodies[ 0 ] && $table[ 0 ].tBodies[ 0 ].rows.length ) || 0;
+                                               if ( totalRows > 0 ) {
                                                        cell = this;
                                                        $cell = $( cell );
 
                                                        columns = config.headerToColumns[ $cell.data( 'headerIndex' ) ];
                                                        newSortList = $.map( columns, function ( c ) {
                                                                // jQuery "helpfully" flattens the arrays...
-                                                               return [[c, $cell.data( 'order' )]];
+                                                               return [ [ c, $cell.data( 'order' ) ] ];
                                                        } );
                                                        // Index of first column belonging to this header
-                                                       i = columns[0];
+                                                       i = columns[ 0 ];
 
-                                                       if ( !e[config.sortMultiSortKey] ) {
+                                                       if ( !e[ config.sortMultiSortKey ] ) {
                                                                // User only wants to sort on one column set
                                                                // Flush the sort list and add new columns
                                                                config.sortList = newSortList;
                                                                        // The user has clicked on an already sorted column.
                                                                        // Reverse the sorting direction for all tables.
                                                                        for ( j = 0; j < config.sortList.length; j++ ) {
-                                                                               s = config.sortList[j];
-                                                                               o = config.headerList[s[0]];
-                                                                               if ( isValueInArray( s[0], newSortList ) ) {
-                                                                                       $( o ).data( 'count', s[1] + 1 );
-                                                                                       s[1] = $( o ).data( 'count' ) % 2;
+                                                                               s = config.sortList[ j ];
+                                                                               o = config.headerList[ config.columnToHeader[ s[ 0 ] ] ];
+                                                                               if ( isValueInArray( s[ 0 ], newSortList ) ) {
+                                                                                       $( o ).data( 'count', s[ 1 ] + 1 );
+                                                                                       s[ 1 ] = $( o ).data( 'count' ) % 2;
                                                                                }
                                                                        }
                                                                } else {
                                                        setHeadersOrder( $headers, config.sortList, config.headerToColumns );
 
                                                        // Set CSS for headers
-                                                       setHeadersCss( $table[0], $headers, config.sortList, sortCSS, sortMsg, config.columnToHeader );
+                                                       setHeadersCss( $table[ 0 ], $headers, config.sortList, sortCSS, sortMsg, config.columnToHeader );
                                                        appendToTable(
-                                                               $table[0], multisort( $table[0], config.sortList, cache )
+                                                               $table[ 0 ], multisort( $table[ 0 ], config.sortList, cache )
                                                        );
 
                                                        // Stop normal event by returning false
                                         * Passing an empty array will reset sorting (basically just reset the headers
                                         * making the table appear unsorted).
                                         *
-                                        * @param sortList {Array} (optional) List of sort objects.
+                                        * @param {Array} [sortList] List of sort objects.
                                         */
                                        $table.data( 'tablesorter' ).sort = function ( sortList ) {
 
 
                                        // sort initially
                                        if ( config.sortList.length > 0 ) {
-                                               setupForFirstSort();
                                                config.sortList = convertSortList( config.sortList );
                                                $table.data( 'tablesorter' ).sort();
                                        }
                                        len = parsers.length,
                                        a = true;
                                for ( i = 0; i < len; i++ ) {
-                                       if ( parsers[i].id.toLowerCase() === parser.id.toLowerCase() ) {
+                                       if ( parsers[ i ].id.toLowerCase() === parser.id.toLowerCase() ) {
                                                a = false;
                                        }
                                }
                                        for ( p = 0; p < s.length; p++ ) {
                                                c = s.charAt( p );
                                                if ( c in ts.transformTable ) {
-                                                       out += ts.transformTable[c];
+                                                       out += ts.transformTable[ c ];
                                                } else {
                                                        out += c;
                                                }
                        },
 
                        clearTableBody: function ( table ) {
-                               $( table.tBodies[0] ).empty();
+                               $( table.tBodies[ 0 ] ).empty();
                        },
 
                        getParser: function ( id ) {
                                buildCollationTable();
 
                                return getParserById( id );
+                       },
+
+                       getParsers: function () {  // for table diagnosis
+                               return parsers;
                        }
                };
 
                        if ( ts.collationRegex ) {
                                var tsc = ts.collationTable;
                                s = s.replace( ts.collationRegex, function ( match ) {
-                                       var r = tsc[match] ? tsc[match] : tsc[match.toUpperCase()];
+                                       var r = tsc[ match ] ? tsc[ match ] : tsc[ match.toUpperCase() ];
                                        return r.toLowerCase();
                                } );
                        }
        ts.addParser( {
                id: 'IPAddress',
                is: function ( s ) {
-                       return ts.rgx.IPAddress[0].test( s );
+                       return ts.rgx.IPAddress[ 0 ].test( s );
                },
                format: function ( s ) {
                        var i, item,
                                r = '',
                                len = a.length;
                        for ( i = 0; i < len; i++ ) {
-                               item = a[i];
+                               item = a[ i ];
                                if ( item.length === 1 ) {
                                        r += '00' + item;
                                } else if ( item.length === 2 ) {
        ts.addParser( {
                id: 'currency',
                is: function ( s ) {
-                       return ts.rgx.currency[0].test( s );
+                       return ts.rgx.currency[ 0 ].test( s );
                },
                format: function ( s ) {
-                       return $.tablesorter.formatDigit( s.replace( ts.rgx.currency[1], '' ) );
+                       return $.tablesorter.formatDigit( s.replace( ts.rgx.currency[ 1 ], '' ) );
                },
                type: 'numeric'
        } );
        ts.addParser( {
                id: 'url',
                is: function ( s ) {
-                       return ts.rgx.url[0].test( s );
+                       return ts.rgx.url[ 0 ].test( s );
                },
                format: function ( s ) {
-                       return $.trim( s.replace( ts.rgx.url[1], '' ) );
+                       return $.trim( s.replace( ts.rgx.url[ 1 ], '' ) );
                },
                type: 'text'
        } );
        ts.addParser( {
                id: 'isoDate',
                is: function ( s ) {
-                       return ts.rgx.isoDate[0].test( s );
+                       return ts.rgx.isoDate[ 0 ].test( s );
                },
                format: function ( s ) {
                        return $.tablesorter.formatFloat( ( s !== '' ) ? new Date( s.replace(
        ts.addParser( {
                id: 'usLongDate',
                is: function ( s ) {
-                       return ts.rgx.usLongDate[0].test( s );
+                       return ts.rgx.usLongDate[ 0 ].test( s );
                },
                format: function ( s ) {
                        return $.tablesorter.formatFloat( new Date( s ).getTime() );
        ts.addParser( {
                id: 'date',
                is: function ( s ) {
-                       return ( ts.dateRegex[0].test( s ) || ts.dateRegex[1].test( s ) || ts.dateRegex[2].test( s ) );
+                       return ( ts.dateRegex[ 0 ].test( s ) || ts.dateRegex[ 1 ].test( s ) || ts.dateRegex[ 2 ].test( s ) );
                },
                format: function ( s ) {
                        var match, y;
                        s = $.trim( s.toLowerCase() );
 
-                       if ( ( match = s.match( ts.dateRegex[0] ) ) !== null ) {
+                       if ( ( match = s.match( ts.dateRegex[ 0 ] ) ) !== null ) {
                                if ( mw.config.get( 'wgDefaultDateFormat' ) === 'mdy' || mw.config.get( 'wgPageContentLanguage' ) === 'en' ) {
-                                       s = [ match[3], match[1], match[2] ];
+                                       s = [ match[ 3 ], match[ 1 ], match[ 2 ] ];
                                } else if ( mw.config.get( 'wgDefaultDateFormat' ) === 'dmy' ) {
-                                       s = [ match[3], match[2], match[1] ];
+                                       s = [ match[ 3 ], match[ 2 ], match[ 1 ] ];
                                } else {
                                        // If we get here, we don't know which order the dd-dd-dddd
                                        // date is in. So return something not entirely invalid.
                                        return '99999999';
                                }
-                       } else if ( ( match = s.match( ts.dateRegex[1] ) ) !== null ) {
-                               s = [ match[3], String( ts.monthNames[match[2]] ), match[1] ];
-                       } else if ( ( match = s.match( ts.dateRegex[2] ) ) !== null ) {
-                               s = [ match[3], String( ts.monthNames[match[1]] ), match[2] ];
+                       } else if ( ( match = s.match( ts.dateRegex[ 1 ] ) ) !== null ) {
+                               s = [ match[ 3 ], String( ts.monthNames[ match[ 2 ] ] ), match[ 1 ] ];
+                       } else if ( ( match = s.match( ts.dateRegex[ 2 ] ) ) !== null ) {
+                               s = [ match[ 3 ], String( ts.monthNames[ match[ 1 ] ] ), match[ 2 ] ];
                        } else {
                                // Should never get here
                                return '99999999';
                        }
 
                        // Pad Month and Day
-                       if ( s[1].length === 1 ) {
-                               s[1] = '0' + s[1];
+                       if ( s[ 1 ].length === 1 ) {
+                               s[ 1 ] = '0' + s[ 1 ];
                        }
-                       if ( s[2].length === 1 ) {
-                               s[2] = '0' + s[2];
+                       if ( s[ 2 ].length === 1 ) {
+                               s[ 2 ] = '0' + s[ 2 ];
                        }
 
-                       if ( ( y = parseInt( s[0], 10 ) ) < 100 ) {
+                       if ( ( y = parseInt( s[ 0 ], 10 ) ) < 100 ) {
                                // Guestimate years without centuries
                                if ( y < 30 ) {
-                                       s[0] = 2000 + y;
+                                       s[ 0 ] = 2000 + y;
                                } else {
-                                       s[0] = 1900 + y;
+                                       s[ 0 ] = 1900 + y;
                                }
                        }
-                       while ( s[0].length < 4 ) {
-                               s[0] = '0' + s[0];
+                       while ( s[ 0 ].length < 4 ) {
+                               s[ 0 ] = '0' + s[ 0 ];
                        }
                        return parseInt( s.join( '' ), 10 );
                },
        ts.addParser( {
                id: 'time',
                is: function ( s ) {
-                       return ts.rgx.time[0].test( s );
+                       return ts.rgx.time[ 0 ].test( s );
                },
                format: function ( s ) {
                        return $.tablesorter.formatFloat( new Date( '2000/01/01 ' + s ).getTime() );
index 5111930..b901642 100644 (file)
                                                        insertText = '',
                                                        selTextArr = selText.split( '\n' );
                                                for ( i = 0; i < selTextArr.length; i++ ) {
-                                                       insertText += pre + selTextArr[i] + post;
+                                                       insertText += pre + selTextArr[ i ] + post;
                                                        if ( i !== selTextArr.length - 1 ) {
                                                                insertText += '\n';
                                                        }
                                                                context.fn.restoreCursorAndScrollTop();
                                                        }
                                                        if ( options.selectionStart !== undefined ) {
-                                                               $( this ).textSelection( 'setSelection', { 'start': options.selectionStart, 'end': options.selectionEnd } );
+                                                               $( this ).textSelection( 'setSelection', { start: options.selectionStart, end: options.selectionEnd } );
                                                        }
 
                                                        selText = $( this ).textSelection( 'getSelection' );
 
                                                        $( this ).focus();
                                                        if ( options.selectionStart !== undefined ) {
-                                                               $( this ).textSelection( 'setSelection', { 'start': options.selectionStart, 'end': options.selectionEnd } );
+                                                               $( this ).textSelection( 'setSelection', { start: options.selectionStart, end: options.selectionEnd } );
                                                        }
 
                                                        selText = $( this ).textSelection( 'getSelection' );
                         *
                         * Scroll a textarea to the current cursor position. You can set the cursor
                         * position with setSelection()
-                        * @param options boolean Whether to force a scroll even if the caret position
+                        *
+                        * @param {boolean} options Whether to force a scroll even if the caret position
                         *  is already visible. Defaults to false
                         *
                         * @fixme document the options parameters (function body suggests options.force is a boolean, not options itself)
                        context.fn.restoreSelection();
                        needSave = true;
                }
-               retval = ( alternateFn && alternateFn[command] || fn[command] ).call( this, options );
+               retval = ( alternateFn && alternateFn[ command ] || fn[ command ] ).call( this, options );
                if ( hasWikiEditor && needSave ) {
                        context.fn.saveSelection();
                }
diff --git a/resources/src/mediawiki.action/images/checker.png b/resources/src/mediawiki.action/images/checker.png
new file mode 100644 (file)
index 0000000..3e9e3d0
Binary files /dev/null and b/resources/src/mediawiki.action/images/checker.png differ
index e181472..011f9c5 100644 (file)
@@ -53,9 +53,9 @@
                for ( i = 0; i < collapsibleLists.length; i++ ) {
                        // Pass to a function for iteration-local variables
                        handleOne(
-                               $editForm.find( collapsibleLists[i].listSel ),
-                               $editForm.find( collapsibleLists[i].togglerSel ),
-                               collapsibleLists[i].cookieName
+                               $editForm.find( collapsibleLists[ i ].listSel ),
+                               $editForm.find( collapsibleLists[ i ].togglerSel ),
+                               collapsibleLists[ i ].cookieName
                        );
                }
        } );
index 5f1058f..ab4535b 100644 (file)
@@ -17,6 +17,7 @@
                $editform = $( '#editform' );
                $textbox = $editform.find( '#wpTextbox1' );
                $summary = $editform.find( '#wpSummary' );
+               $spinner = $( '.mw-spinner-preview' );
                $errorBox = $( '.errorbox' );
                section = $editform.find( '[name="wpSection"]' ).val();
 
@@ -36,7 +37,7 @@
                $wikiPreview.show();
 
                // Jump to where the preview will appear
-               $wikiPreview[0].scrollIntoView();
+               $wikiPreview[ 0 ].scrollIntoView();
 
                copySelectors = [
                        // Main
                // Not shown during normal preview, to be removed if present
                $( '.mw-newarticletext' ).remove();
 
-               $spinner = $.createSpinner( {
-                       size: 'large',
-                       type: 'block'
-               } );
-               $wikiPreview.before( $spinner );
-               $spinner.css( {
-                       marginTop: $spinner.height()
-               } );
+               if ( $spinner.length === 0 ) {
+                       $spinner = $.createSpinner( {
+                               size: 'large',
+                               type: 'block'
+                       } )
+                               .addClass( 'mw-spinner-preview' )
+                               .css( 'margin-top', '1em' );
+                       $wikiPreview.before( $spinner );
+               } else {
+                       $spinner.show();
+               }
 
                // Can't use fadeTo because it calls show(), and we might want to keep some elements hidden
                // (e.g. empty #catlinks)
                                        indexpageids: '',
                                        prop: 'revisions',
                                        titles: mw.config.get( 'wgPageName' ),
-                                       rvdifftotext: response.parse.text['*'],
+                                       rvdifftotext: response.parse.text[ '*' ],
                                        rvprop: ''
                                };
                                if ( section !== '' ) {
                                }
                                return api.post( postData ).done( function ( result2 ) {
                                        try {
-                                               var diffHtml = result2.query.pages[result2.query.pageids[0]]
-                                                       .revisions[0].diff['*'];
+                                               var diffHtml = result2.query.pages[ result2.query.pageids[ 0 ] ]
+                                                       .revisions[ 0 ].diff[ '*' ];
                                                $wikiDiff.find( 'table.diff tbody' ).html( diffHtml );
                                        } catch ( e ) {
                                                // "result.blah is undefined" error, ignore
                                        );
                                }
                                if ( response.parse.categorieshtml ) {
-                                       $( '#catlinks' ).replaceWith( response.parse.categorieshtml['*'] );
+                                       $( '#catlinks' ).replaceWith( response.parse.categorieshtml[ '*' ] );
                                }
                                if ( response.parse.templates ) {
                                        newList = [];
                                                li = $( '<li>' )
                                                        .append( $( '<a>' )
                                                                .attr( {
-                                                                       'href': mw.util.getUrl( template['*'] ),
+                                                                       href: mw.util.getUrl( template[ '*' ] ),
                                                                        'class': ( template.exists !== undefined ? '' : 'new' )
                                                                } )
-                                                               .text( template['*'] )
+                                                               .text( template[ '*' ] )
                                                        );
                                                newList.push( li );
                                        } );
                                        $editform.find( '.templatesUsed .mw-editfooter-list' ).detach().empty().append( newList ).appendTo( '.templatesUsed' );
                                }
                                if ( response.parse.limitreporthtml ) {
-                                       $( '.limitreport' ).html( response.parse.limitreporthtml['*'] );
+                                       $( '.limitreport' ).html( response.parse.limitreporthtml[ '*' ] );
                                }
                                if ( response.parse.langlinks && mw.config.get( 'skin' ) === 'vector' ) {
                                        newList = [];
                                                        .addClass( 'interlanguage-link interwiki-' + langlink.lang )
                                                        .append( $( '<a>' )
                                                                .attr( {
-                                                                       'href': langlink.url,
-                                                                       'title': langlink['*'] + ' - ' + langlink.langname,
-                                                                       'lang': langlink.lang,
-                                                                       'hreflang': langlink.lang
+                                                                       href: langlink.url,
+                                                                       title: langlink[ '*' ] + ' - ' + langlink.langname,
+                                                                       lang: langlink.lang,
+                                                                       hreflang: langlink.lang
                                                                } )
                                                                .text( langlink.autonym )
                                                        );
                                        $list.detach().empty().append( newList ).prependTo( $parent );
                                }
 
-                               if ( response.parse.text['*'] ) {
+                               if ( response.parse.text[ '*' ] ) {
                                        $content = $wikiPreview.children( '.mw-content-ltr,.mw-content-rtl' );
                                        $content
                                                .detach()
-                                               .html( response.parse.text['*'] );
+                                               .html( response.parse.text[ '*' ] );
 
                                        mw.hook( 'wikipage.content' ).fire( $content );
 
                        var isSubject = ( section === 'new' ),
                                summaryMsg = isSubject ? 'subject-preview' : 'summary-preview',
                                $summaryPreview = $editform.find( '.mw-summary-preview' ).empty();
-                       if ( response.parse.parsedsummary && response.parse.parsedsummary['*'] !== '' ) {
+                       if ( response.parse.parsedsummary && response.parse.parsedsummary[ '*' ] !== '' ) {
                                $summaryPreview.append(
                                        mw.message( summaryMsg ).parse(),
                                        ' ',
                                        $( '<span>' ).addClass( 'comment' ).html(
                                                // There is no equivalent to rawParams
                                                mw.message( 'parentheses' ).escaped()
-                                                       .replace( '$1', response.parse.parsedsummary['*'] )
+                                                       .replace( '$1', response.parse.parsedsummary[ '*' ] )
                                        )
                                );
                        }
                        mw.hook( 'wikipage.editform' ).fire( $editform );
                } );
                request.always( function () {
-                       $spinner.remove();
+                       $spinner.hide();
                        $copyElements.animate( {
                                opacity: 1
                        }, 'fast' );
                        $( '.portal:last' ).after(
                                $( '<div>' ).attr( {
                                        'class': 'portal',
-                                       'id': 'p-lang',
-                                       'role': 'navigation',
-                                       'title': mw.msg( 'tooltip-p-lang' ),
+                                       id: 'p-lang',
+                                       role: 'navigation',
+                                       title: mw.msg( 'tooltip-p-lang' ),
                                        'aria-labelledby': 'p-lang-label'
                                } )
                                .append( $( '<h3>' ).attr( 'id', 'p-lang-label' ).text( mw.msg( 'otherlanguages' ) ) )
index 2ebfe92..077d5e3 100644 (file)
@@ -9,7 +9,7 @@ jQuery( function ( $ ) {
        /**
         * @ignore
         * @context {Element} input
-        * @param e {jQuery.Event}
+        * @param {jQuery.Event} e
         */
        function updateDiffRadios() {
                var nextState = 'before',
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.filepage.css b/resources/src/mediawiki.action/mediawiki.action.view.filepage.css
new file mode 100644 (file)
index 0000000..bfc201a
--- /dev/null
@@ -0,0 +1,71 @@
+/*!
+ * File description page
+ */
+
+div.mw-filepage-resolutioninfo {
+       font-size: smaller;
+}
+
+/*
+ * File histories
+ */
+h2#filehistory {
+       clear: both;
+}
+
+table.filehistory th,
+table.filehistory td {
+       vertical-align: top;
+}
+
+table.filehistory th {
+       text-align: left;
+}
+
+table.filehistory td.mw-imagepage-filesize,
+table.filehistory th.mw-imagepage-filesize {
+       white-space: nowrap;
+}
+
+table.filehistory td.filehistory-selected {
+       font-weight: bold;
+}
+
+/*
+ * Add a checkered background image on hover for file
+ * description pages. (bug 26470)
+ */
+.filehistory a img,
+#file img:hover {
+       /* @embed */
+       background: white url(images/checker.png) repeat;
+}
+
+/*
+ * filetoc
+ */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+/*
+ * Shared images hint
+ */
+#shared-image-dup,
+#shared-image-conflict {
+       font-style: italic;
+}
+
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css b/resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css
new file mode 100644 (file)
index 0000000..15b20f1
--- /dev/null
@@ -0,0 +1,8 @@
+/*!
+ * File description page - print style
+ */
+
+span.mw-filepage-other-resolutions,
+#filetoc {
+       display: none;
+}
index 9f786ec..b07965e 100644 (file)
@@ -14,3 +14,9 @@ table.collapsed tr.collapsable {
        -ms-user-select: none;
        user-select: none;
 }
+
+@media print {
+       tr.mw-metadata-show-hide-extended {
+               display: none;
+       }
+}
index c008dfd..168a1c1 100644 (file)
                cookieVal = mw.cookie.get( cookieKey ),
                $div, id;
 
+       function removeConfirmation() {
+               $div.remove();
+               mw.hook( 'postEdit.afterRemoval' ).fire();
+       }
+
+       function fadeOutConfirmation() {
+               clearTimeout( id );
+               $div.find( '.postedit' ).addClass( 'postedit postedit-faded' );
+               setTimeout( removeConfirmation, 500 );
+
+               return false;
+       }
+
        function showConfirmation( data ) {
                data = data || {};
                if ( data.message === undefined ) {
                id = setTimeout( fadeOutConfirmation, 3000 );
        }
 
-       function fadeOutConfirmation() {
-               clearTimeout( id );
-               $div.find( '.postedit' ).addClass( 'postedit postedit-faded' );
-               setTimeout( removeConfirmation, 500 );
-
-               return false;
-       }
-
-       function removeConfirmation() {
-               $div.remove();
-               mw.hook( 'postEdit.afterRemoval' ).fire();
-       }
-
        mw.hook( 'postEdit' ).add( showConfirmation );
 
        if ( config.wgAction === 'view' && cookieVal ) {
@@ -68,7 +68,7 @@
                        // postedit-confirmation-saved
                        // postedit-confirmation-created
                        // postedit-confirmation-restored
-                       'message': mw.msg(
+                       message: mw.msg(
                                'postedit-confirmation-' + cookieVal,
                                mw.user
                        )
index e6161e4..e43285f 100644 (file)
@@ -31,6 +31,7 @@
 
                /**
                 * Post a new section to the page.
+                *
                 * @see #postWithEditToken
                 * @param {mw.Title|String} title Target page
                 * @param {string} header
index cae65c5..43b20b8 100644 (file)
                        // Handle common MediaWiki API idioms for passing parameters
                        for ( key in parameters ) {
                                // Multiple values are pipe-separated
-                               if ( $.isArray( parameters[key] ) ) {
-                                       parameters[key] = parameters[key].join( '|' );
+                               if ( $.isArray( parameters[ key ] ) ) {
+                                       parameters[ key ] = parameters[ key ].join( '|' );
                                }
                                // Boolean values are only false when not given at all
-                               if ( parameters[key] === false || parameters[key] === undefined ) {
-                                       delete parameters[key];
+                               if ( parameters[ key ] === false || parameters[ key ] === undefined ) {
+                                       delete parameters[ key ];
                                }
                        }
                },
                                formData = new FormData();
 
                                for ( key in parameters ) {
-                                       formData.append( key, parameters[key] );
+                                       formData.append( key, parameters[ key ] );
                                }
                                // If we extracted a token parameter, add it back in.
                                if ( token ) {
 
                                d = apiPromise
                                        .then( function ( data ) {
-                                               if ( data.tokens && data.tokens[type + 'token'] ) {
-                                                       return data.tokens[type + 'token'];
+                                               if ( data.tokens && data.tokens[ type + 'token' ] ) {
+                                                       return data.tokens[ type + 'token' ];
                                                }
 
                                                // If token type is not available for this user,
index 2525792..2b709aa 100644 (file)
@@ -1,5 +1,6 @@
 /**
  * Make the two-step login easier.
+ *
  * @author Niklas Laxström
  * @class mw.Api.plugin.login
  * @since 1.22
index b839fbd..399e6f4 100644 (file)
@@ -14,7 +14,7 @@
                 */
                saveOption: function ( name, value ) {
                        var param = {};
-                       param[name] = value;
+                       param[ name ] = value;
                        return this.saveOptions( param );
                },
 
@@ -38,7 +38,7 @@
                                deferreds = [];
 
                        for ( name in options ) {
-                               value = options[name] === null ? null : String( options[name] );
+                               value = options[ name ] === null ? null : String( options[ name ] );
 
                                // Can we bundle this option, or does it need a separate request?
                                bundleable =
index 2dcf807..bc3d44f 100644 (file)
@@ -21,7 +21,7 @@
 
                        return apiPromise
                                .then( function ( data ) {
-                                       return data.parse.text['*'];
+                                       return data.parse.text[ '*' ];
                                } )
                                .promise( { abort: apiPromise.abort } );
                }
index d05ba57..4abff28 100644 (file)
@@ -1,5 +1,6 @@
 /**
  * Provides an interface for uploading files to MediaWiki.
+ *
  * @class mw.Api.plugin.upload
  * @singleton
  */
@@ -18,6 +19,7 @@
        /**
         * @private
         * Get nonce for iframe IDs on the page.
+        *
         * @return {number}
         */
        function getNonce() {
@@ -27,6 +29,7 @@
        /**
         * @private
         * Get new iframe object for an upload.
+        *
         * @return {HTMLIframeElement}
         */
        function getNewIframe( id ) {
        /**
         * @private
         * Shortcut for getting hidden inputs
+        *
         * @return {jQuery}
         */
        function getHiddenInput( name, val ) {
-               return $( '<input type="hidden" />')
+               return $( '<input type="hidden" />' )
                        .attr( 'name', name )
                        .val( val );
        }
@@ -58,7 +62,7 @@
         */
        function processIframeResult( iframe ) {
                var json,
-                       doc = iframe.contentDocument || frames[iframe.id].document;
+                       doc = iframe.contentDocument || frames[ iframe.id ].document;
 
                if ( doc.XMLDocument ) {
                        // The response is a document property in IE
                        isFileInput = file && file.nodeType === Node.ELEMENT_NODE;
 
                        if ( formDataAvailable() && isFileInput && file.files ) {
-                               file = file.files[0];
+                               file = file.files[ 0 ];
                        }
 
                        if ( !file ) {
                                $iframe = $( iframe );
 
                        for ( key in data ) {
-                               if ( !fieldsAllowed[key] ) {
-                                       delete data[key];
+                               if ( !fieldsAllowed[ key ] ) {
+                                       delete data[ key ];
                                }
                        }
 
                                deferred = $.Deferred();
 
                        for ( key in data ) {
-                               if ( !fieldsAllowed[key] ) {
-                                       delete data[key];
+                               if ( !fieldsAllowed[ key ] ) {
+                                       delete data[ key ];
                                }
                        }
 
                 * This function will return a promise, which when resolved, will pass back a function
                 * to finish the stash upload. You can call that function with an argument containing
                 * more, or conflicting, data to pass to the server. For example:
+                *
                 *     // upload a file to the stash with a placeholder filename
                 *     api.uploadToStash( file, { filename: 'testing.png' } ).done( function ( finish ) {
                 *         // finish is now the function we can use to finalize the upload
                 *             // the upload is complete, data holds the API response
                 *         } );
                 *     } );
+                *
                 * @param {File|HTMLInputElement} file
                 * @param {Object} [data]
                 * @return {jQuery.Promise}
index 40ba136..a2ff129 100644 (file)
@@ -37,7 +37,7 @@
                return apiPromise
                        .then( function ( data ) {
                                // If a single page was given (not an array) respond with a single item as well.
-                               return $.isArray( pages ) ? data.watch : data.watch[0];
+                               return $.isArray( pages ) ? data.watch : data.watch[ 0 ];
                        } )
                        .promise( { abort: apiPromise.abort } );
        }
index b56e4b2..cb9e19e 100644 (file)
@@ -4,8 +4,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'bs', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index 69c36cc..dc4447a 100644 (file)
@@ -4,8 +4,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'dsb', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index d9c2b06..2bbfc6b 100644 (file)
@@ -7,8 +7,8 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms, aou, origWord;
 
        grammarForms = mediaWiki.language.getData( 'fi', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
 
        // vowel harmony flag
index fb4e939..a4c911a 100644 (file)
@@ -5,8 +5,8 @@
 mediaWiki.language.convertGrammar = function ( word, form ) {
        /*jshint onecase:true */
        var grammarForms = mediaWiki.language.getData( 'ga', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'ainmlae':
index d1eba43..945f02f 100644 (file)
@@ -4,8 +4,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'he', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'prefixed':
index 2c0abd3..8e9b129 100644 (file)
@@ -4,8 +4,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'hsb', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index d72a1c0..4f8f74d 100644 (file)
@@ -5,8 +5,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'hu', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'rol':
index c4a1cf7..935d466 100644 (file)
@@ -5,8 +5,8 @@
 mediaWiki.language.convertGrammar = function ( word, form ) {
        /*jshint onecase:true */
        var grammarForms = mediaWiki.language.getData( 'hy', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
 
        // These rules are not perfect, but they are currently only used for site names so it doesn't
index 52e8dd4..29e04a6 100644 (file)
@@ -5,8 +5,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'la', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'genitive':
@@ -30,7 +30,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                        word = word.replace( /nuntii$/i, 'nuntios' );// 2nd declension plural (partly)
                        word = word.replace( /tio$/i, 'tionem' ); // 3rd declension singular (partly)
                        word = word.replace( /ns$/i, 'ntem' );
-                       word = word.replace( /as$/i, 'atem');
+                       word = word.replace( /as$/i, 'atem' );
                        word = word.replace( /es$/i, 'em' ); // 5th declension singular
                        break;
                case 'ablative':
@@ -42,7 +42,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                        word = word.replace( /nuntii$/i, 'nuntiis' ); // 2nd declension plural (partly)
                        word = word.replace( /tio$/i, 'tione' ); // 3rd declension singular (partly)
                        word = word.replace( /ns$/i, 'nte' );
-                       word = word.replace( /as$/i, 'ate');
+                       word = word.replace( /as$/i, 'ate' );
                        word = word.replace( /es$/i, 'e' ); // 5th declension singular
                        break;
        }
index 554e99d..3e0f279 100644 (file)
@@ -14,8 +14,8 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                // Variable for ending
                ending = '';
 
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        // Checking if the $word is in plural form
        if ( word.match( /тæ$/i ) ) {
index 2077b6b..ee1d6ef 100644 (file)
@@ -10,8 +10,8 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        'use strict';
 
        var grammarForms = mediaWiki.language.getData( 'ru', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'genitive': // родительный падеж
index d20d0b3..3d8bdfd 100644 (file)
@@ -4,8 +4,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'sl', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'mestnik': // locative
index 550a388..a22874b 100644 (file)
@@ -4,31 +4,31 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'uk', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'genitive': // родовий відмінок
                        if ( word.slice( -4 ) !== 'вікі' && word.slice( -4 ) !== 'Вікі' ) {
                                if ( word.slice( -1 ) === 'ь' ) {
-                                       word = word.slice(0, -1 ) + 'я';
+                                       word = word.slice( 0, -1 ) + 'я';
                                } else if ( word.slice( -2 ) === 'ія' ) {
-                                       word = word.slice(0, -2 ) + 'ії';
+                                       word = word.slice( 0, -2 ) + 'ії';
                                } else if ( word.slice( -2 ) === 'ка' ) {
-                                       word = word.slice(0, -2 ) + 'ки';
+                                       word = word.slice( 0, -2 ) + 'ки';
                                } else if ( word.slice( -2 ) === 'ти' ) {
-                                       word = word.slice(0, -2 ) + 'тей';
+                                       word = word.slice( 0, -2 ) + 'тей';
                                } else if ( word.slice( -2 ) === 'ды' ) {
-                                       word = word.slice(0, -2 ) + 'дов';
+                                       word = word.slice( 0, -2 ) + 'дов';
                                } else if ( word.slice( -3 ) === 'ник' ) {
-                                       word = word.slice(0, -3 ) + 'ника';
+                                       word = word.slice( 0, -3 ) + 'ника';
                                }
                        }
                        break;
                case 'accusative': // знахідний відмінок
                        if ( word.slice( -4 ) !== 'вікі' && word.slice( -4 ) !== 'Вікі' ) {
                                if ( word.slice( -2 ) === 'ія' ) {
-                                       word = word.slice(0, -2 ) + 'ію';
+                                       word = word.slice( 0, -2 ) + 'ію';
                                }
                        }
                        break;
index f6fb8f1..ca4b6fb 100644 (file)
@@ -21,7 +21,7 @@
                getPluralForm: function ( number, pluralRules ) {
                        var i;
                        for ( i = 0; i < pluralRules.length; i++ ) {
-                               if ( mw.libs.pluralRuleParser( pluralRules[i], number ) ) {
+                               if ( mw.libs.pluralRuleParser( pluralRules[ i ], number ) ) {
                                        break;
                                }
                        }
index b3765c8..808f6e5 100644 (file)
@@ -55,8 +55,8 @@
                getData: function ( langCode, dataKey ) {
                        var langData = mw.language.data;
                        langCode = langCode.toLowerCase();
-                       if ( langData && langData[langCode] instanceof mw.Map ) {
-                               return langData[langCode].get( dataKey );
+                       if ( langData && langData[ langCode ] instanceof mw.Map ) {
+                               return langData[ langCode ].get( dataKey );
                        }
                        return undefined;
                },
                setData: function ( langCode, dataKey, value ) {
                        var langData = mw.language.data;
                        langCode = langCode.toLowerCase();
-                       if ( !( langData[langCode] instanceof mw.Map ) ) {
-                               langData[langCode] = new mw.Map();
+                       if ( !( langData[ langCode ] instanceof mw.Map ) ) {
+                               langData[ langCode ] = new mw.Map();
                        }
-                       langData[langCode].set( dataKey, value );
+                       langData[ langCode ].set( dataKey, value );
                }
        };
 
index 78e3919..0d324ed 100644 (file)
@@ -29,8 +29,8 @@ $.extend( mw.language, {
                        return mw.language.convertPlural( parseInt( count, 10 ), template.parameters );
                }
                // Could not process plural return first form or nothing
-               if ( template.parameters[0] ) {
-                       return template.parameters[0];
+               if ( template.parameters[ 0 ] ) {
+                       return template.parameters[ 0 ];
                }
                return '';
        },
@@ -47,8 +47,8 @@ $.extend( mw.language, {
                var pluralRules,
                        pluralFormIndex = 0;
 
-               if ( explicitPluralForms && explicitPluralForms[count] ) {
-                       return explicitPluralForms[count];
+               if ( explicitPluralForms && explicitPluralForms[ count ] ) {
+                       return explicitPluralForms[ count ];
                }
 
                if ( !forms || forms.length === 0 ) {
@@ -58,11 +58,11 @@ $.extend( mw.language, {
                pluralRules = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'pluralRules' );
                if ( !pluralRules ) {
                        // default fallback.
-                       return ( count === 1 ) ? forms[0] : forms[1];
+                       return ( count === 1 ) ? forms[ 0 ] : forms[ 1 ];
                }
                pluralFormIndex = mw.cldr.getPluralForm( count, pluralRules );
                pluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 );
-               return forms[pluralFormIndex];
+               return forms[ pluralFormIndex ];
        },
 
        /**
@@ -90,7 +90,7 @@ $.extend( mw.language, {
         *
         * @param {string} gender 'male', 'female', or anything else for neutral.
         * @param {Array} forms List of gender forms
-        * @return string
+        * @return {string}
         */
        gender: function ( gender, forms ) {
                if ( !forms || forms.length === 0 ) {
@@ -98,12 +98,12 @@ $.extend( mw.language, {
                }
                forms = mw.language.preConvertPlural( forms, 2 );
                if ( gender === 'male' ) {
-                       return forms[0];
+                       return forms[ 0 ];
                }
                if ( gender === 'female' ) {
-                       return forms[1];
+                       return forms[ 1 ];
                }
-               return ( forms.length === 3 ) ? forms[2] : forms[0];
+               return ( forms.length === 3 ) ? forms[ 2 ] : forms[ 0 ];
        },
 
        /**
@@ -119,8 +119,8 @@ $.extend( mw.language, {
         */
        convertGrammar: function ( word, form ) {
                var grammarForms = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'grammarForms' );
-               if ( grammarForms && grammarForms[form] ) {
-                       return grammarForms[form][word] || word;
+               if ( grammarForms && grammarForms[ form ] ) {
+                       return grammarForms[ form ][ word ] || word;
                }
                return word;
        },
@@ -138,7 +138,7 @@ $.extend( mw.language, {
                        i = 0;
 
                for ( ; i < list.length; i++ ) {
-                       text += list[i];
+                       text += list[ i ];
                        if ( list.length - 2 === i ) {
                                text += mw.msg( 'and' ) + mw.msg( 'word-separator' );
                        } else if ( list.length - 1 !== i ) {
index 3c13055..268985f 100644 (file)
@@ -6,6 +6,26 @@
         * @class mw.language
         */
 
+       /**
+        * Replicate a string 'n' times.
+        *
+        * @private
+        * @param {string} str The string to replicate
+        * @param {number} num Number of times to replicate the string
+        * @return {string}
+        */
+       function replicate( str, num ) {
+               if ( num <= 0 || !str ) {
+                       return '';
+               }
+
+               var buf = [];
+               while ( num-- ) {
+                       buf.push( str );
+               }
+               return buf.join( '' );
+       }
+
        /**
         * Pad a string to guarantee that it is at least `size` length by
         * filling with the character `ch` at either the start or end of the
                return end ? out + padStr : padStr + out;
        }
 
-       /**
-        * Replicate a string 'n' times.
-        *
-        * @private
-        * @param {string} str The string to replicate
-        * @param {number} num Number of times to replicate the string
-        * @return {string}
-        */
-       function replicate( str, num ) {
-               if ( num <= 0 || !str ) {
-                       return '';
-               }
-
-               var buf = [];
-               while ( num-- ) {
-                       buf.push( str );
-               }
-               return buf.join( '' );
-       }
-
        /**
         * Apply numeric pattern to absolute value using options. Gives no
         * consideration to local customs.
@@ -74,7 +74,7 @@
                        decimal: '.'
                };
 
-               if ( isNaN( value) ) {
+               if ( isNaN( value ) ) {
                        return value;
                }
 
                        off,
                        remainder,
                        patternParts = pattern.split( '.' ),
-                       maxPlaces = ( patternParts[1] || [] ).length,
+                       maxPlaces = ( patternParts[ 1 ] || [] ).length,
                        valueParts = String( Math.abs( value ) ).split( '.' ),
-                       fractional = valueParts[1] || '',
+                       fractional = valueParts[ 1 ] || '',
                        groupSize = 0,
                        groupSize2 = 0,
                        pieces = [];
 
-               if ( patternParts[1] ) {
+               if ( patternParts[ 1 ] ) {
                        // Pad fractional with trailing zeros
-                       padLength = ( patternParts[1] && patternParts[1].lastIndexOf( '0' ) + 1 );
+                       padLength = ( patternParts[ 1 ] && patternParts[ 1 ].lastIndexOf( '0' ) + 1 );
 
                        if ( padLength > fractional.length ) {
-                               valueParts[1] = pad( fractional, padLength, '0', true );
+                               valueParts[ 1 ] = pad( fractional, padLength, '0', true );
                        }
 
                        // Truncate fractional
                        if ( maxPlaces < fractional.length ) {
-                               valueParts[1] = fractional.slice( 0, maxPlaces );
+                               valueParts[ 1 ] = fractional.slice( 0, maxPlaces );
                        }
                } else {
-                       if ( valueParts[1] ) {
+                       if ( valueParts[ 1 ] ) {
                                valueParts.pop();
                        }
                }
 
                // Pad whole with leading zeros
-               patternDigits = patternParts[0].replace( ',', '' );
+               patternDigits = patternParts[ 0 ].replace( ',', '' );
 
                padLength = patternDigits.indexOf( '0' );
 
                if ( padLength !== -1 ) {
                        padLength = patternDigits.length - padLength;
 
-                       if ( padLength > valueParts[0].length ) {
-                               valueParts[0] = pad( valueParts[0], padLength );
+                       if ( padLength > valueParts[ 0 ].length ) {
+                               valueParts[ 0 ] = pad( valueParts[ 0 ], padLength );
                        }
 
                        // Truncate whole
                        if ( patternDigits.indexOf( '#' ) === -1 ) {
-                               valueParts[0] = valueParts[0].slice( valueParts[0].length - padLength );
+                               valueParts[ 0 ] = valueParts[ 0 ].slice( valueParts[ 0 ].length - padLength );
                        }
                }
 
                // Add group separators
-               index = patternParts[0].lastIndexOf( ',' );
+               index = patternParts[ 0 ].lastIndexOf( ',' );
 
                if ( index !== -1 ) {
-                       groupSize = patternParts[0].length - index - 1;
-                       remainder = patternParts[0].slice( 0, index );
+                       groupSize = patternParts[ 0 ].length - index - 1;
+                       remainder = patternParts[ 0 ].slice( 0, index );
                        index = remainder.lastIndexOf( ',' );
                        if ( index !== -1 ) {
                                groupSize2 = remainder.length - index - 1;
                        }
                }
 
-               for ( whole = valueParts[0]; whole; ) {
+               for ( whole = valueParts[ 0 ]; whole; ) {
                        off = groupSize ? whole.length - groupSize : 0;
                        pieces.push( ( off > 0 ) ? whole.slice( off ) : whole );
                        whole = ( off > 0 ) ? whole.slice( 0, off ) : '';
                                groupSize2 = null;
                        }
                }
-               valueParts[0] = pieces.reverse().join( options.group );
+               valueParts[ 0 ] = pieces.reverse().join( options.group );
 
                return valueParts.join( options.decimal );
        }
 
                        convertedNumber = '';
                        for ( i = 0; i < numberString.length; i++ ) {
-                               if ( transformTable[ numberString[i] ] ) {
-                                       convertedNumber += transformTable[numberString[i]];
+                               if ( transformTable[ numberString[ i ] ] ) {
+                                       convertedNumber += transformTable[ numberString[ i ] ];
                                } else {
-                                       convertedNumber += numberString[i];
+                                       convertedNumber += numberString[ i ];
                                }
                        }
                        return integer ? parseInt( convertedNumber, 10 ) : convertedNumber;
                },
 
                /**
-                * Get the  digit transform table for current UI language.
+                * Get the digit transform table for current UI language.
+                *
                 * @return {Object|Array}
                 */
                getDigitTransformTable: function () {
                },
 
                /**
-                * Get the  separator transform table for current UI language.
+                * Get the separator transform table for current UI language.
+                *
                 * @return {Object|Array}
                 */
                getSeparatorTransformTable: function () {
                commafy: function ( value, pattern ) {
                        var numberPattern,
                                transformTable = mw.language.getSeparatorTransformTable(),
-                               group = transformTable[','] || ',',
+                               group = transformTable[ ',' ] || ',',
                                numberPatternRE = /[#0,]*[#0](?:\.0*#*)?/, // not precise, but good enough
-                               decimal = transformTable['.'] || '.',
+                               decimal = transformTable[ '.' ] || '.',
                                patternList = pattern.split( ';' ),
-                               positivePattern = patternList[0];
+                               positivePattern = patternList[ 0 ];
 
-                       pattern = patternList[ ( value < 0 ) ? 1 : 0] || ( '-' + positivePattern );
+                       pattern = patternList[ ( value < 0 ) ? 1 : 0 ] || ( '-' + positivePattern );
                        numberPattern = positivePattern.match( numberPatternRE );
 
                        if ( !numberPattern ) {
                                throw new Error( 'unable to find a number expression in pattern: ' + pattern );
                        }
 
-                       return pattern.replace( numberPatternRE, commafyNumber( value, numberPattern[0], {
+                       return pattern.replace( numberPatternRE, commafyNumber( value, numberPattern[ 0 ], {
                                decimal: decimal,
                                group: group
                        } ) );
index 2291572..e1b3198 100644 (file)
@@ -16,7 +16,6 @@ div#jump-to-nav,
 .mw-jump,
 div.top,
 div#column-one,
-#colophon,
 .mw-editsection,
 .mw-editsection-like,
 .toctoggle,
@@ -29,9 +28,6 @@ li#mobileview,
 li#privacy,
 #footer-places,
 .mw-hidden-catlinks,
-tr.mw-metadata-show-hide-extended,
-span.mw-filepage-other-resolutions,
-#filetoc,
 .usermessage,
 .patrollink,
 .ns-0 .mw-redirectedfrom,
diff --git a/resources/src/mediawiki.legacy/images/checker.png b/resources/src/mediawiki.legacy/images/checker.png
deleted file mode 100644 (file)
index 3e9e3d0..0000000
Binary files a/resources/src/mediawiki.legacy/images/checker.png and /dev/null differ
diff --git a/resources/src/mediawiki.legacy/images/question.png b/resources/src/mediawiki.legacy/images/question.png
deleted file mode 100644 (file)
index f7405d2..0000000
Binary files a/resources/src/mediawiki.legacy/images/question.png and /dev/null differ
diff --git a/resources/src/mediawiki.legacy/images/question.svg b/resources/src/mediawiki.legacy/images/question.svg
deleted file mode 100644 (file)
index 98fbe8d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06"><path fill="#575757" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/></svg>
\ No newline at end of file
index 196ea21..66161ed 100644 (file)
@@ -256,14 +256,6 @@ div.htmlform-tip {
        color: #666;
 }
 
-fieldset.prefsection {
-       margin-top: 1em;
-}
-
-fieldset.operaprefsection {
-       margin-left: 15em;
-}
-
 /* emulate center */
 .center {
        width: 100%;
@@ -320,10 +312,6 @@ span.comment {
        font-style: italic;
 }
 
-span.changedby {
-       font-size: 95%;
-}
-
 .previewnote {
        text-align: center;
        color: #cc0000;
index 3f4b263..6226c90 100644 (file)
@@ -146,7 +146,7 @@ var ProtectionForm = window.ProtectionForm = {
         */
        matchAttribute: function ( objects, attrName ) {
                return $.map( objects, function ( object ) {
-                       return object[attrName];
+                       return object[ attrName ];
                } ).filter( function ( item, index, a ) {
                        return index === a.indexOf( item );
                } ).length === 1;
@@ -177,6 +177,7 @@ var ProtectionForm = window.ProtectionForm = {
 
        /**
         * Find the highest protection level in any selector
+        *
         * @return {number}
         */
        getMaxLevel: function () {
index 8122701..961c02b 100644 (file)
@@ -126,15 +126,11 @@ abbr[title],
        font-style: italic;
 }
 
-/* Comment and username portions of RC entries */
+/* Comment portions of RC entries */
 span.comment {
        font-style: italic;
 }
 
-span.changedby {
-       font-size: 95%;
-}
-
 /* Math */
 .texvc {
        direction: ltr;
@@ -164,49 +160,6 @@ span.texhtml {
        clear: both;
 }
 
-/**
- * File description page
- */
-
-div.mw-filepage-resolutioninfo {
-       font-size: smaller;
-}
-
-/**
- * File histories
- */
-h2#filehistory {
-       clear: both;
-}
-
-table.filehistory th,
-table.filehistory td {
-       vertical-align: top;
-}
-
-table.filehistory th {
-       text-align: left;
-}
-
-table.filehistory td.mw-imagepage-filesize,
-table.filehistory th.mw-imagepage-filesize {
-       white-space: nowrap;
-}
-
-table.filehistory td.filehistory-selected {
-       font-weight: bold;
-}
-
-/**
- * Add a checkered background image on hover for file
- * description pages. (bug 26470)
- */
-.filehistory a img,
-#file img:hover {
-       /* @embed */
-       background: white url(images/checker.png) repeat;
-}
-
 /**
  * rev_deleted stuff
  */
@@ -253,68 +206,10 @@ td.mw-label {
        vertical-align: middle;
 }
 
-.prefsection td.mw-label {
-       width: 20%;
-}
-
-.prefsection table {
-       width: 100%;
-}
-
-.prefsection table.mw-htmlform-matrix {
-       width: auto;
-}
-
-.mw-icon-question {
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG).
-        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
-       background-image: url(images/question.png);
-       background-image: -webkit-linear-gradient(transparent, transparent), url(images/question.svg);
-       background-image: linear-gradient(transparent, transparent), url(images/question.svg);
-       background-repeat: no-repeat;
-       background-size: 13px 13px;
-       display: inline-block;
-       height: 13px;
-       width: 13px;
-       margin-left: 4px;
-}
-
-.mw-icon-question:lang(ar),
-.mw-icon-question:lang(fa),
-.mw-icon-question:lang(ur) {
-       -webkit-transform: scaleX(-1);
-       -ms-transform: scaleX(-1);
-       transform: scaleX(-1);
-}
-
 td.mw-submit {
        white-space: nowrap;
 }
 
-table.mw-htmlform-nolabel td.mw-label {
-       width: 1px;
-}
-
-tr.mw-htmlform-vertical-label td.mw-label {
-       text-align: left !important;
-}
-
-.mw-htmlform-invalid-input td.mw-input input {
-       border-color: red;
-}
-
-.mw-htmlform-flatlist div.mw-htmlform-flatlist-item {
-       display: inline;
-       margin-right: 1em;
-       white-space: nowrap;
-}
-
-.mw-htmlform-matrix td {
-       padding-left: 0.5em;
-       padding-right: 0.5em;
-}
-
 input#wpSummary {
        width: 80%;
        margin-bottom: 1em;
@@ -448,11 +343,6 @@ p.mw-upload-editlicenses {
        font-weight: bold;
 }
 
-#shared-image-dup,
-#shared-image-conflict {
-       font-style: italic;
-}
-
 /**
  * Recreating deleted page warning
  * Reupload file warning
@@ -492,21 +382,6 @@ a.new {
        color: #BA0000;
 }
 
-/* feed links */
-/* To be removed before 1.26 release, moved to mediawiki.feedlink module */
-a.feedlink {
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG).
-        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
-       background-image: url(../mediawiki/images/feed-icon.png);
-       background-image: -webkit-linear-gradient(transparent, transparent), url(../mediawiki/images/feed-icon.svg);
-       background-image: linear-gradient(transparent, transparent), url(../mediawiki/images/feed-icon.svg);
-       background-position: center left;
-       background-repeat: no-repeat;
-       background-size: 12px 12px;
-       padding-left: 16px;
-}
-
 /* Plainlinks - this can be used to switch
  * off special external link styling */
 .plainlinks a.external {
@@ -672,24 +547,6 @@ table.wikitable > caption {
        background-color: #eeeeff;
 }
 
-/* filetoc */
-ul#filetoc {
-       text-align: center;
-       border: 1px solid #aaaaaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       font-size: 95%;
-       margin-bottom: 0.5em;
-       margin-left: 0;
-       margin-right: 0;
-}
-
-#filetoc li {
-       display: inline;
-       list-style-type: none;
-       padding-right: 2em;
-}
-
 /* Classes for Exif data display */
 table.mw_metadata {
        font-size: 0.8em;
index b5720a4..7d1f6d7 100644 (file)
@@ -85,7 +85,7 @@
 
                // Execute the queued functions
                for ( i = 0; i < functs.length; i++ ) {
-                       functs[i]();
+                       functs[ i ]();
                }
        } );
 
         * See https://www.mediawiki.org/wiki/ResourceLoader/Legacy_JavaScript#wikibits.js
         */
 
-       function importScript( page ) {
-               var uri = mw.config.get( 'wgScript' ) + '?title=' +
-                       mw.util.wikiUrlencode( page ) +
-                       '&action=raw&ctype=text/javascript';
-               return importScriptURI( uri );
-       }
-
        /**
         * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
         */
        function importScriptURI( url ) {
-               if ( loadedScripts[url] ) {
+               if ( loadedScripts[ url ] ) {
                        return null;
                }
-               loadedScripts[url] = true;
+               loadedScripts[ url ] = true;
                var s = document.createElement( 'script' );
                s.setAttribute( 'src', url );
                s.setAttribute( 'type', 'text/javascript' );
-               document.getElementsByTagName( 'head' )[0].appendChild( s );
+               document.getElementsByTagName( 'head' )[ 0 ].appendChild( s );
                return s;
        }
 
-       function importStylesheet( page ) {
+       function importScript( page ) {
                var uri = mw.config.get( 'wgScript' ) + '?title=' +
                        mw.util.wikiUrlencode( page ) +
-                       '&action=raw&ctype=text/css';
-               return importStylesheetURI( uri );
+                       '&action=raw&ctype=text/javascript';
+               return importScriptURI( uri );
        }
 
        /**
                if ( media ) {
                        l.media = media;
                }
-               document.getElementsByTagName( 'head' )[0].appendChild( l );
+               document.getElementsByTagName( 'head' )[ 0 ].appendChild( l );
                return l;
        }
 
+       function importStylesheet( page ) {
+               var uri = mw.config.get( 'wgScript' ) + '?title=' +
+                       mw.util.wikiUrlencode( page ) +
+                       '&action=raw&ctype=text/css';
+               return importStylesheetURI( uri );
+       }
+
        msg = 'Use mw.loader instead.';
        mw.log.deprecate( win, 'loadedScripts', loadedScripts, msg );
        mw.log.deprecate( win, 'importScriptURI', importScriptURI, msg );
index e947775..79549c3 100644 (file)
@@ -52,7 +52,7 @@
 .list-style-image-svg(@svg, @fallback) {
        list-style-image: e('/* @embed */') url(@svg);
        /* Fallback to PNG bullet for IE 8 and below using CSS hack */
-       list-style-image: e('/* @embed */') url(@fallback)\9;
+       list-style-image: e('/* @embed */') url(@fallback) e('\9');
 }
 
 .transition(@value) {
index ec14f8b..6f9aa02 100644 (file)
         * @param {Function} messagePosterConstructor Constructor for MessagePoster
         */
        MwMessagePosterFactory.prototype.register = function ( contentModel, messagePosterConstructor ) {
-               if ( this.contentModelToClass[contentModel] !== undefined ) {
+               if ( this.contentModelToClass[ contentModel ] !== undefined ) {
                        throw new Error( 'The content model \'' + contentModel + '\' is already registered.' );
                }
 
-               this.contentModelToClass[contentModel] = messagePosterConstructor;
+               this.contentModelToClass[ contentModel ] = messagePosterConstructor;
        };
 
        /**
@@ -38,7 +38,7 @@
         * @param {string} contentModel Content model to unregister
         */
        MwMessagePosterFactory.prototype.unregister = function ( contentModel ) {
-               delete this.contentModelToClass[contentModel];
+               delete this.contentModelToClass[ contentModel ];
        };
 
        /**
@@ -68,8 +68,8 @@
                        titles: title.getPrefixedDb()
                } ).then( function ( result ) {
                        if ( result.query.pageids && result.query.pageids.length > 0 ) {
-                               pageId = result.query.pageids[0];
-                               page = result.query.pages[pageId];
+                               pageId = result.query.pageids[ 0 ];
+                               page = result.query.pages[ pageId ];
 
                                contentModel = page.contentmodel;
                                moduleName = 'mediawiki.messagePoster.' + contentModel;
         *
         */
        MwMessagePosterFactory.prototype.createForContentModel = function ( contentModel, title ) {
-               return new this.contentModelToClass[contentModel]( title );
+               return new this.contentModelToClass[ contentModel ]( title );
        };
 
        mw.messagePoster = {
index 2e4daea..20deb21 100644 (file)
@@ -1,6 +1,6 @@
 /* Galleries */
 /* These display attributes look nonsensical, but are needed to support IE and FF2 */
-/* Don't forget to update commonPrint.css */
+/* Don't forget to update mediawiki.page.gallery.print.css */
 li.gallerybox {
        vertical-align: top;
        display: -moz-inline-box;
index 9514070..dfccf21 100644 (file)
@@ -12,6 +12,7 @@
 
        /**
         * Perform the layout justification.
+        *
         * @ignore
         * @context {HTMLElement} A `ul.mw-gallery-*` element
         */
                                $this = $( this );
 
                        if ( top !== lastTop ) {
-                               rows[rows.length] = [];
+                               rows[ rows.length ] = [];
                                lastTop = top;
                        }
 
                        $img = $this.find( 'div.thumb a.image img' );
-                       if ( $img.length && $img[0].height ) {
-                               imgHeight = $img[0].height;
-                               imgWidth = $img[0].width;
+                       if ( $img.length && $img[ 0 ].height ) {
+                               imgHeight = $img[ 0 ].height;
+                               imgWidth = $img[ 0 ].width;
                        } else {
                                // If we don't have a real image, get the containing divs width/height.
                                // Note that if we do have a real image, using this method will generally
@@ -54,7 +55,7 @@
                        }
 
                        captionWidth = $this.children().children( 'div.gallerytextwrapper' ).width();
-                       rows[rows.length - 1][rows[rows.length - 1].length] = {
+                       rows[ rows.length - 1 ][ rows[ rows.length - 1 ].length ] = {
                                $elm: $this,
                                width: $this.outerWidth(),
                                imgWidth: imgWidth,
                                maxWidth = $gallery.width();
                                combinedAspect = 0;
                                combinedPadding = 0;
-                               curRow = rows[i];
+                               curRow = rows[ i ];
                                curRowHeight = 0;
 
                                for ( j = 0; j < curRow.length; j++ ) {
                                        if ( curRowHeight === 0 ) {
-                                               if ( isFinite( curRow[j].height ) ) {
+                                               if ( isFinite( curRow[ j ].height ) ) {
                                                        // Get the height of this row, by taking the first
                                                        // non-out of bounds height
-                                                       curRowHeight = curRow[j].height;
+                                                       curRowHeight = curRow[ j ].height;
                                                }
                                        }
 
-                                       if ( curRow[j].aspect === 0 || !isFinite( curRow[j].aspect ) ) {
+                                       if ( curRow[ j ].aspect === 0 || !isFinite( curRow[ j ].aspect ) ) {
                                                // One of the dimensions are 0. Probably should
                                                // not try to resize.
-                                               combinedPadding += curRow[j].width;
+                                               combinedPadding += curRow[ j ].width;
                                        } else {
-                                               combinedAspect += curRow[j].aspect;
-                                               combinedPadding += curRow[j].width - curRow[j].imgWidth;
+                                               combinedAspect += curRow[ j ].aspect;
+                                               combinedPadding += curRow[ j ].width - curRow[ j ].imgWidth;
                                        }
                                }
 
                                }
 
                                for ( j = 0; j < curRow.length; j++ ) {
-                                       newWidth = preferredHeight * curRow[j].aspect;
-                                       padding = curRow[j].width - curRow[j].imgWidth;
-                                       $outerDiv = curRow[j].$elm;
+                                       newWidth = preferredHeight * curRow[ j ].aspect;
+                                       padding = curRow[ j ].width - curRow[ j ].imgWidth;
+                                       $outerDiv = curRow[ j ].$elm;
                                        $innerDiv = $outerDiv.children( 'div' ).first();
                                        $imageDiv = $innerDiv.children( 'div.thumb' );
                                        $imageElm = $imageDiv.find( 'img' ).first();
-                                       imageElm = $imageElm.length ? $imageElm[0] : null;
+                                       imageElm = $imageElm.length ? $imageElm[ 0 ] : null;
                                        $caption = $outerDiv.find( 'div.gallerytextwrapper' );
 
                                        // Since we are going to re-adjust the height, the vertical
                                                $outerDiv.width( newWidth + padding );
                                                $innerDiv.width( newWidth + padding );
                                                $imageDiv.width( newWidth );
-                                               $caption.width( curRow[j].captionWidth + ( newWidth - curRow[j].imgWidth ) );
+                                               $caption.width( curRow[ j ].captionWidth + ( newWidth - curRow[ j ].imgWidth ) );
                                        }
 
                                        if ( imageElm ) {
                        $( this ).find( 'div.gallerytextwrapper' ).width( captionWidth );
 
                        $imageElm = $( this ).find( 'img' ).first();
-                       imageElm = $imageElm.length ? $imageElm[0] : null;
+                       imageElm = $imageElm.length ? $imageElm[ 0 ] : null;
                        if ( imageElm ) {
                                imageElm.width = imgWidth;
                                imageElm.height = imgHeight;
index 9ad9c30..49a51df 100644 (file)
@@ -2,6 +2,7 @@
  * Implement AJAX navigation for multi-page images so the user may browse without a full page reload.
  */
 ( function ( mw, $ ) {
+       /*jshint latedef:false */
        var jqXhr, $multipageimage, $spinner,
                cache = {},
                cacheOrder = [];
                jqXhr = undefined;
 
                // Try the cache
-               if ( cache[url] ) {
+               if ( cache[ url ] ) {
                        // Update access freshness
                        cacheOrder.splice( $.inArray( url, cacheOrder ), 1 );
                        cacheOrder.push( url );
-                       return $.Deferred().resolve( cache[url] ).promise();
+                       return $.Deferred().resolve( cache[ url ] ).promise();
                }
 
                // @todo Don't fetch the entire page. Ideally we'd only fetch the content portion or the data
                        jqXhr = undefined;
 
                        // Cache the newly loaded page
-                       cache[url] = $contents;
+                       cache[ url ] = $contents;
                        cacheOrder.push( url );
 
                        // Remove the oldest entry if we're over the limit
                        if ( cacheOrder.length > 10 ) {
-                               delete cache[ cacheOrder[0] ];
+                               delete cache[ cacheOrder[ 0 ] ];
                                cacheOrder = cacheOrder.slice( 1 );
                        }
                } );
index 9724c56..a3197da 100644 (file)
                actionPaths = mw.config.get( 'wgActionPaths' );
                for ( key in actionPaths ) {
                        if ( actionPaths.hasOwnProperty( key ) ) {
-                               parts = actionPaths[key].split( '$1' );
+                               parts = actionPaths[ key ].split( '$1' );
                                for ( i = 0; i < parts.length; i++ ) {
-                                       parts[i] = mw.RegExp.escape( parts[i] );
+                                       parts[ i ] = mw.RegExp.escape( parts[ i ] );
                                }
                                m = new RegExp( parts.join( '(.+)' ) ).exec( url );
-                               if ( m && m[1] ) {
+                               if ( m && m[ 1 ] ) {
                                        return key;
                                }
 
 
                        api = new mw.Api();
 
-                       api[action]( title )
+                       api[ action ]( title )
                                .done( function ( watchResponse ) {
                                        var otherAction = action === 'watch' ? 'unwatch' : 'watch';
 
index 67531f7..06851b9 100644 (file)
@@ -4,6 +4,7 @@
 ( function ( mw, $ ) {
        /**
         * Given an email validity status (true, false, null) update the label CSS class
+        *
         * @ignore
         */
        function updateMailValidityLabel( mail ) {
index 0e026af..a484350 100644 (file)
@@ -59,3 +59,7 @@ table.mw-enhanced-rc td.mw-enhanced-rc-nested {
 .mw-enhanced-watched .mw-enhanced-rc-time {
        font-weight: bold;
 }
+
+span.changedby {
+       font-size: 95%;
+}
diff --git a/resources/src/mediawiki.special/mediawiki.special.movePage.css b/resources/src/mediawiki.special/mediawiki.special.movePage.css
new file mode 100644 (file)
index 0000000..dd1c2aa
--- /dev/null
@@ -0,0 +1,8 @@
+/*!
+ * Styles for Special:MovePage
+ */
+
+.movepage-wrapper {
+       width: 50em;
+       margin: 1em 0;
+}
index 7e56050..6d88c51 100644 (file)
@@ -1,6 +1,7 @@
 /*!
  * JavaScript for Special:MovePage
  */
-jQuery( function ( $ ) {
-       $( '#wpReason, #wpNewTitleMain' ).byteLimit();
+jQuery( function () {
+       OO.ui.infuse( 'wpNewTitle' );
+       OO.ui.infuse( 'wpReason' ).$input.byteLimit();
 } );
index 0e71d30..9e5efd3 100644 (file)
        zoom: 1;
 }
 
-/* When JS is enabled, .successbox is replaced with a mw.notification */
-.successbox {
+/* When JS is enabled, .mw-preferences-messageboxes are replaced with mw.notifications */
+.mw-preferences-messagebox {
        display: none;
 }
+
+.prefsection td.mw-label {
+       width: 20%;
+}
+
+.prefsection table {
+       width: 100%;
+}
+
+.prefsection table.mw-htmlform-matrix {
+       width: auto;
+}
index 893db98..bad1c08 100644 (file)
@@ -1,4 +1,3 @@
-
 /*!
  * JavaScript for Special:Preferences
  */
@@ -52,8 +51,8 @@ jQuery( function ( $ ) {
         * It uses document.getElementById for security reasons (HTML injections in $()).
         *
         * @ignore
-        * @param String name: the name of a tab without the prefix ("mw-prefsection-")
-        * @param String mode: [optional] A hash will be set according to the current
+        * @param {String} name the name of a tab without the prefix ("mw-prefsection-")
+        * @param {String} [mode] A hash will be set according to the current
         *  open section. Set mode 'noHash' to surpress this.
         */
        function switchPrefTab( name, mode ) {
@@ -86,18 +85,23 @@ jQuery( function ( $ ) {
                }
        }
 
-       // If there is a #mw-preferences-success box and javascript is enabled, use a slick notification instead!
-       if ( $( '#mw-preferences-success' ).length ) {
-               notif = mediaWiki.notification.notify( mediaWiki.message( 'savedprefs' ), { autoHide: false } );
-               $( '#preftoc, .prefsection' ).one( 'change keydown mousedown', function () { // 'change' event not reliable!
-                       if ( notif ) {
-                               notif.close();
-                       }
-               } );
+       // Check for messageboxes (.successbox, .warningbox, .errorbox) to replace with notifications
+       if ( $( '.mw-preferences-messagebox' ).length ) {
+               // If there is a #mw-preferences-success box and javascript is enabled, use a slick notification instead!
+               if ( $( '#mw-preferences-success' ).length ) {
+                       notif = mediaWiki.notification.notify( mediaWiki.message( 'savedprefs' ), { autoHide: false } );
+                       // 'change' event not reliable!
+                       $( '#preftoc, .prefsection' ).one( 'change keydown mousedown', function () {
+                               if ( notif ) {
+                                       notif.close();
+                                       notif = null;
+                               }
+                       } );
 
-               // Remove now-unnecessary success=1 querystring to prevent reappearance of notification on reload
-               if ( history.replaceState ) {
-                       history.replaceState( {}, document.title, document.URL.replace( /&?success=1/, '' ) );
+                       // Remove now-unnecessary success=1 querystring to prevent reappearance of notification on reload
+                       if ( history.replaceState ) {
+                               history.replaceState( {}, document.title, location.href.replace( /&?success=1/, '' ) );
+                       }
                }
        }
 
@@ -130,7 +134,7 @@ jQuery( function ( $ ) {
        // Disable the button to save preferences unless preferences have changed
        $( '#prefcontrol' ).prop( 'disabled', true );
        $( '.prefsection' ).one( 'change keydown mousedown', function () {
-               $( '#prefcontrol' ).prop( 'disabled', false);
+               $( '#prefcontrol' ).prop( 'disabled', false );
        } );
 
        // Enable keyboard users to use left and right keys to switch tabs
@@ -206,15 +210,15 @@ jQuery( function ( $ ) {
                var minutes,
                        arr = hour.split( ':' );
 
-               arr[0] = parseInt( arr[0], 10 );
+               arr[ 0 ] = parseInt( arr[ 0 ], 10 );
 
                if ( arr.length === 1 ) {
                        // Specification is of the form [-]XX
-                       minutes = arr[0] * 60;
+                       minutes = arr[ 0 ] * 60;
                } else {
                        // Specification is of the form [-]XX:XX
-                       minutes = Math.abs( arr[0] ) * 60 + parseInt( arr[1], 10 );
-                       if ( arr[0] < 0 ) {
+                       minutes = Math.abs( arr[ 0 ] ) * 60 + parseInt( arr[ 1 ], 10 );
+                       if ( arr[ 0 ] < 0 ) {
                                minutes *= -1;
                        }
                }
@@ -241,7 +245,7 @@ jQuery( function ( $ ) {
                        minuteDiff = hoursToMinutes( $tzTextbox.val() );
                } else {
                        // Grab data from the $tzSelect value
-                       minuteDiff = parseInt( type.split( '|' )[1], 10 ) || 0;
+                       minuteDiff = parseInt( type.split( '|' )[ 1 ], 10 ) || 0;
                        $tzTextbox.val( minutesToHours( minuteDiff ) );
                }
 
index 8f845df..b869314 100644 (file)
@@ -27,6 +27,7 @@ div.searchresult {
 }
 .mw-search-results {
        margin-left: 0.4em;
+       float: left;
 }
 .mw-search-results li {
        padding-bottom: 1.2em;
index b27fe34..730119e 100644 (file)
                                var parts = $( this ).attr( 'href' ).split( 'search=' ),
                                        lastpart = '',
                                        prefix = 'search=';
-                               if ( parts.length > 1 && parts[1].indexOf( '&' ) !== -1 ) {
-                                       lastpart = parts[1].slice( parts[1].indexOf( '&' ) );
+                               if ( parts.length > 1 && parts[ 1 ].indexOf( '&' ) !== -1 ) {
+                                       lastpart = parts[ 1 ].slice( parts[ 1 ].indexOf( '&' ) );
                                } else {
                                        prefix = '&search=';
                                }
-                               this.href = parts[0] + prefix + encodeURIComponent( searchterm ) + lastpart;
+                               this.href = parts[ 0 ] + prefix + encodeURIComponent( searchterm ) + lastpart;
                        } );
                } ).trigger( 'change' );
 
index 7dd0369..677d26d 100644 (file)
@@ -6,6 +6,7 @@
  * @singleton
  */
 ( function ( mw, $ ) {
+       /*jshint latedef:false */
        var uploadWarning, uploadLicense,
                ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
                $license = $( '#wpLicense' );
@@ -35,7 +36,7 @@
                        }
                        // Check response cache
                        if ( this.responseCache.hasOwnProperty( this.nameToCheck ) ) {
-                               this.setWarning( this.responseCache[this.nameToCheck] );
+                               this.setWarning( this.responseCache[ this.nameToCheck ] );
                                return;
                        }
 
@@ -71,7 +72,7 @@
                        } ).done( function ( result ) {
                                var resultOut = '';
                                if ( result.query ) {
-                                       resultOut = result.query.pages[result.query.pageids[0]].imageinfo[0];
+                                       resultOut = result.query.pages[ result.query.pageids[ 0 ] ].imageinfo[ 0 ];
                                }
                                $spinnerDestCheck.remove();
                                uploadWarning.processResult( resultOut, uploadWarning.nameToCheck );
@@ -80,7 +81,7 @@
 
                processResult: function ( result, fileName ) {
                        this.setWarning( result.html );
-                       this.responseCache[fileName] = result.html;
+                       this.responseCache[ fileName ] = result.html;
                },
 
                setWarning: function ( warning ) {
                                return;
                        }
                        if ( this.responseCache.hasOwnProperty( license ) ) {
-                               this.showPreview( this.responseCache[license] );
+                               this.showPreview( this.responseCache[ license ] );
                                return;
                        }
 
                },
 
                processResult: function ( result, license ) {
-                       this.responseCache[license] = result.parse.text['*'];
-                       this.showPreview( this.responseCache[license] );
+                       this.responseCache[ license ] = result.parse.text[ '*' ];
+                       this.showPreview( this.responseCache[ license ] );
                },
 
                showPreview: function ( preview ) {
                                fname = fname.replace( / /g, '_' );
                                // Capitalise first letter if needed
                                if ( mw.config.get( 'wgCapitalizeUploads' ) ) {
-                                       fname = fname[0].toUpperCase() + fname.slice( 1 );
+                                       fname = fname[ 0 ].toUpperCase() + fname.slice( 1 );
                                }
 
                                // Output result
                 * TODO: Put SVG back after working around Firefox 7 bug <https://bugzilla.wikimedia.org/show_bug.cgi?id=31643>
                 *
                 * @param {File} file
-                * @return boolean
+                * @return {boolean}
                 */
                function fileIsPreviewable( file ) {
-                       var known = ['image/png', 'image/gif', 'image/jpeg', 'image/svg+xml'],
+                       var known = [ 'image/png', 'image/gif', 'image/jpeg', 'image/svg+xml' ],
                                tooHuge = 10 * 1024 * 1024;
                        return ( $.inArray( file.type, known ) !== -1 ) && file.size > 0 && file.size < tooHuge;
                }
 
+               /**
+                * Format a file size attractively.
+                *
+                * TODO: Match numeric formatting
+                *
+                * @param {number} s
+                * @return {string}
+                */
+               function prettySize( s ) {
+                       var sizeMsgs = [ 'size-bytes', 'size-kilobytes', 'size-megabytes', 'size-gigabytes' ];
+                       while ( s >= 1024 && sizeMsgs.length > 1 ) {
+                               s /= 1024;
+                               sizeMsgs = sizeMsgs.slice( 1 );
+                       }
+                       return mw.msg( sizeMsgs[ 0 ], Math.round( s ) );
+               }
+
                /**
                 * Show a thumbnail preview of PNG, JPEG, GIF, and SVG files prior to upload
                 * in browsers supporting HTML5 FileAPI.
                                ctx,
                                meta,
                                previewSize = 180,
+                               $spinner = $.createSpinner( { size: 'small', type: 'block' } )
+                                       .css( { width: previewSize, height: previewSize } ),
                                thumb = mw.template.get( 'mediawiki.special.upload', 'thumbnail.html' ).render();
 
-                       thumb.find( '.filename' ).text( file.name ).end()
-                               .find( '.fileinfo' ).text( prettySize( file.size ) ).end();
+                       thumb
+                               .find( '.filename' ).text( file.name ).end()
+                               .find( '.fileinfo' ).text( prettySize( file.size ) ).end()
+                               .find( '.thumbinner' ).prepend( $spinner ).end();
 
-                       $canvas = $( '<canvas width="' + previewSize + '" height="' + previewSize + '" ></canvas>' );
-                       ctx = $canvas[0].getContext( '2d' );
+                       $canvas = $( '<canvas>' ).attr( { width: previewSize, height: previewSize } );
+                       ctx = $canvas[ 0 ].getContext( '2d' );
                        $( '#mw-htmlform-source' ).parent().prepend( thumb );
 
                        fetchPreview( file, function ( dataURL ) {
                                        ctx.clearRect( 0, 0, 180, 180 );
                                        ctx.rotate( rotation / 180 * Math.PI );
                                        ctx.drawImage( img, x, y, width, height );
-                                       thumb.find( '.mw-spinner-small' ).replaceWith( $canvas );
+                                       $spinner.replaceWith( $canvas );
 
                                        // Image size
                                        info = mw.msg( 'widthheight', logicalWidth, logicalHeight ) +
                                                buffer = new Uint8Array( reader.result ),
                                                string = '';
                                        for ( i = 0; i < buffer.byteLength; i++ ) {
-                                               string += String.fromCharCode( buffer[i] );
+                                               string += String.fromCharCode( buffer[ i ] );
                                        }
                                        callbackBinary( string );
 
                        }
                }
 
-               /**
-                * Format a file size attractively.
-                *
-                * TODO: Match numeric formatting
-                *
-                * @param {number} s
-                * @return {string}
-                */
-               function prettySize( s ) {
-                       var sizeMsgs = ['size-bytes', 'size-kilobytes', 'size-megabytes', 'size-gigabytes'];
-                       while ( s >= 1024 && sizeMsgs.length > 1 ) {
-                               s /= 1024;
-                               sizeMsgs = sizeMsgs.slice( 1 );
-                       }
-                       return mw.msg( sizeMsgs[0], Math.round( s ) );
-               }
-
                /**
                 * Clear the file upload preview area.
                 */
                        function getMaxUploadSize( type ) {
                                var sizes = mw.config.get( 'wgMaxUploadSize' );
 
-                               if ( sizes[type] !== undefined ) {
-                                       return sizes[type];
+                               if ( sizes[ type ] !== undefined ) {
+                                       return sizes[ type ];
                                }
-                               return sizes['*'];
+                               return sizes[ '*' ];
                        }
 
                        $( '.mw-upload-source-error' ).remove();
                                clearPreview();
                                if ( this.files && this.files.length ) {
                                        // Note: would need to be updated to handle multiple files.
-                                       var file = this.files[0];
+                                       var file = this.files[ 0 ];
 
                                        if ( !checkMaxUploadSize( file ) ) {
                                                return;
diff --git a/resources/src/mediawiki.special/mediawiki.special.userlogin.common.js b/resources/src/mediawiki.special/mediawiki.special.userlogin.common.js
deleted file mode 100644 (file)
index f5289de..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*!
- * JavaScript for login and signup forms.
- */
-( function ( mw, $ ) {
-       // Move the FancyCaptcha image into a more attractive container.
-       // The CAPTCHA is in a <div class="captcha"> at the top of the form. If it's a FancyCaptcha,
-       // then we remove it and insert it lower down, in a customized div with just what we need (e.g.
-       // no 'fancycaptcha-createaccount' message).
-       function adjustFancyCaptcha( $content, buttonSubmit ) {
-               var $submit = $content.find( buttonSubmit ),
-                       tabIndex,
-                       $captchaStuff,
-                       $captchaImageContainer,
-                       // JavaScript can't yet parse the message 'createacct-imgcaptcha-help' when it
-                       // contains a MediaWiki transclusion, so PHP parses it and sends the HTML.
-                       // This is only set for the signup form (and undefined for login).
-                       helpMsg = mw.config.get( 'wgCreateacctImgcaptchaHelp' ),
-                       helpHtml = '';
-
-               if ( !$submit.length ) {
-                       return;
-               }
-               tabIndex = $submit.prop( 'tabIndex' ) - 1;
-               $captchaStuff = $content.find( '.captcha' );
-
-               if ( $captchaStuff.length ) {
-                       // The FancyCaptcha has this class in the ConfirmEdit extension since 2013-04-18.
-                       $captchaImageContainer = $captchaStuff.find( '.fancycaptcha-image-container' );
-                       if ( $captchaImageContainer.length !== 1 ) {
-                               return;
-                       }
-
-                       $captchaStuff.remove();
-
-                       if ( helpMsg ) {
-                               helpHtml = '<small class="mw-createacct-captcha-assisted">' + helpMsg + '</small>';
-                       }
-
-                       // Insert another div before the submit button that will include the
-                       // repositioned FancyCaptcha div, an input field, and possible help.
-                       $submit.closest( 'div' ).before( [
-                               '<div>',
-                                       '<label for="wpCaptchaWord">' + mw.message( 'createacct-captcha' ).escaped() + '</label>',
-                                       '<div class="mw-createacct-captcha-container">',
-                                               '<div class="mw-createacct-captcha-and-reload" />',
-                                               '<input id="wpCaptchaWord" class="mw-ui-input" name="wpCaptchaWord" type="text" placeholder="' +
-                                                       mw.message( 'createacct-imgcaptcha-ph' ).escaped() +
-                                                       '" tabindex="' + tabIndex + '" autocapitalize="off" autocorrect="off">',
-                                                       helpHtml,
-                                       '</div>',
-                               '</div>'
-                       ].join( '' ) );
-
-                       // Stick the FancyCaptcha container inside our bordered and framed parents.
-                       $captchaImageContainer
-                               .prependTo( $content.find( '.mw-createacct-captcha-and-reload' ) );
-
-                       // Find the input field, add the text (if any) of the existing CAPTCHA
-                       // field (although usually it's blanked out on every redisplay),
-                       // and after it move over the hidden field that tells the CAPTCHA
-                       // what to do.
-                       $content.find( '#wpCaptchaWord' )
-                               .val( $captchaStuff.find( '#wpCaptchaWord' ).val() )
-                               .after( $captchaStuff.find( '#wpCaptchaId' ) );
-               }
-       }
-
-       $( function () {
-               // Work with both login and signup form
-               adjustFancyCaptcha( $( '#mw-content-text' ), '#wpCreateaccount, #wpLoginAttempt' );
-       } );
-}( mediaWiki, jQuery ) );
index a32a790..a0c6ee2 100644 (file)
@@ -65,7 +65,7 @@
                                ususers: username // '|' in usernames is handled below
                        } )
                                .done( function ( resp ) {
-                                       var userinfo = resp.query.users[0];
+                                       var userinfo = resp.query.users[ 0 ];
 
                                        if ( resp.query.users.length !== 1 ) {
                                                // Happens if the user types '|' into the field
index 305f20c..bf0e701 100644 (file)
@@ -1,7 +1,5 @@
 <div id="mw-upload-thumbnail" class="thumb tright">
        <div class="thumbinner">
-               <!-- Note: Change showPreview() in mediawiki.special.upload.js if mw-spinner-small classname changes -->
-               <div class="mw-spinner mw-spinner-small" style="width: 180px; height: 180px"></div>
                <div class="thumbcaption">
                        <div class="filename"></div>
                        <div class="fileinfo"></div>
index 70d54ce..0469cc5 100644 (file)
                $toolbar = $( '#toolbar' );
 
                for ( i = 0; i < queue.length; i++ ) {
-                       button = queue[i];
+                       button = queue[ i ];
                        if ( $.isArray( button ) ) {
                                // Forwarded arguments array from mw.toolbar.addButton
                                insertButton.apply( toolbar, button );
index f1a08a3..49acfef 100644 (file)
         * Update the calendar.
         *
         * @private
-        * @param {string|null} [fade=null] Direction in which to fade out current calendar contents, 'previous',
-        *     'next' or 'up'
+        * @param {string|null} [fade=null] Direction in which to fade out current calendar contents,
+        *     'previous', 'next', 'up' or 'down'; or 'auto', which has the same result as 'previous' or
+        *     'next' depending on whether the current date is later or earlier than the previous.
         * @returns {string} Format
         */
        mw.widgets.CalendarWidget.prototype.updateUI = function ( fade ) {
                        return;
                }
 
+               if ( fade === 'auto' ) {
+                       if ( !this.previousMoment ) {
+                               fade = null;
+                       } else if ( this.previousMoment.isBefore( this.moment, this.precision === 'month' ? 'month' : 'day' ) ) {
+                               fade = 'next';
+                       } else if ( this.previousMoment.isAfter( this.moment, this.precision === 'month' ? 'month' : 'day' ) ) {
+                               fade = 'previous';
+                       } else {
+                               fade = null;
+                       }
+               }
+
                items = [];
                if ( this.$oldBody ) {
                        this.$oldBody.remove();
                }
                this.$oldBody = this.$body.addClass( 'mw-widget-calendarWidget-old-body' );
                // Clone without children
-               this.$body = $( this.$body[0].cloneNode( false ) )
+               this.$body = $( this.$body[ 0 ].cloneNode( false ) )
                        .removeClass( 'mw-widget-calendarWidget-old-body' )
                        .toggleClass( 'mw-widget-calendarWidget-body-month', this.displayLayer === 'month' )
                        .toggleClass( 'mw-widget-calendarWidget-body-year', this.displayLayer === 'year' )
 
        /**
         * Handle click events on the "up" button, switching to less precise view.
+        *
         * @private
         */
        mw.widgets.CalendarWidget.prototype.onUpButtonClick = function () {
 
        /**
         * Handle click events on the "previous" button, switching to previous pane.
+        *
         * @private
         */
        mw.widgets.CalendarWidget.prototype.onPrevButtonClick = function () {
 
        /**
         * Handle click events on the "next" button, switching to next pane.
+        *
         * @private
         */
        mw.widgets.CalendarWidget.prototype.onNextButtonClick = function () {
         * Handle click events anywhere in the body of the widget, which contains the matrix of days,
         * months or years to choose. Maybe change the pane or switch to more precise view, depending on
         * what gets clicked.
+        *
         * @private
         */
        mw.widgets.CalendarWidget.prototype.onBodyClick = function ( e ) {
                var
-                       previousMoment = moment( this.moment ),
                        $target = $( e.target ),
                        layers = this.getDisplayLayers(),
                        currentLayer = layers.indexOf( this.displayLayer );
                }
                if ( currentLayer === 0 ) {
                        this.setDateFromMoment();
-                       this.updateUI(
-                               this.precision === 'day' && this.moment.isBefore( previousMoment, 'month' ) ? 'previous' :
-                                       this.precision === 'day' && this.moment.isAfter( previousMoment, 'month' ) ? 'next' : null
-                       );
+                       this.updateUI( 'auto' );
                } else {
                        // One layer down
                        this.displayLayer = layers[ currentLayer - 1 ];
         * Reset the user interface of this widget to reflect selected date.
         */
        mw.widgets.CalendarWidget.prototype.resetUI = function () {
-               this.moment = moment( this.getDate(), this.getDateFormat() );
+               this.moment = this.getDate() !== null ? moment( this.getDate(), this.getDateFormat() ) : moment();
                this.displayLayer = this.getDisplayLayers()[ 0 ];
                this.updateUI();
        };
                        /*jshint +W024*/
                        nextDirectionKey = dir === 'ltr' ? OO.ui.Keys.RIGHT : OO.ui.Keys.LEFT,
                        prevDirectionKey = dir === 'ltr' ? OO.ui.Keys.LEFT : OO.ui.Keys.RIGHT,
-                       updateInDirection = null;
+                       changed = true;
 
                if ( !this.isDisabled() ) {
                        switch ( e.which ) {
                        case prevDirectionKey:
                                this.moment.subtract( 1, this.precision === 'month' ? 'month' : 'day' );
-                               updateInDirection = 'previous';
                                break;
                        case nextDirectionKey:
                                this.moment.add( 1, this.precision === 'month' ? 'month' : 'day' );
-                               updateInDirection = 'next';
                                break;
                        case OO.ui.Keys.UP:
                                this.moment.subtract( 1, this.precision === 'month' ? 'month' : 'week' );
-                               updateInDirection = 'previous';
                                break;
                        case OO.ui.Keys.DOWN:
                                this.moment.add( 1, this.precision === 'month' ? 'month' : 'week' );
-                               updateInDirection = 'next';
                                break;
                        case OO.ui.Keys.PAGEUP:
                                this.moment.subtract( 1, this.precision === 'month' ? 'year' : 'month' );
-                               updateInDirection = 'previous';
                                break;
                        case OO.ui.Keys.PAGEDOWN:
                                this.moment.add( 1, this.precision === 'month' ? 'year' : 'month' );
-                               updateInDirection = 'next';
+                               break;
+                       default:
+                               changed = false;
                                break;
                        }
 
-                       if ( updateInDirection ) {
+                       if ( changed ) {
                                this.displayLayer = this.getDisplayLayers()[ 0 ];
                                this.setDateFromMoment();
-                               this.updateUI( updateInDirection );
+                               this.updateUI( 'auto' );
                                return false;
                        }
                }
diff --git a/resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js b/resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js
new file mode 100644 (file)
index 0000000..8d6452c
--- /dev/null
@@ -0,0 +1,102 @@
+/*!
+ * MediaWiki Widgets - CategorySelector class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function ( $, mw ) {
+
+       /**
+        * Category selector widget. Displays an OO.ui.CapsuleMultiSelectWidget
+        * and autocompletes with available categories.
+        *
+        * @class
+        * @uses mw.Api
+        * @extends OO.ui.CapsuleMultiSelectWidget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {number} [limit=10] Maximum number of results to load
+        */
+       mw.widgets.CategorySelector = function ( config ) {
+               // Config initialization
+               config = $.extend( { limit: 10 }, config );
+               this.limit = config.limit;
+
+               // Parent constructor
+               mw.widgets.CategorySelector.parent.call( this, config );
+
+               // Event handler to call the autocomplete methods
+               this.$input.on( 'change input cut paste', OO.ui.debounce( this.updateMenuItems.bind( this ), 100 ) );
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.widgets.CategorySelector, OO.ui.CapsuleMultiSelectWidget );
+
+       /* Methods */
+
+       /**
+        * Gets new items based on the input by calling
+        * {@link #getNewMenuItems getNewItems} and updates the menu
+        * after removing duplicates based on the data value.
+        *
+        * @private
+        * @method
+        */
+       mw.widgets.CategorySelector.prototype.updateMenuItems = function () {
+               this.getNewMenuItems( this.$input.val() ).then( function ( items ) {
+                       var existingItems, filteredItems,
+                               menu = this.getMenu();
+
+                       // Array of strings of the data of OO.ui.MenuOptionsWidgets
+                       existingItems = menu.getItems().map( function ( item ) {
+                               return item.data;
+                       } );
+
+                       // Remove if items' data already exists
+                       filteredItems = items.filter( function ( item ) {
+                               return existingItems.indexOf( item ) === -1;
+                       } );
+
+                       // Map to an array of OO.ui.MenuOptionWidgets
+                       filteredItems = filteredItems.map( function ( item ) {
+                               return new OO.ui.MenuOptionWidget( {
+                                       data: item,
+                                       label: item
+                               } );
+                       } );
+
+                       menu.addItems( filteredItems ).updateItemVisibility();
+               }.bind( this ) );
+       };
+
+       /**
+        * Searches for categories based on the input.
+        *
+        * @private
+        * @method
+        * @param {string} input The input used to prefix search categories
+        * @return {jQuery.Promise} Resolves with an array of categories
+        */
+       mw.widgets.CategorySelector.prototype.getNewMenuItems = function ( input ) {
+               var deferred = new $.Deferred(),
+                       catNsId = mw.config.get( 'wgNamespaceIds' ).category,
+                       api = new mw.Api();
+
+               api.get( {
+                       action: 'opensearch',
+                       namespace: catNsId,
+                       limit: this.limit,
+                       search: input
+               } ).done( function ( res ) {
+                       var categoryNames = res[ 1 ].map( function ( name ) {
+                               return mw.Title.newFromText( name, catNsId ).getMainText();
+                       } );
+
+                       deferred.resolve( categoryNames );
+               } );
+
+               return deferred.promise();
+       };
+}( jQuery, mediaWiki ) );
diff --git a/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css b/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css
new file mode 100644 (file)
index 0000000..73a50d8
--- /dev/null
@@ -0,0 +1,20 @@
+/*!
+ * MediaWiki Widgets - base ComplexTitleInputWidget styles.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+.mw-widget-complexTitleInputWidget .mw-widget-namespaceInputWidget,
+.mw-widget-complexTitleInputWidget .mw-widget-titleInputWidget {
+       display: inline-block;
+}
+
+.mw-widget-complexTitleInputWidget .mw-widget-namespaceInputWidget {
+       max-width: 20em;
+       margin-right: 0.5em;
+}
+
+.mw-widget-complexTitleInputWidget .mw-widget-titleInputWidget {
+       max-width: 29.5em;
+}
diff --git a/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js
new file mode 100644 (file)
index 0000000..0c6c15e
--- /dev/null
@@ -0,0 +1,63 @@
+/*!
+ * MediaWiki Widgets - ComplexTitleInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function ( $, mw ) {
+
+       /**
+        * Like TitleInputWidget, but the namespace has to be input through a separate dropdown field.
+        *
+        * @class
+        * @extends OO.ui.Widget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {Object} namespace Configuration for the NamespaceInputWidget dropdown with list of
+        *     namespaces
+        * @cfg {Object} title Configuration for the TitleInputWidget text field
+        */
+       mw.widgets.ComplexTitleInputWidget = function MwWidgetsComplexTitleInputWidget( config ) {
+               // Parent constructor
+               mw.widgets.ComplexTitleInputWidget.parent.call( this, config );
+
+               // Properties
+               this.namespace = new mw.widgets.NamespaceInputWidget( config.namespace );
+               this.title = new mw.widgets.TitleInputWidget( $.extend(
+                       {},
+                       config.title,
+                       {
+                               relative: true,
+                               namespace: config.namespace.value || null
+                       }
+               ) );
+
+               // Events
+               this.namespace.connect( this, { change: 'updateTitleNamespace' } );
+
+               // Initialization
+               this.$element
+                       .addClass( 'mw-widget-complexTitleInputWidget' )
+                       .append(
+                               this.namespace.$element,
+                               this.title.$element
+                       );
+               this.updateTitleNamespace();
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.widgets.ComplexTitleInputWidget, OO.ui.Widget );
+
+       /* Methods */
+
+       /**
+        * Update the namespace to use for search suggestions of the title when the value of namespace
+        * dropdown changes.
+        */
+       mw.widgets.ComplexTitleInputWidget.prototype.updateTitleNamespace = function () {
+               this.title.setNamespace( Number( this.namespace.getValue() ) );
+       };
+
+}( jQuery, mediaWiki ) );
index 8d952e5..657d9c5 100644 (file)
         *     field when it's empty. Should be the same as `inputFormat`, but translated to the user's
         *     language. When not given, defaults to a translated version of 'YYYY-MM-DD' or 'YYYY-MM',
         *     depending on `precision`.
+        * @cfg {boolean} [required=false] Mark the field as required. Implies `indicator: 'required'`.
+        * @cfg {string} [mustBeAfter] Validates the date to be after this. In the 'YYYY-MM-DD' format.
+        * @cfg {string} [mustBeBefore] Validates the date to be before this. In the 'YYYY-MM-DD' format.
         */
        mw.widgets.DateInputWidget = function MWWDateInputWidget( config ) {
                // Config initialization
                config = $.extend( { precision: 'day' }, config );
+               if ( config.required ) {
+                       if ( config.indicator === undefined ) {
+                               config.indicator = 'required';
+                       }
+               }
 
-               var placeholder;
+               var placeholder, mustBeAfter, mustBeBefore;
                if ( config.placeholder ) {
                        placeholder = config.placeholder;
                } else if ( config.inputFormat ) {
                this.inputFormat = config.inputFormat;
                this.displayFormat = config.displayFormat;
 
+               // Validate and set min and max dates as properties
+               mustBeAfter = moment( config.mustBeAfter, 'YYYY-MM-DD' );
+               mustBeBefore = moment( config.mustBeBefore, 'YYYY-MM-DD' );
+               if (
+                       config.mustBeAfter !== undefined &&
+                       mustBeAfter.isValid()
+               ) {
+                       this.mustBeAfter = mustBeAfter;
+               }
+
+               if (
+                       config.mustBeBefore !== undefined &&
+                       mustBeBefore.isValid()
+               ) {
+                       this.mustBeBefore = mustBeBefore;
+               }
+
                // Parent constructor
                mw.widgets.DateInputWidget.parent.call( this, config );
 
                } );
 
                // Initialization
+               if ( config.required ) {
+                       this.$input.attr( 'required', 'required' );
+                       this.$input.attr( 'aria-required', 'true' );
+               }
                // Move 'tabindex' from this.$input (which is invisible) to the visible handle
                this.setTabIndexedElement( this.handle.$element );
                this.handle.$element
         * @private
         */
        mw.widgets.DateInputWidget.prototype.onTextInputChange = function () {
-               var
+               var mom,
                        widget = this,
-                       value = this.textInput.getValue();
+                       value = this.textInput.getValue(),
+                       valid = this.isValidDate( value );
                this.inTextInput++;
-               this.textInput.isValid().done( function ( valid ) {
-                       if ( value === '' ) {
-                               // No date selected
-                               widget.setValue( '' );
-                       } else if ( valid ) {
-                               // Well-formed date value, parse and set it
-                               var mom = moment( value, widget.getInputFormat() );
-                               // Use English locale to avoid number formatting
-                               widget.setValue( mom.locale( 'en' ).format( widget.getInternalFormat() ) );
-                       } else {
-                               // Not well-formed, but possibly partial? Try updating the calendar, but do not set the
-                               // internal value. Generally this only makes sense when 'inputFormat' is little-endian (e.g.
-                               // 'YYYY-MM-DD'), but that's hard to check for, and might be difficult to handle the parsing
-                               // right for weird formats. So limit this trick to only when we're using the default
-                               // 'inputFormat', which is the same as the internal format, 'YYYY-MM-DD'.
-                               if ( widget.getInputFormat() === widget.getInternalFormat() ) {
-                                       widget.calendar.setDate( widget.textInput.getValue() );
-                               }
+
+               if ( value === '' ) {
+                       // No date selected
+                       widget.setValue( '' );
+               } else if ( valid ) {
+                       // Well-formed date value, parse and set it
+                       mom = moment( value, widget.getInputFormat() );
+                       // Use English locale to avoid number formatting
+                       widget.setValue( mom.locale( 'en' ).format( widget.getInternalFormat() ) );
+               } else {
+                       // Not well-formed, but possibly partial? Try updating the calendar, but do not set the
+                       // internal value. Generally this only makes sense when 'inputFormat' is little-endian (e.g.
+                       // 'YYYY-MM-DD'), but that's hard to check for, and might be difficult to handle the parsing
+                       // right for weird formats. So limit this trick to only when we're using the default
+                       // 'inputFormat', which is the same as the internal format, 'YYYY-MM-DD'.
+                       if ( widget.getInputFormat() === widget.getInternalFormat() ) {
+                               widget.calendar.setDate( widget.textInput.getValue() );
                        }
-                       widget.inTextInput--;
-               } );
+               }
+               widget.inTextInput--;
+
        };
 
        /**
                setTimeout( function () {
                        var $focussed = $( ':focus' );
                        // Deactivate unless the focus moved to something else inside this widget
-                       if ( !OO.ui.contains( widget.$element[ 0 ], $focussed[0], true ) ) {
+                       if ( !OO.ui.contains( widget.$element[ 0 ], $focussed[ 0 ], true ) ) {
                                widget.deactivate();
                        }
                }, 0 );
         * @private
         */
        mw.widgets.DateInputWidget.prototype.activate = function () {
+               this.calendar.resetUI();
                this.$element.addClass( 'mw-widget-dateInputWidget-active' );
                this.handle.toggle( false );
                this.textInput.toggle( true );
         * @private
         * @param {string} date Date string, to be valid, must be empty (no date selected) or in
         *     'YYYY-MM-DD' or 'YYYY-MM' format to be valid
+        * @returns {boolean}
         */
        mw.widgets.DateInputWidget.prototype.validateDate = function ( date ) {
                if ( date === '' ) {
                        return true;
                }
 
+               var isValid = this.isValidDate( date ) && this.isInRange( date );
+               this.setValidityFlag( isValid );
+               return isValid;
+       };
+
+       /**
+        * @private
+        * @param {string} date Date string, to be valid, must be empty (no date selected) or in
+        *     'YYYY-MM-DD' or 'YYYY-MM' format to be valid
+        * @returns {boolean}
+        */
+       mw.widgets.DateInputWidget.prototype.isValidDate = function ( date ) {
                // "Half-strict mode": for example, for the format 'YYYY-MM-DD', 2015-1-3 instead of 2015-01-03
                // is okay, but 2015-01 isn't, and neither is 2015-01-foo. Use Moment's "fuzzy" mode and check
                // parsing flags for the details (stoled from implementation of #isValid).
                return mom.isValid() && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0;
        };
 
+       /**
+        * Validates if the date is within the range configured with {@link #cfg-mustBeAfter}
+        * and {@link #cfg-mustBeBefore}.
+        *
+        * @private
+        * @param {string} date Date string, to be valid, must be empty (no date selected) or in
+        *     'YYYY-MM-DD' or 'YYYY-MM' format to be valid
+        * @returns {boolean}
+        */
+       mw.widgets.DateInputWidget.prototype.isInRange = function ( date ) {
+               var momentDate = moment( date, 'YYYY-MM-DD' ),
+                       isAfter = ( this.mustBeAfter === undefined || momentDate.isAfter( this.mustBeAfter ) ),
+                       isBefore = ( this.mustBeBefore === undefined || momentDate.isBefore( this.mustBeBefore ) );
+
+               return isAfter && isBefore;
+       };
+
+       /**
+        * Get the validity of current value.
+        *
+        * This method returns a promise that resolves if the value is valid and rejects if
+        * it isn't. Uses {@link #validateDate}.
+        *
+        * @return {jQuery.Promise} A promise that resolves if the value is valid, rejects if not.
+        */
+       mw.widgets.DateInputWidget.prototype.getValidity = function () {
+               var isValid = this.validateDate( this.getValue() );
+
+               if ( isValid ) {
+                       return $.Deferred().resolve().promise();
+               } else {
+                       return $.Deferred().reject().promise();
+               }
+       };
+
+       /**
+        * Sets the 'invalid' flag appropriately.
+        *
+        * @param {boolean} [isValid] Optionally override validation result
+        */
+       mw.widgets.DateInputWidget.prototype.setValidityFlag = function ( isValid ) {
+               var widget = this,
+                       setFlag = function ( valid ) {
+                               if ( !valid ) {
+                                       widget.$input.attr( 'aria-invalid', 'true' );
+                               } else {
+                                       widget.$input.removeAttr( 'aria-invalid' );
+                               }
+                               widget.setFlags( { invalid: !valid } );
+                       };
+
+               if ( isValid !== undefined ) {
+                       setFlag( isValid );
+               } else {
+                       this.getValidity().then( function () {
+                               setFlag( true );
+                       }, function () {
+                               setFlag( false );
+                       } );
+               }
+       };
+
 }( jQuery, mediaWiki ) );
index 1feb8f0..f78a18d 100644 (file)
                }
        }
 
+       &.oo-ui-flaggedElement-invalid {
+               .mw-widget-dateInputWidget-handle {
+                       border-color: red;
+                       box-shadow: inset 0 0 0 0 red;
+               }
+       }
+
        &-empty {
                .mw-widget-dateInputWidget-handle {
                        color: #ccc;
index ef42dc1..4f1b874 100644 (file)
@@ -14,7 +14,8 @@
         *
         * @constructor
         * @param {Object} [config] Configuration options
-        * @cfg {string|null} includeAllValue Value for "all namespaces" option, if any
+        * @cfg {string|null} [includeAllValue] Value for "all namespaces" option, if any
+        * @cfg {number[]} [exclude] List of namespace numbers to exclude from the selector
         */
        mw.widgets.NamespaceInputWidget = function MwWidgetsNamespaceInputWidget( config ) {
                // Configuration initialization
         */
        mw.widgets.NamespaceInputWidget.prototype.getNamespaceDropdownOptions = function ( config ) {
                var options,
+                       exclude = config.exclude || [],
                        NS_MAIN = 0;
 
                options = $.map( mw.config.get( 'wgFormattedNamespaces' ), function ( name, ns ) {
-                       if ( ns < NS_MAIN ) {
+                       if ( ns < NS_MAIN || exclude.indexOf( Number( ns ) ) !== -1 ) {
                                return null; // skip
                        }
                        ns = String( ns );
index cf4d788..d5a7abc 100644 (file)
                var widget = this;
 
                // Config initialization
-               config = $.extend( { maxLength: 255 }, config );
+               config = $.extend( {
+                       maxLength: 255,
+                       limit: 10
+               }, config );
 
                // Parent constructor
                mw.widgets.TitleInputWidget.parent.call( this, $.extend( {}, config, { autocomplete: false } ) );
@@ -38,7 +41,7 @@
                OO.ui.mixin.LookupElement.call( this, config );
 
                // Properties
-               this.limit = config.limit || 10;
+               this.limit = config.limit;
                this.maxLength = config.maxLength;
                this.namespace = config.namespace !== undefined ? config.namespace : null;
                this.relative = config.relative !== undefined ? config.relative : true;
 
        /* Methods */
 
+       /**
+        * Get the namespace to prepend to titles in suggestions, if any.
+        *
+        * @return {number|null} Namespace number
+        */
+       mw.widgets.TitleInputWidget.prototype.getNamespace = function () {
+               return this.namespace;
+       };
+
+       /**
+        * Set the namespace to prepend to titles in suggestions, if any.
+        *
+        * @param {number|null} namespace Namespace number
+        */
+       mw.widgets.TitleInputWidget.prototype.setNamespace = function ( namespace ) {
+               this.namespace = namespace;
+               this.lookupCache = {};
+               this.closeLookupMenu();
+       };
+
        /**
         * @inheritdoc
         */
                                        widget.interwikiPrefixes.indexOf( interwiki ) !== -1
                                ) {
                                        return $.Deferred().resolve( { query: {
-                                               pages: [{
+                                               pages: [ {
                                                        title: widget.value
-                                               }]
+                                               } ]
                                        } } ).promise( promiseAbortObject );
                                } else {
                                        params = {
 
                if ( data.redirects ) {
                        for ( i = 0, len = data.redirects.length; i < len; i++ ) {
-                               redirect = data.redirects[i];
-                               redirectsTo[redirect.to] = redirectsTo[redirect.to] || [];
-                               redirectsTo[redirect.to].push( redirect.from );
+                               redirect = data.redirects[ i ];
+                               redirectsTo[ redirect.to ] = redirectsTo[ redirect.to ] || [];
+                               redirectsTo[ redirect.to ].push( redirect.from );
                        }
                }
 
                for ( index in data.pages ) {
-                       suggestionPage = data.pages[index];
-                       pageData[suggestionPage.title] = {
+                       suggestionPage = data.pages[ index ];
+                       pageData[ suggestionPage.title ] = {
                                missing: suggestionPage.missing !== undefined,
                                redirect: suggestionPage.redirect !== undefined,
                                disambiguation: OO.getProp( suggestionPage, 'pageprops', 'disambiguation' ) !== undefined,
                                titles.push( suggestionPage.title );
                        }
 
-                       redirects = redirectsTo[suggestionPage.title] || [];
+                       redirects = redirectsTo[ suggestionPage.title ] || [];
                        for ( i = 0, len = redirects.length; i < len; i++ ) {
-                               pageData[redirects[i]] = {
+                               pageData[ redirects[ i ] ] = {
                                        missing: false,
                                        redirect: true,
                                        disambiguation: false,
                                        description: mw.msg( 'mw-widgets-titleinput-description-redirect', suggestionPage.title )
                                };
-                               titles.push( redirects[i] );
+                               titles.push( redirects[ i ] );
                        }
                }
 
                );
 
                if ( !pageExists ) {
-                       pageData[this.value] = {
+                       pageData[ this.value ] = {
                                missing: true, redirect: false, disambiguation: false,
                                description: mw.msg( 'mw-widgets-titleinput-description-new-page' )
                        };
                        titles.push( this.value );
                }
                for ( i = 0, len = titles.length; i < len; i++ ) {
-                       page = pageData[titles[i]] || {};
-                       items.push( new mw.widgets.TitleOptionWidget( this.getOptionWidgetData( titles[i], page ) ) );
+                       page = pageData[ titles[ i ] ] || {};
+                       items.push( new mw.widgets.TitleOptionWidget( this.getOptionWidgetData( titles[ i ], page ) ) );
                }
 
                return items;
index d540877..0d0fb73 100644 (file)
@@ -80,7 +80,7 @@
                        list: 'allusers',
                        // Prefix of list=allusers is case sensitive. Normalise first
                        // character to uppercase so that "fo" may yield "Foo".
-                       auprefix: inputValue[0].toUpperCase() + inputValue.slice( 1 ),
+                       auprefix: inputValue[ 0 ].toUpperCase() + inputValue.slice( 1 ),
                        aulimit: this.limit
                } );
        };
                        items = [];
 
                for ( i = 0, len = data.length; i < len; i++ ) {
-                       user = data[i] || {};
+                       user = data[ i ] || {};
                        items.push( new OO.ui.MenuOptionWidget( {
                                label: user.name,
                                data: user.name
diff --git a/resources/src/mediawiki/images/question.png b/resources/src/mediawiki/images/question.png
new file mode 100644 (file)
index 0000000..f7405d2
Binary files /dev/null and b/resources/src/mediawiki/images/question.png differ
diff --git a/resources/src/mediawiki/images/question.svg b/resources/src/mediawiki/images/question.svg
new file mode 100644 (file)
index 0000000..98fbe8d
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06"><path fill="#575757" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/></svg>
\ No newline at end of file
index be63936..fe8520b 100644 (file)
 
        /**
         * Add categories to the upload.
+        *
         * @param {string[]} categories Array of categories to which this upload will be added.
         */
        ForeignStructuredUpload.prototype.addCategories = function ( categories ) {
                var i, category;
 
                for ( i = 0; i < categories.length; i++ ) {
-                       category = categories[i];
+                       category = categories[ i ];
                        this.categories.push( category );
                }
        };
 
        /**
         * Add a description to the upload.
+        *
         * @param {string} language The language code for the description's language. Must have a template on the target wiki to work properly.
         * @param {string} description The description of the file.
         */
@@ -53,6 +55,7 @@
 
        /**
         * Set the date of creation for the upload.
+        *
         * @param {Date} date
         */
        ForeignStructuredUpload.prototype.setDate = function ( date ) {
@@ -62,6 +65,7 @@
        /**
         * Get the text of the file page, to be created on upload. Brings together
         * several different pieces of information to create useful text.
+        *
         * @return {string}
         */
        ForeignStructuredUpload.prototype.getText = function () {
@@ -85,6 +89,7 @@
 
        /**
         * Gets the wikitext for the creation date of this upload.
+        *
         * @private
         * @return {string}
         */
        /**
         * Gets the name of the template to use for creating the file metadata.
         * Override in subclasses for other templates.
+        *
         * @private
         * @return {string}
         */
        /**
         * Fetches the wikitext for any descriptions that have been added
         * to the upload.
+        *
         * @private
         * @return {string}
         */
                var i, desc, templateCalls = [];
 
                for ( i = 0; i < this.descriptions.length; i++ ) {
-                       desc = this.descriptions[i];
+                       desc = this.descriptions[ i ];
                        templateCalls.push( '{{' + desc.language + '|' + desc.text + '}}' );
                }
 
        /**
         * Fetches the wikitext for the categories to which the upload will
         * be added.
+        *
         * @private
         * @return {string}
         */
                var i, cat, categoryLinks = [];
 
                for ( i = 0; i < this.categories.length; i++ ) {
-                       cat = this.categories[i];
+                       cat = this.categories[ i ];
                        categoryLinks.push( '[[Category:' + cat + ']]' );
                }
 
 
        /**
         * Gets the wikitext for the license of the upload. Abstract for now.
+        *
         * @private
         * @return {string}
         */
 
        /**
         * Get the username.
+        *
         * @private
         * @return {string}
         */
index 661ab74..910a78f 100644 (file)
@@ -4,6 +4,7 @@
  * @since 1.18
  */
 ( function ( mw, $ ) {
+       /*jshint latedef:false */
 
        /**
         * @class mw.Title
                        return false;
                }
                ns = ns.toLowerCase();
-               id = mw.config.get( 'wgNamespaceIds' )[ns];
+               id = mw.config.get( 'wgNamespaceIds' )[ ns ];
                if ( id === undefined ) {
                        return false;
                }
                        .replace( rUnderscoreTrim, '' );
 
                // Process initial colon
-               if ( title !== '' && title[0] === ':' ) {
+               if ( title !== '' && title[ 0 ] === ':' ) {
                        // Initial colon means main namespace instead of specified default
                        namespace = NS_MAIN;
                        title = title
                // Process namespace prefix (if any)
                m = title.match( rSplit );
                if ( m ) {
-                       id = getNsIdByName( m[1] );
+                       id = getNsIdByName( m[ 1 ] );
                        if ( id !== false ) {
                                // Ordinary namespace
                                namespace = id;
-                               title = m[2];
+                               title = m[ 2 ];
 
                                // For Talk:X pages, make sure X has no "namespace" prefix
                                if ( namespace === NS_TALK && ( m = title.match( rSplit ) ) ) {
                                        // Disallow titles like Talk:File:x (subject should roundtrip: talk:file:x -> file:x -> file_talk:x)
-                                       if ( getNsIdByName( m[1] ) !== false ) {
+                                       if ( getNsIdByName( m[ 1 ] ) !== false ) {
                                                return false;
                                        }
                                }
                }
 
                // Any remaining initial :s are illegal.
-               if ( title[0] === ':' ) {
+               if ( title[ 0 ] === ':' ) {
                        return false;
                }
 
                        rules = sanitationRules;
 
                for ( i = 0, ruleLength = rules.length; i < ruleLength; ++i ) {
-                       rule = rules[i];
+                       rule = rules[ i ];
                        for ( m = 0, filterLength = filter.length; m < filterLength; ++m ) {
-                               if ( rule[filter[m]] ) {
+                               if ( rule[ filter[ m ] ] ) {
                                        s = s.replace( rule.pattern, rule.replace );
                                }
                        }
         * @param {number} [defaultNamespace=NS_MAIN]
         *  If given, will used as default namespace for the given title.
         * @param {Object} [options] additional options
-        * @param {string} [options.fileExtension='']
-        *  If the title is about to be created for the Media or File namespace,
-        *  ensures the resulting Title has the correct extension. Useful, for example
-        *  on systems that predict the type by content-sniffing, not by file extension.
-        *  If different from empty string, `forUploading` is assumed.
         * @param {boolean} [options.forUploading=true]
         *  Makes sure that a file is uploadable under the title returned.
         *  There are pages in the file namespace under which file upload is impossible.
         * @return {mw.Title|null} A valid Title object or null if the input cannot be turned into a valid title
         */
        Title.newFromUserInput = function ( title, defaultNamespace, options ) {
-               var namespace, m, id, ext, parts, normalizeExtension;
+               var namespace, m, id, ext, parts;
 
                // defaultNamespace is optional; check whether options moves up
                if ( arguments.length < 3 && $.type( defaultNamespace ) === 'object' ) {
 
                // merge options into defaults
                options = $.extend( {
-                       fileExtension: '',
                        forUploading: true
                }, options );
 
-               normalizeExtension = function ( extension ) {
-                       // Remove only trailing space (that is removed by MW anyway)
-                       extension = extension.toLowerCase().replace( /\s*$/, '' );
-                       return extension;
-               };
-
                namespace = defaultNamespace === undefined ? NS_MAIN : defaultNamespace;
 
                // Normalise whitespace and remove duplicates
                title = $.trim( title.replace( rWhitespace, ' ' ) );
 
                // Process initial colon
-               if ( title !== '' && title[0] === ':' ) {
+               if ( title !== '' && title[ 0 ] === ':' ) {
                        // Initial colon means main namespace instead of specified default
                        namespace = NS_MAIN;
                        title = title
                // Process namespace prefix (if any)
                m = title.match( rSplit );
                if ( m ) {
-                       id = getNsIdByName( m[1] );
+                       id = getNsIdByName( m[ 1 ] );
                        if ( id !== false ) {
                                // Ordinary namespace
                                namespace = id;
-                               title = m[2];
+                               title = m[ 2 ];
                        }
                }
 
                if ( namespace === NS_MEDIA
-                       || ( ( options.forUploading || options.fileExtension ) && ( namespace === NS_FILE ) )
+                       || ( options.forUploading && ( namespace === NS_FILE ) )
                ) {
 
                        title = sanitize( title, [ 'generalRule', 'fileRule' ] );
                                // Get the last part, which is supposed to be the file extension
                                ext = parts.pop();
 
-                               // Does the supplied file name carry the desired file extension?
-                               if ( options.fileExtension
-                                       && normalizeExtension( ext ) !== normalizeExtension( options.fileExtension )
-                               ) {
-
-                                       // No, push back, whatever there was after the dot
-                                       parts.push( ext );
-
-                                       // And add the desired file extension later
-                                       ext = options.fileExtension;
-                               }
-
                                // Remove whitespace of the name part (that W/O extension)
                                title = $.trim( parts.join( '.' ) );
 
                                // Missing file extension
                                title = $.trim( parts.join( '.' ) );
 
-                               if ( options.fileExtension ) {
-
-                                       // Cut, if too long and append the desired file extension
-                                       title = trimFileNameToByteLength( title, options.fileExtension );
-
-                               } else {
-
-                                       // Name has no file extension and a fallback wasn't provided either
-                                       return null;
-                               }
+                               // Name has no file extension and a fallback wasn't provided either
+                               return null;
                        }
                } else {
 
         * @static
         * @param {string} uncleanName The unclean file name including file extension but
         *   without namespace
-        * @param {string} [fileExtension] the desired file extension
         * @return {mw.Title|null} A valid Title object or null if the title is invalid
         */
-       Title.newFromFileName = function ( uncleanName, fileExtension ) {
+       Title.newFromFileName = function ( uncleanName ) {
 
                return Title.newFromUserInput( 'File:' + uncleanName, {
-                       fileExtension: fileExtension,
                        forUploading: true
                } );
        };
 
                        recount = regexes.length;
 
-               src = img.jquery ? img[0].src : img.src;
+               src = img.jquery ? img[ 0 ].src : img.src;
 
                matches = src.match( thumbPhpRegex );
 
                decodedSrc = decodeURIComponent( src );
 
                for ( i = 0; i < recount; i++ ) {
-                       regex = regexes[i];
+                       regex = regexes[ i ];
                        matches = decodedSrc.match( regex );
 
-                       if ( matches && matches[1] ) {
-                               return mw.Title.newFromText( 'File:' + matches[1] );
+                       if ( matches && matches[ 1 ] ) {
+                               return mw.Title.newFromText( 'File:' + matches[ 1 ] );
                        }
                }
 
                        obj = Title.exist.pages;
 
                if ( type === 'string' ) {
-                       match = obj[title];
+                       match = obj[ title ];
                } else if ( type === 'object' && title instanceof Title ) {
-                       match = obj[title.toString()];
+                       match = obj[ title.toString() ];
                } else {
                        throw new Error( 'mw.Title.exists: title must be a string or an instance of Title' );
                }
                pages: {},
 
                set: function ( titles, state ) {
-                       titles = $.isArray( titles ) ? titles : [titles];
+                       titles = $.isArray( titles ) ? titles : [ titles ];
                        state = state === undefined ? true : !!state;
                        var i,
                                pages = this.pages,
                                len = titles.length;
 
                        for ( i = 0; i < len; i++ ) {
-                               pages[ titles[i] ] = state;
+                               pages[ titles[ i ] ] = state;
                        }
                        return true;
                }
        };
 
+       /**
+        * Normalize a file extension to the common form, making it lowercase and checking some synonyms,
+        * and ensure it's clean. Extensions with non-alphanumeric characters will be discarded.
+        * Keep in sync with File::normalizeExtension() in PHP.
+        *
+        * @param {string} extension File extension (without the leading dot)
+        * @return {string} File extension in canonical form
+        */
+       Title.normalizeExtension = function ( extension ) {
+               var
+                       lower = extension.toLowerCase(),
+                       squish = {
+                               htm: 'html',
+                               jpeg: 'jpg',
+                               mpeg: 'mpg',
+                               tiff: 'tif',
+                               ogv: 'ogg'
+                       };
+               if ( squish.hasOwnProperty( lower ) ) {
+                       return squish[ lower ];
+               } else if ( /^[0-9a-z]+$/.test( lower ) ) {
+                       return lower;
+               } else {
+                       return '';
+               }
+       };
+
        /* Public members */
 
        Title.prototype = {
                        ) {
                                return this.title;
                        }
-                       return this.title[0].toUpperCase() + this.title.slice( 1 );
+                       return this.title[ 0 ].toUpperCase() + this.title.slice( 1 );
                },
 
                /**
index 96db7cc..36fbd46 100644 (file)
@@ -34,7 +34,7 @@
         * To use, setup a {@link OO.ui.WindowManager window manager} like for normal
         * dialogs:
         *
-        *     var uploadDialog = new mw.Upload.Dialog( { size: 'small' } );
+        *     var uploadDialog = new mw.Upload.Dialog();
         *     var windowManager = new OO.ui.WindowManager();
         *     $( 'body' ).append( windowManager.$element );
         *     windowManager.addWindows( [ uploadDialog ] );
 
                // Validation
                function checkValidity() {
-                       var validityPromises = [
-                               dialog.filenameWidget.isValid(),
-                               dialog.descriptionWidget.isValid()
-                       ];
-
-                       $.when.apply( $, validityPromises ).done( function () {
-                               var allValid,
-                                       values = Array.prototype.slice.apply( arguments );
-                               allValid = values.every( function ( value ) {
-                                       return value;
-                               } );
-
-                               dialog.actions.setAbilities( { save: allValid } );
+                       $.when(
+                               dialog.filenameWidget.getValidity(),
+                               dialog.descriptionWidget.getValidity()
+                       ).done( function () {
+                               dialog.actions.setAbilities( { save: true } );
+                       } ).fail( function () {
+                               dialog.actions.setAbilities( { save: false } );
                        } );
                }
                this.filenameWidget.on( 'change', checkValidity );
index 58c66c1..79628de 100644 (file)
@@ -64,6 +64,7 @@
 
        /**
         * Set the text of the file page, to be created on file upload.
+        *
         * @param {string} text
         */
        UP.setText = function ( text ) {
@@ -72,6 +73,7 @@
 
        /**
         * Set the filename, to be finalized on upload.
+        *
         * @param {string} filename
         */
        UP.setFilename = function ( filename ) {
         * Sets the filename based on the filename as it was on the upload.
         */
        UP.setFilenameFromFile = function () {
-               if ( this.file.nodeType && this.file.nodeType === Node.ELEMENT_NODE ) {
+               var file = this.getFile();
+               if ( file.nodeType && file.nodeType === Node.ELEMENT_NODE ) {
                        // File input element, use getBasename to cut out the path
-                       this.setFilename( this.getBasename( this.file.value ) );
-               } else if ( this.file.name && this.file.lastModified ) {
+                       this.setFilename( this.getBasename( file.value ) );
+               } else if ( file.name && file.lastModified ) {
                        // HTML5 FileAPI File object, but use getBasename to be safe
-                       this.setFilename( this.getBasename( this.file.name ) );
+                       this.setFilename( this.getBasename( file.name ) );
                }
        };
 
        /**
         * Set the file to be uploaded.
+        *
         * @param {HTMLInputElement|File} file
         */
        UP.setFile = function ( file ) {
 
        /**
         * Set whether the file should be watchlisted after upload.
+        *
         * @param {boolean} watchlist
         */
        UP.setWatchlist = function ( watchlist ) {
 
        /**
         * Set the edit comment for the upload.
+        *
         * @param {string} comment
         */
        UP.setComment = function ( comment ) {
 
        /**
         * Get the text of the file page, to be created on file upload.
+        *
         * @return {string}
         */
        UP.getText = function () {
 
        /**
         * Get the filename, to be finalized on upload.
+        *
         * @return {string}
         */
        UP.getFilename = function () {
 
        /**
         * Get the file being uploaded.
+        *
         * @return {HTMLInputElement|File}
         */
        UP.getFile = function () {
 
        /**
         * Get the boolean for whether the file will be watchlisted after upload.
+        *
         * @return {boolean}
         */
        UP.getWatchlist = function () {
 
        /**
         * Get the current value of the edit comment for the upload.
+        *
         * @return {string}
         */
        UP.getComment = function () {
 
        /**
         * Gets the base filename from a path name.
+        *
         * @param {string} path
         * @return {string}
         */
 
        /**
         * Gets the state of the upload.
+        *
         * @return {mw.Upload.State}
         */
        UP.getState = function () {
         * Get the imageinfo object for the finished upload.
         * Only available once the upload is finished! Don't try to get it
         * beforehand.
+        *
         * @return {Object|undefined}
         */
        UP.getImageInfo = function () {
 
        /**
         * Upload the file directly.
+        *
         * @return {jQuery.Promise}
         */
        UP.upload = function () {
                var upload = this;
 
-               if ( !this.file ) {
+               if ( !this.getFile() ) {
                        return $.Deferred().reject( 'No file to upload. Call setFile to add one.' );
                }
 
-               if ( !this.filename ) {
+               if ( !this.getFilename() ) {
                        return $.Deferred().reject( 'No filename set. Call setFilename to add one.' );
                }
 
                this.state = Upload.State.UPLOADING;
 
-               return this.api.upload( this.file, {
-                       watchlist: ( this.watchlist === true ) ? 1 : undefined,
-                       comment: this.comment,
-                       filename: this.filename,
-                       text: this.text
+               return this.api.upload( this.getFile(), {
+                       watchlist: ( this.getWatchlist() ) ? 1 : undefined,
+                       comment: this.getComment(),
+                       filename: this.getFilename(),
+                       text: this.getText()
                } ).then( function ( result ) {
                        upload.state = Upload.State.UPLOADED;
                        upload.imageinfo = result.upload.imageinfo;
 
        /**
         * Upload the file to the stash to be completed later.
+        *
         * @return {jQuery.Promise}
         */
        UP.uploadToStash = function () {
                var upload = this;
 
-               if ( !this.file ) {
+               if ( !this.getFile() ) {
                        return $.Deferred().reject( 'No file to upload. Call setFile to add one.' );
                }
 
-               if ( !this.filename ) {
+               if ( !this.getFilename() ) {
                        this.setFilenameFromFile();
                }
 
                this.state = Upload.State.UPLOADING;
 
-               this.stashPromise = this.api.uploadToStash( this.file, {
-                       filename: this.filename
+               this.stashPromise = this.api.uploadToStash( this.getFile(), {
+                       filename: this.getFilename()
                } ).then( function ( finishStash ) {
                        upload.state = Upload.State.STASHED;
                        return finishStash;
 
        /**
         * Finish a stash upload.
+        *
         * @return {jQuery.Promise}
         */
        UP.finishStashUpload = function () {
                        upload.state = Upload.State.UPLOADING;
 
                        return finishStash( {
-                               watchlist: ( upload.watchlist === true ) ? 1 : undefined,
+                               watchlist: ( upload.getWatchlist() ) ? 1 : undefined,
                                comment: upload.getComment(),
                                filename: upload.getFilename(),
                                text: upload.getText()
index 07d8900..29b224e 100644 (file)
                if ( val === undefined || val === null || val === '' ) {
                        return '';
                }
+               /* jshint latedef:false */
                return pre + ( raw ? val : mw.Uri.encode( val ) ) + post;
+               /* jshint latedef:true */
        }
 
        /**
         * Regular expressions to parse many common URIs.
         *
+        * As they are gnarly, they have been moved to separate files to allow us to format them in the
+        * 'extended' regular expression format (which JavaScript normally doesn't support). The subset of
+        * features handled is minimal, but just the free whitespace gives us a lot.
+        *
         * @private
         * @static
         * @property {Object} parser
         */
        var parser = {
-               strict: /^(?:([^:\/?#]+):)?(?:\/\/(?:(?:([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?([^:\/?#]*)(?::(\d*))?)?((?:[^?#\/]*\/)*[^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
-               loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?(?:(?:([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?([^:\/?#]*)(?::(\d*))?((?:\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?[^?#\/]*)(?:\?([^#]*))?(?:#(.*))?/
+               strict: mw.template.get( 'mediawiki.Uri', 'strict.regexp' ).render(),
+               loose: mw.template.get( 'mediawiki.Uri', 'loose.regexp' ).render()
        },
 
        /**
                 * @param {boolean} [options.overrideKeys=false] Whether to let duplicate query parameters
                 *  override each other (`true`) or automagically convert them to an array (`false`).
                 */
+               /* jshint latedef:false */
                function Uri( uri, options ) {
                        var prop,
                                defaultUri = getDefaultUri();
                                                // Only copy direct properties, not inherited ones
                                                if ( uri.hasOwnProperty( prop ) ) {
                                                        // Deep copy object properties
-                                                       if ( $.isArray( uri[prop] ) || $.isPlainObject( uri[prop] ) ) {
-                                                               this[prop] = $.extend( true, {}, uri[prop] );
+                                                       if ( $.isArray( uri[ prop ] ) || $.isPlainObject( uri[ prop ] ) ) {
+                                                               this[ prop ] = $.extend( true, {}, uri[ prop ] );
                                                        } else {
-                                                               this[prop] = uri[prop];
+                                                               this[ prop ] = uri[ prop ];
                                                        }
                                                }
                                        }
                                        this.port = defaultUri.port;
                                }
                        }
-                       if ( this.path && this.path[0] !== '/' ) {
+                       if ( this.path && this.path[ 0 ] !== '/' ) {
                                // A real relative URL, relative to defaultUri.path. We can't really handle that since we cannot
                                // figure out whether the last path component of defaultUri.path is a directory or a file.
                                throw new Error( 'Bad constructor arguments' );
diff --git a/resources/src/mediawiki/mediawiki.Uri.loose.regexp b/resources/src/mediawiki/mediawiki.Uri.loose.regexp
new file mode 100644 (file)
index 0000000..300ab3b
--- /dev/null
@@ -0,0 +1,22 @@
+^
+(?:
+       (?![^:@]+:[^:@/]*@)
+       (?<protocol>[^:/?#.]+):
+)?
+(?://)?
+(?:(?:
+       (?<user>[^:@/?#]*)
+       (?::(?<password>[^:@/?#]*))?
+)?@)?
+(?<host>[^:/?#]*)
+(?::(?<port>\d*))?
+(
+       (?:/
+               (?:[^?#]
+                       (?![^?#/]*\.[^?#/.]+(?:[?#]|$))
+               )*/?
+       )?
+       [^?#/]*
+)
+(?:\?(?<query>[^#]*))?
+(?:\#(?<fragment>.*))?
diff --git a/resources/src/mediawiki/mediawiki.Uri.strict.regexp b/resources/src/mediawiki/mediawiki.Uri.strict.regexp
new file mode 100644 (file)
index 0000000..2ac7d2f
--- /dev/null
@@ -0,0 +1,13 @@
+^
+(?:(?<protocol>[^:/?#]+):)?
+(?://(?:
+       (?:
+               (?<user>[^:@/?#]*)
+               (?::(?<password>[^:@/?#]*))?
+       )?@)?
+       (?<host>[^:/?#]*)
+       (?::(?<port>\d*))?
+)?
+(?<path>(?:[^?#/]*/)*[^?#]*)
+(?:\?(?<query>[^#]*))?
+(?:\#(?<fragment>.*))?
index 8d1faa6..4d0c135 100644 (file)
 
                /**
                 * Return the object with functions to release and manually trigger the confirm alert
+                *
                 * @ignore
                 */
                return {
                        /**
                         * Remove all event listeners and don't show an alert anymore, if the user wants to leave
                         * the page.
+                        *
                         * @ignore
                         */
                        release: function () {
@@ -92,8 +94,9 @@
                         * Trigger the module's function manually: Check, if options.test() returns true and show
                         * an alert to the user if he/she want to leave this page. Returns false, if options.test() returns
                         * false or the user cancelled the alert window (~don't leave the page), true otherwise.
+                        *
                         * @ignore
-                        * @return boolean
+                        * @return {boolean}
                         */
                        trigger: function () {
                                // use confirm to show the message to the user (if options.text() is true)
index bdff99f..f721009 100644 (file)
                                                className: 'mw-debug-pane',
                                                id: 'mw-debug-pane-' + id
                                        } )
-                                       .append( panes[id] )
+                                       .append( panes[ id ] )
                                        .appendTo( $container );
                        }
 
                        };
 
                        for ( i = 0, length = this.data.log.length; i < length; i += 1 ) {
-                               entry = this.data.log[i];
+                               entry = this.data.log[ i ];
                                entry.typeText = entryTypeText( entry.type );
 
                                $( '<tr>' )
                        .appendTo( $table );
 
                        for ( i = 0, length = this.data.queries.length; i < length; i += 1 ) {
-                               query = this.data.queries[i];
+                               query = this.data.queries[ i ];
 
                                $( '<tr>' )
                                        .append( $( '<td>' ).text( i + 1 ) )
                                        .append( $( '<td>' ).text( query.sql ) )
                                        .append( $( '<td class="stats">' ).text( ( query.time * 1000 ).toFixed( 4 ) + 'ms' ) )
-                                       .append( $( '<td>' ).text( query['function'] ) )
+                                       .append( $( '<td>' ).text( query[ 'function' ] ) )
                                .appendTo( $table );
                        }
 
                        $list = $( '<ul>' );
 
                        for ( i = 0, length = this.data.debugLog.length; i < length; i += 1 ) {
-                               line = this.data.debugLog[i];
+                               line = this.data.debugLog[ i ];
                                $( '<li>' )
                                        .html( mw.html.escape( line ).replace( /\n/g, '<br />\n' ) )
                                        .appendTo( $list );
 
                                        $( '<tr>' )
                                                .append( $( '<th>' ).text( key ) )
-                                               .append( $( '<td>' ).text( data[key] ) )
+                                               .append( $( '<td>' ).text( data[ key ] ) )
                                                .appendTo( $table );
                                }
 
                        $table = $( '<table>' );
 
                        for ( i = 0, length = this.data.includes.length; i < length; i += 1 ) {
-                               file = this.data.includes[i];
+                               file = this.data.includes[ i ];
                                $( '<tr>' )
                                        .append( $( '<td>' ).text( file.name ) )
                                        .append( $( '<td class="nr">' ).text( file.size ) )
index 9f4f19d..46b8479 100644 (file)
@@ -1,5 +1,6 @@
 /**
  * Try to catch errors in modules which don't do their own error handling.
+ *
  * @class mw.errorLogger
  * @singleton
  */
@@ -24,6 +25,7 @@
                /**
                 * Install a window.onerror handler that will report via mw.track, while preserving
                 * any previous handler.
+                *
                 * @param {Object} window
                 */
                installGlobalHandler: function ( window ) {
@@ -35,6 +37,7 @@
 
                        /**
                         * Dumb window.onerror handler which forwards the errors via mw.track.
+                        *
                         * @fires global_error
                         */
                        window.onerror = function ( errorMessage, url, lineNumber, columnNumber, errorObject ) {
index 930bfec..75b1f80 100644 (file)
                        }
 
                        for ( key in buckets ) {
-                               range += buckets[key];
+                               range += buckets[ key ];
                        }
 
                        hash = hashString( experiment.name + ':' + token );
                        max = ( hash / MAX_INT32_UNSIGNED ) * range;
 
                        for ( key in buckets ) {
-                               acc += buckets[key];
+                               acc += buckets[ key ];
 
                                if ( max <= acc ) {
                                        return key;
index d90ca4b..d226ed9 100644 (file)
@@ -86,6 +86,7 @@
         * Respond to dialog submit event. If the information was
         * submitted, either successfully or with an error, open
         * a MessageDialog to thank the user.
+        *
         * @param {string} [status] A status of the end of operation
         *  of the main feedback dialog. Empty if the dialog was
         *  dismissed with no action or the user followed the button
 
        /**
         * Set the bug report link
+        *
         * @param {string} link Link to the external bug report form
         */
        mw.Feedback.Dialog.prototype.setBugReportLink = function ( link ) {
 
        /**
         * Get the bug report link
+        *
         * @returns {string} Link to the external bug report form
         */
        mw.Feedback.Dialog.prototype.getBugReportLink = function () {
index 1dda2ac..a07a403 100644 (file)
@@ -1,8 +1,6 @@
 /* Styles for links to RSS/Atom feeds in sidebar */
 
-/* Until the copy of this code in mediawiki.legacy.shared is removed, which no longer @embeds the
- * background image, the selector below must be kept more specific. */
-#feedlinks a.feedlink {
+a.feedlink {
        /* SVG support using a transparent gradient to guarantee cross-browser
         * compatibility (browsers able to understand gradient syntax support also SVG).
         * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
@@ -11,4 +9,8 @@
        background-image: -webkit-linear-gradient(transparent, transparent), url(images/feed-icon.svg);
        /* @embed */
        background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+       background-position: center left;
+       background-repeat: no-repeat;
+       background-size: 12px 12px;
+       padding-left: 16px;
 }
index 58ca445..f4af4ba 100644 (file)
@@ -1,4 +1,4 @@
-@import "mediawiki.ui/variables"
+@import "mediawiki.ui/variables";
 
 .mediawiki-filewarning {
        visibility: hidden;
diff --git a/resources/src/mediawiki/mediawiki.htmlform.css b/resources/src/mediawiki/mediawiki.htmlform.css
new file mode 100644 (file)
index 0000000..e41248c
--- /dev/null
@@ -0,0 +1,51 @@
+/* HTMLForm styles */
+
+table.mw-htmlform-nolabel td.mw-label {
+       width: 1px;
+}
+
+.mw-htmlform-invalid-input td.mw-input input {
+       border-color: red;
+}
+
+.mw-htmlform-flatlist div.mw-htmlform-flatlist-item {
+       display: inline;
+       margin-right: 1em;
+       white-space: nowrap;
+}
+
+/* HTMLCheckMatrix */
+
+.mw-htmlform-matrix td {
+       padding-left: 0.5em;
+       padding-right: 0.5em;
+}
+
+tr.mw-htmlform-vertical-label td.mw-label {
+       text-align: left !important;
+}
+
+.mw-icon-question {
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG).
+        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
+       background-image: url(images/question.png);
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/question.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/question.svg);
+       background-repeat: no-repeat;
+       background-size: 13px 13px;
+       display: inline-block;
+       height: 13px;
+       width: 13px;
+       margin-left: 4px;
+}
+
+.mw-icon-question:lang(ar),
+.mw-icon-question:lang(fa),
+.mw-icon-question:lang(ur) {
+       -webkit-transform: scaleX(-1);
+       -ms-transform: scaleX(-1);
+       transform: scaleX(-1);
+}
index 7fdaa6e..8c6f3ab 100644 (file)
@@ -53,7 +53,7 @@
        function hideIfParse( $el, spec ) {
                var op, i, l, v, $field, $fields, fields, func, funcs, getVal;
 
-               op = spec[0];
+               op = spec[ 0 ];
                l = spec.length;
                switch ( op ) {
                        case 'AND':
                                funcs = [];
                                fields = [];
                                for ( i = 1; i < l; i++ ) {
-                                       if ( !$.isArray( spec[i] ) ) {
+                                       if ( !$.isArray( spec[ i ] ) ) {
                                                throw new Error( op + ' parameters must be arrays' );
                                        }
-                                       v = hideIfParse( $el, spec[i] );
-                                       fields = fields.concat( v[0].toArray() );
-                                       funcs.push( v[1] );
+                                       v = hideIfParse( $el, spec[ i ] );
+                                       fields = fields.concat( v[ 0 ].toArray() );
+                                       funcs.push( v[ 1 ] );
                                }
                                $fields = $( fields );
 
@@ -78,7 +78,7 @@
                                                func = function () {
                                                        var i;
                                                        for ( i = 0; i < l; i++ ) {
-                                                               if ( !funcs[i]() ) {
+                                                               if ( !funcs[ i ]() ) {
                                                                        return false;
                                                                }
                                                        }
@@ -90,7 +90,7 @@
                                                func = function () {
                                                        var i;
                                                        for ( i = 0; i < l; i++ ) {
-                                                               if ( funcs[i]() ) {
+                                                               if ( funcs[ i ]() ) {
                                                                        return true;
                                                                }
                                                        }
                                                func = function () {
                                                        var i;
                                                        for ( i = 0; i < l; i++ ) {
-                                                               if ( !funcs[i]() ) {
+                                                               if ( !funcs[ i ]() ) {
                                                                        return true;
                                                                }
                                                        }
                                                func = function () {
                                                        var i;
                                                        for ( i = 0; i < l; i++ ) {
-                                                               if ( funcs[i]() ) {
+                                                               if ( funcs[ i ]() ) {
                                                                        return false;
                                                                }
                                                        }
                                if ( l !== 2 ) {
                                        throw new Error( 'NOT takes exactly one parameter' );
                                }
-                               if ( !$.isArray( spec[1] ) ) {
+                               if ( !$.isArray( spec[ 1 ] ) ) {
                                        throw new Error( 'NOT parameters must be arrays' );
                                }
-                               v = hideIfParse( $el, spec[1] );
-                               $fields = v[0];
-                               func = v[1];
+                               v = hideIfParse( $el, spec[ 1 ] );
+                               $fields = v[ 0 ];
+                               func = v[ 1 ];
                                return [ $fields, function () {
                                        return !func();
                                } ];
                                if ( l !== 3 ) {
                                        throw new Error( op + ' takes exactly two parameters' );
                                }
-                               $field = hideIfGetField( $el, spec[1] );
+                               $field = hideIfGetField( $el, spec[ 1 ] );
                                if ( !$field ) {
                                        return [ $(), function () {
                                                return false;
                                        } ];
                                }
-                               v = spec[2];
+                               v = spec[ 2 ];
 
                                if ( $field.first().prop( 'type' ) === 'radio' ||
                                        $field.first().prop( 'type' ) === 'checkbox'
         * jQuery plugin to fade or snap to hiding state.
         *
         * @param {boolean} [instantToggle=false]
-        * @return jQuery
+        * @return {jQuery}
         * @chainable
         */
        $.fn.goOut = function ( instantToggle ) {
         * @param {Function} callback
         * @param {boolean|jQuery.Event} callback.immediate True when the event is called immediately,
         *  an event object when triggered from an event.
-        * @return jQuery
+        * @return {jQuery}
         * @chainable
         */
        mw.log.deprecate( $.fn, 'liveAndTestAtStart', function ( callback ) {
                        }
 
                        v = hideIfParse( $el, spec );
-                       $fields = v[0];
-                       test = v[1];
+                       $fields = v[ 0 ];
+                       test = v[ 1 ];
                        func = function () {
                                if ( test() ) {
                                        $el.hide();
index 31cd6c4..4859953 100644 (file)
@@ -13,7 +13,7 @@
        function sortByProperty( array, prop, descending ) {
                var order = descending ? -1 : 1;
                return array.sort( function ( a, b ) {
-                       return a[prop] > b[prop] ? order : a[prop] < b[prop] ? -order : 0;
+                       return a[ prop ] > b[ prop ] ? order : a[ prop ] < b[ prop ] ? -order : 0;
                } );
        }
 
@@ -25,7 +25,7 @@
                for ( ; bytes >= 1024; bytes /= 1024 ) { i++; }
                // Maintain one decimal for kB and above, but don't
                // add ".0" for bytes.
-               return bytes.toFixed( i > 0 ? 1 : 0 ) + units[i];
+               return bytes.toFixed( i > 0 ? 1 : 0 ) + units[ i ];
        }
 
        /**
                                graph = {};
 
                        $.each( modules, function ( moduleIndex, moduleName ) {
-                               var dependencies = mw.loader.moduleRegistry[moduleName].dependencies || [];
+                               var dependencies = mw.loader.moduleRegistry[ moduleName ].dependencies || [];
 
                                if ( !hasOwn.call( graph, moduleName ) ) {
-                                       graph[moduleName] = { requiredBy: [] };
+                                       graph[ moduleName ] = { requiredBy: [] };
                                }
-                               graph[moduleName].requires = dependencies;
+                               graph[ moduleName ].requires = dependencies;
 
                                $.each( dependencies, function ( depIndex, depName ) {
                                        if ( !hasOwn.call( graph, depName ) ) {
-                                               graph[depName] = { requiredBy: [] };
+                                               graph[ depName ] = { requiredBy: [] };
                                        }
-                                       graph[depName].requiredBy.push( moduleName );
+                                       graph[ depName ].requiredBy.push( moduleName );
                                } );
                        } );
                        return graph;
                 * document.
                 *
                 * @param {string} css CSS source
-                * @return Selector counts
+                * @return {Object} Selector counts
                 * @return {number} return.selectors Total number of selectors
                 * @return {number} return.matched Number of matched selectors
                 */
                        rules = sheet.cssRules || sheet.rules;
                        $.each( rules, function ( index, rule ) {
                                selectors.total++;
-                               if ( document.querySelector( rule.selectorText ) !== null ) {
-                                       selectors.matched++;
-                               }
+                               // document.querySelector() on prefixed pseudo-elements can throw exceptions
+                               // in Firefox and Safari. Ignore these exceptions.
+                               // https://bugs.webkit.org/show_bug.cgi?id=149160
+                               // https://bugzilla.mozilla.org/show_bug.cgi?id=1204880
+                               try {
+                                       if ( document.querySelector( rule.selectorText ) !== null ) {
+                                               selectors.matched++;
+                                       }
+                               } catch ( e ) {}
                        } );
                        document.body.removeChild( style );
                        return selectors;
                                $.map( inspect.reports, function ( v, k ) { return k; } );
 
                        $.each( reports, function ( index, name ) {
-                               inspect.dumpTable( inspect.reports[name]() );
+                               inspect.dumpTable( inspect.reports[ name ]() );
                        } );
                },
 
                                var modules = [];
 
                                $.each( inspect.getLoadedModules(), function ( index, name ) {
-                                       var css, stats, module = mw.loader.moduleRegistry[name];
+                                       var css, stats, module = mw.loader.moduleRegistry[ name ];
 
                                        try {
                                                css = module.style.css.join();
                                                stats.totalSize = humanSize( $.byteLength( raw ) );
                                        } catch ( e ) {}
                                }
-                               return [stats];
+                               return [ stats ];
                        }
                },
 
                        }
 
                        return $.grep( inspect.getLoadedModules(), function ( moduleName ) {
-                               var module = mw.loader.moduleRegistry[moduleName];
+                               var module = mw.loader.moduleRegistry[ moduleName ];
 
                                // Grep module's JavaScript
                                if ( $.isFunction( module.script ) && pattern.test( module.script.toString() ) ) {
index 343d516..ce92423 100644 (file)
@@ -15,7 +15,7 @@
                slice = Array.prototype.slice,
                parserDefaults = {
                        magic: {
-                               'SITENAME': mw.config.get( 'wgSiteName' )
+                               SITENAME: mw.config.get( 'wgSiteName' )
                        },
                        // Whitelist for allowed HTML elements in wikitext.
                        // Self-closing tags are not currently supported.
                var i, len;
 
                if ( !$.isArray( children ) ) {
-                       children = [children];
+                       children = [ children ];
                }
 
                for ( i = 0, len = children.length; i < len; i++ ) {
-                       if ( typeof children[i] !== 'object' ) {
-                               children[i] = document.createTextNode( children[i] );
+                       if ( typeof children[ i ] !== 'object' ) {
+                               children[ i ] = document.createTextNode( children[ i ] );
                        }
                }
 
         * Try to parse a key and optional replacements, returning a jQuery object that may be a tree of jQuery nodes.
         * If there was an error parsing, return the key and the error message (wrapped in jQuery). This should put the error right into
         * the interface, without causing the page to halt script execution, and it hopefully should be clearer how to fix it.
+        *
         * @private
         * @param {Object} options Parser options
         * @return {Function}
 
                return function ( args ) {
                        var fallback,
-                               key = args[0],
-                               argsArray = $.isArray( args[1] ) ? args[1] : slice.call( args, 1 );
+                               key = args[ 0 ],
+                               argsArray = $.isArray( args[ 1 ] ) ? args[ 1 ] : slice.call( args, 1 );
                        try {
                                return parser.parse( key, argsArray );
                        } catch ( e ) {
                 * Where the magic happens.
                 * Parses a message from the key, and swaps in replacements as necessary, wraps in jQuery
                 * If an error is thrown, returns original key, and logs the error
+                *
                 * @param {string} key Message key.
                 * @param {Array} replacements Variable replacements for $1, $2... $n
                 * @return {jQuery}
                /**
                 * Fetch the message string associated with a key, return parsed structure. Memoized.
                 * Note that we pass '[' + key + ']' back for a missing message here.
+                *
                 * @param {string} key
                 * @return {string|Array} string of '[key]' if message missing, simple string if possible, array of arrays if needs parsing
                 */
                getAst: function ( key ) {
                        var wikiText,
-                               cacheKey = [key, this.settings.onlyCurlyBraceTransform].join( ':' );
+                               cacheKey = [ key, this.settings.onlyCurlyBraceTransform ].join( ':' );
 
                        if ( this.astCache[ cacheKey ] === undefined ) {
                                wikiText = this.settings.messages.get( key );
 
                        /**
                         * Try parsers until one works, if none work return null
+                        *
                         * @private
                         * @param {Function[]} ps
                         * @return {string|null}
                                return function () {
                                        var i, result;
                                        for ( i = 0; i < ps.length; i++ ) {
-                                               result = ps[i]();
+                                               result = ps[ i ]();
                                                if ( result !== null ) {
                                                        return result;
                                                }
                        /**
                         * Try several ps in a row, all must succeed or return null.
                         * This is the only eager one.
+                        *
                         * @private
                         * @param {Function[]} ps
                         * @return {string|null}
                                        originalPos = pos,
                                        result = [];
                                for ( i = 0; i < ps.length; i++ ) {
-                                       res = ps[i]();
+                                       res = ps[ i ]();
                                        if ( res === null ) {
                                                pos = originalPos;
                                                return null;
                        /**
                         * Run the same parser over and over until it fails.
                         * Must succeed a minimum of n times or return null.
+                        *
                         * @private
                         * @param {number} n
                         * @param {Function} p
 
                        /**
                         * Just make parsers out of simpler JS builtin types
+                        *
                         * @private
                         * @param {string} s
                         * @return {Function}
                                        if ( matches === null ) {
                                                return null;
                                        }
-                                       pos += matches[0].length;
-                                       return matches[0];
+                                       pos += matches[ 0 ].length;
+                                       return matches[ 0 ];
                                };
                        }
 
                                        backslash,
                                        anyCharacter
                                ] );
-                               return result === null ? null : result[1];
+                               return result === null ? null : result[ 1 ];
                        }
                        escapedOrLiteralWithoutSpace = choice( [
                                escapedLiteral,
                                if ( result === null ) {
                                        return null;
                                }
-                               return [ 'REPLACE', parseInt( result[1], 10 ) - 1 ];
+                               return [ 'REPLACE', parseInt( result[ 1 ], 10 ) - 1 ];
                        }
                        openExtlink = makeStringParser( '[' );
                        closeExtlink = makeStringParser( ']' );
                                        closeExtlink
                                ] );
                                if ( parsedResult !== null ) {
-                                       result = [ 'EXTLINK', parsedResult[1] ];
+                                       result = [ 'EXTLINK', parsedResult[ 1 ] ];
                                        // TODO (mattflaschen, 2013-03-22): Clean this up if possible.
                                        // It's avoiding CONCAT for single nodes, so they at least doesn't get the htmlEmitter span.
-                                       if ( parsedResult[3].length === 1 ) {
-                                               result.push( parsedResult[3][0] );
+                                       if ( parsedResult[ 3 ].length === 1 ) {
+                                               result.push( parsedResult[ 3 ][ 0 ] );
                                        } else {
-                                               result.push( ['CONCAT'].concat( parsedResult[3] ) );
+                                               result.push( [ 'CONCAT' ].concat( parsedResult[ 3 ] ) );
                                        }
                                }
                                return result;
                                if ( result === null ) {
                                        return null;
                                }
-                               return [ 'EXTLINKPARAM', parseInt( result[2], 10 ) - 1, result[4] ];
+                               return [ 'EXTLINKPARAM', parseInt( result[ 2 ], 10 ) - 1, result[ 4 ] ];
                        }
                        openWikilink = makeStringParser( '[[' );
                        closeWikilink = makeStringParser( ']]' );
                                        templateContents,
                                        closeTemplate
                                ] );
-                               return result === null ? null : result[1];
+                               return result === null ? null : result[ 1 ];
                        }
 
                        wikilinkPage = choice( [
                                        pipe,
                                        expression
                                ] );
-                               return result === null ? null : [ result[0], result[2] ];
+                               return result === null ? null : [ result[ 0 ], result[ 2 ] ];
                        }
 
                        wikilinkContents = choice( [
                                        closeWikilink
                                ] );
                                if ( parsedResult !== null ) {
-                                       parsedLinkContents = parsedResult[1];
+                                       parsedLinkContents = parsedResult[ 1 ];
                                        result = [ 'WIKILINK' ].concat( parsedLinkContents );
                                }
                                return result;
                                        htmlDoubleQuoteAttributeValue,
                                        doubleQuote
                                ] );
-                               return parsedResult === null ? null : parsedResult[1];
+                               return parsedResult === null ? null : parsedResult[ 1 ];
                        }
 
                        function singleQuotedHtmlAttributeValue() {
                                        htmlSingleQuoteAttributeValue,
                                        singleQuote
                                ] );
-                               return parsedResult === null ? null : parsedResult[1];
+                               return parsedResult === null ? null : parsedResult[ 1 ];
                        }
 
                        function htmlAttribute() {
                                                singleQuotedHtmlAttributeValue
                                        ] )
                                ] );
-                               return parsedResult === null ? null : [parsedResult[1], parsedResult[3]];
+                               return parsedResult === null ? null : [ parsedResult[ 1 ], parsedResult[ 3 ] ];
                        }
 
                        /**
                                }
 
                                for ( i = 0, len = attributes.length; i < len; i += 2 ) {
-                                       attributeName = attributes[i];
+                                       attributeName = attributes[ i ];
                                        if ( $.inArray( attributeName, settings.allowedHtmlCommonAttributes ) === -1 &&
-                                               $.inArray( attributeName, settings.allowedHtmlAttributesByElement[startTagName] || [] ) === -1 ) {
+                                               $.inArray( attributeName, settings.allowedHtmlAttributesByElement[ startTagName ] || [] ) === -1 ) {
                                                return false;
                                        }
                                }
                        function htmlAttributes() {
                                var parsedResult = nOrMore( 0, htmlAttribute )();
                                // Un-nest attributes array due to structure of jQueryMsg operations (see emit).
-                               return concat.apply( ['HTMLATTRIBUTES'], parsedResult );
+                               return concat.apply( [ 'HTMLATTRIBUTES' ], parsedResult );
                        }
 
                        // Subset of allowed HTML markup.
                                }
 
                                endOpenTagPos = pos;
-                               startTagName = parsedOpenTagResult[1];
+                               startTagName = parsedOpenTagResult[ 1 ];
 
                                parsedHtmlContents = nOrMore( 0, expression )();
 
                                }
 
                                endCloseTagPos = pos;
-                               endTagName = parsedCloseTagResult[1];
-                               wrappedAttributes = parsedOpenTagResult[2];
+                               endTagName = parsedCloseTagResult[ 1 ];
+                               wrappedAttributes = parsedOpenTagResult[ 2 ];
                                attributes = wrappedAttributes.slice( 1 );
                                if ( isAllowedHtml( startTagName, endTagName, attributes ) ) {
                                        result = [ 'HTMLELEMENT', startTagName, wrappedAttributes ]
                                if ( result === null ) {
                                        return null;
                                }
-                               expr = result[1];
+                               expr = result[ 1 ];
                                // use a CONCAT operator if there are multiple nodes, otherwise return the first node, raw.
-                               return expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[0];
+                               return expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[ 0 ];
                        }
 
                        function templateWithReplacement() {
                                        colon,
                                        replacement
                                ] );
-                               return result === null ? null : [ result[0], result[2] ];
+                               return result === null ? null : [ result[ 0 ], result[ 2 ] ];
                        }
                        function templateWithOutReplacement() {
                                var result = sequence( [
                                        colon,
                                        paramExpression
                                ] );
-                               return result === null ? null : [ result[0], result[2] ];
+                               return result === null ? null : [ result[ 0 ], result[ 2 ] ];
                        }
                        function templateWithOutFirstParameter() {
                                var result = sequence( [
                                        templateName,
                                        colon
                                ] );
-                               return result === null ? null : [ result[0], '' ];
+                               return result === null ? null : [ result[ 0 ], '' ];
                        }
                        colon = makeStringParser( ':' );
                        templateContents = choice( [
                                                choice( [ templateWithReplacement, templateWithOutReplacement, templateWithOutFirstParameter ] ),
                                                nOrMore( 0, templateParam )
                                        ] );
-                                       return res === null ? null : res[0].concat( res[1] );
+                                       return res === null ? null : res[ 0 ].concat( res[ 1 ] );
                                },
                                function () {
                                        var res = sequence( [
                                        if ( res === null ) {
                                                return null;
                                        }
-                                       return [ res[0] ].concat( res[1] );
+                                       return [ res[ 0 ] ].concat( res[ 1 ] );
                                }
                        ] );
                        openTemplate = makeStringParser( '{{' );
                /**
                 * (We put this method definition here, and not in prototype, to make sure it's not overwritten by any magic.)
                 * Walk entire node structure, applying replacements and template functions when appropriate
+                *
                 * @param {Mixed} node Abstract syntax tree (top node or subnode)
                 * @param {Array} replacements for $1, $2, ... $n
                 * @return {Mixed} single-string node or array of nodes suitable for jQuery appending
                                        subnodes = $.map( node.slice( 1 ), function ( n ) {
                                                return jmsg.emit( n, replacements );
                                        } );
-                                       operation = node[0].toLowerCase();
-                                       if ( typeof jmsg[operation] === 'function' ) {
+                                       operation = node[ 0 ].toLowerCase();
+                                       if ( typeof jmsg[ operation ] === 'function' ) {
                                                ret = jmsg[ operation ]( subnodes, replacements );
                                        } else {
                                                throw new Error( 'Unknown operation "' + operation + '"' );
                 * Parsing has been applied depth-first we can assume that all nodes here are single nodes
                 * Must return a single node to parents -- a jQuery with synthetic span
                 * However, unwrap any other synthetic spans in our children and pass them upwards
+                *
                 * @param {Mixed[]} nodes Some single nodes, some arrays of nodes
                 * @return {jQuery}
                 */
                 * @return {String} replacement
                 */
                replace: function ( nodes, replacements ) {
-                       var index = parseInt( nodes[0], 10 );
+                       var index = parseInt( nodes[ 0 ], 10 );
 
                        if ( index < replacements.length ) {
-                               return replacements[index];
+                               return replacements[ index ];
                        } else {
                                // index not found, fallback to displaying variable
                                return '$' + ( index + 1 );
                 * from the server, since the replacement is done at save time.
                 * It may, though, if the wikitext appears in extension-controlled content.
                 *
-                * @param nodes
+                * @param {String[]} nodes
                 */
                wikilink: function ( nodes ) {
                        var page, anchor, url;
 
-                       page = nodes[0];
+                       page = nodes[ 0 ];
                        url = mw.util.getUrl( page );
 
                        if ( nodes.length === 1 ) {
                                anchor = page;
                        } else {
                                // [[Some Page|anchor text]] or [[Namespace:Some Page|anchor]]
-                               anchor = nodes[1];
+                               anchor = nodes[ 1 ];
                        }
 
                        return $( '<a>' ).attr( {
                htmlattributes: function ( nodes ) {
                        var i, len, mapping = {};
                        for ( i = 0, len = nodes.length; i < len; i += 2 ) {
-                               mapping[nodes[i]] = decodePrimaryHtmlEntities( nodes[i + 1] );
+                               mapping[ nodes[ i ] ] = decodePrimaryHtmlEntities( nodes[ i + 1 ] );
                        }
                        return mapping;
                },
                 */
                extlink: function ( nodes ) {
                        var $el,
-                               arg = nodes[0],
-                               contents = nodes[1];
+                               arg = nodes[ 0 ],
+                               contents = nodes[ 1 ];
                        if ( arg instanceof jQuery ) {
                                $el = arg;
                        } else {
                 */
                extlinkparam: function ( nodes, replacements ) {
                        var replacement,
-                               index = parseInt( nodes[0], 10 );
+                               index = parseInt( nodes[ 0 ], 10 );
                        if ( index < replacements.length ) {
-                               replacement = replacements[index];
+                               replacement = replacements[ index ];
                        } else {
                                replacement = '$' + ( index + 1 );
                        }
-                       return this.extlink( [ replacement, nodes[1] ] );
+                       return this.extlink( [ replacement, nodes[ 1 ] ] );
                },
 
                /**
                 * Transform parsed structure into pluralization
                 * n.b. The first node may be a non-integer (for instance, a string representing an Arabic number).
                 * So convert it back with the current language's convertNumber.
+                *
                 * @param {Array} nodes List of nodes, [ {string|number}, {string}, {string} ... ]
                 * @return {string} selected pluralized form according to current language
                 */
                        var forms, firstChild, firstChildText, explicitPluralFormNumber, formIndex, form, count,
                                explicitPluralForms = {};
 
-                       count = parseFloat( this.language.convertNumber( nodes[0], true ) );
+                       count = parseFloat( this.language.convertNumber( nodes[ 0 ], true ) );
                        forms = nodes.slice( 1 );
                        for ( formIndex = 0; formIndex < forms.length; formIndex++ ) {
-                               form = forms[formIndex];
+                               form = forms[ formIndex ];
 
                                if ( form.jquery && form.hasClass( 'mediaWiki_htmlEmitter' ) ) {
                                        // This is a nested node, may be an explicit plural form like 5=[$2 linktext]
                                        if ( firstChild && firstChild.nodeType === Node.TEXT_NODE ) {
                                                firstChildText = firstChild.textContent;
                                                if ( /^\d+=/.test( firstChildText ) ) {
-                                                       explicitPluralFormNumber = parseInt( firstChildText.split( /=/ )[0], 10 );
+                                                       explicitPluralFormNumber = parseInt( firstChildText.split( /=/ )[ 0 ], 10 );
                                                        // Use the digit part as key and rest of first text node and
                                                        // rest of child nodes as value.
                                                        firstChild.textContent = firstChildText.slice( firstChildText.indexOf( '=' ) + 1 );
-                                                       explicitPluralForms[explicitPluralFormNumber] = form;
-                                                       forms[formIndex] = undefined;
+                                                       explicitPluralForms[ explicitPluralFormNumber ] = form;
+                                                       forms[ formIndex ] = undefined;
                                                }
                                        }
                                } else if ( /^\d+=/.test( form ) ) {
                                        // Simple explicit plural forms like 12=a dozen
-                                       explicitPluralFormNumber = parseInt( form.split( /=/ )[0], 10 );
-                                       explicitPluralForms[explicitPluralFormNumber] = form.slice( form.indexOf( '=' ) + 1 );
-                                       forms[formIndex] = undefined;
+                                       explicitPluralFormNumber = parseInt( form.split( /=/ )[ 0 ], 10 );
+                                       explicitPluralForms[ explicitPluralFormNumber ] = form.slice( form.indexOf( '=' ) + 1 );
+                                       forms[ formIndex ] = undefined;
                                }
                        }
 
                 */
                gender: function ( nodes ) {
                        var gender,
-                               maybeUser = nodes[0],
+                               maybeUser = nodes[ 0 ],
                                forms = nodes.slice( 1 );
 
                        if ( maybeUser === '' ) {
                /**
                 * Transform parsed structure into grammar conversion.
                 * Invoked by putting `{{grammar:form|word}}` in a message
+                *
                 * @param {Array} nodes List of nodes [{Grammar case eg: genitive}, {string word}]
                 * @return {string} selected grammatical form according to current language
                 */
                grammar: function ( nodes ) {
-                       var form = nodes[0],
-                               word = nodes[1];
+                       var form = nodes[ 0 ],
+                               word = nodes[ 1 ];
                        return word && form && this.language.convertGrammar( word, form );
                },
 
                /**
                 * Tranform parsed structure into a int: (interface language) message include
                 * Invoked by putting `{{int:othermessage}}` into a message
+                *
                 * @param {Array} nodes List of nodes
                 * @return {string} Other message
                 */
                'int': function ( nodes ) {
-                       var msg = nodes[0];
+                       var msg = nodes[ 0 ];
                        return mw.jqueryMsg.getMessageFunction()( msg.charAt( 0 ).toLowerCase() + msg.slice( 1 ) );
                },
 
                 * Takes an unformatted number (arab, no group separators and . as decimal separator)
                 * and outputs it in the localized digit script and formatted with decimal
                 * separator, according to the current language.
+                *
                 * @param {Array} nodes List of nodes
                 * @return {number|string} Formatted number
                 */
                formatnum: function ( nodes ) {
-                       var isInteger = ( nodes[1] && nodes[1] === 'R' ) ? true : false,
-                               number = nodes[0];
+                       var isInteger = ( nodes[ 1 ] && nodes[ 1 ] === 'R' ) ? true : false,
+                               number = nodes[ 0 ];
 
                        return this.language.convertNumber( number, isInteger );
                }
                }
 
                messageFunction = mw.jqueryMsg.getMessageFunction( {
-                       'messages': this.map,
+                       messages: this.map,
                        // For format 'escaped', escaping part is handled by mediawiki.js
-                       'format': this.format
+                       format: this.format
                } );
                return messageFunction( this.key, this.parameters );
        };
index 2621a97..5dd2acb 100644 (file)
@@ -7,6 +7,7 @@
  * @alternateClassName mediaWiki
  * @singleton
  */
+/*jshint latedef:false */
 /*global sha1 */
 ( function ( $ ) {
        'use strict';
@@ -68,7 +69,7 @@
 
                                if ( $.isPlainObject( selection ) ) {
                                        for ( s in selection ) {
-                                               setGlobalMapValue( this, s, selection[s] );
+                                               setGlobalMapValue( this, s, selection[ s ] );
                                        }
                                        return true;
                                }
         * @param {Mixed} value
         */
        function setGlobalMapValue( map, key, value ) {
-               map.values[key] = value;
+               map.values[ key ] = value;
                mw.log.deprecate(
-                       window,
-                       key,
-                       value,
-                       // Deprecation notice for mw.config globals (T58550, T72470)
-                       map === mw.config && 'Use mw.config instead.'
+                               window,
+                               key,
+                               value,
+                               // Deprecation notice for mw.config globals (T58550, T72470)
+                               map === mw.config && 'Use mw.config instead.'
                );
        }
 
                                selection = slice.call( selection );
                                results = {};
                                for ( i = 0; i < selection.length; i++ ) {
-                                       results[selection[i]] = this.get( selection[i], fallback );
+                                       results[ selection[ i ] ] = this.get( selection[ i ], fallback );
                                }
                                return results;
                        }
                                if ( !hasOwn.call( this.values, selection ) ) {
                                        return fallback;
                                }
-                               return this.values[selection];
+                               return this.values[ selection ];
                        }
 
                        if ( selection === undefined ) {
 
                        if ( $.isPlainObject( selection ) ) {
                                for ( s in selection ) {
-                                       this.values[s] = selection[s];
+                                       this.values[ s ] = selection[ s ];
                                }
                                return true;
                        }
                        if ( typeof selection === 'string' && arguments.length > 1 ) {
-                               this.values[selection] = value;
+                               this.values[ selection ] = value;
                                return true;
                        }
                        return false;
 
                        if ( $.isArray( selection ) ) {
                                for ( s = 0; s < selection.length; s++ ) {
-                                       if ( typeof selection[s] !== 'string' || !hasOwn.call( this.values, selection[s] ) ) {
+                                       if ( typeof selection[ s ] !== 'string' || !hasOwn.call( this.values, selection[ s ] ) ) {
                                                return false;
                                        }
                                }
                params: function ( parameters ) {
                        var i;
                        for ( i = 0; i < parameters.length; i += 1 ) {
-                               this.parameters.push( parameters[i] );
+                               this.parameters.push( parameters[ i ] );
                        }
                        return this;
                },
                        var parameters = slice.call( arguments, 1 );
                        return formatString.replace( /\$(\d+)/g, function ( str, match ) {
                                var index = parseInt( match, 10 ) - 1;
-                               return parameters[index] !== undefined ? parameters[index] : '$' + match;
+                               return parameters[ index ] !== undefined ? parameters[ index ] : '$' + match;
                        } );
                },
 
                 */
                trackUnsubscribe: function ( callback ) {
                        trackHandlers = $.grep( trackHandlers, function ( fns ) {
-                               if ( fns[1] === callback ) {
-                                       trackCallbacks.remove( fns[0] );
+                               if ( fns[ 1 ] === callback ) {
+                                       trackCallbacks.remove( fns[ 0 ] );
                                        // Ensure the tuple is removed to avoid holding on to closures
                                        return false;
                                }
 
                /**
                 * Dummy placeholder for {@link mw.log}
+                *
                 * @method
                 */
                log: ( function () {
                         * @param {string} [msg] Optional text to include in the deprecation message
                         */
                        log.deprecate = !Object.defineProperty ? function ( obj, key, val ) {
-                               obj[key] = val;
+                               obj[ key ] = val;
                        } : function ( obj, key, val, msg ) {
                                msg = 'Use of "' + key + '" is deprecated.' + ( msg ? ( ' ' + msg ) : '' );
                                // Support: IE8
                                        } );
                                } catch ( err ) {
                                        // Fallback to creating a copy of the value to the object.
-                                       obj[key] = val;
+                                       obj[ key ] = val;
                                }
                        };
 
                         *
                         *     {
                         *         'moduleName': {
-                        *             // From mw.loader.register() in startup module
+                        *             // From mw.loader.register()
                         *             'version': '########' (hash)
                         *             'dependencies': ['required.foo', 'bar.also', ...], (or) function () {}
                         *             'group': 'somegroup', (or) null
                         *         }
                         *     }
                         *
+                        * State machine:
+                        *
+                        * - `registered`:
+                        *    The module is known to the system but not yet requested.
+                        *    Meta data is registered via mw.loader#register. Calls to that method are
+                        *    generated server-side by the startup module.
+                        * - `loading`:
+                        *    The module is requested through mw.loader (either directly or as dependency of
+                        *    another module). The client will be fetching module contents from the server.
+                        *    The contents are then stashed in the registry via mw.loader#implement.
+                        * - `loaded`:
+                        *    The module has been requested from the server and stashed via mw.loader#implement.
+                        *    If the module has no more dependencies in-fight, the module will be executed
+                        *    right away. Otherwise execution is deferred, controlled via #handlePending.
+                        * - `executing`:
+                        *    The module is being executed.
+                        * - `ready`:
+                        *    The module has been successfully executed.
+                        * - `error`:
+                        *    The module (or one of its dependencies) produced an error during execution.
+                        * - `missing`:
+                        *    The module was registered client-side and requested, but the server denied knowledge
+                        *    of the module's existence.
+                        *
                         * @property
                         * @private
                         */
                                // List of modules to be loaded
                                queue = [],
 
-                               // List of callback functions waiting for modules to be ready to be called
+                               /**
+                                * List of callback jobs waiting for modules to be ready.
+                                *
+                                * Jobs are created by #request() and run by #handlePending().
+                                *
+                                * Typically when a job is created for a module, the job's dependencies contain
+                                * both the module being requested and all its recursive dependencies.
+                                *
+                                * Format:
+                                *
+                                *     {
+                                *         'dependencies': [ module names ],
+                                *         'ready': Function callback
+                                *         'error': Function callback
+                                *     }
+                                *
+                                * @property {Object[]} jobs
+                                * @private
+                                */
                                jobs = [],
 
                                // Selector cache for the marker element. Use getMarker() to get/use the marker!
                                if ( nextnode ) {
                                        $( nextnode ).before( s );
                                } else {
-                                       document.getElementsByTagName( 'head' )[0].appendChild( s );
+                                       document.getElementsByTagName( 'head' )[ 0 ].appendChild( s );
                                }
                                if ( s.styleSheet ) {
                                        // Support: IE6-10
                         */
                        function getCombinedVersion( modules ) {
                                var hashes = $.map( modules, function ( module ) {
-                                       return registry[module].version;
+                                       return registry[ module ].version;
                                } );
                                // Trim for consistency with server-side ResourceLoader::makeHash. It also helps
                                // save precious space in the limited query string. Otherwise modules are more
                                return sha1( hashes.join( '' ) ).slice( 0, 12 );
                        }
 
-                       /**
-                        * Resolve dependencies and detect circular references.
-                        *
-                        * @private
-                        * @param {string} module Name of the top-level module whose dependencies shall be
-                        *  resolved and sorted.
-                        * @param {Array} resolved Returns a topological sort of the given module and its
-                        *  dependencies, such that later modules depend on earlier modules. The array
-                        *  contains the module names. If the array contains already some module names,
-                        *  this function appends its result to the pre-existing array.
-                        * @param {Object} [unresolved] Hash used to track the current dependency
-                        *  chain; used to report loops in the dependency graph.
-                        * @throws {Error} If any unregistered module or a dependency loop is encountered
-                        */
-                       function sortDependencies( module, resolved, unresolved ) {
-                               var n, deps, len, skip;
-
-                               if ( !hasOwn.call( registry, module ) ) {
-                                       throw new Error( 'Unknown dependency: ' + module );
-                               }
-
-                               if ( registry[module].skip !== null ) {
-                                       /*jshint evil:true */
-                                       skip = new Function( registry[module].skip );
-                                       registry[module].skip = null;
-                                       if ( skip() ) {
-                                               registry[module].skipped = true;
-                                               registry[module].dependencies = [];
-                                               registry[module].state = 'ready';
-                                               handlePending( module );
-                                               return;
-                                       }
-                               }
-
-                               // Resolves dynamic loader function and replaces it with its own results
-                               if ( $.isFunction( registry[module].dependencies ) ) {
-                                       registry[module].dependencies = registry[module].dependencies();
-                                       // Ensures the module's dependencies are always in an array
-                                       if ( typeof registry[module].dependencies !== 'object' ) {
-                                               registry[module].dependencies = [registry[module].dependencies];
-                                       }
-                               }
-                               if ( $.inArray( module, resolved ) !== -1 ) {
-                                       // Module already resolved; nothing to do
-                                       return;
-                               }
-                               // Create unresolved if not passed in
-                               if ( !unresolved ) {
-                                       unresolved = {};
-                               }
-                               // Tracks down dependencies
-                               deps = registry[module].dependencies;
-                               len = deps.length;
-                               for ( n = 0; n < len; n += 1 ) {
-                                       if ( $.inArray( deps[n], resolved ) === -1 ) {
-                                               if ( unresolved[deps[n]] ) {
-                                                       throw new Error(
-                                                               'Circular reference detected: ' + module +
-                                                               ' -> ' + deps[n]
-                                                       );
-                                               }
-
-                                               // Add to unresolved
-                                               unresolved[module] = true;
-                                               sortDependencies( deps[n], resolved, unresolved );
-                                               delete unresolved[module];
-                                       }
-                               }
-                               resolved[resolved.length] = module;
-                       }
-
-                       /**
-                        * Get a list of module names that a module depends on in their proper dependency
-                        * order.
-                        *
-                        * @private
-                        * @param {string[]} module Array of string module names
-                        * @return {Array} List of dependencies, including 'module'.
-                        */
-                       function resolve( modules ) {
-                               var resolved = [];
-                               $.each( modules, function ( idx, module ) {
-                                       sortDependencies( module, resolved );
-                               } );
-                               return resolved;
-                       }
-
                        /**
                         * Determine whether all dependencies are in state 'ready', which means we may
                         * execute the module or job now.
                        function allReady( modules ) {
                                var i;
                                for ( i = 0; i < modules.length; i++ ) {
-                                       if ( mw.loader.getState( modules[i] ) !== 'ready' ) {
+                                       if ( mw.loader.getState( modules[ i ] ) !== 'ready' ) {
                                                return false;
                                        }
                                }
                        function anyFailed( modules ) {
                                var i, state;
                                for ( i = 0; i < modules.length; i++ ) {
-                                       state = mw.loader.getState( modules[i] );
+                                       state = mw.loader.getState( modules[ i ] );
                                        if ( state === 'error' || state === 'missing' ) {
                                                return true;
                                        }
                        function handlePending( module ) {
                                var j, job, hasErrors, m, stateChange;
 
-                               if ( registry[module].state === 'error' || registry[module].state === 'missing' ) {
+                               if ( registry[ module ].state === 'error' || registry[ module ].state === 'missing' ) {
                                        // If the current module failed, mark all dependent modules also as failed.
                                        // Iterate until steady-state to propagate the error state upwards in the
                                        // dependency tree.
                                        do {
                                                stateChange = false;
                                                for ( m in registry ) {
-                                                       if ( registry[m].state !== 'error' && registry[m].state !== 'missing' ) {
-                                                               if ( anyFailed( registry[m].dependencies ) ) {
-                                                                       registry[m].state = 'error';
+                                                       if ( registry[ m ].state !== 'error' && registry[ m ].state !== 'missing' ) {
+                                                               if ( anyFailed( registry[ m ].dependencies ) ) {
+                                                                       registry[ m ].state = 'error';
                                                                        stateChange = true;
                                                                }
                                                        }
 
                                // Execute all jobs whose dependencies are either all satisfied or contain at least one failed module.
                                for ( j = 0; j < jobs.length; j += 1 ) {
-                                       hasErrors = anyFailed( jobs[j].dependencies );
-                                       if ( hasErrors || allReady( jobs[j].dependencies ) ) {
+                                       hasErrors = anyFailed( jobs[ j ].dependencies );
+                                       if ( hasErrors || allReady( jobs[ j ].dependencies ) ) {
                                                // All dependencies satisfied, or some have errors
-                                               job = jobs[j];
+                                               job = jobs[ j ];
                                                jobs.splice( j, 1 );
                                                j -= 1;
                                                try {
                                                        if ( hasErrors ) {
                                                                if ( $.isFunction( job.error ) ) {
-                                                                       job.error( new Error( 'Module ' + module + ' has failed dependencies' ), [module] );
+                                                                       job.error( new Error( 'Module ' + module + ' has failed dependencies' ), [ module ] );
                                                                }
                                                        } else {
                                                                if ( $.isFunction( job.ready ) ) {
                                        }
                                }
 
-                               if ( registry[module].state === 'ready' ) {
+                               if ( registry[ module ].state === 'ready' ) {
                                        // The current module became 'ready'. Set it in the module store, and recursively execute all
                                        // dependent modules that are loaded and now have all dependencies satisfied.
-                                       mw.loader.store.set( module, registry[module] );
+                                       mw.loader.store.set( module, registry[ module ] );
                                        for ( m in registry ) {
-                                               if ( registry[m].state === 'loaded' && allReady( registry[m].dependencies ) ) {
+                                               if ( registry[ m ].state === 'loaded' && allReady( registry[ m ].dependencies ) ) {
                                                        execute( m );
                                                }
                                        }
                                }
                        }
 
+                       /**
+                        * Resolve dependencies and detect circular references.
+                        *
+                        * @private
+                        * @param {string} module Name of the top-level module whose dependencies shall be
+                        *  resolved and sorted.
+                        * @param {Array} resolved Returns a topological sort of the given module and its
+                        *  dependencies, such that later modules depend on earlier modules. The array
+                        *  contains the module names. If the array contains already some module names,
+                        *  this function appends its result to the pre-existing array.
+                        * @param {Object} [unresolved] Hash used to track the current dependency
+                        *  chain; used to report loops in the dependency graph.
+                        * @throws {Error} If any unregistered module or a dependency loop is encountered
+                        */
+                       function sortDependencies( module, resolved, unresolved ) {
+                               var n, deps, len, skip;
+
+                               if ( !hasOwn.call( registry, module ) ) {
+                                       throw new Error( 'Unknown dependency: ' + module );
+                               }
+
+                               if ( registry[ module ].skip !== null ) {
+                                       /*jshint evil:true */
+                                       skip = new Function( registry[ module ].skip );
+                                       registry[ module ].skip = null;
+                                       if ( skip() ) {
+                                               registry[ module ].skipped = true;
+                                               registry[ module ].dependencies = [];
+                                               registry[ module ].state = 'ready';
+                                               handlePending( module );
+                                               return;
+                                       }
+                               }
+
+                               // Resolves dynamic loader function and replaces it with its own results
+                               if ( $.isFunction( registry[ module ].dependencies ) ) {
+                                       registry[ module ].dependencies = registry[ module ].dependencies();
+                                       // Ensures the module's dependencies are always in an array
+                                       if ( typeof registry[ module ].dependencies !== 'object' ) {
+                                               registry[ module ].dependencies = [ registry[ module ].dependencies ];
+                                       }
+                               }
+                               if ( $.inArray( module, resolved ) !== -1 ) {
+                                       // Module already resolved; nothing to do
+                                       return;
+                               }
+                               // Create unresolved if not passed in
+                               if ( !unresolved ) {
+                                       unresolved = {};
+                               }
+                               // Tracks down dependencies
+                               deps = registry[ module ].dependencies;
+                               len = deps.length;
+                               for ( n = 0; n < len; n += 1 ) {
+                                       if ( $.inArray( deps[ n ], resolved ) === -1 ) {
+                                               if ( unresolved[ deps[ n ] ] ) {
+                                                       throw new Error(
+                                                               'Circular reference detected: ' + module +
+                                                               ' -> ' + deps[ n ]
+                                                       );
+                                               }
+
+                                               // Add to unresolved
+                                               unresolved[ module ] = true;
+                                               sortDependencies( deps[ n ], resolved, unresolved );
+                                               delete unresolved[ module ];
+                                       }
+                               }
+                               resolved[ resolved.length ] = module;
+                       }
+
+                       /**
+                        * Get a list of module names that a module depends on in their proper dependency
+                        * order.
+                        *
+                        * @private
+                        * @param {string[]} module Array of string module names
+                        * @return {Array} List of dependencies, including 'module'.
+                        */
+                       function resolve( modules ) {
+                               var resolved = [];
+                               $.each( modules, function ( idx, module ) {
+                                       sortDependencies( module, resolved );
+                               } );
+                               return resolved;
+                       }
+
                        /**
                         * Load and execute a script with callback.
                         *
                         * @private
                         * @param {string} src URL to script, will be used as the src attribute in the script tag
-                        * @param {Function} [callback] Callback which will be run when the script is done
+                        * @return {jQuery.Promise}
                         */
-                       function addScript( src, callback ) {
-                               $.ajax( {
+                       function addScript( src ) {
+                               return $.ajax( {
                                        url: src,
                                        dataType: 'script',
                                        // Force jQuery behaviour to be for crossDomain. Otherwise jQuery would use
                                        // text, so we'd need to $.globalEval, which then messes up line numbers.
                                        crossDomain: true,
                                        cache: true
-                               } ).always( callback );
+                               } );
+                       }
+
+                       /**
+                        * Utility function for execute()
+                        *
+                        * @ignore
+                        */
+                       function addLink( media, url ) {
+                               var el = document.createElement( 'link' );
+                               // Support: IE
+                               // Insert in document *before* setting href
+                               getMarker().before( el );
+                               el.rel = 'stylesheet';
+                               if ( media && media !== 'all' ) {
+                                       el.media = media;
+                               }
+                               // If you end up here from an IE exception "SCRIPT: Invalid property value.",
+                               // see #addEmbeddedCSS, bug 31676, and bug 47277 for details.
+                               el.href = url;
                        }
 
                        /**
                         * @param {string} module Module name to execute
                         */
                        function execute( module ) {
-                               var key, value, media, i, urls, cssHandle, checkCssHandles,
+                               var key, value, media, i, urls, cssHandle, checkCssHandles, runScript,
                                        cssHandlesRegistered = false;
 
                                if ( !hasOwn.call( registry, module ) ) {
                                        throw new Error( 'Module has not been registered yet: ' + module );
                                }
-                               if ( registry[module].state === 'registered' ) {
-                                       throw new Error( 'Module has not been requested from the server yet: ' + module );
-                               }
-                               if ( registry[module].state === 'loading' ) {
-                                       throw new Error( 'Module has not completed loading yet: ' + module );
-                               }
-                               if ( registry[module].state === 'ready' ) {
-                                       throw new Error( 'Module has already been executed: ' + module );
+                               if ( registry[ module ].state !== 'loaded' ) {
+                                       throw new Error( 'Module in state "' + registry[ module ].state + '" may not be executed: ' + module );
                                }
 
-                               /**
-                                * Define loop-function here for efficiency
-                                * and to avoid re-using badly scoped variables.
-                                * @ignore
-                                */
-                               function addLink( media, url ) {
-                                       var el = document.createElement( 'link' );
-                                       // Support: IE
-                                       // Insert in document *before* setting href
-                                       getMarker().before( el );
-                                       el.rel = 'stylesheet';
-                                       if ( media && media !== 'all' ) {
-                                               el.media = media;
-                                       }
-                                       // If you end up here from an IE exception "SCRIPT: Invalid property value.",
-                                       // see #addEmbeddedCSS, bug 31676, and bug 47277 for details.
-                                       el.href = url;
-                               }
+                               registry[ module ].state = 'executing';
 
-                               function runScript() {
+                               runScript = function () {
                                        var script, markModuleReady, nestedAddScript, legacyWait,
                                                // Expand to include dependencies since we have to exclude both legacy modules
                                                // and their dependencies from the legacyWait (to prevent a circular dependency).
                                                legacyModules = resolve( mw.config.get( 'wgResourceLoaderLegacyModules', [] ) );
                                        try {
-                                               script = registry[module].script;
+                                               script = registry[ module ].script;
                                                markModuleReady = function () {
-                                                       registry[module].state = 'ready';
+                                                       registry[ module ].state = 'ready';
                                                        handlePending( module );
                                                };
                                                nestedAddScript = function ( arr, callback, i ) {
                                                                return;
                                                        }
 
-                                                       addScript( arr[i], function () {
+                                                       addScript( arr[ i ] ).always( function () {
                                                                nestedAddScript( arr, callback, i + 1 );
                                                        } );
                                                };
                                                                        $.globalEval( script );
                                                                        markModuleReady();
                                                                }
+                                                       } else {
+                                                               // Module without script
+                                                               markModuleReady();
                                                        }
                                                } );
                                        } catch ( e ) {
                                                // This needs to NOT use mw.log because these errors are common in production mode
                                                // and not in debug mode, such as when a symbol that should be global isn't exported
-                                               registry[module].state = 'error';
+                                               registry[ module ].state = 'error';
                                                mw.track( 'resourceloader.exception', { exception: e, module: module, source: 'module-execute' } );
                                                handlePending( module );
                                        }
-                               }
-
-                               // This used to be inside runScript, but since that is now fired asychronously
-                               // (after CSS is loaded) we need to set it here right away. It is crucial that
-                               // when execute() is called this is set synchronously, otherwise modules will get
-                               // executed multiple times as the registry will state that it isn't loading yet.
-                               registry[module].state = 'loading';
+                               };
 
                                // Add localizations to message system
-                               if ( registry[module].messages ) {
-                                       mw.messages.set( registry[module].messages );
+                               if ( registry[ module ].messages ) {
+                                       mw.messages.set( registry[ module ].messages );
                                }
 
                                // Initialise templates
-                               if ( registry[module].templates ) {
-                                       mw.templates.set( module, registry[module].templates );
+                               if ( registry[ module ].templates ) {
+                                       mw.templates.set( module, registry[ module ].templates );
                                }
 
                                // Make sure we don't run the scripts until all stylesheet insertions have completed.
                                // * back-compat: { <media>: [url, ..] }
                                // * { "css": [css, ..] }
                                // * { "url": { <media>: [url, ..] } }
-                               if ( registry[module].style ) {
-                                       for ( key in registry[module].style ) {
-                                               value = registry[module].style[key];
+                               if ( registry[ module ].style ) {
+                                       for ( key in registry[ module ].style ) {
+                                               value = registry[ module ].style[ key ];
                                                media = undefined;
 
                                                if ( key !== 'url' && key !== 'css' ) {
                                                        for ( i = 0; i < value.length; i += 1 ) {
                                                                if ( key === 'bc-url' ) {
                                                                        // back-compat: { <media>: [url, ..] }
-                                                                       addLink( media, value[i] );
+                                                                       addLink( media, value[ i ] );
                                                                } else if ( key === 'css' ) {
                                                                        // { "css": [css, ..] }
-                                                                       addEmbeddedCSS( value[i], cssHandle() );
+                                                                       addEmbeddedCSS( value[ i ], cssHandle() );
                                                                }
                                                        }
                                                // Not an array, but a regular object
                                                } else if ( typeof value === 'object' ) {
                                                        // { "url": { <media>: [url, ..] } }
                                                        for ( media in value ) {
-                                                               urls = value[media];
+                                                               urls = value[ media ];
                                                                for ( i = 0; i < urls.length; i += 1 ) {
-                                                                       addLink( media, urls[i] );
+                                                                       addLink( media, urls[ i ] );
                                                                }
                                                        }
                                                }
                        function request( dependencies, ready, error ) {
                                // Allow calling by single module name
                                if ( typeof dependencies === 'string' ) {
-                                       dependencies = [dependencies];
+                                       dependencies = [ dependencies ];
                                }
 
                                // Add ready and error callbacks if they were given
                                if ( ready !== undefined || error !== undefined ) {
-                                       jobs[jobs.length] = {
+                                       jobs.push( {
+                                               // Narrow down the list to modules that are worth waiting for
                                                dependencies: $.grep( dependencies, function ( module ) {
                                                        var state = mw.loader.getState( module );
-                                                       return state === 'registered' || state === 'loaded' || state === 'loading';
+                                                       return state === 'registered' || state === 'loaded' || state === 'loading' || state === 'executing';
                                                } ),
                                                ready: ready,
                                                error: error
-                                       };
+                                       } );
                                }
 
                                $.each( dependencies, function ( idx, module ) {
                                        if ( state === 'registered' && $.inArray( module, queue ) === -1 ) {
                                                // Private modules must be embedded in the page. Don't bother queuing
                                                // these as the server will deny them anyway (T101806).
-                                               if ( registry[module].group === 'private' ) {
-                                                       registry[module].state = 'error';
+                                               if ( registry[ module ].group === 'private' ) {
+                                                       registry[ module ].state = 'error';
                                                        handlePending( module );
                                                        return;
                                                }
                                }
                                a.sort();
                                for ( key = 0; key < a.length; key += 1 ) {
-                                       sorted[a[key]] = o[a[key]];
+                                       sorted[ a[ key ] ] = o[ a[ key ] ];
                                }
                                return sorted;
                        }
                        /**
                         * Converts a module map of the form { foo: [ 'bar', 'baz' ], bar: [ 'baz, 'quux' ] }
                         * to a query string of the form foo.bar,baz|bar.baz,quux
+                        *
                         * @private
                         */
                        function buildModulesString( moduleMap ) {
 
                                for ( prefix in moduleMap ) {
                                        p = prefix === '' ? '' : prefix + '.';
-                                       arr.push( p + moduleMap[prefix].join( ',' ) );
+                                       arr.push( p + moduleMap[ prefix ].join( ',' ) );
                                }
                                return arr.join( '|' );
                        }
 
                        /**
                         * Load modules from load.php
+                        *
                         * @private
                         * @param {Object} moduleMap Module map, see #buildModulesString
                         * @param {Object} currReqBase Object with other parameters (other than 'modules') to use in the request
                         */
                        function resolveIndexedDependencies( modules ) {
                                $.each( modules, function ( idx, module ) {
-                                       if ( module[2] ) {
-                                               module[2] = $.map( module[2], function ( dep ) {
-                                                       return typeof dep === 'number' ? modules[dep][0] : dep;
+                                       if ( module[ 2 ] ) {
+                                               module[ 2 ] = $.map( module[ 2 ], function ( dep ) {
+                                                       return typeof dep === 'number' ? modules[ dep ][ 0 ] : dep;
                                                } );
                                        }
                                } );
                                        // Appends a list of modules from the queue to the batch
                                        for ( q = 0; q < queue.length; q += 1 ) {
                                                // Only request modules which are registered
-                                               if ( hasOwn.call( registry, queue[q] ) && registry[queue[q]].state === 'registered' ) {
+                                               if ( hasOwn.call( registry, queue[ q ] ) && registry[ queue[ q ] ].state === 'registered' ) {
                                                        // Prevent duplicate entries
-                                                       if ( $.inArray( queue[q], batch ) === -1 ) {
-                                                               batch[batch.length] = queue[q];
+                                                       if ( $.inArray( queue[ q ], batch ) === -1 ) {
+                                                               batch[ batch.length ] = queue[ q ];
                                                                // Mark registered modules as loading
-                                                               registry[queue[q]].state = 'loading';
+                                                               registry[ queue[ q ] ].state = 'loading';
                                                        }
                                                }
                                        }
                                                        // the error) instead of all of them.
                                                        mw.track( 'resourceloader.exception', { exception: err, source: 'store-eval' } );
                                                        origBatch = $.grep( origBatch, function ( module ) {
-                                                               return registry[module].state === 'loading';
+                                                               return registry[ module ].state === 'loading';
                                                        } );
                                                        batch = batch.concat( origBatch );
                                                }
 
                                        // Split batch by source and by group.
                                        for ( b = 0; b < batch.length; b += 1 ) {
-                                               bSource = registry[batch[b]].source;
-                                               bGroup = registry[batch[b]].group;
+                                               bSource = registry[ batch[ b ] ].source;
+                                               bGroup = registry[ batch[ b ] ].group;
                                                if ( !hasOwn.call( splits, bSource ) ) {
-                                                       splits[bSource] = {};
+                                                       splits[ bSource ] = {};
                                                }
-                                               if ( !hasOwn.call( splits[bSource], bGroup ) ) {
-                                                       splits[bSource][bGroup] = [];
+                                               if ( !hasOwn.call( splits[ bSource ], bGroup ) ) {
+                                                       splits[ bSource ][ bGroup ] = [];
                                                }
-                                               bSourceGroup = splits[bSource][bGroup];
-                                               bSourceGroup[bSourceGroup.length] = batch[b];
+                                               bSourceGroup = splits[ bSource ][ bGroup ];
+                                               bSourceGroup[ bSourceGroup.length ] = batch[ b ];
                                        }
 
                                        // Clear the batch - this MUST happen before we append any
 
                                        for ( source in splits ) {
 
-                                               sourceLoadScript = sources[source];
+                                               sourceLoadScript = sources[ source ];
 
-                                               for ( group in splits[source] ) {
+                                               for ( group in splits[ source ] ) {
 
                                                        // Cache access to currently selected list of
                                                        // modules for this group from this source.
-                                                       modules = splits[source][group];
+                                                       modules = splits[ source ][ group ];
 
                                                        currReqBase = $.extend( {
                                                                version: getCombinedVersion( modules )
 
                                                        for ( i = 0; i < modules.length; i += 1 ) {
                                                                // Determine how many bytes this module would add to the query string
-                                                               lastDotIndex = modules[i].lastIndexOf( '.' );
+                                                               lastDotIndex = modules[ i ].lastIndexOf( '.' );
 
                                                                // If lastDotIndex is -1, substr() returns an empty string
-                                                               prefix = modules[i].substr( 0, lastDotIndex );
-                                                               suffix = modules[i].slice( lastDotIndex + 1 );
+                                                               prefix = modules[ i ].substr( 0, lastDotIndex );
+                                                               suffix = modules[ i ].slice( lastDotIndex + 1 );
 
                                                                bytesAdded = hasOwn.call( moduleMap, prefix )
                                                                        ? suffix.length + 3 // '%2C'.length == 3
-                                                                       : modules[i].length + 3; // '%7C'.length == 3
+                                                                       : modules[ i ].length + 3; // '%7C'.length == 3
 
                                                                // If the request would become too long, create a new one,
                                                                // but don't create empty requests
                                                                        mw.track( 'resourceloader.splitRequest', { maxQueryLength: maxQueryLength } );
                                                                }
                                                                if ( !hasOwn.call( moduleMap, prefix ) ) {
-                                                                       moduleMap[prefix] = [];
+                                                                       moduleMap[ prefix ] = [];
                                                                }
-                                                               moduleMap[prefix].push( suffix );
+                                                               moduleMap[ prefix ].push( suffix );
                                                                l += bytesAdded;
                                                        }
                                                        // If there's anything left in moduleMap, request that too
                                        // Allow multiple additions
                                        if ( typeof id === 'object' ) {
                                                for ( source in id ) {
-                                                       mw.loader.addSource( source, id[source] );
+                                                       mw.loader.addSource( source, id[ source ] );
                                                }
                                                return true;
                                        }
                                                loadUrl = loadUrl.loadScript;
                                        }
 
-                                       sources[id] = loadUrl;
+                                       sources[ id ] = loadUrl;
 
                                        return true;
                                },
                                                resolveIndexedDependencies( module );
                                                for ( i = 0, len = module.length; i < len; i++ ) {
                                                        // module is an array of module names
-                                                       if ( typeof module[i] === 'string' ) {
-                                                               mw.loader.register( module[i] );
+                                                       if ( typeof module[ i ] === 'string' ) {
+                                                               mw.loader.register( module[ i ] );
                                                        // module is an array of arrays
-                                                       } else if ( typeof module[i] === 'object' ) {
-                                                               mw.loader.register.apply( mw.loader, module[i] );
+                                                       } else if ( typeof module[ i ] === 'object' ) {
+                                                               mw.loader.register.apply( mw.loader, module[ i ] );
                                                        }
                                                }
                                                return;
                                                throw new Error( 'module already registered: ' + module );
                                        }
                                        // List the module as registered
-                                       registry[module] = {
+                                       registry[ module ] = {
                                                version: version !== undefined ? String( version ) : '',
                                                dependencies: [],
                                                group: typeof group === 'string' ? group : null,
                                        };
                                        if ( typeof dependencies === 'string' ) {
                                                // Allow dependencies to be given as a single module name
-                                               registry[module].dependencies = [ dependencies ];
+                                               registry[ module ].dependencies = [ dependencies ];
                                        } else if ( typeof dependencies === 'object' || $.isFunction( dependencies ) ) {
                                                // Allow dependencies to be given as an array of module names
                                                // or a function which returns an array
-                                               registry[module].dependencies = dependencies;
+                                               registry[ module ].dependencies = dependencies;
                                        }
                                },
 
                                                mw.loader.register( module );
                                        }
                                        // Check for duplicate implementation
-                                       if ( hasOwn.call( registry, module ) && registry[module].script !== undefined ) {
+                                       if ( hasOwn.call( registry, module ) && registry[ module ].script !== undefined ) {
                                                throw new Error( 'module already implemented: ' + module );
                                        }
                                        // Attach components
-                                       registry[module].script = script || [];
-                                       registry[module].style = style || {};
-                                       registry[module].messages = messages || {};
-                                       registry[module].templates = templates || {};
+                                       registry[ module ].script = script || null;
+                                       registry[ module ].style = style || null;
+                                       registry[ module ].messages = messages || null;
+                                       registry[ module ].templates = templates || null;
                                        // The module may already have been marked as erroneous
-                                       if ( $.inArray( registry[module].state, ['error', 'missing'] ) === -1 ) {
-                                               registry[module].state = 'loaded';
-                                               if ( allReady( registry[module].dependencies ) ) {
+                                       if ( $.inArray( registry[ module ].state, [ 'error', 'missing' ] ) === -1 ) {
+                                               registry[ module ].state = 'loaded';
+                                               if ( allReady( registry[ module ].dependencies ) ) {
                                                        execute( module );
                                                }
                                        }
                                        if ( typeof modules !== 'object' && typeof modules !== 'string' ) {
                                                throw new Error( 'modules must be a string or an array, not a ' + typeof modules );
                                        }
-                                       // Allow calling with an external url or single dependency as a string
+                                       // Allow calling with a url or single dependency as a string
                                        if ( typeof modules === 'string' ) {
-                                               if ( /^(https?:)?\/\//.test( modules ) ) {
+                                               // "https://example.org/x.js", "http://example.org/x.js", "//example.org/x.js", "/x.js"
+                                               if ( /^(https?:)?\/?\//.test( modules ) ) {
                                                        if ( type === 'text/css' ) {
                                                                // Support: IE 7-8
                                                                // Use properties instead of attributes as IE throws security
 
                                        if ( typeof module === 'object' ) {
                                                for ( m in module ) {
-                                                       mw.loader.state( m, module[m] );
+                                                       mw.loader.state( m, module[ m ] );
                                                }
                                                return;
                                        }
                                        if ( !hasOwn.call( registry, module ) ) {
                                                mw.loader.register( module );
                                        }
-                                       if ( $.inArray( state, ['ready', 'error', 'missing'] ) !== -1
-                                               && registry[module].state !== state ) {
+                                       if ( $.inArray( state, [ 'ready', 'error', 'missing' ] ) !== -1
+                                               && registry[ module ].state !== state ) {
                                                // Make sure pending modules depending on this one get executed if their
                                                // dependencies are now fulfilled!
-                                               registry[module].state = state;
+                                               registry[ module ].state = state;
                                                handlePending( module );
                                        } else {
-                                               registry[module].state = state;
+                                               registry[ module ].state = state;
                                        }
                                },
 
                                 *  in the registry.
                                 */
                                getVersion: function ( module ) {
-                                       if ( !hasOwn.call( registry, module ) || registry[module].version === undefined ) {
+                                       if ( !hasOwn.call( registry, module ) || registry[ module ].version === undefined ) {
                                                return null;
                                        }
-                                       return registry[module].version;
+                                       return registry[ module ].version;
                                },
 
                                /**
                                 *  in the registry.
                                 */
                                getState: function ( module ) {
-                                       if ( !hasOwn.call( registry, module ) || registry[module].state === undefined ) {
+                                       if ( !hasOwn.call( registry, module ) || registry[ module ].state === undefined ) {
                                                return null;
                                        }
-                                       return registry[module].state;
+                                       return registry[ module ].state;
                                },
 
                                /**
 
                                        /**
                                         * Construct a JSON-serializable object representing the content of the store.
+                                        *
                                         * @return {Object} Module store contents.
                                         */
                                        toJSON: function () {
 
                                        /**
                                         * Get a key on which to vary the module cache.
+                                        *
                                         * @return {string} String of concatenated vary conditions.
                                         */
                                        getVary: function () {
                                         */
                                        getModuleKey: function ( module ) {
                                                return hasOwn.call( registry, module ) ?
-                                                       ( module + '@' + registry[module].version ) : null;
+                                                       ( module + '@' + registry[ module ].version ) : null;
                                        },
 
                                        /**
                                                key = mw.loader.store.getModuleKey( module );
                                                if ( key in mw.loader.store.items ) {
                                                        mw.loader.store.stats.hits++;
-                                                       return mw.loader.store.items[key];
+                                                       return mw.loader.store.items[ key ];
                                                }
                                                mw.loader.store.stats.misses++;
                                                return false;
                                                        ];
                                                        // Attempted workaround for a possible Opera bug (bug T59567).
                                                        // This regex should never match under sane conditions.
-                                                       if ( /^\s*\(/.test( args[1] ) ) {
-                                                               args[1] = 'function' + args[1];
+                                                       if ( /^\s*\(/.test( args[ 1 ] ) ) {
+                                                               args[ 1 ] = 'function' + args[ 1 ];
                                                                mw.track( 'resourceloader.assert', { source: 'bug-T59567' } );
                                                        }
                                                } catch ( e ) {
                                                if ( src.length > mw.loader.store.MODULE_SIZE_MAX ) {
                                                        return false;
                                                }
-                                               mw.loader.store.items[key] = src;
+                                               mw.loader.store.items[ key ] = src;
                                                mw.loader.store.update();
                                        },
 
                                                        module = key.slice( 0, key.indexOf( '@' ) );
                                                        if ( mw.loader.store.getModuleKey( module ) !== key ) {
                                                                mw.loader.store.stats.expired++;
-                                                               delete mw.loader.store.items[key];
-                                                       } else if ( mw.loader.store.items[key].length > mw.loader.store.MODULE_SIZE_MAX ) {
+                                                               delete mw.loader.store.items[ key ];
+                                                       } else if ( mw.loader.store.items[ key ].length > mw.loader.store.MODULE_SIZE_MAX ) {
                                                                // This value predates the enforcement of a size limit on cached modules.
-                                                               delete mw.loader.store.items[key];
+                                                               delete mw.loader.store.items[ key ];
                                                        }
                                                }
                                        },
                                        var v, attrName, s = '<' + name;
 
                                        for ( attrName in attrs ) {
-                                               v = attrs[attrName];
+                                               v = attrs[ attrName ];
                                                // Convert name=true, to name=name
                                                if ( v === true ) {
                                                        v = attrName;
 
                                /**
                                 * Wrapper object for raw HTML passed to mw.html.element().
+                                *
                                 * @class mw.html.Raw
                                 */
                                Raw: function ( value ) {
 
                                /**
                                 * Wrapper object for CDATA element contents passed to mw.html.element()
+                                *
                                 * @class mw.html.Cdata
                                 */
                                Cdata: function ( value ) {
                         */
                        return function ( name ) {
                                var list = hasOwn.call( lists, name ) ?
-                                       lists[name] :
-                                       lists[name] = $.Callbacks( 'memory' );
+                                       lists[ name ] :
+                                       lists[ name ] = $.Callbacks( 'memory' );
 
                                return {
                                        /**
                                         * Register a hook handler
+                                        *
                                         * @param {Function...} handler Function to bind.
                                         * @chainable
                                         */
 
                                        /**
                                         * Unregister a hook handler
+                                        *
                                         * @param {Function...} handler Function to unbind.
                                         * @chainable
                                         */
 
                                        /**
                                         * Run a hook.
+                                        *
                                         * @param {Mixed...} data
                                         * @chainable
                                         */
                }
        }
 
-       // subscribe to error streams
+       // Subscribe to error streams
        mw.trackSubscribe( 'resourceloader.exception', log );
        mw.trackSubscribe( 'resourceloader.assert', log );
 
+       /**
+        * Fired when all modules associated with the page have finished loading.
+        *
+        * @event resourceloader_loadEnd
+        * @member mw.hook
+        */
+       $( function () {
+               var loading = $.grep( mw.loader.getModuleNames(), function ( module ) {
+                       return mw.loader.getState( module ) === 'loading';
+               } );
+               // In order to use jQuery.when (which stops early if one of the promises got rejected)
+               // cast any loading failures into successes. We only need a callback, not the module.
+               loading = $.map( loading, function ( module ) {
+                       return mw.loader.using( module ).then( null, function () {
+                               return $.Deferred().resolve();
+                       } );
+               } );
+               $.when.apply( $, loading ).then( function () {
+                       mwPerformance.mark( 'mwLoadEnd' );
+                       mw.hook( 'resourceloader.loadEnd' ).fire();
+               } );
+       } );
+
        // Attach to window and globally alias
        window.mw = window.mediaWiki = mw;
 }( jQuery ) );
index 004e710..f361ec8 100644 (file)
                $notifications.each( function () {
                        var notif = $( this ).data( 'mw.notification' );
                        if ( notif ) {
-                               notif[fn]();
+                               notif[ fn ]();
                        }
                } );
        }
        /**
         * Initialisation.
         * Must only be called once, and not before the document is ready.
+        *
         * @ignore
         */
        function init() {
                /**
                 * Pause auto-hide timers for all notifications.
                 * Notifications will not auto-hide until resume is called.
+                *
                 * @see mw.Notification#pause
                 */
                pause: function () {
index 5292e80..6c7484e 100644 (file)
@@ -2,6 +2,20 @@
  * Add search suggestions to the search form.
  */
 ( function ( mw, $ ) {
+       mw.searchSuggest = {
+               request: function ( api, query, response, maxRows ) {
+                       return api.get( {
+                               action: 'opensearch',
+                               search: query,
+                               namespace: 0,
+                               limit: maxRows,
+                               suggest: ''
+                       } ).done( function ( data ) {
+                               response( data[ 1 ] );
+                       } );
+               }
+       };
+
        $( function () {
                var api, map, searchboxesSelectors,
                        // Region where the suggestions box will appear directly below
                // Compatibility map
                map = {
                        // SimpleSearch is broken in Opera < 9.6
-                       opera: [['>=', 9.6]],
+                       opera: [ [ '>=', 9.6 ] ],
                        // Older Konquerors are unable to position the suggestions correctly (bug 50805)
-                       konqueror: [['>=', '4.11']],
+                       konqueror: [ [ '>=', '4.11' ] ],
                        docomo: false,
                        blackberry: false,
                        // Support for iOS 6 or higher. It has not been tested on iOS 5 or lower
-                       ipod: [['>=', 6]],
-                       iphone: [['>=', 6]]
+                       ipod: [ [ '>=', 6 ] ],
+                       iphone: [ [ '>=', 6 ] ]
                };
 
                if ( !$.client.test( map ) ) {
@@ -58,6 +72,7 @@
                /**
                 * Callback that's run when the user changes the search input text
                 * 'this' is the search input box (jQuery object)
+                *
                 * @ignore
                 */
                function onBeforeUpdate() {
@@ -74,6 +89,7 @@
                /**
                 * Callback that's run when suggestions have been updated either from the cache or the API
                 * 'this' is the search input box (jQuery object)
+                *
                 * @ignore
                 */
                function onAfterUpdate() {
                $( searchboxesSelectors.join( ', ' ) )
                        .suggestions( {
                                fetch: function ( query, response, maxRows ) {
-                                       var node = this[0];
+                                       var node = this[ 0 ];
 
                                        api = api || new mw.Api();
 
-                                       $.data( node, 'request', api.get( {
-                                               action: 'opensearch',
-                                               search: query,
-                                               namespace: 0,
-                                               limit: maxRows,
-                                               suggest: ''
-                                       } ).done( function ( data ) {
-                                               response( data[ 1 ] );
-                                       } ) );
+                                       $.data( node, 'request', mw.searchSuggest.request( api, query, response, maxRows ) );
                                },
                                cancel: function () {
-                                       var node = this[0],
+                                       var node = this[ 0 ],
                                                request = $.data( node, 'request' );
 
                                        if ( request ) {
index 61bbb0d..c3db69e 100644 (file)
@@ -17,7 +17,7 @@
                        if ( !compiler.compile ) {
                                throw new Error( 'Compiler must implement compile method.' );
                        }
-                       compilers[name] = compiler;
+                       compilers[ name ] = compiler;
                },
 
                /**
                        var compiledTemplate,
                                compilerName = this.getCompilerName( templateName );
 
-                       if ( !compiledTemplates[moduleName] ) {
-                               compiledTemplates[moduleName] = {};
+                       if ( !compiledTemplates[ moduleName ] ) {
+                               compiledTemplates[ moduleName ] = {};
                        }
 
                        compiledTemplate = this.compile( templateBody, compilerName );
-                       compiledTemplates[moduleName][ templateName ] = compiledTemplate;
+                       compiledTemplates[ moduleName ][ templateName ] = compiledTemplate;
                        return compiledTemplate;
                },
 
diff --git a/resources/src/mediawiki/mediawiki.template.regexp.js b/resources/src/mediawiki/mediawiki.template.regexp.js
new file mode 100644 (file)
index 0000000..3ec0a1f
--- /dev/null
@@ -0,0 +1,15 @@
+mediaWiki.template.registerCompiler( 'regexp', {
+       compile: function ( src ) {
+               return {
+                       render: function () {
+                               return new RegExp(
+                                       src
+                                               // Remove whitespace
+                                               .replace( /\s+/g, '' )
+                                               // Remove named capturing groups
+                                               .replace( /\?<\w+?>/g, '' )
+                               );
+                       }
+               };
+       }
+} );
index ec34ce6..b4baa66 100644 (file)
@@ -16,7 +16,7 @@
         */
        function getUserInfo( info ) {
                var api;
-               if ( !deferreds[info] ) {
+               if ( !deferreds[ info ] ) {
 
                        deferreds.rights = $.Deferred();
                        deferreds.groups = $.Deferred();
 
                }
 
-               return deferreds[info].promise();
+               return deferreds[ info ].promise();
        }
 
        // Map from numbers 0-255 to a hex string (with padding)
        for ( i = 0; i < 256; i++ ) {
                // Padding: Add a full byte (0x100, 256) and strip the extra character
-               byteToHex[i] = ( i + 256 ).toString( 16 ).slice( 1 );
+               byteToHex[ i ] = ( i + 256 ).toString( 16 ).slice( 1 );
        }
 
        // mw.user with the properties options and tokens gets defined in mediawiki.js.
                                        if ( ( i & 3 ) === 0 ) {
                                                r = Math.random() * 0x100000000;
                                        }
-                                       rnds[i] = r >>> ( ( i & 3 ) << 3 ) & 255;
+                                       rnds[ i ] = r >>> ( ( i & 3 ) << 3 ) & 255;
                                }
                        }
                        // Convert from number to hex
                        for ( i = 0; i < 8; i++ ) {
-                               hexRnds[i] = byteToHex[rnds[i]];
+                               hexRnds[ i ] = byteToHex[ rnds[ i ] ];
                        }
 
                        // Concatenation of two random integers with entrophy n and m
                        // Bucket information is stored as 2 integers, together as version:bucket like: "1:2"
                        if ( typeof cookie === 'string' && cookie.length > 2 && cookie.indexOf( ':' ) !== -1 ) {
                                parts = cookie.split( ':' );
-                               if ( parts.length > 1 && Number( parts[0] ) === options.version ) {
-                                       version = Number( parts[0] );
-                                       bucket = String( parts[1] );
+                               if ( parts.length > 1 && Number( parts[ 0 ] ) === options.version ) {
+                                       version = Number( parts[ 0 ] );
+                                       bucket = String( parts[ 1 ] );
                                }
                        }
 
                                // Find range
                                range = 0;
                                for ( k in options.buckets ) {
-                                       range += options.buckets[k];
+                                       range += options.buckets[ k ];
                                }
 
                                // Select random value within range
                                total = 0;
                                for ( k in options.buckets ) {
                                        bucket = k;
-                                       total += options.buckets[k];
+                                       total += options.buckets[ k ];
                                        if ( total >= rand ) {
                                                break;
                                        }
index df10204..02a90fc 100644 (file)
@@ -6,7 +6,7 @@
 
        config = {
                fetch: function ( userInput, response, maxRows ) {
-                       var node = this[0];
+                       var node = this[ 0 ];
 
                        api = api || new mw.Api();
 
@@ -15,7 +15,7 @@
                                list: 'allusers',
                                // Prefix of list=allusers is case sensitive. Normalise first
                                // character to uppercase so that "fo" may yield "Foo".
-                               auprefix: userInput[0].toUpperCase() + userInput.slice( 1 ),
+                               auprefix: userInput[ 0 ].toUpperCase() + userInput.slice( 1 ),
                                aulimit: maxRows
                        } ).done( function ( data ) {
                                var users = $.map( data.query.allusers, function ( userObj ) {
@@ -25,7 +25,7 @@
                        } ) );
                },
                cancel: function () {
-                       var node = this[0],
+                       var node = this[ 0 ],
                                request = $.data( node, 'request' );
 
                        if ( request ) {
index 93a1b3b..50fd0b4 100644 (file)
@@ -33,7 +33,7 @@
                                ];
 
                                for ( i = 0, l = selectors.length; i < l; i++ ) {
-                                       $node = $( selectors[i] );
+                                       $node = $( selectors[ i ] );
                                        if ( $node.length ) {
                                                return $node.first();
                                        }
                 * For index.php use `mw.config.get( 'wgScript' )`.
                 *
                 * @since 1.18
-                * @param str string Name of script (eg. 'api'), defaults to 'index'
-                * @return string Address to script (eg. '/w/api.php' )
+                * @param {string} str Name of script (e.g. 'api'), defaults to 'index'
+                * @return {string} Address to script (e.g. '/w/api.php' )
                 */
                wikiScript: function ( str ) {
                        str = str || 'index';
                        if ( m ) {
                                // Beware that decodeURIComponent is not required to understand '+'
                                // by spec, as encodeURIComponent does not produce it.
-                               return decodeURIComponent( m[1].replace( /\+/g, '%20' ) );
+                               return decodeURIComponent( m[ 1 ].replace( /\+/g, '%20' ) );
                        }
                        return null;
                },
                                        // Error: Invalid nextnode
                                        nextnode = undefined;
                                }
-                               if ( nextnode && ( nextnode.length !== 1 || nextnode[0].parentNode !== $ul[0] ) ) {
+                               if ( nextnode && ( nextnode.length !== 1 || nextnode[ 0 ].parentNode !== $ul[ 0 ] ) ) {
                                        // Error: nextnode must resolve to a single node
                                        // Error: nextnode must have the associated <ul> as its parent
                                        nextnode = undefined;
                        // to get a localized access key label (bug 67946).
                        $link.updateTooltipAccessKeys();
 
-                       return $item[0];
+                       return $item[ 0 ];
                },
 
                /**
index eb4dc9f..1a10f83 100644 (file)
@@ -3,16 +3,16 @@
  * continue loading jQuery and the MediaWiki modules. This code should work on
  * even the most ancient of browsers, so be very careful when editing.
  */
+/*jshint unused: false, evil: true */
+/*globals mw, RLQ: true, $VARS, $CODE, performance */
 
-var mediaWikiLoadStart = ( new Date() ).getTime();
+var mediaWikiLoadStart = ( new Date() ).getTime(),
 
-if ( !window.performance ) {
-       window.performance = {};
-}
-if ( !performance.mark ) {
-       performance.mark = function () {};
-}
-performance.mark( 'mediaWikiStartUp' );
+       mwPerformance = ( window.performance && performance.mark ) ? performance : {
+               mark: function () {}
+       };
+
+mwPerformance.mark( 'mwLoadStart' );
 
 /**
  * Returns false for Grade C supported browsers.
@@ -24,9 +24,6 @@ performance.mark( 'mediaWikiStartUp' );
  * - https://www.mediawiki.org/wiki/Compatibility#Browsers
  * - https://jquery.com/browser-support/
  */
-
-/*jshint unused: false, evil: true */
-/*globals mw, RLQ: true, $VARS, $CODE */
 function isCompatible( ua ) {
        if ( ua === undefined ) {
                ua = navigator.userAgent;
@@ -35,18 +32,18 @@ function isCompatible( ua ) {
        // Browsers with outdated or limited JavaScript engines get the no-JS experience
        return !(
                // Internet Explorer < 8
-               ( ua.indexOf( 'MSIE' ) !== -1 && parseFloat( ua.split( 'MSIE' )[1] ) < 8 ) ||
+               ( ua.indexOf( 'MSIE' ) !== -1 && parseFloat( ua.split( 'MSIE' )[ 1 ] ) < 8 ) ||
                // Firefox < 3
-               ( ua.indexOf( 'Firefox/' ) !== -1 && parseFloat( ua.split( 'Firefox/' )[1] ) < 3 ) ||
+               ( ua.indexOf( 'Firefox/' ) !== -1 && parseFloat( ua.split( 'Firefox/' )[ 1 ] ) < 3 ) ||
                // Opera < 12
                ( ua.indexOf( 'Opera/' ) !== -1 && ( ua.indexOf( 'Version/' ) === -1 ?
                        // "Opera/x.y"
-                       parseFloat( ua.split( 'Opera/' )[1] ) < 10 :
+                       parseFloat( ua.split( 'Opera/' )[ 1 ] ) < 10 :
                        // "Opera/9.80 ... Version/x.y"
-                       parseFloat( ua.split( 'Version/' )[1] ) < 12
+                       parseFloat( ua.split( 'Version/' )[ 1 ] ) < 12
                ) ) ||
                // "Mozilla/0.0 ... Opera x.y"
-               ( ua.indexOf( 'Opera ' ) !== -1 && parseFloat( ua.split( ' Opera ' )[1] ) < 10 ) ||
+               ( ua.indexOf( 'Opera ' ) !== -1 && parseFloat( ua.split( ' Opera ' )[ 1 ] ) < 10 ) ||
                // BlackBerry < 6
                ua.match( /BlackBerry[^\/]*\/[1-5]\./ ) ||
                // Open WebOS < 1.5
@@ -75,6 +72,7 @@ function isCompatible( ua ) {
                // See OutputPage::getHeadScripts().
                document.documentElement.className = document.documentElement.className
                        .replace( /(^|\s)client-js(\s|$)/, '$1client-nojs$2' );
+               return;
        }
 
        /**
@@ -111,5 +109,5 @@ function isCompatible( ua ) {
                        startUp();
                }
        };
-       document.getElementsByTagName( 'head' )[0].appendChild( script );
+       document.getElementsByTagName( 'head' )[ 0 ].appendChild( script );
 }() );
index 6d76b01..3092ab5 100644 (file)
@@ -3,16 +3,16 @@ class MainPage
 
   page_url ''
 
-  a(:edit_link, href: /action=edit/)
+  a(:edit_link, css: '#ca-edit a')
   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/)
+  a(:printable_version_link, css: '#t-print a')
   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/)
+  a(:view_history_link, css: '#ca-history a')
   li(:what_links_here_link, id: 't-whatlinkshere')
 end
index 83c3952..1e5ffaa 100644 (file)
@@ -27,7 +27,7 @@ class PreferencesAppearancePage
   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/)
+  a(:restore_default_link, id: 'mw-prefs-restoreprefs')
   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')
index bb9c586..ee4d757 100644 (file)
@@ -1,6 +1,6 @@
 class ViewHistoryPage
   include PageObject
 
-  a(:view_history_link, href: /action=history/)
-  a(:old_version_link, href: /oldid=/)
+  a(:view_history_link, css: '#ca-history a')
+  a(:old_version_link, css: '#pagehistory a.mw-changeslist-date')
 end
index cc0df7a..f429c30 100644 (file)
@@ -889,9 +889,9 @@ class ParserTest {
                        'wgDisableTitleConversion' => false,
                        // Tidy options.
                        'wgUseTidy' => isset( $opts['tidy'] ),
-                       'wgAlwaysUseTidy' => false,
+                       'wgTidyConfig' => null,
                        'wgDebugTidy' => false,
-                       'wgTidyConf' => $IP . '/includes/tidy.conf',
+                       'wgTidyConf' => $IP . '/includes/tidy/tidy.conf',
                        'wgTidyOpts' => '',
                        'wgTidyInternal' => $this->tidySupport->isInternal(),
                );
@@ -936,6 +936,7 @@ class ParserTest {
                $wgHooks['ParserGetVariableValueTs'][] = 'ParserTest::getFakeTimestamp';
 
                MagicWord::clearCache();
+               MWTidy::destroySingleton();
 
                return $context;
        }
@@ -1218,6 +1219,7 @@ class ParserTest {
                FileBackendGroup::destroySingleton();
                LockManagerGroup::destroySingletons();
                LinkCache::singleton()->clear();
+               MWTidy::destroySingleton();
 
                foreach ( $this->savedGlobals as $var => $val ) {
                        $GLOBALS[$var] = $val;
index f70a1b0..c8c63f3 100644 (file)
@@ -2057,13 +2057,28 @@ Tabs don't trigger preformatted text
         preformatted text.
  This is preformatted text.
        So is this.
-!! html
+!! html/php
 <p>    This is not
         preformatted text.
 </p>
 <pre>This is preformatted text.
        So is this.
 </pre>
+!! html/parsoid
+<p>    This is not
+        preformatted text.</p>
+<pre>This is preformatted text.
+       So is this.</pre>
+!! end
+
+!! test
+Space before tab needs nowiki pre protection
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>    a</p>
+!! wikitext
+<nowiki> </nowiki>     a
 !! end
 
 !! test
@@ -5234,38 +5249,6 @@ External link containing a single quote. (bug 63947)
 <p><a rel="mw:ExtLink" href="//foo.org/bar'baz">bang</a></p>
 !! end
 
-
-!! test
-External link containing a period in the anchor. (bug 63947)
-!! wikitext
-[//foo.org/bar#baz. bang]
-
-[//foo.org/bar. bang]
-!! html/php
-<p><a rel="nofollow" class="external text" href="//foo.org/bar#baz.">bang</a>
-</p><p><a rel="nofollow" class="external text" href="//foo.org/bar.">bang</a>
-</p>
-!! html/parsoid
-<p><a rel="mw:ExtLink" href="//foo.org/bar#baz.">bang</a></p>
-<p><a rel="mw:ExtLink" href="//foo.org/bar.">bang</a></p>
-!! end
-
-!! test
-External link containing a single quote. (bug 63947)
-!! wikitext
-[//foo.org/bar'baz]
-
-[//foo.org/bar'baz bang]
-!! html/php
-<p><a rel="nofollow" class="external autonumber" href="//foo.org/bar'baz">[1]</a>
-</p><p><a rel="nofollow" class="external text" href="//foo.org/bar'baz">bang</a>
-</p>
-!! html/parsoid
-<p><a rel="mw:ExtLink" href="//foo.org/bar'baz"></a></p>
-<p><a rel="mw:ExtLink" href="//foo.org/bar'baz">bang</a></p>
-!! end
-
-
 !! test
 External link containing double-single-quotes in text '' (bug 4598 sanity check)
 !! wikitext
@@ -5301,9 +5284,22 @@ External link containing double-single-quotes with no space separating the url f
 External link with comments in link text
 !! wikitext
 [http://www.google.com Google <!-- comment -->]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external text" href="http://www.google.com">Google </a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.google.com">Google <!-- comment --></a></p>
+!! end
+
+!! test
+External link to bare IPv4 address
+!! wikitext
+[http://192.168.0.1 Link]
+!! html/php
+<p><a rel="nofollow" class="external text" href="http://192.168.0.1">Link</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://192.168.0.1">Link</a></p>
 !! end
 
 !! test
@@ -5345,7 +5341,7 @@ IPv6 urls, autolink format (T23261)
 !! wikitext
 http://[2404:130:0:1000::187:2]/index.php
 
-Examples from RFC2373, section 2.2:
+Examples from RFC 2373, section 2.2:
 * http://[1080::8:800:200C:417A]/unicast
 * http://[FF01::101]/multicast
 * http://[::1]/loopback
@@ -5362,9 +5358,9 @@ Examples from RFC 2732, section 2:
 * http://[::FFFF:129.144.52.38]:80/index.html
 * http://[2010:836B:4179::836B:4179]
 
-!! html
+!! html/php
 <p><a rel="nofollow" class="external free" href="http://[2404:130:0:1000::187:2]/index.php">http://[2404:130:0:1000::187:2]/index.php</a>
-</p><p>Examples from RFC2373, section 2.2:
+</p><p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc2373">RFC 2373</a>, section 2.2:
 </p>
 <ul><li> <a rel="nofollow" class="external free" href="http://[1080::8:800:200C:417A]/unicast">http://[1080::8:800:200C:417A]/unicast</a></li>
 <li> <a rel="nofollow" class="external free" href="http://[FF01::101]/multicast">http://[FF01::101]/multicast</a></li>
@@ -5382,6 +5378,25 @@ Examples from RFC 2732, section 2:
 <li> <a rel="nofollow" class="external free" href="http://[::FFFF:129.144.52.38]:80/index.html">http://[::FFFF:129.144.52.38]:80/index.html</a></li>
 <li> <a rel="nofollow" class="external free" href="http://[2010:836B:4179::836B:4179]">http://[2010:836B:4179::836B:4179]</a></li></ul>
 
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://[2404:130:0:1000::187:2]/index.php">http://[2404:130:0:1000::187:2]/index.php</a></p>
+
+<p>Examples from <a href="//tools.ietf.org/html/rfc2373" rel="mw:ExtLink">RFC 2373</a>, section 2.2:</p>
+<ul><li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]/unicast">http://[1080::8:800:200C:417A]/unicast</a></li>
+<li> <a rel="mw:ExtLink" href="http://[FF01::101]/multicast">http://[FF01::101]/multicast</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::1]/loopback">http://[::1]/loopback</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::]/unspecified">http://[::]/unspecified</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::13.1.68.3]/ipv4compat">http://[::13.1.68.3]/ipv4compat</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]/ipv4compat">http://[::FFFF:129.144.52.38]/ipv4compat</a></li></ul>
+
+<p>Examples from <a href="//tools.ietf.org/html/rfc2732" rel="mw:ExtLink">RFC 2732</a>, section 2:</p>
+<ul><li> <a rel="mw:ExtLink" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html</a></li>
+<li> <a rel="mw:ExtLink" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">http://[1080:0:0:0:8:800:200C:417A]/index.html</a></li>
+<li> <a rel="mw:ExtLink" href="http://[3ffe:2a00:100:7031::1]">http://[3ffe:2a00:100:7031::1]</a></li>
+<li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]/foo">http://[1080::8:800:200C:417A]/foo</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::192.9.5.5]/ipng">http://[::192.9.5.5]/ipng</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]:80/index.html">http://[::FFFF:129.144.52.38]:80/index.html</a></li>
+<li> <a rel="mw:ExtLink" href="http://[2010:836B:4179::836B:4179]">http://[2010:836B:4179::836B:4179]</a></li></ul>
 !! end
 
 !! test
@@ -5389,7 +5404,7 @@ IPv6 urls, bracketed format (T23261)
 !! wikitext
 [http://[2404:130:0:1000::187:2]/index.php test]
 
-Examples from RFC2373, section 2.2:
+Examples from RFC 2373, section 2.2:
 * [http://[1080::8:800:200C:417A] unicast]
 * [http://[FF01::101] multicast]
 * [http://[::1]/ loopback]
@@ -5406,9 +5421,9 @@ Examples from RFC 2732, section 2:
 * [http://[::FFFF:129.144.52.38]:80/index.html 6]
 * [http://[2010:836B:4179::836B:4179] 7]
 
-!! html
+!! html/php
 <p><a rel="nofollow" class="external text" href="http://[2404:130:0:1000::187:2]/index.php">test</a>
-</p><p>Examples from RFC2373, section 2.2:
+</p><p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc2373">RFC 2373</a>, section 2.2:
 </p>
 <ul><li> <a rel="nofollow" class="external text" href="http://[1080::8:800:200C:417A]">unicast</a></li>
 <li> <a rel="nofollow" class="external text" href="http://[FF01::101]">multicast</a></li>
@@ -5426,6 +5441,25 @@ Examples from RFC 2732, section 2:
 <li> <a rel="nofollow" class="external text" href="http://[::FFFF:129.144.52.38]:80/index.html">6</a></li>
 <li> <a rel="nofollow" class="external text" href="http://[2010:836B:4179::836B:4179]">7</a></li></ul>
 
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://[2404:130:0:1000::187:2]/index.php">test</a></p>
+
+<p>Examples from <a href="//tools.ietf.org/html/rfc2373" rel="mw:ExtLink">RFC 2373</a>, section 2.2:</p>
+<ul><li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]">unicast</a></li>
+<li> <a rel="mw:ExtLink" href="http://[FF01::101]">multicast</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::1]/">loopback</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::]">unspecified</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::13.1.68.3]">ipv4compat</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]">ipv4compat</a></li></ul>
+
+<p>Examples from <a href="//tools.ietf.org/html/rfc2732" rel="mw:ExtLink">RFC 2732</a>, section 2:</p>
+<ul><li> <a rel="mw:ExtLink" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">1</a></li>
+<li> <a rel="mw:ExtLink" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">2</a></li>
+<li> <a rel="mw:ExtLink" href="http://[3ffe:2a00:100:7031::1]">3</a></li>
+<li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]/foo">4</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::192.9.5.5]/ipng">5</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]:80/index.html">6</a></li>
+<li> <a rel="mw:ExtLink" href="http://[2010:836B:4179::836B:4179]">7</a></li></ul>
 !! end
 
 !! test
@@ -5443,7 +5477,8 @@ Non-extlinks in brackets
 [{{echo|foo}}l's errand]
 [url={{echo|foo}}]
 [url=http://example.com]
-!! html
+[http:// bare protocols don't count]
+!! html/php
 <p>[foo]
 [foo bar]
 [foo <i>bar</i>]
@@ -5456,7 +5491,22 @@ Non-extlinks in brackets
 [fool's errand]
 [url=foo]
 [url=<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>]
+[http:// bare protocols don't count]
 </p>
+!! html/parsoid
+<p>[foo]
+[foo bar]
+[foo <i>bar</i>]
+[fool's] errand
+[fool's errand]
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}"}'>foo</span>]
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}"}'>foo</span> bar]
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}"}'>foo</span> <i>bar</i>]
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}l&#39;s"}'>fool's</span>] errand
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}l&#39;s"}'>fool's</span> errand]
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"url={{echo|foo}}"}'>url=foo</span>]
+[url=<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>]
+[http:// bare protocols don't count]</p>
 !! end
 
 !! test
@@ -6190,7 +6240,7 @@ Table cell attributes: Pipes protected by nowikis should be treated as a plain c
 | title="foo<nowiki>|</nowiki>" |bar
 | title="foo<nowiki>|</nowiki>" bar
 |}
-!! html
+!! html/php
 <table>
 <tr>
 <td title="foo">bar
@@ -6200,12 +6250,19 @@ Table cell attributes: Pipes protected by nowikis should be treated as a plain c
 <td> title="foo|" bar
 </td></tr></table>
 
+!! html/parsoid
+<table>
+<tbody><tr><td title="foo">bar</td>
+<td title="foo|" data-parsoid='{"a":{"title":"foo|"},"sa":{"title":"foo&lt;nowiki>|&lt;/nowiki>"},"autoInsertedEnd":true}'>bar</td>
+<td> title="foo<span typeof="mw:Nowiki">|</span>" bar</td></tr>
+</tbody></table>
 !! end
 
-# The "|}" to close the table is missing from the input, so parsoid's
-# *2wt modes will fail.
+# See: http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html
+# N.B. The "|}" to close the table is missing from the input, so parsoid's
+#      *2wt modes will fail.
 !! test
-Table security: embedded pipes (http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html)
+Table security: embedded pipes
 !! options
 parsoid=wt2html,html2html
 !! wikitext
@@ -6223,12 +6280,14 @@ parsoid=wt2html,html2html
 !! html/parsoid
 <table><tbody>
 <tr>
-<td><a rel="mw:ExtLink" href="ftp://|x||"></a>" onmouseover="alert(document.cookie)">test</td></tr></tbody></table>
+<td data-parsoid='{"startTagSrc":"| ","attrSepSrc":"|","autoInsertedEnd":true}'><a rel="mw:ExtLink" href="ftp://|x||"></a>" onmouseover="alert(document.cookie)">test</td></tr></tbody></table>
 !! end
 
-# FIXME: The php output is broken.
+# FIXME: The output seems broken. Filed as T110268.
 !! test
 ! and || in td attributes should not be parsed as <th>/<td>
+!! options
+parsoid=wt2html
 !! wikitext
 {|
 | style="color: red !important;" data-contrived="put this here ||" | foo
@@ -6242,7 +6301,7 @@ parsoid=wt2html,html2html
 
 !! html/parsoid
 <table>
-<tbody><tr><td style="color: red !important;" data-contrived="put this here ||" data-parsoid='{"autoInsertedEnd":true}'> foo</td></tr>
+<tbody><tr><td> style="color: red !important;" data-contrived="put this here </td><td data-parsoid='{"stx_v":"row","a":{"\"":null},"sa":{"\"":""},"autoInsertedEnd":true}'> foo</td></tr>
 </tbody></table>
 !! end
 
@@ -6859,9 +6918,6 @@ parsoid=wt2html,wt2wt
 </tbody></table>
 !! end
 
-
-# PHP throws away the (semi-broken) "foo" class here; Parsoid
-# preserves it.
 !!test
 Parsoid: Recover better from broken table attributes
 !!options
@@ -6872,7 +6928,7 @@ parsoid=wt2html
 foo
 |}
 !!html/php+tidy
-<table>
+<table class="foo">
 <tr>
 <td class="bar">
 <p>foo</p>
@@ -6887,6 +6943,23 @@ foo
 </tbody></table>
 !!end
 
+!! test
+Tables: Digest broken attributes on table and tr tag
+!! options
+parsoid=wt2html
+!! wikitext
+{| || |} ++
+|- || || ++ --
+|- > [
+|}
+!! html
+<table>
+<tbody>
+<tr></tr>
+<tr></tr>
+</tbody></table>
+!! end
+
 !! test
 Strip unsupported table tags
 !! options
@@ -7097,8 +7170,10 @@ Link with HTML entity in suffix / tail
 Link with 3 brackets
 !! wikitext
 [[[Main Page]]]
+Foo [[[Main Page]]]
 !! html
 <p>[[[Main Page]]]
+Foo [[[Main Page]]]
 </p>
 !! end
 
@@ -9877,27 +9952,33 @@ __proto__
 Magic links: internal link to RFC (bug 479)
 !! wikitext
 [[RFC 123]]
-!! html
+!! html/php
 <p><a href="/index.php?title=RFC_123&amp;action=edit&amp;redlink=1" class="new" title="RFC 123 (page does not exist)">RFC 123</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./RFC_123" title="RFC 123">RFC 123</a></p>
 !! end
 
 !! test
 Magic links: RFC (bug 479)
 !! wikitext
 RFC 822
-!! html
+!! html/php
 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a>
 </p>
+!! html/parsoid
+<p><a href="//tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC 822</a></p>
 !! end
 
 !! test
 Magic links: RFC (bug 65278)
 !! wikitext
 This is RFC 822 but thisRFC 822 is not RFC 822linked.
-!! html
+!! html/php
 <p>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a> but thisRFC 822 is not RFC 822linked.
 </p>
+!! html/parsoid
+<p>This is <a href="//tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC 822</a> but thisRFC 822 is not RFC 822linked.</p>
 !! end
 
 !! test
@@ -9906,20 +9987,26 @@ Magic links: RFC (w/ non-newline whitespace, bug 28950/29025)
 RFC &nbsp;&#160;&#0160;&#xA0;&#Xa0; 822
 RFC
 822
-!! html
+!! html/php
 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a>
 RFC
 822
 </p>
+!! html/parsoid
+<p><a href="//tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 822</a>
+RFC
+822</p>
 !! end
 
 !! test
 Magic links: ISBN (bug 1937)
 !! wikitext
 ISBN 0-306-40615-2
-!! html
+!! html/php
 <p><a href="/wiki/Special:BookSources/0306406152" class="internal mw-magiclink-isbn">ISBN 0-306-40615-2</a>
 </p>
+!! html/parsoid
+<p><a href="./Special:BookSources/0306406152" rel="mw:WikiLink">ISBN 0-306-40615-2</a></p>
 !! end
 
 !! test
@@ -9930,7 +10017,7 @@ This is ISBN 978-0-316-09811-3 but thisISBN 978-0-316-09811-3 is not ISBN 978-0-
 <p>This is <a href="/wiki/Special:BookSources/9780316098113" class="internal mw-magiclink-isbn">ISBN 978-0-316-09811-3</a> but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.
 </p>
 !! html/parsoid
-<p>This is <a href="./Special:BookSources/9780316098113" rel="mw:ExtLink">ISBN 978-0-316-09811-3</a> but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.</p>
+<p>This is <a href="./Special:BookSources/9780316098113" rel="mw:WikiLink">ISBN 978-0-316-09811-3</a> but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.</p>
 !! end
 
 !! test
@@ -9941,31 +10028,41 @@ ISBN
 9780316098113
 ISBN 978
 0316098113
-!! html
+!! html/php
 <p><a href="/wiki/Special:BookSources/9780316098113" class="internal mw-magiclink-isbn">ISBN 978 0 316 09811 3</a>
 ISBN
 9780316098113
 ISBN 978
 0316098113
 </p>
+!! html/parsoid
+<p><a href="./Special:BookSources/9780316098113" rel="mw:WikiLink">ISBN <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 978<span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span>0<span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span>316<span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span>09811<span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span>3</a>
+ISBN
+9780316098113
+ISBN 978
+0316098113</p>
 !! end
 
 !! test
 Magic links: PMID incorrectly converts space to underscore
 !! wikitext
 PMID 1234
-!! html
+!! html/php
 <p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
 </p>
+!! html/parsoid
+<p><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID 1234</a></p>
 !! end
 
 !! test
 Magic links: PMID (bug 65278)
 !! wikitext
 This is PMID 1234 but thisPMID 1234 is not PMID 1234linked.
-!! html
+!! html/php
 <p>This is <a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a> but thisPMID 1234 is not PMID 1234linked.
 </p>
+!! html/parsoid
+<p>This is <a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID 1234</a> but thisPMID 1234 is not PMID 1234linked.</p>
 !! end
 
 !! test
@@ -9974,11 +10071,15 @@ Magic links: PMID (w/ non-newline whitespace, bug 28950/29025)
 PMID &nbsp;&#160;&#0160;&#xA0;&#Xa0; 1234
 PMID
 1234
-!! html
+!! html/php
 <p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
 PMID
 1234
 </p>
+!! html/parsoid
+<p><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 1234</a>
+PMID
+1234</p>
 !! end
 
 ###
@@ -13267,7 +13368,7 @@ BUG 1887: A ISBN with a thumbnail
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div><a href="/wiki/Special:BookSources/1235467890" class="internal mw-magiclink-isbn">ISBN 1235467890</a></div></div></div>
 
 !! 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/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="./Special:BookSources/1235467890" rel="mw:ExtLink">ISBN 1235467890</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="./Special:BookSources/1235467890" rel="mw:WikiLink">ISBN 1235467890</a></figcaption></figure>
 !! end
 
 !! test
@@ -13765,9 +13866,9 @@ bar
 bar</p>
 !! end
 
-## Edge case bug in Parsoid
+## Edge case bugs in Parsoid from T93580
 !! test
-T93580: Templated <ref> inside images
+T93580: 1. Templated <ref> inside block images
 !! wikitext
 [[File:Foobar.jpg|thumb|Caption with templated ref: {{echo|<ref>foo</ref>}}]]
 
@@ -13778,6 +13879,30 @@ T93580: Templated <ref> inside images
 <ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
 !! end
 
+!! test
+T93580: 2. <ref> inside inline images
+!! wikitext
+[[File:Foobar.jpg|Undisplayed caption in inline image with ref: <ref>foo</ref>]]
+
+<references />
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: &lt;ref>foo&lt;/ref>"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[64,78,5,6]}\" data-mw=\"{&amp;quot;name&amp;quot;:&amp;quot;ref&amp;quot;,&amp;quot;body&amp;quot;:{&amp;quot;id&amp;quot;:&amp;quot;mw-reference-text-cite_note-1&amp;quot;},&amp;quot;attrs&amp;quot;:{}}\">&lt;a href=\"#cite_note-1\" style=\"counter-reset: mw-Ref 1;\">&lt;span class=\"mw-reflink-text\">[1]&lt;/span>&lt;/a>&lt;/span>&lt;meta typeof=\"mw:Extension/ref/Marker\" about=\"#mwt2\" data-parsoid=\"{&amp;quot;group&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;foo&amp;quot;,&amp;quot;hasRefInRef&amp;quot;:false,&amp;quot;dsr&amp;quot;:[64,78,5,6],&amp;quot;tmp&amp;quot;:{}}\" data-mw=\"{}\">"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+!! end
+
+!! test
+T93580: 3. Templated <ref> inside inline images
+!! wikitext
+[[File:Foobar.jpg|Undisplayed caption in inline image with ref: {{echo|<ref>{{echo|foo}}</ref>}}]]
+
+<references />
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: {{echo|&lt;ref>{{echo|foo}}&lt;/ref>}}"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Transclusion  mw:Extension/ref\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[64,96,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;&lt;ref>{{echo|foo}}&lt;/ref>&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">&lt;a href=\"#cite_note-1\" style=\"counter-reset: mw-Ref 1;\">&lt;span class=\"mw-reflink-text\">[1]&lt;/span>&lt;/a>&lt;/span>&lt;meta typeof=\"mw:Transclusion mw:Extension/ref/Marker\" about=\"#mwt2\" data-parsoid=\"{&amp;quot;group&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;foo&amp;quot;,&amp;quot;hasRefInRef&amp;quot;:false,&amp;quot;dsr&amp;quot;:[64,96,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;tmp&amp;quot;:{}}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;&lt;ref>{{echo|foo}}&lt;/ref>&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+!! end
+
 ###
 ### Subpages
 ###
@@ -15778,6 +15903,7 @@ MSIE 6 CSS safety test: sup/sub script (bug 55332)
 
 !! end
 
+# FIXME: Parsoid fails to sanitize this! See T58846.
 !! test
 Opera -o-link CSS
 !! wikitext
@@ -18237,7 +18363,7 @@ ISBN  978-0-1234-56&#x20;789
 !! html+tidy
 <p><a href="/wiki/Special:BookSources/9780123456" class="internal mw-magiclink-isbn">ISBN 978-0-1234-56</a> 789</p>
 !! html/parsoid
-<p><a href="./Special:BookSources/9780123456" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978-0-1234-56</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#x20;","srcContent":" "}'> </span>789</p>
+<p><a href="./Special:BookSources/9780123456" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978-0-1234-56</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#x20;","srcContent":" "}'> </span>789</p>
 !! end
 
 !! test
@@ -18257,7 +18383,7 @@ ISBN ISBN 1234567890
 <p>ISBN <a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
 </p>
 !! html/parsoid
-<p>ISBN <a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a></p>
+<p>ISBN <a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a></p>
 !! end
 
 # Uppercase X and lowercase x as well
@@ -18279,12 +18405,12 @@ ISBN 978080442957x
 <a href="/wiki/Special:BookSources/978080442957X" class="internal mw-magiclink-isbn">ISBN 978080442957x</a>
 </p>
 !! html/parsoid
-<p><a href="./Special:BookSources/346204561X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-X</a>
-<a href="./Special:BookSources/346204561X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-x</a>
-<a href="./Special:BookSources/080442957X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957X</a>
-<a href="./Special:BookSources/080442957X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957x</a>
-<a href="./Special:BookSources/978080442957X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957X</a>
-<a href="./Special:BookSources/978080442957X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957x</a></p>
+<p><a href="./Special:BookSources/346204561X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-X</a>
+<a href="./Special:BookSources/346204561X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-x</a>
+<a href="./Special:BookSources/080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957X</a>
+<a href="./Special:BookSources/080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957x</a>
+<a href="./Special:BookSources/978080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957X</a>
+<a href="./Special:BookSources/978080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957x</a></p>
 !! end
 
 !! test
@@ -18295,7 +18421,7 @@ ISBN 1234567890
 <p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
 </p>
 !! html/parsoid
-<p><a href="./Special:BookSources/1234567890" rel="mw:ExtLink">ISBN 1234567890</a></p>
+<p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink">ISBN 1234567890</a></p>
 !! end
 
 !! test
@@ -18306,7 +18432,7 @@ Bug 22905: <abbr> followed by ISBN followed by </a>
 <p><abbr>(fr)</abbr> <a href="/wiki/Special:BookSources/2753300917" class="internal mw-magiclink-isbn">ISBN 2753300917</a> <a rel="nofollow" class="external text" href="http://www.example.com">example.com</a>
 </p>
 !! html/parsoid
-<p><abbr data-parsoid='{"stx":"html"}'>(fr)</abbr> <a href="./Special:BookSources/2753300917" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 2753300917</a> <a rel="mw:ExtLink" href="http://www.example.com">example.com</a></p>
+<p><abbr data-parsoid='{"stx":"html"}'>(fr)</abbr> <a href="./Special:BookSources/2753300917" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 2753300917</a> <a rel="mw:ExtLink" href="http://www.example.com">example.com</a></p>
 !! end
 
 !! test
@@ -20600,14 +20726,18 @@ __TOC__
 <p><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></p>
 !! end
 
+# Don't expect Parsoid to roundtrip this until the php parser comes closer to
+# html5 tag parsing.
 !! test
 Tags with parameters in TOC
+!! options
+parsoid=wt2html
 !! wikitext
 __TOC__
 == <sup class="in-h2">Hello</sup> ==
 
 == <sup class="a > b">Evilbye</sup> ==
-!! html
+!! html/php
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Hello"><span class="tocnumber">1</span> <span class="toctext"><sup>Hello</sup></span></a></li>
@@ -20616,8 +20746,13 @@ __TOC__
 </div>
 
 <h2><span class="mw-headline" id="Hello"><sup class="in-h2">Hello</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Hello">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<h2><span class="mw-headline" id="b.22.3EEvilbye"><sup> b"&gt;Evilbye</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;&gt;Evilbye">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="b.22.3EEvilbye"><sup class="a"> b"&gt;Evilbye</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;&gt;Evilbye">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+
+!! html/parsoid
+<meta property="mw:PageProp/toc" />
+<h2> <sup class="in-h2" data-parsoid='{"stx":"html"}'>Hello</sup> </h2>
 
+<h2> <sup class="a " data-parsoid='{"stx":"html"}'> b">Evilbye</sup> </h2>
 !! end
 
 !! test
@@ -21816,23 +21951,23 @@ Empty TR nodes should not be stripped if they have any attributes set
 !! test
 Headings: 0. Unnested
 !! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<p>=foo=</p>
+
+<p> =foo=
+<!--cmt-->
+=foo=</p>
+
+<p>=foo<i>a</i>=</p>
 !! wikitext
 <nowiki>=foo=</nowiki>
 
-<nowiki> =foo= </nowiki>
+<nowiki> </nowiki>=foo=
 <!--cmt-->
 <nowiki>=foo=</nowiki>
 
 =foo''a''<nowiki>=</nowiki>
-!! html
-<p><span typeof="mw:Nowiki">=foo=</span></p>
-
-<p><span typeof="mw:Nowiki"> =foo= </span>
-<!--cmt-->
-<span typeof="mw:Nowiki">=foo=</span></p>
-
-<p>=foo<i>a</i><span typeof="mw:Nowiki">=</span></p>
 !!end
 
 # New headings and existing headings are handled differently
@@ -21889,15 +22024,26 @@ parsoid=html2wt
 !! test
 Headings: 3. Nested inside html with wikitext split by html tags
 !! options
-parsoid=html2wt,wt2wt
-!! wikitext
-= ='''bold'''<nowiki>foo=</nowiki> =
+parsoid=html2wt
 !! html/parsoid
 <h1>=<b>bold</b>foo=</h1>
+!! wikitext
+= ='''bold'''<nowiki>foo=</nowiki> =
 !!end
 
 !! test
 Headings: 4a. No escaping needed (testing just h1 and h2)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<h1>=foo</h1>
+<h1>foo=</h1>
+<h1> =foo= </h1>
+<h1>=foo= bar</h1>
+<h2>=foo</h2>
+<h2>foo=</h2>
+<h1>=</h1>
+<h1><i>=</i>foo=</h1>
 !! wikitext
 = =foo =
 
@@ -21914,15 +22060,6 @@ Headings: 4a. No escaping needed (testing just h1 and h2)
 = = =
 
 = ''=''foo= =
-!! html/parsoid
-<h1>=foo</h1>
-<h1>foo=</h1>
-<h1> =foo= </h1>
-<h1>=foo= bar</h1>
-<h2>=foo</h2>
-<h2>foo=</h2>
-<h1>=</h1>
-<h1><i>=</i>foo=</h1>
 !!end
 
 !! test
@@ -21942,6 +22079,20 @@ parsoid=html2wt
 
 !! test
 Headings: 5. Empty headings
+!! options
+parsoid=html2wt
+!! html/parsoid
+<h1 data-parsoid='{}'></h1>
+
+<h2 data-parsoid='{}'></h2>
+
+<h3 data-parsoid='{}'></h3>
+
+<h4 data-parsoid='{}'></h4>
+
+<h5 data-parsoid='{}'></h5>
+
+<h6 data-parsoid='{}'></h6>
 !! wikitext
 =<nowiki/>=
 
@@ -21954,112 +22105,74 @@ Headings: 5. Empty headings
 =====<nowiki/>=====
 
 ======<nowiki/>======
-!! html/parsoid
-<h1 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h1>
-
-<h2 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h2>
-
-<h3 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h3>
-
-<h4 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h4>
-
-<h5 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h5>
-
-<h6 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h6>
 !!end
 
 !! test
 Headings: 6a. Heading chars in SOL context (with trailing spaces)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>=a=</p>
+
+<p>=a=</p> 
+
+<p>=a=</p>     
 !! wikitext
 <nowiki>=a=</nowiki>
 
 <nowiki>=a=</nowiki> 
 
 <nowiki>=a=</nowiki>   
-
-<nowiki>=a=</nowiki>   
-!! html/php
-<p>=a=
-</p><p>=a= 
-</p><p>=a=     
-</p><p>=a=     
-</p>
-!! html/parsoid
-<p><span typeof="mw:Nowiki">=a=</span></p>
-
-<p><span typeof="mw:Nowiki">=a=</span></p> 
-
-<p><span typeof="mw:Nowiki">=a=</span></p>     
-
-<p><span typeof="mw:Nowiki">=a=</span></p>     
 !!end
 
 !! test
 Headings: 6b. Heading chars in SOL context (with trailing newlines)
-!! wikitext
-<nowiki>=a=
-b</nowiki>
-
-<nowiki>=a= 
-b</nowiki>
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>=a=
+b</p>
 
-<nowiki>=a=    
-b</nowiki>
+<p>=a= 
+b</p>
 
-<nowiki>=a=     
-b</nowiki>
-!! html/php
-<p>=a=
-b
-</p><p>=a= 
-b
-</p><p>=a=     
-b
-</p><p>=a=      
+<p>=a= 
+b</p>
+!! wikitext
+<nowiki>=a=</nowiki>
 b
-</p>
-!! html/parsoid
-<p><span typeof="mw:Nowiki">=a=
-b</span></p>
 
-<p><span typeof="mw:Nowiki">=a= 
-b</span></p>
-
-<p><span typeof="mw:Nowiki">=a=        
-b</span></p>
+<nowiki>=a=</nowiki> 
+b
 
-<p><span typeof="mw:Nowiki">=a=         
-b</span></p>
+<nowiki>=a=</nowiki>   
+b
 !!end
 
 !! test
 Headings: 6c. Heading chars in SOL context (leading newline break)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>a
+=b=</p>
 !! wikitext
 a
 <nowiki>=b=</nowiki>
-!! html/php
-<p>a
-=b=
-</p>
-!! html/parsoid
-<p>a
-<span typeof="mw:Nowiki">=b=</span>
 !!end
 
 !! test
 Headings: 6d. Heading chars in SOL context (with interspersed comments)
-!! wikitext
-<!--c0--><nowiki>=a=</nowiki>
-
-<!--c1--><nowiki>=a=</nowiki> <!--c2-->         <!--c3-->
-!! html/php
-<p>=a=
-</p><p>=a=      
-</p>
+!! options
+parsoid=html2wt
 !! html/parsoid
-<!--c0--><p><span typeof="mw:Nowiki">=a=</span></p>
+<!--c0--><p>=a=</p>
 
-<!--c1--><p><span typeof="mw:Nowiki">=a=</span></p> <!--c2-->   <!--c3-->
+<!--c1--><p>=a=</p> <!--c2-->   <!--c3-->
+!! wikitext
+<!--c0--><nowiki>=a=</nowiki>
+
+<!--c1--><nowiki>=a=</nowiki> <!--c2-->         <!--c3-->
 !!end
 
 !! test
 
 !! test
 Lists: 0. Outside nests
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>*foo</p>
+
+<p>#foo</p>
+
+<p>;Foo:bar</p>
 !! wikitext
 <nowiki>*</nowiki>foo
 
 <nowiki>#</nowiki>foo
 
-<nowiki>;Foo:</nowiki>bar
-!! html/php
-<p>*foo
-</p><p>#foo
-</p><p>;Foo:bar
-</p>
-!! html/parsoid
-<p><span typeof="mw:Nowiki">*</span>foo</p>
-
-<p><span typeof="mw:Nowiki">#</span>foo</p>
-
-<p><span typeof="mw:Nowiki">;Foo:</span>bar</p>
+<nowiki>;</nowiki>Foo<nowiki>:</nowiki>bar
 !!end
 
 !! test
 Lists: 1. Nested inside html
+!! options
+parsoid=html2wt
+!! html/parsoid
+<ul><li>*foo</li></ul>
+<ul><li>#foo</li></ul>
+<ul><li>:foo</li></ul>
+<ul><li>;foo</li></ul>
+<ol><li>*foo</li></ol>
+<ol><li>#foo</li></ol>
+<ol><li>:foo</li></ol>
+<ol><li>;foo</li></ol>
+
 !! wikitext
 *<nowiki>*foo</nowiki>
 
@@ -22140,20 +22262,19 @@ Lists: 1. Nested inside html
 #<nowiki>:foo</nowiki>
 
 #<nowiki>;foo</nowiki>
-!! html
-<ul><li>*foo</li></ul>
-<ul><li>#foo</li></ul>
-<ul><li>:foo</li></ul>
-<ul><li>;foo</li></ul>
-<ol><li>*foo</li></ol>
-<ol><li>#foo</li></ol>
-<ol><li>:foo</li></ol>
-<ol><li>;foo</li></ol>
-
 !!end
 
 !! test
 Lists: 2. Inside definition lists
+!! options
+parsoid=html2wt
+!! html/parsoid
+<dl><dt>;foo</dt></dl>
+<dl><dt>:foo</dt></dl>
+<dl><dt>:foo</dt>
+<dd>bar</dd></dl>
+<dl><dd>:foo</dd></dl>
+
 !! wikitext
 ;<nowiki>;foo</nowiki>
 
@@ -22163,40 +22284,27 @@ Lists: 2. Inside definition lists
 :bar
 
 :<nowiki>:foo</nowiki>
-!! html
-<dl><dt>;foo</dt></dl>
-<dl><dt>:foo</dt></dl>
-<dl><dt>:foo</dt>
-<dd>bar</dd></dl>
-<dl><dd>:foo</dd></dl>
-
 !!end
 
 !! test
 Lists: 3. Only bullets at start of text should be escaped
+!! options
+parsoid=html2wt
+!! html/parsoid
+<ul><li>*foo*bar</li></ul>
+<ul><li>*foo<i>it</i>*bar</li></ul>
+
 !! wikitext
 *<nowiki>*foo*bar</nowiki>
 
 *<nowiki>*foo</nowiki>''it''*bar
-!! html
-<ul><li>*foo*bar</li></ul>
-<ul><li>*foo<i>it</i>*bar</li></ul>
-
 !!end
 
 !! test
 Lists: 4. No escapes needed
 !! options
-parsoid
-!! wikitext
-*foo*bar
-
-*''foo''*bar
-
-*[[Foo]]: bar
-
-*[[Foo]]*bar
-!! html
+parsoid=html2wt
+!! html/parsoid
 <ul>
 <li>foo*bar
 </li>
@@ -22213,10 +22321,29 @@ parsoid
 <li><a rel="mw:WikiLink" href="Foo" title="Foo">Foo</a>*bar
 </li>
 </ul>
+!! wikitext
+*foo*bar
+
+*''foo''*bar
+
+*[[Foo]]: bar
+
+*[[Foo]]*bar
 !!end
 
 !! test
 Lists: 5. No unnecessary escapes
+!! options
+parsoid=html2wt
+!! html/parsoid
+<ul><li> bar <span>[[foo]]</span></li></ul>
+<ul><li> =bar <span>[[foo]]</span></li></ul>
+<ul><li> [[bar <span>[[foo]]</span></li></ul>
+<ul><li> ]]bar <span>[[foo]]</span></li></ul>
+<ul><li> =bar <span>foo]]</span>=</li></ul>
+<ul><li> <s></s>: a</li></ul>
+<ul><li> <i>* foo</i></li></ul>
+
 !! wikitext
 * bar <span><nowiki>[[foo]]</nowiki></span>
 
@@ -22231,15 +22358,6 @@ Lists: 5. No unnecessary escapes
 * <s></s>: a
 
 * ''* foo''
-!! html
-<ul><li> bar <span>[[foo]]</span></li></ul>
-<ul><li> =bar <span>[[foo]]</span></li></ul>
-<ul><li> [[bar <span>[[foo]]</span></li></ul>
-<ul><li> ]]bar <span>[[foo]]</span></li></ul>
-<ul><li> =bar <span>foo]]</span>=</li></ul>
-<ul><li> <s></s>: a</li></ul>
-<ul><li> <i>* foo</i></li></ul>
-
 !!end
 
 !! test
@@ -22254,13 +22372,15 @@ parsoid=html2wt
 
 !! test
 Lists: 7. Escape bullets in a multi-line context
-!! wikitext
-a
-<nowiki>*</nowiki>b
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>a
 *b
 </p>
+!! wikitext
+a
+<nowiki>*</nowiki>b
 !!end
 
 !! test
@@ -22279,17 +22399,16 @@ parsoid=html2wt
 
 !! test
 HRs: 1. Single line
+!! options
+parsoid=html2wt
+!! html/parsoid
+<hr />----
+<hr />=foo=
+<hr />*foo
 !! wikitext
 ----<nowiki>----</nowiki>
 ----=foo=
 ----*foo
-!! html+tidy
-<hr />
-<p>----</p>
-<hr />
-<p>=foo=</p>
-<hr />
-<p>*foo</p>
 !! end
 
 #### --------------- Tables ---------------
@@ -22313,40 +22432,48 @@ HRs: 1. Single line
 
 !! test
 Tables: 1a. Simple example
-!! wikitext
-<nowiki>{|
-|}</nowiki>
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>{|
 |}
 </p>
+!! wikitext
+<nowiki>{|</nowiki>
+|}
 !! end
 
 !! test
 Tables: 1b. No escaping needed
-!! wikitext
-!foo
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>!foo
 </p>
+!! wikitext
+!foo
 !! end
 
 !! test
 Tables: 1c. No escaping needed
-!! wikitext
-|foo
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>|foo
 </p>
+!! wikitext
+|foo
 !! end
 
 !! test
 Tables: 1d. No escaping needed
-!! wikitext
-|}foo
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>|}foo
 </p>
+!! wikitext
+|}foo
 !! end
 
 !! test
@@ -22407,11 +22534,8 @@ parsoid=html2wt
 
 !! test
 Tables: 2c. Nested in td -- no escaping needed
-!! wikitext
-{|
-
-|foo!!bar
-|}
+!! options
+parsoid=html2wt
 !! html/*
 <table>
 
@@ -22419,15 +22543,17 @@ Tables: 2c. Nested in td -- no escaping needed
 <td>foo!!bar
 </td></tr></table>
 
-!! end
-
-!! test
-Tables: 3a. Nested in th
 !! wikitext
 {|
 
-!foo!bar
+|foo!!bar
 |}
+!! end
+
+!! test
+Tables: 3a. Nested in th
+!! options
+parsoid=html2wt
 !! html/*
 <table>
 
@@ -22435,6 +22561,11 @@ Tables: 3a. Nested in th
 <th>foo!bar
 </th></tr></table>
 
+!! wikitext
+{|
+
+!foo!bar
+|}
 !! end
 
 !! test
@@ -22543,6 +22674,19 @@ parsoid=html2wt
 
 !! test
 Tables: 4c. No escaping needed
+!! options
+parsoid=html2wt
+!! html/parsoid
+<table><tbody>
+<tr><td>foo-bar</td><td>foo+bar</td></tr>
+<tr><td><i>foo</i>-bar</td><td><i>foo</i>+bar</td></tr>
+<tr><td>foo
+<p>bar|baz
++bar
+-bar</p></td></tr>
+<tr><td>x
+<div>a|b</div></td>
+</tbody></table>
 !! wikitext
 {|
 |foo-bar
@@ -22583,21 +22727,18 @@ bar|baz
 <div>a|b</div>
 </td></tr></table>
 
-!! html/parsoid
-<table><tbody>
-<tr><td>foo-bar</td><td>foo+bar</td></tr>
-<tr><td><i>foo</i>-bar</td><td><i>foo</i>+bar</td></tr>
-<tr><td>foo
-<p>bar|baz
-+bar
--bar</p></td></tr>
-<tr><td>x
-<div>a|b</div></td>
-</tbody></table>
 !! end
 
 !! test
 Tables: 4d. No escaping needed
+!! options
+parsoid=html2wt
+!! html/parsoid
+<table>
+<tbody><tr><td><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>-bar</td>
+<td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>+1</td>
+<td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>-2</td></tr>
+</tbody></table>
 !! wikitext
 {|
 |[[Foo]]-bar
@@ -22614,29 +22755,6 @@ Tables: 4d. No escaping needed
 <td>-2
 </td></tr></table>
 
-!! html/parsoid
-<table>
-<tbody><tr><td><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>-bar</td>
-<td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>+1</td>
-<td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>-2</td></tr>
-</tbody></table>
-!! end
-
-!! test
-Tables: Digest broken attributes on table and tr tag
-!! options
-parsoid=wt2html
-!! wikitext
-{| || |} ++
-|- || || ++ --
-|- > [
-|}
-!! html
-<table>
-<tbody>
-<tr></tr>
-<tr></tr>
-</tbody></table>
 !! end
 
 !! test
@@ -22648,11 +22766,18 @@ parsoid=html2wt
 |** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.</p>
 !! wikitext
 <nowiki>*</nowiki>This is a long sentence here that will make the nowiki algo split up the nowikis into multiple pairs
-<nowiki>|</nowiki>** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.
+|** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.
 !! end
 
 !! test
 Unclosed xmlish element in table line shouldn't eat end delimiters
+!! options
+parsoid=html2wt
+!! html/parsoid
+<table>
+<tbody><tr><td> &lt;foo</td>
+<td> bar></td></tr>
+</tbody></table>
 !! wikitext
 {|
 | <foo
@@ -22666,11 +22791,6 @@ Unclosed xmlish element in table line shouldn't eat end delimiters
 <td> bar&gt;
 </td></tr></table>
 
-!! html/parsoid
-<table>
-<tbody><tr><td> &lt;foo</td>
-<td> bar></td></tr>
-</tbody></table>
 !! end
 
 #### --------------- Links ----------------
@@ -22682,6 +22802,12 @@ Unclosed xmlish element in table line shouldn't eat end delimiters
 #### --------------------------------------
 !! test
 Links 1. WikiLinks: No escapes needed
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="Foo" title="Foo">Foo<i>boo</i></a>
+<a rel="mw:WikiLink" href="Foo" title="Foo">[Foobar]</a>
+<a rel="mw:WikiLink" href="Foo" title="Foo">x [Foobar] x</a></p>
 !! wikitext
 [[Foo|Foo''boo'']]
 [[Foo|[Foobar]]]
@@ -22691,10 +22817,6 @@ Links 1. WikiLinks: No escapes needed
 <a href="/wiki/Foo" title="Foo">[Foobar]</a>
 <a href="/wiki/Foo" title="Foo">x [Foobar] x</a>
 </p>
-!! html/parsoid
-<p><a rel="mw:WikiLink" href="Foo" title="Foo">Foo<i>boo</i></a>
-<a rel="mw:WikiLink" href="Foo" title="Foo">[Foobar]</a>
-<a rel="mw:WikiLink" href="Foo" title="Foo">x [Foobar] x</a></p>
 !! end
 
 !! test
@@ -22739,6 +22861,11 @@ parsoid=html2wt
 
 !! test
 Links 3. WikiLinks: No escapes needed
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="Foo">[Foobar</a>
+<a rel="mw:WikiLink" href="Foo" title="Foo">foo|bar</a></p>
 !! wikitext
 [[Foo|[Foobar]]
 [[Foo|foo|bar]]
@@ -22746,9 +22873,6 @@ Links 3. WikiLinks: No escapes needed
 <p><a href="/wiki/Foo" title="Foo">[Foobar</a>
 <a href="/wiki/Foo" title="Foo">foo|bar</a>
 </p>
-!! html/parsoid
-<p><a rel="mw:WikiLink" href="Foo">[Foobar</a>
-<a rel="mw:WikiLink" href="Foo" title="Foo">foo|bar</a></p>
 !! end
 
 !! test
@@ -22778,17 +22902,21 @@ parsoid=html2wt
 
 !! test
 Links 5. ExtLinks: No escapes needed
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://google.com">[google</a></p>
 !! wikitext
 [http://google.com [google]
 !! html/php
 <p><a rel="nofollow" class="external text" href="http://google.com">[google</a>
 </p>
-!! html/parsoid
-<p><a rel="mw:ExtLink" href="http://google.com">[google</a></p>
 !! end
 
 !! test
 Links 6. Add <nowiki/>s between text-nodes and url-links when required (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p>x<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>y
 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>?x
@@ -22822,6 +22950,8 @@ http://example.com(x<nowiki/>)
 
 !! test
 Links 7a. Don't add spurious <nowiki/>s between text-nodes and url-links (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p>x
 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>
 
 !! test
 Links 7b. Don't add spurious <nowiki/>s between text-nodes and url-links (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.,;:!?\
 -<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>:</p>
@@ -22869,6 +23001,8 @@ http://example.com.,;:!?\
 
 !! test
 Links 8. Add <nowiki/>s between text-nodes and RFC-links when required (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p><a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>4
 <a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
@@ -22881,6 +23015,8 @@ X<nowiki/>RFC 123<nowiki/>y
 
 !! test
 Links 9. Don't add spurious <nowiki/>s between text-nodes and RFC-links (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p><a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>?foo
 <a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>&amp;foo
@@ -22899,6 +23035,8 @@ RFC 123&foo
 
 !! test
 Links 10. Add <nowiki/>s between text-nodes and PMID-links when required (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>4
 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
@@ -22911,6 +23049,8 @@ X<nowiki/>PMID 123<nowiki/>y
 
 !! test
 Links 11. Don't add spurious <nowiki/>s between text-nodes and PMID-links (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>?foo
 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>&foo
@@ -22929,10 +23069,12 @@ PMID 123&foo
 
 !! test
 Links 12. Add <nowiki/>s between text-nodes and ISBN-links when required (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
-<p><a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>1
-<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>x
-a<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>b
+<p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>1
+<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>x
+a<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>b
 </p>
 !! wikitext
 ISBN 1234567890<nowiki/>1
@@ -22942,8 +23084,10 @@ a<nowiki/>ISBN 1234567890<nowiki/>b
 
 !! test
 Links 13. Don't add spurious <nowiki/>s between text-nodes and ISBN-links (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
-<p>-<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>'s
+<p>-<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>'s
 !! wikitext
 -ISBN 1234567890's
 !! html/php
@@ -22966,13 +23110,14 @@ parsoid=html2wt
 Links 15. Link trails can't become link prefixes.
 !! options
 language=is
+parsoid=html2wt
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="Söfnuður" title="Söfnuður" data-parsoid='{"stx":"simple","tail":"-"}'>Söfnuður-</a><a rel="mw:WikiLink" href="00" title="00">00</a></p>
 !! wikitext
 [[Söfnuður]]-[[00]]
 !! html/php
 <p><a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">Söfnuður-</a><a href="/wiki/00" title="00">00</a>
 </p>
-!! html/parsoid
-<p><a rel="mw:WikiLink" href="Söfnuður" title="Söfnuður" data-parsoid='{"stx":"simple","tail":"-"}'>Söfnuður-</a><a rel="mw:WikiLink" href="00" title="00">00</a></p>
 !! end
 
 #### --------------- Quotes ---------------
@@ -22984,28 +23129,7 @@ language=is
 !! test
 1a. Quotes inside <b> and <i>
 !! options
-parsoid=html2wt,wt2wt
-!! wikitext
-''<nowiki/>'foo'''
-''<nowiki>''foo''</nowiki>''
-''<nowiki>'''foo'''</nowiki>''
-''foo''<nowiki/>'s
-'''<nowiki/>'foo''''
-'''<nowiki>''foo''</nowiki>'''
-'''<nowiki>'''foo'''</nowiki>'''
-'''foo'<nowiki/>''bar'<nowiki/>''baz'''
-'''foo'''<nowiki/>'s
-'''foo''
-''foo''<nowiki/>'
-''foo'''<nowiki/>'
-'''foo''<nowiki/>'
-''''foo'''
-'''foo'''<nowiki/>'
-''''foo'''<nowiki/>'
-''fools'<span> errand</span>''
-''<span>fool</span>'s errand''
-'<nowiki/>''foo'' bar '''baz''
-a|!*#-:;+-~[]{}b'''x''
+parsoid=html2wt
 !! html/*
 <p><i>'foo'</i>
 <i>''foo''</i>
@@ -23028,22 +23152,34 @@ a|!*#-:;+-~[]{}b'''x''
 '<i>foo</i> bar '<i>baz</i>
 a|!*#-:;+-~[]{}b'<i>x</i>
 </p>
+!! wikitext
+''<nowiki/>'foo'''
+''<nowiki>''foo''</nowiki>''
+''<nowiki>'''foo'''</nowiki>''
+''foo''<nowiki/>'s
+'''<nowiki/>'foo''''
+'''<nowiki>''foo''</nowiki>'''
+'''<nowiki>'''foo'''</nowiki>'''
+'''foo'<nowiki/>''bar'<nowiki/>''baz'''
+'''foo'''<nowiki/>'s
+'''foo''
+''foo''<nowiki/>'
+''foo'''<nowiki/>'
+'''foo''<nowiki/>'
+''''foo'''
+'''foo'''<nowiki/>'
+''''foo'''<nowiki/>'
+''fools'<span> errand</span>''
+''<span>fool</span>'s errand''
+'<nowiki/>''foo'' bar '''baz''
+a|!*#-:;+-~[]{}b'''x''
 !! end
 
 !! test
 1b. Quotes inside <b> and <i> with other tags on same line
 !! options
-parsoid=html2wt,wt2wt
-!! wikitext
-'''a'' foo ''[[bar]]''
-''a''' foo ''[[bar]]''
-''a''' foo '''{{echo|[[bar]]}}'''
-[[foo]] x'''[[bar]]''
-'''foo'' <ref>test</ref>
-'''foo'' <div title="name">test</div>
-'''foo'' and <br> bar
-<references />
-!! html
+parsoid=html2wt
+!! html/parsoid
 '<i>a</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
 <i>a'</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
 <i>a'</i> foo <b><a rel="mw:WikiLink" href="Bar" title="Bar" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[bar]]"}},"i":0}}]}'>bar</a></b>
@@ -23054,45 +23190,58 @@ parsoid=html2wt,wt2wt
 <ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">test</span></li>
 </ol>
+!! wikitext
+'''a'' foo ''[[bar]]''
+''a''' foo ''[[bar]]''
+''a''' foo '''{{echo|[[bar]]}}'''
+[[foo]] x'''[[bar]]''
+'''foo'' <ref>test</ref>
+'''foo'' <div title="name">test</div>
+'''foo'' and <br> bar
+<references />
 !! end
 
 !! test
 2. Link fragments separated by <i> and <b> tags
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>[[<i>foo</i>hello]]</p>
+<p>[[<b>foo</b>hello]]</p>
 !! wikitext
 [[''foo''<nowiki>hello]]</nowiki>
 
 [['''foo'''<nowiki>hello]]</nowiki>
-!! html
-<p>[[<i>foo</i>hello]]
-</p><p>[[<b>foo</b>hello]]
-</p>
 !! end
 
 # FIXME: Escaping one or both of [[ and ]] is also acceptable --
 #        this is one of the shortcomings of this format
 !! test
 3. Link fragments inside <i> and <b>
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><i>[[foo</i>]]</p>
+<p><b>[[foo</b>]]</p>
 !! wikitext
 ''[[foo''<nowiki>]]</nowiki>
 
 '''[[foo'''<nowiki>]]</nowiki>
-!! html
-<p><i>[[foo</i>]]
-</p><p><b>[[foo</b>]]
-</p>
 !! end
 
 !! test
 4. No escaping needed
-!! wikitext
-'<span>''bar''</span>'
-'<span>'''bar'''</span>'
-'a:b'foo
-!! html
+!! options
+options=html2wt
+!! html/parsoid
 <p>'<span><i>bar</i></span>'
 '<span><b>bar</b></span>'
 'a:b'foo
 </p>
+!! wikitext
+'<span>''bar''</span>'
+'<span>'''bar'''</span>'
+'a:b'foo
 !! end
 
 #### ----------- Paragraphs ---------------
@@ -23101,6 +23250,15 @@ parsoid=html2wt,wt2wt
 
 !! test
 1. No unnecessary escapes
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>bar <span>[[foo]]</span>
+</p><p>=bar <span>[[foo]]</span>
+</p><p>[[bar <span>[[foo]]</span>
+</p><p>]]bar <span>[[foo]]</span>
+</p><p>=bar <span>foo]]</span>=
+</p>
 !! wikitext
 bar <span><nowiki>[[foo]]</nowiki></span>
 
@@ -23111,13 +23269,6 @@ bar <span><nowiki>[[foo]]</nowiki></span>
 ]]bar <span><nowiki>[[foo]]</nowiki></span>
 
 =bar <span>foo]]</span><nowiki>=</nowiki>
-!! html
-<p>bar <span>[[foo]]</span>
-</p><p>=bar <span>[[foo]]</span>
-</p><p>[[bar <span>[[foo]]</span>
-</p><p>]]bar <span>[[foo]]</span>
-</p><p>=bar <span>foo]]</span>=
-</p>
 !!end
 
 #### ----------------------- PRE --------------------------
@@ -23126,83 +23277,103 @@ bar <span><nowiki>[[foo]]</nowiki></span>
 !! test
 1. Leading whitespace in SOL context should be escaped
 !! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<p> a</p>
+
+<p>  a</p>
+
+<p>    a(tab)</p>
+
+<p>    a
+<!--cmt-->
+  a</p>
+
+<p>a
+ b</p>
+
+<p>a
+       b</p>
+
+<p>a
+        b</p>
 !! wikitext
 <nowiki> </nowiki>a
 
 <nowiki> </nowiki> a
 
-<nowiki>       </nowiki>a(tab)
+       a(tab)
 
 <nowiki> </nowiki>     a
 <!--cmt-->
-<nowiki> </nowiki> a
+<nowiki>  </nowiki>a
 
 a
 <nowiki> </nowiki>b
 
 a
-<nowiki>       </nowiki>b
+       b
 
 a
-<nowiki>       </nowiki> b
-!! html
-<p> a</p>
-<p>  a</p>
-<p>    a(tab)</p>
-<p>    a</p>
-<p><!--cmt-->  a</p>
-<p>a
- b</p>
-<p>a
-       b</p>
-<p>a
-        b</p>
+        b
+!! html/php
+<p> a
+</p><p>  a
+</p><p>        a(tab)
+</p><p>        a
+  a
+</p><p>a
+ b
+</p><p>a
+       b
+</p><p>a
+        b
+</p>
 !! end
 
 !! test
 2. Leading whitespace in non-indent-pre contexts should not be escaped
 !! options
-parsoid
-!! wikitext
-foo <ref>''a''
- b</ref>
-<references />
-!! html
+parsoid=htm2wt
+!! html/parsoid
 <p>foo <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
 <ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><i data-parsoid='{"dsr":[9,14,2,2]}'>a</i>
  b</span></li>
 </ol>
+!! wikitext
+foo <ref>''a''
+ b</ref>
+<references />
 !! end
 
 !! test
 3. Leading whitespace in indent-pre suppressing contexts should not be escaped
 !! options
-parsoid
-!! wikitext
+parsoid=html2wt
+!! html/parsoid
 <blockquote>
+<p>
  a
  <span>b</span>
- c
+ c</p>
 </blockquote>
-!! html
+!! wikitext
 <blockquote>
-<p>
  a
  <span>b</span>
- c</p>
+ c
 </blockquote>
 !! end
 
 !! test
 4. Leading whitespace in indent-pre suppressing contexts should not be escaped
 !! options
-parsoid
-!! wikitext
- [[File:Foobar.jpg|thumb|caption]]
+options=html2wt
 !! 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/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+!! wikitext
+ [[File:Foobar.jpg|thumb|caption]]
 !! end
 
 !! test
@@ -23218,15 +23389,15 @@ parsoid=html2wt
 !!test
 T95794: nowiki escaping should account for leading space at start-of-line in an indent-pre block
 !! options
-parsoid
-!! wikitext
- * foo
- * bar
-!! html
+parsoid=html2wt
+!! html/parsoid
 <pre>
 * foo
 * bar
 </pre>
+!! wikitext
+ * foo
+ * bar
 !! end
 
 #### --------------- Behavior Switches --------------------
@@ -23258,15 +23429,8 @@ __|__
 # We use indent-pre as an indirect way to test for sol-transparent behavior.
 !! test
 Behavior switches should be SOL-transparent
-!! wikitext
- __TOC__
-
- <!-- this one's bogus -->
- __TOO__
-
- __TOC__ foo
-
-__TOC__ bar
+!! options
+parsoid=html2wt
 !! html/parsoid
  <meta property="mw:PageProp/toc" />
 
@@ -23276,6 +23440,15 @@ __TOC__ bar
 <pre data-parsoid='{}'><meta property="mw:PageProp/toc" data-parsoid='{"src":"__TOC__","magicSrc":"__TOC__"}'/> foo</pre>
 
 <meta property="mw:PageProp/toc" data-parsoid='{"src":"__TOC__","magicSrc":"__TOC__"}'/><pre data-parsoid='{}'>bar</pre>
+!! wikitext
+ __TOC__
+
+ <!-- this one's bogus -->
+ __TOO__
+
+ __TOC__ foo
+
+__TOC__ bar
 !! end
 
 #### --------------- HTML tags ---------------
@@ -23287,75 +23460,85 @@ __TOC__ bar
 !! test
 1. a tags
 !! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+&lt;a href=&quot;http://google.com&quot;&gt;google&lt;/a&gt;
 !! wikitext
 <a href="http://google.com">google</a>
-!! html
-&lt;a href=&quot;http://google.com&quot;&gt;google&lt;/a&gt;
 !! end
 
 !! test
 2. other tags
-!! wikitext
-* <nowiki><div>foo</div></nowiki>
-* <nowiki><div style="color:red">foo</div></nowiki>
-* <nowiki><td></nowiki>
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <ul><li> &lt;div&gt;foo&lt;/div&gt;</li>
 <li> &lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;</li>
 <li> &lt;td&gt;</li></ul>
 
+!! wikitext
+* <nowiki><div>foo</div></nowiki>
+* <nowiki><div style="color:red">foo</div></nowiki>
+* <nowiki><td></nowiki>
 !! end
 
 !! test
 3. multi-line html tag
-!! wikitext
-<nowiki><div
->foo</div
-></nowiki>
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>&lt;div
 &gt;foo&lt;/div
 &gt;
 </p>
+!! wikitext
+<nowiki><div
+>foo</div
+></nowiki>
 !! end
 
 !! test
 4. extension tags
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>&lt;ref&gt;foo&lt;/ref&gt;
+</p><p>&lt;ref&gt;bar
+</p><p>baz&lt;/ref&gt;
+</p>
 !! wikitext
 <nowiki><ref>foo</ref></nowiki>
 
 <nowiki><ref>bar</nowiki>
 
 baz<nowiki></ref></nowiki>
-!! html
-<p>&lt;ref&gt;foo&lt;/ref&gt;
-</p><p>&lt;ref&gt;bar
-</p><p>baz&lt;/ref&gt;
-</p>
 !! end
 
 #### --------------- Others ---------------
 !! test
 Escaping nowikis
-!! wikitext
-&lt;nowiki&gt;foo&lt;/nowiki&gt;
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>&lt;nowiki&gt;foo&lt;/nowiki&gt;
 </p>
+!! wikitext
+&lt;nowiki&gt;foo&lt;/nowiki&gt;
 !! end
 
 ## The quote-char in the input is necessary for triggering the bug
 !! test
 (Bug 52035) Nowiki-escaping should not get tripped by " :" in text
 !! options
-parsoid=wt2wt,html2wt
+parsoid=html2wt
+!! html/parsoid
+<p>foo's bar :</p>
 !! wikitext
 foo's bar :
-!! html
-<p>foo's bar :</p>
 !! end
 
+#----------- End of wikitext escaping tests --------------
+
 !! test
 
 Tag-like HTML structures are passed through as text
@@ -23407,20 +23590,9 @@ HTML tag with broken attribute value quoting
 !! wikitext
 <span title="Hello world>Foo</span>
 !! html/php
-<p><span>Foo</span>
-</p>
-!! html/parsoid
 <p><span title="Hello world">Foo</span>
 </p>
-!! end
-
-!! test
-Parsoid-only: HTML tag with broken attribute value quoting
-!! options
-parsoid
-!! wikitext
-<span title="Hello world>Foo</span>
-!! html
+!! html/parsoid
 <p><span title="Hello world">Foo</span>
 </p>
 !! end
@@ -23434,7 +23606,7 @@ Table with broken attribute value quoting
 !! html/php
 <table>
 <tr>
-<td>Foo
+<td title="Hello world">Foo
 </td></tr></table>
 
 !! html/parsoid
@@ -23455,9 +23627,9 @@ Table with broken attribute value quoting on consecutive lines
 !! html/php
 <table>
 <tr>
-<td>Foo
+<td title="Hello world">Foo
 </td>
-<td>Bar
+<td style="color:red">Bar
 </td></tr></table>
 
 !! html/parsoid
@@ -23470,7 +23642,7 @@ Table with broken attribute value quoting on consecutive lines
 !! end
 
 !! test
-Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
+2. Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
 !! options
 parsoid
 !! wikitext
@@ -23480,7 +23652,7 @@ parsoid
 !! end
 
 !! test
-Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
+1. Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
 !! options
 parsoid
 !! wikitext
@@ -24529,7 +24701,7 @@ parsoid={
 
 ==  [[Category:A2]] hi pal ==
 
-== <!--foo-->   [[Category:A3]]    how goes it ==
+==  <!--foo-->  [[Category:A3]]    how goes it ==
 
 == it goes well    [[Category:A4]]  <!--bar-->  ==
 
@@ -24981,7 +25153,7 @@ Edited ISBN links not serializable as ISBN links should serialize as wikilinks
 !! options
 parsoid=html2wt
 !! html/parsoid
-<a rel="mw:ExtLink" href="./Special:BookSources/1234567890">ISBN 1234567895</a>
+<a href="./Special:BookSources/1234567890" rel="mw:ExtLink">ISBN 1234567895</a>
 !! wikitext
 [[Special:BookSources/1234567890|ISBN 1234567895]]
 !! end
@@ -25091,6 +25263,92 @@ parsoid=html2wt
 http://example.com<nowiki> http://example.com is not a link.</nowiki>
 !! end
 
+!! test
+Magic links inside links (not autolinked)
+!! wikitext
+[[Foo|http://example.com]]
+[[Foo|RFC 1234]]
+[[Foo|PMID 1234]]
+[[Foo|ISBN 123456789x]]
+
+[http://foo.com http://example.com]
+[http://foo.com RFC 1234]
+[http://foo.com PMID 1234]
+[http://foo.com ISBN 123456789x]
+!! html+tidy
+<p><a href="/wiki/Foo" title="Foo">http://example.com</a> <a href="/wiki/Foo" title="Foo">RFC 1234</a> <a href="/wiki/Foo" title="Foo">PMID 1234</a> <a href="/wiki/Foo" title="Foo">ISBN 123456789x</a></p>
+<p><a rel="nofollow" class="external text" href="http://foo.com">http://example.com</a> <a rel="nofollow" class="external text" href="http://foo.com">RFC 1234</a> <a rel="nofollow" class="external text" href="http://foo.com">PMID 1234</a> <a rel="nofollow" class="external text" href="http://foo.com">ISBN 123456789x</a></p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo">http://example.com</a>
+<a rel="mw:WikiLink" href="./Foo" title="Foo">RFC 1234</a>
+<a rel="mw:WikiLink" href="./Foo" title="Foo">PMID 1234</a>
+<a rel="mw:WikiLink" href="./Foo" title="Foo">ISBN 123456789x</a></p>
+
+<p><a rel="mw:ExtLink" href="http://foo.com">http://example.com</a>
+<a rel="mw:ExtLink" href="http://foo.com">RFC 1234</a>
+<a rel="mw:ExtLink" href="http://foo.com">PMID 1234</a>
+<a rel="mw:ExtLink" href="http://foo.com">ISBN 123456789x</a></p>
+!! end
+
+!! test
+Magic links inside image captions (autolinked)
+!! wikitext
+[[File:Foobar.jpg|thumb|http://example.com]]
+[[File:Foobar.jpg|thumb|RFC 1234]]
+[[File:Foobar.jpg|thumb|PMID 1234]]
+[[File:Foobar.jpg|thumb|ISBN 123456789x]]
+!! html+tidy
+<div class="thumb tright">
+<div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div>
+</div>
+</div>
+<div class="thumb tright">
+<div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
+<a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc1234">RFC 1234</a></div>
+</div>
+</div>
+<div class="thumb tright">
+<div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
+<a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a></div>
+</div>
+</div>
+<div class="thumb tright">
+<div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
+<a href="/wiki/Special:BookSources/123456789X" class="internal mw-magiclink-isbn">ISBN 123456789x</a></div>
+</div>
+</div>
+!! 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/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="//tools.ietf.org/html/rfc1234" rel="mw:ExtLink">RFC 1234</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID 1234</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="./Special:BookSources/123456789X" rel="mw:WikiLink">ISBN 123456789x</a></figcaption></figure>
+!! end
+
+!! test
+WTS of magic word text (T109371)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>RFC 1234</p>
+<p><a href="http://foo.com" rel="mw:ExtLink">RFC 1234</a></p>
+<p><a href="./Foo" rel="mw:WikiLink">RFC 1234</a></p>
+!! wikitext
+<nowiki>RFC 1234</nowiki>
+
+[http://foo.com RFC 1234]
+
+[[Foo|RFC 1234]]
+!! end
+
 !! test
 Edited Redirect link should emit a non-piped wikitext link
 !! options
@@ -25796,6 +26054,16 @@ parsoid={
 </table>
 !! end
 
+!! test
+Escape nowiki DOM elements
+!! options
+parsoid=html2wt
+!! html/parsoid
+<nowiki><i>foo</i></nowiki>
+!! wikitext
+&lt;nowiki&gt;''foo''&lt;/nowiki&gt;
+!! end
+
 # ---------------------------------------------------
 # End of tests spec'ing wikitext serialization norms |
 # ---------------------------------------------------
index 73fa0b5..eec02ed 100644 (file)
@@ -45,7 +45,7 @@ class LessFileCompilationTest extends ResourceLoaderTestCase {
                $method->setAccessible( true );
                $compiler = $method->invoke( $this->module, $rlContext );
 
-               $this->assertNotNull( $compiler->compileFile( $this->file ) );
+               $this->assertNotNull( $compiler->parseFile( $this->file )->getCss() );
        }
 
        public function toString() {
index a33b86a..e1537bf 100644 (file)
@@ -73,7 +73,6 @@ help:
        #
        # Targets:
        #   phpunit (default)   Run all the tests with phpunit
-       #   install             Install PHPUnit from phpunit.de
        #   tap                 Run the tests individually through Test::Harness's prove(1)
        #   help                You're looking at it!
        #   coverage            Run the tests and generates an HTML code coverage report
index 43d8ce8..7dc7027 100644 (file)
@@ -208,6 +208,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
 
                DeferredUpdates::clearPendingUpdates();
 
+               ob_start( 'MediaWikiTestCase::wfResetOutputBuffersBarrier' );
        }
 
        protected function addTmpFiles( $files ) {
@@ -215,6 +216,11 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        }
 
        protected function tearDown() {
+               $status = ob_get_status();
+               if ( isset( $status['name'] ) && $status['name'] === 'MediaWikiTestCase::wfResetOutputBuffersBarrier' ) {
+                       ob_end_flush();
+               }
+
                $this->called['tearDown'] = true;
                // Cleaning up temporary files
                foreach ( $this->tmpFiles as $fileName ) {
@@ -1111,7 +1117,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                // of tidy. In that case however, we can not reliably detect whether a failing validation
                // is due to malformed HTML, or caused by tidy not being installed as a command line tool.
                // That would cause all HTML assertions to fail on a system that has no tidy installed.
-               if ( !$GLOBALS['wgTidyInternal'] ) {
+               if ( !$GLOBALS['wgTidyInternal'] || !MWTidy::isEnabled() ) {
                        $this->markTestSkipped( 'Tidy extension not installed' );
                }
 
@@ -1174,4 +1180,12 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
 
                self::assertFalse( self::tagMatch( $matcher, $actual, $isHtml ), $message );
        }
+
+       /**
+        * Used as a marker to prevent wfResetOutputBuffers from breaking PHPUnit.
+        * @return string
+        */
+       public static function wfResetOutputBuffersBarrier( $buffer ) {
+               return $buffer;
+       }
 }
index 0a32ba1..f555812 100644 (file)
@@ -14,16 +14,13 @@ TO RETAIN YOUR DATA.
 
 == Installation ==
 
-If PHPUnit is not installed, follow the installation instructions in the
-PHPUnit Manual at:
-
-  http://www.phpunit.de/manual/current/en/installation.html
+If you used composer to install MediaWiki's dependencies PHPUnit will already be available, unless
+you explicitly specified the --no-dev flag during the install. In this case just run "composer update".
 
-- or -
-
-On Unix-like operating systems, run:
+Otherwise follow the installation instructions in the
+PHPUnit Manual at:
 
-  make install
+  https://phpunit.de/manual/current/en/installation.html
 
 
 == Running tests ==
@@ -47,7 +44,7 @@ On Windows-family operating systems, run the 'run-tests.bat' batch file.
 
 === Writing tests ===
 
-A guide to writing unit tests for MediaWiki can be found at:
+A guide to writing PHP unit tests for MediaWiki can be found at:
 
-       http://mediawiki.org/wiki/Unit_Testing
+       https://www.mediawiki.org/wiki/Manual:PHP_unit_testing
 
diff --git a/tests/phpunit/data/css/comments.css b/tests/phpunit/data/css/comments.css
new file mode 100644 (file)
index 0000000..744a14c
--- /dev/null
@@ -0,0 +1,7 @@
+/* url expressions in comments should be ignored */
+
+.selector { /*@noflip*/ background-image: /*@embed*/ url(not-commented.gif); }
+
+/*
+.selector { background-image: url(commented-out.gif); }
+*/
index 99c7f64..a45cfbb 100644 (file)
@@ -1,20 +1,47 @@
 <?php
 
-class WellProtectedClass {
+class WellProtectedParentClass {
+       private $privateParentProperty;
+
+       public function __construct() {
+               $this->privateParentProperty = 9000;
+       }
+
+       private function incrementPrivateParentPropertyValue() {
+               $this->privateParentProperty++;
+       }
+
+       public function getPrivateParentProperty() {
+               return $this->privateParentProperty;
+       }
+}
+
+class WellProtectedClass extends WellProtectedParentClass {
        protected $property;
+       private $privateProperty;
 
        public function __construct() {
+               parent::__construct();
                $this->property = 1;
+               $this->privateProperty = 42;
        }
 
        protected function incrementPropertyValue() {
                $this->property++;
        }
 
+       private function incrementPrivatePropertyValue() {
+               $this->privateProperty++;
+       }
+
        public function getProperty() {
                return $this->property;
        }
 
+       public function getPrivateProperty() {
+               return $this->privateProperty;
+       }
+
        protected function whatSecondArg( $a, $b = false ) {
                return $b;
        }
index 2fbe9b7..4064729 100644 (file)
@@ -1,5 +1,4 @@
 .test-mixin (@value) {
        color: @value;
        border: @foo solid @Foo;
-       line-height: test-sum(@bar, 10, 20);
 }
index b78780a..bac695b 100644 (file)
@@ -1,6 +1,5 @@
 /* @noflip */
 .unit-tests {
-  color: green;
+  color: #008000;
   border: 2px solid #eeeeee;
-  line-height: 35;
 }
diff --git a/tests/phpunit/includes/ConsecutiveParametersMatcher.php b/tests/phpunit/includes/ConsecutiveParametersMatcher.php
new file mode 100644 (file)
index 0000000..adf74bb
--- /dev/null
@@ -0,0 +1,123 @@
+<?php
+/*
+ * This file is part of the PHPUnit_MockObject package.
+ *
+ * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Invocation matcher which looks for sets of specific parameters in the invocations.
+ *
+ * Checks the parameters of the incoming invocations, the parameter list is
+ * checked against the defined constraints in $parameters. If the constraint
+ * is met it will return true in matches().
+ *
+ * It takes a list of match groups and and increases a call index after each invocation.
+ * So the first invocation uses the first group of constraints, the second the next and so on.
+ */
+class PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters extends PHPUnit_Framework_MockObject_Matcher_StatelessInvocation
+{
+    /**
+     * @var array
+     */
+    private $_parameterGroups = array();
+
+    /**
+     * @var array
+     */
+    private $_invocations = array();
+
+    /**
+     * @param array $parameterGroups
+     */
+    public function __construct(array $parameterGroups)
+    {
+        foreach ($parameterGroups as $index => $parameters) {
+            foreach ($parameters as $parameter) {
+                if (!($parameter instanceof \PHPUnit_Framework_Constraint)) {
+                    $parameter = new \PHPUnit_Framework_Constraint_IsEqual($parameter);
+                }
+                $this->_parameterGroups[$index][] = $parameter;
+            }
+        }
+    }
+
+    /**
+     * @return string
+     */
+    public function toString()
+    {
+        $text = 'with consecutive parameters';
+
+        return $text;
+    }
+
+    /**
+     * @param  PHPUnit_Framework_MockObject_Invocation $invocation
+     * @return bool
+     */
+    public function matches(PHPUnit_Framework_MockObject_Invocation $invocation)
+    {
+        $this->_invocations[] = $invocation;
+        $callIndex            = count($this->_invocations) - 1;
+        $this->verifyInvocation($invocation, $callIndex);
+
+        return false;
+    }
+
+    public function verify()
+    {
+        foreach ($this->_invocations as $callIndex => $invocation) {
+            $this->verifyInvocation($invocation, $callIndex);
+        }
+    }
+
+    /**
+     * Verify a single invocation
+     *
+     * @param  PHPUnit_Framework_MockObject_Invocation      $invocation
+     * @param  int                                          $callIndex
+     * @throws PHPUnit_Framework_ExpectationFailedException
+     */
+    private function verifyInvocation(PHPUnit_Framework_MockObject_Invocation $invocation, $callIndex)
+    {
+
+        if (isset($this->_parameterGroups[$callIndex])) {
+            $parameters = $this->_parameterGroups[$callIndex];
+        } else {
+          // no parameter assertion for this call index
+            return;
+        }
+
+        if ($invocation === null) {
+            throw new PHPUnit_Framework_ExpectationFailedException(
+                'Mocked method does not exist.'
+            );
+        }
+
+        if (count($invocation->parameters) < count($parameters)) {
+            throw new PHPUnit_Framework_ExpectationFailedException(
+                sprintf(
+                    'Parameter count for invocation %s is too low.',
+                    $invocation->toString()
+                )
+            );
+        }
+
+        foreach ($parameters as $i => $parameter) {
+            $parameter->evaluate(
+                $invocation->parameters[$i],
+                sprintf(
+                    'Parameter %s for invocation #%d %s does not match expected ' .
+                    'value.',
+                    $i,
+                    $callIndex,
+                    $invocation->toString()
+                )
+            );
+        }
+    }
+}
index 77b26b3..7b60fb3 100644 (file)
@@ -22,7 +22,6 @@ class ExtraParserTest extends MediaWikiTestCase {
                        'wgContLang' => $contLang,
                        'wgLang' => Language::factory( 'en' ),
                        'wgMemc' => new EmptyBagOStuff,
-                       'wgAlwaysUseTidy' => false,
                        'wgCleanSignatures' => true,
                ) );
 
index eca5b39..07214b2 100644 (file)
@@ -20,4 +20,32 @@ class FauxRequestTest extends MediaWikiTestCase {
                        array( 'text/plain', 'text/html' )
                );
        }
+
+       /**
+        * @covers FauxRequest::getAllHeaders
+        */
+       public function testGetAllHeaders() {
+               $_SERVER['HTTP_TEST'] = 'Example';
+
+               $request = new FauxRequest();
+
+               $this->assertEquals(
+                       array(),
+                       $request->getAllHeaders()
+               );
+       }
+
+       /**
+        * @covers FauxRequest::getHeader
+        */
+       public function testGetHeader() {
+               $_SERVER['HTTP_TEST'] = 'Example';
+
+               $request = new FauxRequest();
+
+               $this->assertEquals(
+                       false,
+                       $request->getHeader( 'test' )
+               );
+       }
 }
diff --git a/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php b/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php
new file mode 100644 (file)
index 0000000..88875bb
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+/**
+ * @group GlobalFunctions
+ * @covers ::wfArrayPlus2d
+ */
+class WfArrayPlus2dTest extends MediaWikiTestCase {
+       /**
+        * @dataProvider provideArrays
+        */
+       public function testWfArrayPlus2d( $baseArray, $newValues, $expected, $testName ) {
+               $this->assertEquals(
+                       $expected,
+                       wfArrayPlus2d( $baseArray, $newValues ),
+                       $testName
+               );
+       }
+
+       /**
+        * Provider for testing wfArrayPlus2d
+        *
+        * @return array
+        */
+       public static function provideArrays() {
+               return array(
+                       // target array, new values array, expected result
+                       array(
+                               array( 0 => '1dArray' ),
+                               array( 1 => '1dArray' ),
+                               array( 0 => '1dArray', 1 => '1dArray' ),
+                               "Test simple union of two arrays with different keys",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => '2dArray' ),
+                               ),
+                               array(
+                                       0 => array( 1 => '2dArray' ),
+                               ),
+                               array(
+                                       0 => array( 0 => '2dArray', 1 => '2dArray' ),
+                               ),
+                               "Test union of 2d arrays with different keys in the value array",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => '2dArray' ),
+                               ),
+                               array(
+                                       0 => array( 0 => '1dArray' ),
+                               ),
+                               array(
+                                       0 => array( 0 => '2dArray' ),
+                               ),
+                               "Test union of 2d arrays with same keys in the value array",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 1 => '2dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               "Test union of 3d array with different keys",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 1 => array( 0 => '2dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ), 1 => array( 0 => '2dArray' ) ),
+                               ),
+                               "Test union of 3d array with different keys in the value array",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '2dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               "Test union of 3d array with same keys in the value array",
+                       ),
+               );
+       }
+}
index 823c933..a3efbb8 100644 (file)
@@ -93,12 +93,26 @@ class LinkerTest extends MediaWikiLangTestCase {
         * @covers Linker::formatAutocomments
         * @covers Linker::formatLinksInComment
         */
-       public function testFormatComment( $expected, $comment, $title = false, $local = false ) {
+       public function testFormatComment( $expected, $comment, $title = false, $local = false, $wikiId = null ) {
+               $conf = new SiteConfiguration();
+               $conf->settings = array(
+                       'wgServer' => array(
+                               'enwiki' => '//en.example.org',
+                               'dewiki' => '//de.example.org',
+                       ),
+                       'wgArticlePath' => array(
+                               'enwiki' => '/w/$1',
+                               'dewiki' => '/w/$1',
+                       ),
+               );
+               $conf->suffixes = array( 'wiki' );
+
                $this->setMwGlobals( array(
                        'wgScript' => '/wiki/index.php',
                        'wgArticlePath' => '/wiki/$1',
                        'wgWellFormedXml' => true,
                        'wgCapitalLinks' => true,
+                       'wgConf' => $conf,
                ) );
 
                if ( $title === false ) {
@@ -108,11 +122,13 @@ class LinkerTest extends MediaWikiLangTestCase {
 
                $this->assertEquals(
                        $expected,
-                       Linker::formatComment( $comment, $title, $local )
+                       Linker::formatComment( $comment, $title, $local, $wikiId )
                );
        }
 
-       public static function provideCasesForFormatComment() {
+       public function provideCasesForFormatComment() {
+               $wikiId = 'enwiki'; // $wgConf has a fake entry for this
+
                return array(
                        // Linker::formatComment
                        array(
@@ -127,6 +143,10 @@ class LinkerTest extends MediaWikiLangTestCase {
                                "&#039;&#039;&#039;not bolded&#039;&#039;&#039;",
                                "'''not bolded'''",
                        ),
+                       array(
+                               "try &lt;script&gt;evil&lt;/scipt&gt; things",
+                               "try <script>evil</scipt> things",
+                       ),
                        // Linker::formatAutocomments
                        array(
                                '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
@@ -156,6 +176,14 @@ class LinkerTest extends MediaWikiLangTestCase {
                                '<a href="/wiki/Special:BlankPage#autocomment_containing_.2F.2A" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing /*: </span> T70361</span>',
                                "/* autocomment containing /* */ T70361"
                        ),
+                       array(
+                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.22quotes.22" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing &quot;quotes&quot;</span></span>',
+                               "/* autocomment containing \"quotes\" */"
+                       ),
+                       array(
+                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.3Cscript.3Etags.3C.2Fscript.3E" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing &lt;script&gt;tags&lt;/script&gt;</span></span>',
+                               "/* autocomment containing <script>tags</script> */"
+                       ),
                        array(
                                '<a href="#autocomment">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
                                "/* autocomment */",
@@ -166,6 +194,16 @@ class LinkerTest extends MediaWikiLangTestCase {
                                "/* autocomment */",
                                null
                        ),
+                       array(
+                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               "/* autocomment */",
+                               false, false
+                       ),
+                       array(
+                               '<a class="external" rel="nofollow" href="//en.example.org/w/Special:BlankPage#autocomment">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               "/* autocomment */",
+                               false, false, $wikiId
+                       ),
                        // Linker::formatLinksInComment
                        array(
                                'abc <a href="/wiki/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">link</a> def',
@@ -191,6 +229,28 @@ class LinkerTest extends MediaWikiLangTestCase {
                                'abc <a href="/wiki/index.php?title=/subpage&amp;action=edit&amp;redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a> def',
                                "abc [[/subpage]] def",
                        ),
+                       array(
+                               'abc <a href="/wiki/index.php?title=%22evil!%22&amp;action=edit&amp;redlink=1" class="new" title="&quot;evil!&quot; (page does not exist)">&quot;evil!&quot;</a> def',
+                               "abc [[\"evil!\"]] def",
+                       ),
+                       array(
+                               'abc [[&lt;script&gt;very evil&lt;/script&gt;]] def',
+                               "abc [[<script>very evil</script>]] def",
+                       ),
+                       array(
+                               'abc [[|]] def',
+                               "abc [[|]] def",
+                       ),
+                       array(
+                               'abc <a href="/wiki/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">link</a> def',
+                               "abc [[link]] def",
+                               false, false
+                       ),
+                       array(
+                               'abc <a class="external" rel="nofollow" href="//en.example.org/w/Link">link</a> def',
+                               "abc [[link]] def",
+                               false, false, $wikiId
+                       )
                );
        }
 
index ee2b278..f0d905e 100644 (file)
@@ -259,6 +259,86 @@ class OutputPageTest extends MediaWikiTestCase {
                $actualHtml = implode( "\n", $links['html'] );
                $this->assertEquals( $expectedHtml, $actualHtml );
        }
+
+       /**
+        * @dataProvider provideVaryHeaders
+        * @covers OutputPage::addVaryHeader
+        * @covers OutputPage::getVaryHeader
+        * @covers OutputPage::getXVO
+        */
+       public function testVaryHeaders( $calls, $vary, $xvo ) {
+               // get rid of default Vary fields
+               $outputPage = $this->getMockBuilder( 'OutputPage' )
+                       ->setConstructorArgs( array( new RequestContext() ) )
+                       ->setMethods( array( 'getCacheVaryCookies' ) )
+                       ->getMock();
+               $outputPage->expects( $this->any() )
+                       ->method( 'getCacheVaryCookies' )
+                       ->will( $this->returnValue( array() ) );
+               TestingAccessWrapper::newFromObject( $outputPage )->mVaryHeader = array();
+
+               foreach ( $calls as $call ) {
+                       call_user_func_array( array( $outputPage, 'addVaryHeader' ), $call );
+               }
+               $this->assertEquals( $vary, $outputPage->getVaryHeader(), 'Vary:' );
+               $this->assertEquals( $xvo, $outputPage->getXVO(), 'X-Vary-Options:' );
+       }
+
+       public function provideVaryHeaders() {
+               // note: getXVO() automatically adds Vary: Cookie
+               return array(
+                       array( // single header
+                               array(
+                                       array( 'Cookie' ),
+                               ),
+                               'Vary: Cookie',
+                               'X-Vary-Options: Cookie',
+                       ),
+                       array( // non-unique headers
+                               array(
+                                       array( 'Cookie' ),
+                                       array( 'Accept-Language' ),
+                                       array( 'Cookie' ),
+                               ),
+                               'Vary: Cookie, Accept-Language',
+                               'X-Vary-Options: Cookie,Accept-Language',
+                       ),
+                       array( // two headers with single options
+                               array(
+                                       array( 'Cookie', array( 'string-contains=phpsessid' ) ),
+                                       array( 'Accept-Language', array( 'string-contains=en' ) ),
+                               ),
+                               'Vary: Cookie, Accept-Language',
+                               'X-Vary-Options: Cookie;string-contains=phpsessid,Accept-Language;string-contains=en',
+                       ),
+                       array( // one header with multiple options
+                               array(
+                                       array( 'Cookie', array( 'string-contains=phpsessid', 'string-contains=userId' ) ),
+                               ),
+                               'Vary: Cookie',
+                               'X-Vary-Options: Cookie;string-contains=phpsessid;string-contains=userId',
+                       ),
+                       array( // Duplicate option
+                               array(
+                                       array( 'Cookie', array( 'string-contains=phpsessid' ) ),
+                                       array( 'Cookie', array( 'string-contains=phpsessid' ) ),
+                                       array( 'Accept-Language', array( 'string-contains=en', 'string-contains=en' ) ),
+
+
+                               ),
+                               'Vary: Cookie, Accept-Language',
+                               'X-Vary-Options: Cookie;string-contains=phpsessid,Accept-Language;string-contains=en',
+                       ),
+                       array( // Same header, different options
+                               array(
+                                       array( 'Cookie', array( 'string-contains=phpsessid' ) ),
+                                       array( 'Cookie', array( 'string-contains=userId' ) ),
+                               ),
+                               'Vary: Cookie',
+                               'X-Vary-Options: Cookie;string-contains=phpsessid;string-contains=userId',
+                       ),
+               );
+       }
 }
 
 /**
index c615c46..d3dc512 100644 (file)
@@ -6,6 +6,11 @@
  */
 class SanitizerTest extends MediaWikiTestCase {
 
+       protected function tearDown() {
+               MWTidy::destroySingleton();
+               parent::tearDown();
+       }
+
        /**
         * @covers Sanitizer::decodeCharReferences
         */
@@ -93,9 +98,7 @@ class SanitizerTest extends MediaWikiTestCase {
         * @param bool $escaped Whether sanitizer let the tag in or escape it (ie: '&lt;video&gt;')
         */
        public function testRemovehtmltagsOnHtml5Tags( $tag, $escaped ) {
-               $this->setMwGlobals( array(
-                       'wgUseTidy' => false
-               ) );
+               MWTidy::setInstance( false );
 
                if ( $escaped ) {
                        $this->assertEquals( "&lt;$tag&gt;",
@@ -157,7 +160,7 @@ class SanitizerTest extends MediaWikiTestCase {
         * @covers Sanitizer::removeHTMLtags
         */
        public function testRemoveHTMLtags( $input, $output, $msg = null ) {
-               $GLOBALS['wgUseTidy'] = false;
+               MWTidy::setInstance( false );
                $this->assertEquals( $output, Sanitizer::removeHTMLtags( $input ), $msg );
        }
 
@@ -360,5 +363,4 @@ class SanitizerTest extends MediaWikiTestCase {
                        array( '&lt;script&gt;foo&lt;/script&gt;', '<script>foo</script>' ),
                );
        }
-
 }
index 84c0f9b..63d8971 100644 (file)
@@ -34,16 +34,42 @@ class TestingAccessWrapper {
                return $methodReflection->invokeArgs( $this->object, $args );
        }
 
-       public function __set( $name, $value ) {
+       /**
+        * ReflectionClass::getProperty() fails if the private property is defined
+        * in a parent class. This works more like ReflectionClass::getMethod().
+        */
+       private function getProperty( $name ) {
                $classReflection = new ReflectionClass( $this->object );
-               $propertyReflection = $classReflection->getProperty( $name );
+               try {
+                       return $classReflection->getProperty( $name );
+               } catch ( ReflectionException $ex ) {
+                       while ( true ) {
+                               $classReflection = $classReflection->getParentClass();
+                               if ( !$classReflection ) {
+                                       throw $ex;
+                               }
+                               try {
+                                       $propertyReflection = $classReflection->getProperty( $name );
+                               } catch ( ReflectionException $ex2 ) {
+                                       continue;
+                               }
+                               if ( $propertyReflection->isPrivate() ) {
+                                       return $propertyReflection;
+                               } else {
+                                       throw $ex;
+                               }
+                       }
+               }
+       }
+
+       public function __set( $name, $value ) {
+               $propertyReflection = $this->getProperty( $name );
                $propertyReflection->setAccessible( true );
                $propertyReflection->setValue( $this->object, $value );
        }
 
        public function __get( $name ) {
-               $classReflection = new ReflectionClass( $this->object );
-               $propertyReflection = $classReflection->getProperty( $name );
+               $propertyReflection = $this->getProperty( $name );
                $propertyReflection->setAccessible( true );
                return $propertyReflection->getValue( $this->object );
        }
index 7e5b91a..fc54afa 100644 (file)
@@ -14,18 +14,36 @@ class TestingAccessWrapperTest extends MediaWikiTestCase {
 
        function testGetProperty() {
                $this->assertSame( 1, $this->wrapped->property );
+               $this->assertSame( 42, $this->wrapped->privateProperty );
+               $this->assertSame( 9000, $this->wrapped->privateParentProperty );
        }
 
        function testSetProperty() {
                $this->wrapped->property = 10;
                $this->assertSame( 10, $this->wrapped->property );
                $this->assertSame( 10, $this->raw->getProperty() );
+
+               $this->wrapped->privateProperty = 11;
+               $this->assertSame( 11, $this->wrapped->privateProperty );
+               $this->assertSame( 11, $this->raw->getPrivateProperty() );
+
+               $this->wrapped->privateParentProperty = 12;
+               $this->assertSame( 12, $this->wrapped->privateParentProperty );
+               $this->assertSame( 12, $this->raw->getPrivateParentProperty() );
        }
 
        function testCallMethod() {
                $this->wrapped->incrementPropertyValue();
                $this->assertSame( 2, $this->wrapped->property );
                $this->assertSame( 2, $this->raw->getProperty() );
+
+               $this->wrapped->incrementPrivatePropertyValue();
+               $this->assertSame( 43, $this->wrapped->privateProperty );
+               $this->assertSame( 43, $this->raw->getPrivateProperty() );
+
+               $this->wrapped->incrementPrivateParentPropertyValue();
+               $this->assertSame( 9001, $this->wrapped->privateParentProperty );
+               $this->assertSame( 9001, $this->raw->getPrivateParentProperty() );
        }
 
        function testCallMethodTwoArgs() {
diff --git a/tests/phpunit/includes/WikiMapTest.php b/tests/phpunit/includes/WikiMapTest.php
new file mode 100644 (file)
index 0000000..9233416
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * @covers WikiMap
+ */
+
+class WikiMapTest extends MediaWikiLangTestCase {
+
+       public function setUp() {
+               parent::setUp();
+
+               $conf = new SiteConfiguration();
+               $conf->settings = array(
+                       'wgServer' => array(
+                               'enwiki' => 'http://en.example.org',
+                               'ruwiki' => '//ru.example.org',
+                       ),
+                       'wgArticlePath' => array(
+                               'enwiki' => '/w/$1',
+                               'ruwiki' => '/wiki/$1',
+                       ),
+               );
+               $conf->suffixes = array( 'wiki' );
+               $this->setMwGlobals( array(
+                       'wgConf' => $conf,
+               ) );
+       }
+
+       public function provideGetWiki() {
+               $enwiki = new WikiReference( 'wiki', 'en', 'http://en.example.org', '/w/$1' );
+               $ruwiki = new WikiReference( 'wiki', 'ru', '//ru.example.org', '/wiki/$1' );
+
+               return array(
+                       'unknown' => array( false, 'xyzzy' ),
+                       'enwiki' => array( $enwiki, 'enwiki' ),
+                       'ruwiki' => array( $ruwiki, 'ruwiki' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetWiki
+        */
+       public function testGetWiki( $expected, $wikiId ) {
+               $this->assertEquals( $expected, WikiMap::getWiki( $wikiId ) );
+       }
+
+       public function provideGetWikiName() {
+               return array(
+                       'unknown' => array( 'xyzzy', 'xyzzy' ),
+                       'enwiki' => array( 'en.example.org', 'enwiki' ),
+                       'ruwiki' => array( 'ru.example.org', 'ruwiki' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetWikiName
+        */
+       public function testGetWikiName( $expected, $wikiId ) {
+               $this->assertEquals( $expected, WikiMap::getWikiName( $wikiId ) );
+       }
+
+       public function provideMakeForeignLink() {
+               return array(
+                       'unknown' => array( false, 'xyzzy', 'Foo' ),
+                       'enwiki' => array( '<a class="external" rel="nofollow" href="http://en.example.org/w/Foo">Foo</a>', 'enwiki', 'Foo',  ),
+                       'ruwiki' => array( '<a class="external" rel="nofollow" href="//ru.example.org/wiki/%D0%A4%D1%83">вар</a>', 'ruwiki', 'Фу', 'вар' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideMakeForeignLink
+        */
+       public function testMakeForeignLink( $expected, $wikiId, $page, $text = null ) {
+               $this->assertEquals( $expected, WikiMap::makeForeignLink( $wikiId, $page, $text ) );
+       }
+
+       public function provideForeignUserLink() {
+               return array(
+                       'unknown' => array( false, 'xyzzy', 'Foo' ),
+                       'enwiki' => array( '<a class="external" rel="nofollow" href="http://en.example.org/w/User:Foo">User:Foo</a>', 'enwiki', 'Foo',  ),
+                       'ruwiki' => array( '<a class="external" rel="nofollow" href="//ru.example.org/wiki/User:%D0%A4%D1%83">вар</a>', 'ruwiki', 'Фу', 'вар' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideForeignUserLink
+        */
+       public function testForeignUserLink( $expected, $wikiId, $user, $text = null ) {
+               $this->assertEquals( $expected, WikiMap::foreignUserLink( $wikiId, $user, $text ) );
+       }
+
+       public function provideGetForeignURL() {
+               return array(
+                       'unknown' => array( false, 'xyzzy', 'Foo' ),
+                       'enwiki' => array( 'http://en.example.org/w/Foo', 'enwiki', 'Foo',  ),
+                       'ruwiki with fragement' => array( '//ru.example.org/wiki/%D0%A4%D1%83#%D0%B2%D0%B0%D1%80', 'ruwiki', 'Фу', 'вар' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetForeignURL
+        */
+       public function testGetForeignURL( $expected, $wikiId, $page, $fragment = null ) {
+               $this->assertEquals( $expected, WikiMap::getForeignURL( $wikiId, $page, $fragment ) );
+       }
+
+}
+
diff --git a/tests/phpunit/includes/WikiReferenceTest.php b/tests/phpunit/includes/WikiReferenceTest.php
new file mode 100644 (file)
index 0000000..4fe2e85
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * @covers WikiReference
+ */
+
+class WikiReferenceTest extends PHPUnit_Framework_TestCase {
+
+       public function provideGetDisplayName() {
+               return array(
+                       'http' => array( 'foo.bar', 'http://foo.bar' ),
+                       'https' => array( 'foo.bar', 'http://foo.bar' ),
+
+                       // apparently, this is the expected behavior
+                       'invalid' => array( 'purple kittens', 'purple kittens' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetDisplayName
+        */
+       public function testGetDisplayName( $expected, $canonicalServer ) {
+               $reference = new WikiReference( 'wiki', 'xx', $canonicalServer, '/wiki/$1' );
+               $this->assertEquals( $expected, $reference->getDisplayName() );
+       }
+
+       public function testGetCanonicalServer() {
+               $reference = new WikiReference( 'wiki', 'xx', 'https://acme.com', '/wiki/$1', '//acme.com' );
+               $this->assertEquals( 'https://acme.com', $reference->getCanonicalServer() );
+       }
+
+       public function provideGetCanonicalUrl() {
+               return array(
+                       'no fragement' => array( 'https://acme.com/wiki/Foo', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', null ),
+                       'empty fragement' => array( 'https://acme.com/wiki/Foo', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', '' ),
+                       'fragment' => array( 'https://acme.com/wiki/Foo#Bar', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', 'Bar' ),
+                       'double fragment' => array( 'https://acme.com/wiki/Foo#Bar%23Xus', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', 'Bar#Xus' ),
+                       'escaped fragement' => array( 'https://acme.com/wiki/Foo%23Bar', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo#Bar', null ),
+                       'empty path' => array( 'https://acme.com/Foo', 'https://acme.com', '//acme.com', '/$1', 'Foo', null ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetCanonicalUrl
+        */
+       public function testGetCanonicalUrl( $expected, $canonicalServer, $server, $path, $page, $fragmentId ) {
+               $reference = new WikiReference( 'wiki', 'xx', $canonicalServer, $path, $server );
+               $this->assertEquals( $expected, $reference->getCanonicalUrl( $page, $fragmentId ) );
+       }
+
+       /**
+        * @dataProvider provideGetCanonicalUrl
+        * @note getUrl is an alias for getCanonicalUrl
+        */
+       public function testGetUrl( $expected, $canonicalServer, $server, $path, $page, $fragmentId ) {
+               $reference = new WikiReference( 'wiki', 'xx', $canonicalServer, $path, $server );
+               $this->assertEquals( $expected, $reference->getUrl( $page, $fragmentId ) );
+       }
+
+       public function provideGetFullUrl() {
+               return array(
+                       'no fragement' => array( '//acme.com/wiki/Foo', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', null ),
+                       'empty fragement' => array( '//acme.com/wiki/Foo', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', '' ),
+                       'fragment' => array( '//acme.com/wiki/Foo#Bar', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', 'Bar' ),
+                       'double fragment' => array( '//acme.com/wiki/Foo#Bar%23Xus', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', 'Bar#Xus' ),
+                       'escaped fragement' => array( '//acme.com/wiki/Foo%23Bar', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo#Bar', null ),
+                       'empty path' => array( '//acme.com/Foo', 'https://acme.com', '//acme.com', '/$1', 'Foo', null ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetFullUrl
+        */
+       public function testGetFullUrl( $expected, $canonicalServer, $server, $path, $page, $fragmentId ) {
+               $reference = new WikiReference( 'wiki', 'xx', $canonicalServer, $path, $server );
+               $this->assertEquals( $expected, $reference->getFullUrl( $page, $fragmentId ) );
+       }
+
+}
+
index ee1a954..94b741d 100644 (file)
@@ -79,4 +79,173 @@ class ApiMainTest extends ApiTestCase {
                        );
                }
        }
+
+       /**
+        * Test HTTP precondition headers
+        *
+        * @covers ApiMain::checkConditionalRequestHeaders
+        * @dataProvider provideCheckConditionalRequestHeaders
+        * @param array $headers HTTP headers
+        * @param array $conditions Return data for ApiBase::getConditionalRequestData
+        * @param int $status Expected response status
+        * @param bool $post Request is a POST
+        */
+       public function testCheckConditionalRequestHeaders( $headers, $conditions, $status, $post = false ) {
+               $request = new FauxRequest( array( 'action' => 'query', 'meta' => 'siteinfo' ), $post );
+               $request->setHeaders( $headers );
+               $request->response()->statusHeader( 200 ); // Why doesn't it default?
+
+               $api = new ApiMain( $request );
+               $priv = TestingAccessWrapper::newFromObject( $api );
+               $priv->mInternalMode = false;
+
+               $module = $this->getMockBuilder( 'ApiBase' )
+                       ->setConstructorArgs( array( $api, 'mock' ) )
+                       ->setMethods( array( 'getConditionalRequestData' ) )
+                       ->getMockForAbstractClass();
+               $module->expects( $this->any() )
+                       ->method( 'getConditionalRequestData' )
+                       ->will( $this->returnCallback( function ( $condition ) use ( $conditions ) {
+                               return isset( $conditions[$condition] ) ? $conditions[$condition] : null;
+                       } ) );
+
+               $ret = $priv->checkConditionalRequestHeaders( $module );
+
+               $this->assertSame( $status, $request->response()->getStatusCode() );
+               $this->assertSame( $status === 200, $ret );
+       }
+
+       public static function provideCheckConditionalRequestHeaders() {
+               $now = time();
+
+               return array(
+                       // Non-existing from module is ignored
+                       array( array( 'If-None-Match' => '"foo", "bar"' ), array(), 200 ),
+                       array( array( 'If-Modified-Since' => 'Tue, 18 Aug 2015 00:00:00 GMT' ), array(), 200 ),
+
+                       // No headers
+                       array(
+                               array(),
+                               array(
+                                       'etag' => '""',
+                                       'last-modified' => '20150815000000',
+                               ),
+                               200
+                       ),
+
+                       // Basic If-None-Match
+                       array( array( 'If-None-Match' => '"foo", "bar"' ), array( 'etag' => '"bar"' ), 304 ),
+                       array( array( 'If-None-Match' => '"foo", "bar"' ), array( 'etag' => '"baz"' ), 200 ),
+                       array( array( 'If-None-Match' => '"foo"' ), array( 'etag' => 'W/"foo"' ), 304 ),
+                       array( array( 'If-None-Match' => 'W/"foo"' ), array( 'etag' => '"foo"' ), 304 ),
+                       array( array( 'If-None-Match' => 'W/"foo"' ), array( 'etag' => 'W/"foo"' ), 304 ),
+
+                       // Pointless, but supported
+                       array( array( 'If-None-Match' => '*' ), array(), 304 ),
+
+                       // Basic If-Modified-Since
+                       array( array( 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 304 ),
+                       array( array( 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now ) ), 304 ),
+                       array( array( 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now + 1 ) ), 200 ),
+
+                       // If-Modified-Since ignored when If-None-Match is given too
+                       array( array( 'If-None-Match' => '""', 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'etag' => '"x"', 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 200 ),
+                       array( array( 'If-None-Match' => '""', 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 304 ),
+
+                       // Ignored for POST
+                       array( array( 'If-None-Match' => '"foo", "bar"' ), array( 'etag' => '"bar"' ), 200, true ),
+                       array( array( 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 200, true ),
+
+                       // Other date formats allowed by the RFC
+                       array( array( 'If-Modified-Since' => gmdate( 'l, d-M-y H:i:s', $now ) . ' GMT' ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 304 ),
+                       array( array( 'If-Modified-Since' => gmdate( 'D M j H:i:s Y', $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 304 ),
+
+                       // Old browser extension to HTTP/1.0
+                       array( array( 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) . '; length=123' ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 304 ),
+
+                       // Invalid date formats should be ignored
+                       array( array( 'If-Modified-Since' => gmdate( 'Y-m-d H:i:s', $now ) . ' GMT' ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 200 ),
+               );
+       }
+
+       /**
+        * Test conditional headers output
+        * @dataProvider provideConditionalRequestHeadersOutput
+        * @param array $conditions Return data for ApiBase::getConditionalRequestData
+        * @param array $headers Expected output headers
+        * @param bool $isError $isError flag
+        * @param bool $post Request is a POST
+        */
+       public function testConditionalRequestHeadersOutput( $conditions, $headers, $isError = false, $post = false ) {
+               $request = new FauxRequest( array( 'action' => 'query', 'meta' => 'siteinfo' ), $post );
+               $response = $request->response();
+
+               $api = new ApiMain( $request );
+               $priv = TestingAccessWrapper::newFromObject( $api );
+               $priv->mInternalMode = false;
+
+               $module = $this->getMockBuilder( 'ApiBase' )
+                       ->setConstructorArgs( array( $api, 'mock' ) )
+                       ->setMethods( array( 'getConditionalRequestData' ) )
+                       ->getMockForAbstractClass();
+               $module->expects( $this->any() )
+                       ->method( 'getConditionalRequestData' )
+                       ->will( $this->returnCallback( function ( $condition ) use ( $conditions ) {
+                               return isset( $conditions[$condition] ) ? $conditions[$condition] : null;
+                       } ) );
+               $priv->mModule = $module;
+
+               $priv->sendCacheHeaders( $isError );
+
+               foreach ( array( 'Last-Modified', 'ETag' ) as $header ) {
+                       $this->assertEquals(
+                               isset( $headers[$header] ) ? $headers[$header] : null,
+                               $response->getHeader( $header ),
+                               $header
+                       );
+               }
+       }
+
+       public static function provideConditionalRequestHeadersOutput() {
+               return array(
+                       array(
+                               array(),
+                               array()
+                       ),
+                       array(
+                               array( 'etag' => '"foo"' ),
+                               array( 'ETag' => '"foo"' )
+                       ),
+                       array(
+                               array( 'last-modified' => '20150818000102' ),
+                               array( 'Last-Modified' => 'Tue, 18 Aug 2015 00:01:02 GMT' )
+                       ),
+                       array(
+                               array( 'etag' => '"foo"', 'last-modified' => '20150818000102' ),
+                               array( 'ETag' => '"foo"', 'Last-Modified' => 'Tue, 18 Aug 2015 00:01:02 GMT' )
+                       ),
+                       array(
+                               array( 'etag' => '"foo"', 'last-modified' => '20150818000102' ),
+                               array(),
+                               true,
+                       ),
+                       array(
+                               array( 'etag' => '"foo"', 'last-modified' => '20150818000102' ),
+                               array(),
+                               false,
+                               true,
+                       ),
+               );
+       }
+
 }
index affb0fa..2f31677 100644 (file)
@@ -181,6 +181,19 @@ class ApiResultTest extends MediaWikiTestCase {
                        );
                }
 
+               ApiResult::setValue( $arr, null, NAN, ApiResult::NO_VALIDATE );
+
+               try {
+                       ApiResult::setValue( $arr, null, NAN, ApiResult::NO_SIZE_CHECK );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
+
                $arr = array();
                $result2 = new ApiResult( 8388608 );
                $result2->addValue( null, 'foo', 'bar' );
@@ -408,6 +421,19 @@ class ApiResultTest extends MediaWikiTestCase {
                        );
                }
 
+               $result->addValue( null, null, NAN, ApiResult::NO_VALIDATE );
+
+               try {
+                       $result->addValue( null, null, NAN, ApiResult::NO_SIZE_CHECK );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
+
                $result->reset();
                $result->addParsedLimit( 'foo', 12 );
                $this->assertSame( array(
@@ -444,6 +470,12 @@ class ApiResultTest extends MediaWikiTestCase {
                $result->removeValue( null, 'foo' );
                $this->assertTrue( $result->addValue( null, 'foo', '1' ) );
 
+               $result = new ApiResult( 10 );
+               $obj = new ApiResultTestSerializableObject( 'ok' );
+               $obj->foobar = 'foobaz';
+               $this->assertTrue( $result->addValue( null, 'foo', $obj ) );
+               $this->assertSame( 2, $result->getSize() );
+
                $result = new ApiResult( 8388608 );
                $result2 = new ApiResult( 8388608 );
                $result2->addValue( null, 'foo', 'bar' );
@@ -1289,17 +1321,6 @@ class ApiResultTest extends MediaWikiTestCase {
                        ),
                        '*' => 'content',
                ), $result->getData() );
-               $result->setRawMode();
-               $this->assertSame( array(
-                       'foo' => array(
-                               'bar' => array(
-                                       '*' => 'content',
-                               ),
-                       ),
-                       '*' => 'content',
-                       '_element' => 'itn',
-                       '_subelements' => array( 'sub' ),
-               ), $result->getData() );
 
                $arr = array();
                ApiResult::setContent( $arr, 'value' );
index 60235b8..4d1a936 100644 (file)
@@ -10,8 +10,8 @@ class RecentChangeTest extends MediaWikiTestCase {
        protected $user_comment;
        protected $context;
 
-       public function __construct() {
-               parent::__construct();
+       public function setUp() {
+               parent::setUp();
 
                $this->title = Title::newFromText( 'SomeTitle' );
                $this->target = Title::newFromText( 'TestTarget' );
@@ -21,6 +21,26 @@ class RecentChangeTest extends MediaWikiTestCase {
                $this->context = RequestContext::newExtraneousContext( $this->title );
        }
 
+       /**
+        * @covers RecentChange::newFromRow
+        * @covers RecentChange::loadFromRow
+        */
+       public function testNewFromRow() {
+               $row = new stdClass();
+               $row->rc_foo = 'AAA';
+               $row->rc_timestamp = '20150921134808';
+               $row->rc_deleted = 'bar';
+
+               $rc = RecentChange::newFromRow( $row );
+
+               $expected = array(
+                       'rc_foo' => 'AAA',
+                       'rc_timestamp' => '20150921134808',
+                       'rc_deleted' => 'bar',
+               );
+               $this->assertEquals( $expected, $rc->getAttributes() );
+       }
+
        /**
         * The testIrcMsgForAction* tests are supposed to cover the hacky
         * LogFormatter::getIRCActionText / bug 34508
@@ -59,291 +79,6 @@ class RecentChangeTest extends MediaWikiTestCase {
         * - undo
         */
 
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeBlock() {
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # block/block
-               $this->assertIRCComment(
-                       $this->context->msg( 'blocklogentry', 'SomeTitle', 'duration', '(flags)' )->plain()
-                               . $sep . $this->user_comment,
-                       'block', 'block',
-                       array(
-                               '5::duration' => 'duration',
-                               '6::flags' => 'flags',
-                       ),
-                       $this->user_comment
-               );
-               # block/block - legacy
-               $this->assertIRCComment(
-                       $this->context->msg( 'blocklogentry', 'SomeTitle', 'duration', '(flags)' )->plain()
-                               . $sep . $this->user_comment,
-                       'block', 'block',
-                       array(
-                               'duration',
-                               'flags',
-                       ),
-                       $this->user_comment,
-                       '',
-                       true
-               );
-               # block/unblock
-               $this->assertIRCComment(
-                       $this->context->msg( 'unblocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'block', 'unblock',
-                       array(),
-                       $this->user_comment
-               );
-               # block/reblock
-               $this->assertIRCComment(
-                       $this->context->msg( 'reblock-logentry', 'SomeTitle', 'duration', '(flags)' )->plain()
-                               . $sep . $this->user_comment,
-                       'block', 'reblock',
-                       array(
-                               '5::duration' => 'duration',
-                               '6::flags' => 'flags',
-                       ),
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeDelete() {
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # delete/delete
-               $this->assertIRCComment(
-                       $this->context->msg( 'deletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'delete', 'delete',
-                       array(),
-                       $this->user_comment
-               );
-
-               # delete/restore
-               $this->assertIRCComment(
-                       $this->context->msg( 'undeletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'delete', 'restore',
-                       array(),
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeNewusers() {
-               $this->assertIRCComment(
-                       'New user account',
-                       'newusers', 'newusers',
-                       array()
-               );
-               $this->assertIRCComment(
-                       'New user account',
-                       'newusers', 'create',
-                       array()
-               );
-               $this->assertIRCComment(
-                       'created new account SomeTitle',
-                       'newusers', 'create2',
-                       array()
-               );
-               $this->assertIRCComment(
-                       'Account created automatically',
-                       'newusers', 'autocreate',
-                       array()
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeMove() {
-               $move_params = array(
-                       '4::target' => $this->target->getPrefixedText(),
-                       '5::noredir' => 0,
-               );
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # move/move
-               $this->assertIRCComment(
-                       $this->context->msg( '1movedto2', 'SomeTitle', 'TestTarget' )
-                               ->plain() . $sep . $this->user_comment,
-                       'move', 'move',
-                       $move_params,
-                       $this->user_comment
-               );
-
-               # move/move_redir
-               $this->assertIRCComment(
-                       $this->context->msg( '1movedto2_redir', 'SomeTitle', 'TestTarget' )
-                               ->plain() . $sep . $this->user_comment,
-                       'move', 'move_redir',
-                       $move_params,
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypePatrol() {
-               # patrol/patrol
-               $this->assertIRCComment(
-                       $this->context->msg( 'patrol-log-line', 'revision 777', '[[SomeTitle]]', '' )->plain(),
-                       'patrol', 'patrol',
-                       array(
-                               '4::curid' => '777',
-                               '5::previd' => '666',
-                               '6::auto' => 0,
-                       )
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeProtect() {
-               $protectParams = array(
-                       '[edit=sysop] (indefinite) ‎[move=sysop] (indefinite)'
-               );
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # protect/protect
-               $this->assertIRCComment(
-                       $this->context->msg( 'protectedarticle', 'SomeTitle ' . $protectParams[0] )
-                               ->plain() . $sep . $this->user_comment,
-                       'protect', 'protect',
-                       $protectParams,
-                       $this->user_comment
-               );
-
-               # protect/unprotect
-               $this->assertIRCComment(
-                       $this->context->msg( 'unprotectedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'protect', 'unprotect',
-                       array(),
-                       $this->user_comment
-               );
-
-               # protect/modify
-               $this->assertIRCComment(
-                       $this->context->msg( 'modifiedarticleprotection', 'SomeTitle ' . $protectParams[0] )
-                               ->plain() . $sep . $this->user_comment,
-                       'protect', 'modify',
-                       $protectParams,
-                       $this->user_comment
-               );
-
-               # protect/move_prot
-               $this->assertIRCComment(
-                       $this->context->msg( 'movedarticleprotection', 'SomeTitle', 'OldTitle' )
-                               ->plain() . $sep . $this->user_comment,
-                       'protect', 'move_prot',
-                       array(
-                               '4::oldtitle' => 'OldTitle'
-                       ),
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeUpload() {
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # upload/upload
-               $this->assertIRCComment(
-                       $this->context->msg( 'uploadedimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'upload', 'upload',
-                       array(),
-                       $this->user_comment
-               );
-
-               # upload/overwrite
-               $this->assertIRCComment(
-                       $this->context->msg( 'overwroteimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'upload', 'overwrite',
-                       array(),
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeMerge() {
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # merge/merge
-               $this->assertIRCComment(
-                       $this->context->msg( 'pagemerge-logentry', 'SomeTitle', 'Dest', 'timestamp' )->plain()
-                               . $sep . $this->user_comment,
-                       'merge', 'merge',
-                       array(
-                               '4::dest' => 'Dest',
-                               '5::mergepoint' => 'timestamp',
-                       ),
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeImport() {
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # import/upload
-               $msg = $this->context->msg( 'import-logentry-upload', 'SomeTitle' )->plain() .
-                       $sep .
-                       $this->user_comment;
-               $this->assertIRCComment(
-                       $msg,
-                       'import', 'upload',
-                       array(),
-                       $this->user_comment
-               );
-
-               # import/interwiki
-               $msg = $this->context->msg( 'import-logentry-interwiki', 'SomeTitle' )->plain() .
-                       $sep .
-                       $this->user_comment;
-               $this->assertIRCComment(
-                       $msg,
-                       'import', 'interwiki',
-                       array(),
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @todo Emulate these edits somehow and extract
-        * raw edit summary from RecentChange object
-        * --
-        */
-       /*
-       public function testIrcMsgForBlankingAES() {
-               // $this->context->msg( 'autosumm-blank', .. );
-       }
-
-       public function testIrcMsgForReplaceAES() {
-               // $this->context->msg( 'autosumm-replace', .. );
-       }
-
-       public function testIrcMsgForRollbackAES() {
-               // $this->context->msg( 'revertpage', .. );
-       }
-
-       public function testIrcMsgForUndoAES() {
-               // $this->context->msg( 'undo-summary', .. );
-       }
-       */
-
        /**
         * @covers RecentChange::parseParams
         */
@@ -390,35 +125,50 @@ class RecentChangeTest extends MediaWikiTestCase {
        }
 
        /**
-        * @param string $expected Expected IRC text without colors codes
-        * @param string $type Log type (move, delete, suppress, patrol ...)
-        * @param string $action A log type action
-        * @param array $params
-        * @param string $comment (optional) A comment for the log action
-        * @param string $msg (optional) A message for PHPUnit :-)
+        * 50 mins and 100 mins are used here as the tests never take that long!
+        * @return array
         */
-       protected function assertIRCComment( $expected, $type, $action, $params,
-               $comment = null, $msg = '', $legacy = false
-       ) {
-               $logEntry = new ManualLogEntry( $type, $action );
-               $logEntry->setPerformer( $this->user );
-               $logEntry->setTarget( $this->title );
-               if ( $comment !== null ) {
-                       $logEntry->setComment( $comment );
-               }
-               $logEntry->setParameters( $params );
-               $logEntry->setLegacy( $legacy );
-
-               $formatter = LogFormatter::newFromEntry( $logEntry );
-               $formatter->setContext( $this->context );
+       public function provideIsInRCLifespan() {
+               return array(
+                       array( 6000, time() - 3000, 0, true ),
+                       array( 3000, time() - 6000, 0, false ),
+                       array( 6000, time() - 3000, 6000, true ),
+                       array( 3000, time() - 6000, 6000, true ),
+               );
+       }
 
-               // Apply the same transformation as done in IRCColourfulRCFeedFormatter::getLine for rc_comment
-               $ircRcComment = IRCColourfulRCFeedFormatter::cleanupForIRC( $formatter->getIRCActionComment() );
+       /**
+        * @covers RecentChange::isInRCLifespan
+        * @dataProvider provideIsInRCLifespan
+        */
+       public function testIsInRCLifespan( $maxAge, $timestamp, $tolerance, $expected ) {
+               $this->setMwGlobals( 'wgRCMaxAge', $maxAge );
+               $this->assertEquals( $expected, RecentChange::isInRCLifespan( $timestamp, $tolerance ) );
+       }
 
-               $this->assertEquals(
-                       $expected,
-                       $ircRcComment,
-                       $msg
+       public function provideRCTypes() {
+               return array(
+                       array( RC_EDIT, 'edit' ),
+                       array( RC_NEW, 'new' ),
+                       array( RC_LOG, 'log' ),
+                       array( RC_EXTERNAL, 'external' ),
                );
        }
+
+       /**
+        * @dataProvider provideRCTypes
+        * @covers RecentChange::parseFromRCType
+        */
+       public function testParseFromRCType( $rcType, $type ) {
+               $this->assertEquals( $type, RecentChange::parseFromRCType( $rcType ) );
+       }
+
+       /**
+        * @dataProvider provideRCTypes
+        * @covers RecentChange::parseToRCType
+        */
+       public function testParseToRCType( $rcType, $type ) {
+               $this->assertEquals( $rcType, RecentChange::parseToRCType( $type ) );
+       }
+
 }
index 33861f1..492fec6 100644 (file)
@@ -4,7 +4,6 @@
  * @group ContentHandler
  */
 class TextContentHandlerTest extends MediaWikiLangTestCase {
-
        public function testSupportsDirectEditing() {
                $handler = new TextContentHandler();
                $this->assertTrue( $handler->supportsDirectEditing(), 'direct editing is supported' );
index dd61f85..fe26375 100644 (file)
@@ -27,10 +27,16 @@ class TextContentTest extends MediaWikiLangTestCase {
                                CONTENT_MODEL_JAVASCRIPT,
                        ),
                        'wgUseTidy' => false,
-                       'wgAlwaysUseTidy' => false,
                        'wgCapitalLinks' => true,
                        'wgHooks' => array(), // bypass hook ContentGetParserOutput that force custom rendering
                ) );
+
+               MWTidy::destroySingleton();
+       }
+
+       protected function tearDown() {
+               MWTidy::destroySingleton();
+               parent::tearDown();
        }
 
        public function newContent( $text ) {
diff --git a/tests/phpunit/includes/debug/logger/monolog/AvroFormatterTest.php b/tests/phpunit/includes/debug/logger/monolog/AvroFormatterTest.php
new file mode 100644 (file)
index 0000000..4c6d25e
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+use MediaWikiTestCase;
+use PHPUnit_Framework_Error_Notice;
+
+class AvroFormatterTest extends MediaWikiTestCase {
+
+       public function setUo() {
+               if ( !class_exists( 'AvroStringIO' ) ) {
+                       $this->markTestSkipped( 'Avro is required for the AvroFormatterTest' );
+               }
+               parent::setUp();
+       }
+
+       public function testSchemaNotAvailable() {
+               $formatter = new AvroFormatter( array() );      
+               $this->setExpectedException( 'PHPUnit_Framework_Error_Notice', "The schema for channel 'marty' is not available" );
+               $formatter->format( array( 'channel' => 'marty' ) );
+       }
+
+       public function testSchemaNotAvailableReturnValue() {
+               $formatter = new AvroFormatter( array() );      
+               $noticeEnabled = PHPUnit_Framework_Error_Notice::$enabled;
+               // disable conversion of notices 
+               PHPUnit_Framework_Error_Notice::$enabled = false;
+               // have to keep the user notice from being output
+               wfSuppressWarnings();
+               $res = $formatter->format( array( 'channel' => 'marty' ) );
+               wfRestoreWarnings();
+               PHPUnit_Framework_Error_Notice::$enabled = $noticeEnabled;
+               $this->assertNull( $res );
+       }
+
+       public function testDoesSomethingWhenSchemaAvailable() {
+               $formatter = new AvroFormatter( array( 'string' => array( 'type' => 'string' ) ) );
+               $res = $formatter->format( array(
+                       'channel' => 'string',
+                       'context' => 'better to be',
+               ) );
+               $this->assertNotNull( $res );
+               // basically just tell us if avro changes its string encoding
+               $this->assertEquals( base64_decode( 'GGJldHRlciB0byBiZQ==' ), $res );
+       }
+}
diff --git a/tests/phpunit/includes/debug/logger/monolog/KafkaHandlerTest.php b/tests/phpunit/includes/debug/logger/monolog/KafkaHandlerTest.php
new file mode 100644 (file)
index 0000000..272f6e4
--- /dev/null
@@ -0,0 +1,204 @@
+<?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
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+use MediaWikiTestCase;
+use Monolog\Logger;
+
+// not available in the version of phpunit mw uses, so copied into repo
+require_once __DIR__ . '/../../../ConsecutiveParametersMatcher.php';
+
+class KafkaHandlerTest extends MediaWikiTestCase {
+
+       public function setUo() {
+               if ( !class_exists( 'Monolog\Handler\AbstractProcessingHandler' ) ) {
+                       $this->markTestSkipped( 'Monolog is required for the KafkaHandlerTest' );
+               }
+               parent::setUp();
+       }
+
+       public function topicNamingProvider() {
+               return array(
+                       array( array(), 'monolog_foo' ),
+                       array( array( 'alias' => array( 'foo' => 'bar' ) ), 'bar' )
+               );
+       }
+
+       /**
+        * @dataProvider topicNamingProvider
+        */
+       public function testTopicNaming( $options, $expect ) {
+               $produce = $this->getMockBuilder( 'Kafka\Produce' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $produce->expects($this->any())
+                       ->method('getAvailablePartitions')
+                       ->will($this->returnValue( array( 'A' ) ) );
+               $produce->expects($this->once())
+                       ->method( 'setMessages' )
+                       ->with( $expect, $this->anything(), $this->anything() );
+
+               $handler = new KafkaHandler( $produce, $options );
+               $handler->handle( array(
+                       'channel' => 'foo',
+                       'level' => Logger::EMERGENCY,
+                       'extra' => array(),
+               ) );
+       }
+
+       public function swallowsExceptionsWhenRequested() {
+               return array(
+                       // defaults to false
+                       array( array(), true ),
+                       // also try false explicitly
+                       array( array( 'swallowExceptions' => false ), true ),
+                       // turn it on
+                       array( array( 'swallowExceptions' => true ), false ),
+               );
+       }
+
+       /**
+        * @dataProvider swallowsExceptionsWhenRequested
+        */
+       public function testGetAvailablePartitionsException( $options, $expectException ) {
+               $produce = $this->getMockBuilder( 'Kafka\Produce' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $produce->expects( $this->any() )
+                       ->method( 'getAvailablePartitions' )
+                       ->will( $this->throwException( new \Kafka\Exception ) );
+
+               if ( $expectException ) {
+                       $this->setExpectedException( 'Kafka\Exception' );
+               }
+
+               $handler = new KafkaHandler( $produce, $options );
+               $handler->handle( array(
+                       'channel' => 'foo',
+                       'level' => Logger::EMERGENCY,
+                       'extra' => array(),
+               ) );
+
+               if ( !$expectException ) {
+                       $this->assertTrue( true, 'no exception was thrown' );
+               }
+       }
+
+       /**
+        * @dataProvider swallowsExceptionsWhenRequested
+        */
+       public function testSendException( $options, $expectException ) {
+               $produce = $this->getMockBuilder( 'Kafka\Produce' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $produce->expects( $this->any() )
+                       ->method( 'getAvailablePartitions' )
+                       ->will( $this->returnValue( array( 'A' ) ) );
+               $produce->expects( $this->any() )
+                       ->method( 'send' )
+                       ->will( $this->throwException( new \Kafka\Exception ) );
+
+               if ( $expectException ) {
+                       $this->setExpectedException( 'Kafka\Exception' );
+               }
+
+               $handler = new KafkaHandler( $produce, $options );
+               $handler->handle( array(
+                       'channel' => 'foo',
+                       'level' => Logger::EMERGENCY,
+                       'extra' => array(),
+               ) );
+
+               if ( !$expectException ) {
+                       $this->assertTrue( true, 'no exception was thrown' );
+               }
+       }
+
+       public function testHandlesNullFormatterResult() {
+               $produce = $this->getMockBuilder( 'Kafka\Produce' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $produce->expects( $this->any() )
+                       ->method( 'getAvailablePartitions' )
+                       ->will( $this->returnValue( array( 'A' ) ) );
+               $mockMethod = $produce->expects( $this->exactly( 2 ) )
+                       ->method( 'setMessages' );
+               // evil hax
+               \TestingAccessWrapper::newFromObject( $mockMethod )->matcher->parametersMatcher =
+                       new \PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters( array(
+                               array( $this->anything(), $this->anything(), array( 'words' ) ),
+                               array( $this->anything(), $this->anything(), array( 'lines' ) )
+                       ) );
+
+               $formatter = $this->getMock( 'Monolog\Formatter\FormatterInterface' );
+               $formatter->expects( $this->any() )
+                       ->method( 'format' )
+                       ->will( $this->onConsecutiveCalls( 'words', null, 'lines' ) );
+
+               $handler = new KafkaHandler( $produce, array() );
+               $handler->setFormatter( $formatter );
+               for ( $i = 0; $i < 3; ++$i ) {
+                       $handler->handle( array(
+                               'channel' => 'foo',
+                               'level' => Logger::EMERGENCY,
+                               'extra' => array(),
+                       ) );
+               }
+       }
+
+
+       public function testBatchHandlesNullFormatterResult() {
+               $produce = $this->getMockBuilder( 'Kafka\Produce' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $produce->expects( $this->any() )
+                       ->method( 'getAvailablePartitions' )
+                       ->will( $this->returnValue( array( 'A' ) ) );
+               $produce->expects( $this->once() )
+                       ->method( 'setMessages' )
+                       ->with( $this->anything(), $this->anything(), array( 'words', 'lines' ) );
+
+               $formatter = $this->getMock( 'Monolog\Formatter\FormatterInterface' );
+               $formatter->expects( $this->any() )
+                       ->method( 'format' )
+                       ->will( $this->onConsecutiveCalls( 'words', null, 'lines' ) );
+
+               $handler = new KafkaHandler( $produce, array() );
+               $handler->setFormatter( $formatter );
+               $handler->handleBatch( array(
+                       array(
+                               'channel' => 'foo',
+                               'level' => Logger::EMERGENCY,
+                               'extra' => array(),
+                       ),
+                       array(
+                               'channel' => 'foo',
+                               'level' => Logger::EMERGENCY,
+                               'extra' => array(),
+                       ),
+                       array(
+                               'channel' => 'foo',
+                               'level' => Logger::EMERGENCY,
+                               'extra' => array(),
+                       ),
+               ) );
+       }
+}
index f12cf5b..6ee54d3 100644 (file)
@@ -48,10 +48,10 @@ class LineFormatterTest extends MediaWikiTestCase {
                        )
                );
                $out = $fixture->normalizeException( $boom );
-               $this->assertContains( '[Exception InvalidArgumentException]', $out );
-               $this->assertContains( ', [Exception LengthException]', $out );
-               $this->assertContains( ', [Exception LogicException]', $out );
-               $this->assertNotContains( '[stacktrace]', $out );
+               $this->assertContains( "\n[Exception InvalidArgumentException]", $out );
+               $this->assertContains( "\nCaused by: [Exception LengthException]", $out );
+               $this->assertContains( "\nCaused by: [Exception LogicException]", $out );
+               $this->assertNotContains( "\n  #0", $out );
        }
 
        /**
@@ -67,9 +67,9 @@ class LineFormatterTest extends MediaWikiTestCase {
                        )
                );
                $out = $fixture->normalizeException( $boom );
-               $this->assertContains( '[Exception InvalidArgumentException', $out );
-               $this->assertContains( ', [Exception LengthException]', $out );
-               $this->assertContains( ', [Exception LogicException]', $out );
-               $this->assertContains( '[stacktrace]', $out );
+               $this->assertContains( "\n[Exception InvalidArgumentException]", $out );
+               $this->assertContains( "\nCaused by: [Exception LengthException]", $out );
+               $this->assertContains( "\nCaused by: [Exception LogicException]", $out );
+               $this->assertContains( "\n  #0", $out );
        }
 }
index aaa93ef..2e4942f 100644 (file)
@@ -2392,6 +2392,56 @@ class FileBackendTest extends MediaWikiTestCase {
                        "Scoped unlocking of files succeeded with OK status ($backendName)." );
        }
 
+       public function testReadAffinity() {
+               $be = TestingAccessWrapper::newFromObject(
+                       new FileBackendMultiWrite( array(
+                               'name' => 'localtesting',
+                               'wikiId' => wfWikiId() . mt_rand(),
+                               'backends' => array(
+                                       array( // backend 0
+                                               'name' => 'multitesting0',
+                                               'class' => 'MemoryFileBackend',
+                                               'isMultiMaster' => false,
+                                               'readAffinity' => true
+                                       ),
+                                       array( // backend 1
+                                               'name' => 'multitesting1',
+                                               'class' => 'MemoryFileBackend',
+                                               'isMultiMaster' => true
+                                       )
+                               )
+                       ) )
+               );
+
+               $this->assertEquals(
+                       1,
+                       $be->getReadIndexFromParams( array( 'latest' => 1 ) ),
+                       'Reads with "latest" flag use backend 1'
+               );
+               $this->assertEquals(
+                       0,
+                       $be->getReadIndexFromParams( array( 'latest' => 0 ) ),
+                       'Reads without "latest" flag use backend 0'
+               );
+
+               $p = 'container/test-cont/file.txt';
+               $be->backends[0]->quickCreate( array(
+                       'dst' => "mwstore://multitesting0/$p", 'content' => 'cattitude' ) );
+               $be->backends[1]->quickCreate( array(
+                       'dst' => "mwstore://multitesting1/$p", 'content' => 'princess of power' ) );
+
+               $this->assertEquals(
+                       'cattitude',
+                       $be->getFileContents( array( 'src' => "mwstore://localtesting/$p" ) ),
+                       "Non-latest read came from backend 0"
+               );
+               $this->assertEquals(
+                       'princess of power',
+                       $be->getFileContents( array( 'src' => "mwstore://localtesting/$p", 'latest' => 1 ) ),
+                       "Latest read came from backend1"
+               );
+       }
+
        // helper function
        private function listToArray( $iter ) {
                return is_array( $iter ) ? $iter : iterator_to_array( $iter );
index e96953e..57668e5 100644 (file)
@@ -170,4 +170,37 @@ class IEUrlExtensionTest extends PHPUnit_Framework_TestCase {
                        'Two dots'
                );
        }
+
+       /**
+        * @covers IEUrlExtension::findIE6Extension
+        */
+       public function testScriptQuery() {
+               $this->assertEquals(
+                       'php',
+                       IEUrlExtension::findIE6Extension( 'example.php?foo=a&bar=b' ),
+                       'Script with query'
+               );
+       }
+
+       /**
+        * @covers IEUrlExtension::findIE6Extension
+        */
+       public function testEscapedScriptQuery() {
+               $this->assertEquals(
+                       '',
+                       IEUrlExtension::findIE6Extension( 'example%2Ephp?foo=a&bar=b' ),
+                       'Script with urlencoded dot and query'
+               );
+       }
+
+       /**
+        * @covers IEUrlExtension::findIE6Extension
+        */
+       public function testEscapedScriptQueryDot() {
+               $this->assertEquals(
+                       'y',
+                       IEUrlExtension::findIE6Extension( 'example%2Ephp?foo=a.x&bar=b.y' ),
+                       'Script with urlencoded dot and query with dot'
+               );
+       }
 }
index 515990e..844c9af 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @group Database
  */
@@ -19,6 +20,16 @@ class LogFormatterTest extends MediaWikiLangTestCase {
         */
        protected $context;
 
+       /**
+        * @var Title
+        */
+       protected $target;
+
+       /**
+        * @var string
+        */
+       protected $user_comment;
+
        protected function setUp() {
                parent::setUp();
 
@@ -35,12 +46,15 @@ class LogFormatterTest extends MediaWikiLangTestCase {
                Language::getLocalisationCache()->recache( $wgLang->getCode() );
 
                $this->user = User::newFromName( 'Testuser' );
-               $this->title = Title::newMainPage();
+               $this->title = Title::newFromText( 'SomeTitle' );
+               $this->target = Title::newFromText( 'TestTarget' );
 
                $this->context = new RequestContext();
                $this->context->setUser( $this->user );
                $this->context->setTitle( $this->title );
                $this->context->setLanguage( $wgLang );
+
+               $this->user_comment = '<User comment about action>';
        }
 
        protected function tearDown() {
@@ -292,4 +306,309 @@ class LogFormatterTest extends MediaWikiLangTestCase {
                        array( '4:user-link:key', 'foo', array( 'key' => 'Foo' ) ),
                );
        }
+
+       /**
+        * @covers LogFormatter::getIRCActionComment
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeBlock() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # block/block
+               $this->assertIRCComment(
+                       $this->context->msg( 'blocklogentry', 'SomeTitle', 'duration', '(flags)' )->plain()
+                       . $sep . $this->user_comment,
+                       'block', 'block',
+                       array(
+                               '5::duration' => 'duration',
+                               '6::flags' => 'flags',
+                       ),
+                       $this->user_comment
+               );
+               # block/block - legacy
+               $this->assertIRCComment(
+                       $this->context->msg( 'blocklogentry', 'SomeTitle', 'duration', '(flags)' )->plain()
+                       . $sep . $this->user_comment,
+                       'block', 'block',
+                       array(
+                               'duration',
+                               'flags',
+                       ),
+                       $this->user_comment,
+                       '',
+                       true
+               );
+               # block/unblock
+               $this->assertIRCComment(
+                       $this->context->msg( 'unblocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'block', 'unblock',
+                       array(),
+                       $this->user_comment
+               );
+               # block/reblock
+               $this->assertIRCComment(
+                       $this->context->msg( 'reblock-logentry', 'SomeTitle', 'duration', '(flags)' )->plain()
+                       . $sep . $this->user_comment,
+                       'block', 'reblock',
+                       array(
+                               '5::duration' => 'duration',
+                               '6::flags' => 'flags',
+                       ),
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionComment
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeDelete() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # delete/delete
+               $this->assertIRCComment(
+                       $this->context->msg( 'deletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'delete', 'delete',
+                       array(),
+                       $this->user_comment
+               );
+
+               # delete/restore
+               $this->assertIRCComment(
+                       $this->context->msg( 'undeletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'delete', 'restore',
+                       array(),
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionComment
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeNewusers() {
+               $this->assertIRCComment(
+                       'New user account',
+                       'newusers', 'newusers',
+                       array()
+               );
+               $this->assertIRCComment(
+                       'New user account',
+                       'newusers', 'create',
+                       array()
+               );
+               $this->assertIRCComment(
+                       'created new account SomeTitle',
+                       'newusers', 'create2',
+                       array()
+               );
+               $this->assertIRCComment(
+                       'Account created automatically',
+                       'newusers', 'autocreate',
+                       array()
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionComment
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeMove() {
+               $move_params = array(
+                       '4::target' => $this->target->getPrefixedText(),
+                       '5::noredir' => 0,
+               );
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # move/move
+               $this->assertIRCComment(
+                       $this->context->msg( '1movedto2', 'SomeTitle', 'TestTarget' )
+                               ->plain() . $sep . $this->user_comment,
+                       'move', 'move',
+                       $move_params,
+                       $this->user_comment
+               );
+
+               # move/move_redir
+               $this->assertIRCComment(
+                       $this->context->msg( '1movedto2_redir', 'SomeTitle', 'TestTarget' )
+                               ->plain() . $sep . $this->user_comment,
+                       'move', 'move_redir',
+                       $move_params,
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionComment
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypePatrol() {
+               # patrol/patrol
+               $this->assertIRCComment(
+                       $this->context->msg( 'patrol-log-line', 'revision 777', '[[SomeTitle]]', '' )->plain(),
+                       'patrol', 'patrol',
+                       array(
+                               '4::curid' => '777',
+                               '5::previd' => '666',
+                               '6::auto' => 0,
+                       )
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionComment
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeProtect() {
+               $protectParams = array(
+                       '[edit=sysop] (indefinite) ‎[move=sysop] (indefinite)'
+               );
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # protect/protect
+               $this->assertIRCComment(
+                       $this->context->msg( 'protectedarticle', 'SomeTitle ' . $protectParams[0] )
+                               ->plain() . $sep . $this->user_comment,
+                       'protect', 'protect',
+                       $protectParams,
+                       $this->user_comment
+               );
+
+               # protect/unprotect
+               $this->assertIRCComment(
+                       $this->context->msg( 'unprotectedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'protect', 'unprotect',
+                       array(),
+                       $this->user_comment
+               );
+
+               # protect/modify
+               $this->assertIRCComment(
+                       $this->context->msg( 'modifiedarticleprotection', 'SomeTitle ' . $protectParams[0] )
+                               ->plain() . $sep . $this->user_comment,
+                       'protect', 'modify',
+                       $protectParams,
+                       $this->user_comment
+               );
+
+               # protect/move_prot
+               $this->assertIRCComment(
+                       $this->context->msg( 'movedarticleprotection', 'SomeTitle', 'OldTitle' )
+                               ->plain() . $sep . $this->user_comment,
+                       'protect', 'move_prot',
+                       array(
+                               '4::oldtitle' => 'OldTitle'
+                       ),
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionComment
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeUpload() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # upload/upload
+               $this->assertIRCComment(
+                       $this->context->msg( 'uploadedimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'upload', 'upload',
+                       array(),
+                       $this->user_comment
+               );
+
+               # upload/overwrite
+               $this->assertIRCComment(
+                       $this->context->msg( 'overwroteimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'upload', 'overwrite',
+                       array(),
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionComment
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeMerge() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # merge/merge
+               $this->assertIRCComment(
+                       $this->context->msg( 'pagemerge-logentry', 'SomeTitle', 'Dest', 'timestamp' )->plain()
+                       . $sep . $this->user_comment,
+                       'merge', 'merge',
+                       array(
+                               '4::dest' => 'Dest',
+                               '5::mergepoint' => 'timestamp',
+                       ),
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionComment
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeImport() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # import/upload
+               $msg = $this->context->msg( 'import-logentry-upload', 'SomeTitle' )->plain() .
+                       $sep .
+                       $this->user_comment;
+               $this->assertIRCComment(
+                       $msg,
+                       'import', 'upload',
+                       array(),
+                       $this->user_comment
+               );
+
+               # import/interwiki
+               $msg = $this->context->msg( 'import-logentry-interwiki', 'SomeTitle' )->plain() .
+                       $sep .
+                       $this->user_comment;
+               $this->assertIRCComment(
+                       $msg,
+                       'import', 'interwiki',
+                       array(),
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @param string $expected Expected IRC text without colors codes
+        * @param string $type Log type (move, delete, suppress, patrol ...)
+        * @param string $action A log type action
+        * @param array $params
+        * @param string $comment (optional) A comment for the log action
+        * @param string $msg (optional) A message for PHPUnit :-)
+        */
+       protected function assertIRCComment( $expected, $type, $action, $params,
+               $comment = null, $msg = '', $legacy = false
+       ) {
+               $logEntry = new ManualLogEntry( $type, $action );
+               $logEntry->setPerformer( $this->user );
+               $logEntry->setTarget( $this->title );
+               if ( $comment !== null ) {
+                       $logEntry->setComment( $comment );
+               }
+               $logEntry->setParameters( $params );
+               $logEntry->setLegacy( $legacy );
+
+               $formatter = LogFormatter::newFromEntry( $logEntry );
+               $formatter->setContext( $this->context );
+
+               // Apply the same transformation as done in IRCColourfulRCFeedFormatter::getLine for rc_comment
+               $ircRcComment = IRCColourfulRCFeedFormatter::cleanupForIRC( $formatter->getIRCActionComment() );
+
+               $this->assertEquals(
+                       $expected,
+                       $ircRcComment,
+                       $msg
+               );
+       }
+
 }
index f5814e4..b684006 100644 (file)
@@ -138,21 +138,25 @@ class BagOStuffTest extends MediaWikiTestCase {
        public function testGetMulti() {
                $value1 = array( 'this' => 'is', 'a' => 'test' );
                $value2 = array( 'this' => 'is', 'another' => 'test' );
+               $value3 = array( 'testing a key that may be encoded when sent to cache backend' );
 
                $key1 = wfMemcKey( 'test1' );
                $key2 = wfMemcKey( 'test2' );
+               $key3 = wfMemcKey( 'will-%-encode' ); // internally, MemcachedBagOStuffs will encode to will-%25-encode
 
                $this->cache->add( $key1, $value1 );
                $this->cache->add( $key2, $value2 );
+               $this->cache->add( $key3, $value3 );
 
                $this->assertEquals(
-                       $this->cache->getMulti( array( $key1, $key2 ) ),
-                       array( $key1 => $value1, $key2 => $value2 )
+                       array( $key1 => $value1, $key2 => $value2, $key3 => $value3 ),
+                       $this->cache->getMulti( array( $key1, $key2, $key3 ) )
                );
 
                // cleanup
                $this->cache->delete( $key1 );
                $this->cache->delete( $key2 );
+               $this->cache->delete( $key3 );
        }
 
        /**
diff --git a/tests/phpunit/includes/objectcache/MultiWriteBagOStuffTest.php b/tests/phpunit/includes/objectcache/MultiWriteBagOStuffTest.php
new file mode 100644 (file)
index 0000000..2b66181
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * @group Database
+ */
+class MultiWriteBagOStuffTest extends MediaWikiTestCase {
+       /** @var HashBagOStuff */
+       private $cache1;
+       /** @var HashBagOStuff */
+       private $cache2;
+       /** @var MultiWriteBagOStuff */
+       private $cache;
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->cache1 = new HashBagOStuff();
+               $this->cache2 = new HashBagOStuff();
+               $this->cache = new MultiWriteBagOStuff( array(
+                       'caches' => array( $this->cache1, $this->cache2 ),
+                       'replication' => 'async'
+               ) );
+       }
+
+       public function testSetImmediate() {
+               $key = wfRandomString();
+               $value = wfRandomString();
+               $this->cache->set( $key, $value );
+
+               // Set in tier 1
+               $this->assertEquals( $value, $this->cache1->get( $key ), 'Written to tier 1' );
+               // Set in tier 2
+               $this->assertEquals( $value, $this->cache2->get( $key ), 'Written to tier 2' );
+       }
+
+       public function testSetDelayed() {
+               $key = wfRandomString();
+               $value = wfRandomString();
+
+               // XXX: DeferredUpdates bound to transactions in CLI mode
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->begin();
+               $this->cache->set( $key, $value );
+
+               // Set in tier 1
+               $this->assertEquals( $value, $this->cache1->get( $key ), 'Written to tier 1' );
+               // Not yet set in tier 2
+               $this->assertEquals( false, $this->cache2->get( $key ), 'Not written to tier 2' );
+
+               $dbw->commit();
+
+               // Set in tier 2
+               $this->assertEquals( $value, $this->cache2->get( $key ), 'Written to tier 2' );
+       }
+}
index df891f5..96ae3be 100644 (file)
@@ -91,7 +91,7 @@ class MediaWikiParserTest {
                        // enough to cause there to be separate names for different
                        // things, which is good enough for our purposes.
                        $extensionName = basename( dirname( $fileName ) );
-                       $testsName = $extensionName . '' . basename( $fileName, '.txt' );
+                       $testsName = $extensionName . '__' . basename( $fileName, '.txt' );
                        $escapedFileName = strtr( $fileName, array( "'" => "\\'", '\\' => '\\\\' ) );
                        $parserTestClassName = ucfirst( $testsName );
                        // Official spec for class names: http://php.net/manual/en/language.oop5.basic.php
index c7a3103..df7da98 100644 (file)
@@ -106,7 +106,6 @@ class NewParserTest extends MediaWikiTestCase {
                $tmpGlobals['wgAdaptiveMessageCache'] = true;
                $tmpGlobals['wgUseDatabaseMessages'] = true;
                $tmpGlobals['wgLocaltimezone'] = 'UTC';
-               $tmpGlobals['wgDeferredUpdateList'] = array();
                $tmpGlobals['wgGroupPermissions'] = array(
                        '*' => array(
                                'createaccount' => true,
@@ -160,10 +159,10 @@ class NewParserTest extends MediaWikiTestCase {
                $this->djVuSupport = new DjVuSupport();
                // Tidy support
                $this->tidySupport = new TidySupport();
+               $tmpGlobals['wgTidyConfig'] = null;
                $tmpGlobals['wgUseTidy'] = false;
-               $tmpGlobals['wgAlwaysUseTidy'] = false;
                $tmpGlobals['wgDebugTidy'] = false;
-               $tmpGlobals['wgTidyConf'] = $IP . '/includes/tidy.conf';
+               $tmpGlobals['wgTidyConf'] = $IP . '/includes/tidy/tidy.conf';
                $tmpGlobals['wgTidyOpts'] = '';
                $tmpGlobals['wgTidyInternal'] = $this->tidySupport->isInternal();
 
@@ -185,6 +184,8 @@ class NewParserTest extends MediaWikiTestCase {
                $wgNamespaceAliases['Image'] = $this->savedWeirdGlobals['image_alias'];
                $wgNamespaceAliases['Image_talk'] = $this->savedWeirdGlobals['image_talk_alias'];
 
+               MWTidy::destroySingleton();
+
                // Restore backends
                RepoGroup::destroySingleton();
                FileBackendGroup::destroySingleton();
@@ -454,6 +455,7 @@ class NewParserTest extends MediaWikiTestCase {
                        $GLOBALS[$var] = $val;
                }
 
+               MWTidy::destroySingleton();
                MagicWord::clearCache();
 
                # The entries saved into RepoGroup cache with previous globals will be wrong.
index 3605e50..4af3898 100644 (file)
@@ -19,12 +19,6 @@ class TagHookTest extends MediaWikiTestCase {
                return array( array( "foo<bar" ), array( "foo>bar" ), array( "foo\nbar" ), array( "foo\rbar" ) );
        }
 
-       protected function setUp() {
-               parent::setUp();
-
-               $this->setMwGlobals( 'wgAlwaysUseTidy', false );
-       }
-
        /**
         * @dataProvider provideValidNames
         * @covers Parser::setHook
index f656a74..5db2908 100644 (file)
@@ -7,8 +7,7 @@ class TidyTest extends MediaWikiTestCase {
 
        protected function setUp() {
                parent::setUp();
-               $check = MWTidy::tidy( '' );
-               if ( strpos( $check, '<!--' ) !== false ) {
+               if ( !MWTidy::isEnabled() ) {
                        $this->markTestSkipped( 'Tidy not found' );
                }
        }
index 0964137..1cb8a5d 100644 (file)
@@ -113,11 +113,20 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                '@IGNORED' => 'yes',
                        ),
                ) + self::$default;
+               $info2 = array(
+                       'config' => array(
+                               '_prefix' => 'eg',
+                               'Bar' => 'somevalue'
+                       ),
+               ) + self::$default;
                $processor->extractInfo( $this->dir, $info, 1 );
+               $processor->extractInfo( $this->dir, $info2, 1 );
                $extracted = $processor->getExtractedInfo();
                $this->assertEquals( 'somevalue', $extracted['globals']['wgBar'] );
                $this->assertEquals( 10, $extracted['globals']['wgFoo'] );
                $this->assertArrayNotHasKey( 'wg@IGNORED', $extracted['globals'] );
+               // Custom prefix:
+               $this->assertEquals( 'somevalue', $extracted['globals']['egBar'] );
        }
 
        public static function provideExtracttExtensionMessagesFiles() {
index b8b1b06..201cbfc 100644 (file)
@@ -123,7 +123,7 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                )
                        ),
                        array(
-                               'Global already set, 2d array with integer keys',
+                               'Global already set, array with integer keys',
                                array(
                                        'mwNamespacesFoo' => array(
                                                100 => true,
@@ -139,7 +139,7 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                ),
                                array(
                                        'mwNamespacesFoo' => array(
-                                               100 => false,
+                                               100 => true,
                                                102 => false,
                                                500 => true,
                                        ),
index cc20e7f..b683885 100644 (file)
@@ -6,15 +6,6 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                parent::setUp();
 
                $this->setMwGlobals( array(
-                       'wgResourceLoaderLESSFunctions' => array(
-                               'test-sum' => function ( $frame, $less ) {
-                                       $sum = 0;
-                                       foreach ( $frame[2] as $arg ) {
-                                               $sum += (int)$arg[1];
-                                       }
-                                       return $sum;
-                               },
-                       ),
                        'wgResourceLoaderLESSImportPaths' => array(
                                dirname( dirname( __DIR__ ) ) . '/data/less/common',
                        ),
index 7e60fdd..13c2838 100644 (file)
@@ -145,34 +145,25 @@ class SpecialSearchTest extends MediaWikiTestCase {
        public function provideRewriteQueryWithSuggestion() {
                return array(
                        array(
-                               'With results and a suggestion does not run suggested query',
+                               'With suggestion and no rewritten query shows did you mean',
                                '/Did you mean: <a[^>]+>first suggestion/',
-                               array(
-                                       new SpecialSearchTestMockResultSet( 'first suggestion', array(
-                                               SearchResult::newFromTitle( Title::newMainPage() ),
-                                       ) ),
-                                       new SpecialSearchTestMockResultSet( 'was never run', array() ),
-                               ),
+                               new SpecialSearchTestMockResultSet( 'first suggestion', null, array(
+                                       SearchResult::newFromTitle( Title::newMainPage() ),
+                               ) ),
                        ),
 
                        array(
-                               'With no results and a suggestion responds with suggested query results',
+                               'With rewritten query informs user of change',
                                '/Showing results for <a[^>]+>first suggestion/',
-                               array(
-                                       new SpecialSearchTestMockResultSet( 'first suggestion', array() ),
-                                       new SpecialSearchTestMockResultSet( 'second suggestion', array(
-                                               SearchResult::newFromTitle( Title::newMainPage() ),
-                                       ) ),
-                               ),
+                               new SpecialSearchTestMockResultSet( 'asdf', 'first suggestion', array(
+                                       SearchResult::newFromTitle( Title::newMainPage() ),
+                               ) ),
                        ),
 
                        array(
                                'When both queries have no results user gets no results',
                                '/There were no results matching the query/',
-                               array(
-                                       new SpecialSearchTestMockResultSet( 'first suggestion', array() ),
-                                       new SpecialSearchTestMockResultSet( 'second suggestion', array() ),
-                               ),
+                               new SpecialSearchTestMockResultSet( 'first suggestion', 'first suggestion', array() ),
                        ),
                );
        }
@@ -180,8 +171,8 @@ class SpecialSearchTest extends MediaWikiTestCase {
        /**
         * @dataProvider provideRewriteQueryWithSuggestion
         */
-       public function testRewriteQueryWithSuggestion( $message, $expectRegex, $fromResults ) {
-               $mockSearchEngine = $this->mockSearchEngine( $fromResults );
+       public function testRewriteQueryWithSuggestion( $message, $expectRegex, $results ) {
+               $mockSearchEngine = $this->mockSearchEngine( $results );
                $search = $this->getMockBuilder( 'SpecialSearch' )
                        ->setMethods( array( 'getSearchEngine' ) )
                        ->getMock();
@@ -199,17 +190,14 @@ class SpecialSearchTest extends MediaWikiTestCase {
                }
        }
 
-       protected function mockSearchEngine( array $returnValues ) {
+       protected function mockSearchEngine( $results ) {
                $mock = $this->getMockBuilder( 'SearchEngine' )
-                       ->setMethods( array( 'searchText' ) )
+                       ->setMethods( array( 'searchText', 'searchTitle' ) )
                        ->getMock();
 
                $mock->expects( $this->any() )
                        ->method( 'searchText' )
-                       ->will( call_user_func_array(
-                               array( $this, 'onConsecutiveCalls' ),
-                               array_map( array( $this, 'returnValue' ), $returnValues )
-                       ) );
+                       ->will( $this->returnValue( $results ) );
 
                return $mock;
        }
@@ -219,9 +207,10 @@ class SpecialSearchTestMockResultSet extends SearchResultSet {
        protected $results;
        protected $suggestion;
 
-       public function __construct( $suggestion = null, array $results = array(), $containedSyntax = false) {
-               $this->results = $results;
+       public function __construct( $suggestion = null, $rewrittenQuery = null, array $results = array(), $containedSyntax = false) {
                $this->suggestion = $suggestion;
+               $this->rewrittenQuery = $rewrittenQuery;
+               $this->results = $results;
                $this->containedSyntax = $containedSyntax;
        }
 
@@ -244,4 +233,16 @@ class SpecialSearchTestMockResultSet extends SearchResultSet {
        public function getSuggestionSnippet() {
                return $this->suggestion;
        }
+
+       public function hasRewrittenQuery() {
+               return $this->rewrittenQuery !== null;
+       }
+
+       public function getQueryAfterRewrite() {
+               return $this->rewrittenQuery;
+       }
+
+       public function getQueryAfterRewriteSnippet() {
+               return htmlspecialchars( $this->rewrittenQuery );
+       }
 }
index d5d1188..8f9eabe 100644 (file)
@@ -20,7 +20,7 @@ class UploadStashTest extends MediaWikiTestCase {
                parent::setUp();
 
                // Setup a file for bug 29408
-               $this->bug29408File = __DIR__ . '/bug29408';
+               $this->bug29408File = wfTempDir() . '/bug29408';
                file_put_contents( $this->bug29408File, "\x00" );
 
                self::$users = array(
diff --git a/tests/phpunit/includes/utils/AvroValidatorTest.php b/tests/phpunit/includes/utils/AvroValidatorTest.php
new file mode 100644 (file)
index 0000000..52c242c
--- /dev/null
@@ -0,0 +1,96 @@
+<?php
+/**
+ * Tests for IP validity functions.
+ *
+ * Ported from /t/inc/IP.t by avar.
+ *
+ * @group IP
+ * @todo Test methods in this call should be split into a method and a
+ * dataprovider.
+ */
+
+class AvroValidatorTest extends PHPUnit_Framework_TestCase {
+       public function setUp() {
+               if ( !class_exists( 'AvroSchema' ) ) {
+                       $this->markTestSkipped( 'Avro is required to run the AvroValidatorTest' );
+               }
+               parent::setUp();
+       }
+
+       public function getErrorsProvider() {
+               $stringSchema = AvroSchema::parse( json_encode( array( 'type' => 'string' ) ) );
+               $recordSchema = AvroSchema::parse( json_encode( array(
+                       'type' => 'record',
+                       'name' => 'ut',
+                       'fields' => array(
+                               array( 'name' => 'id', 'type' => 'int', 'required' => true ),
+                       ),
+               ) ) );
+               $enumSchema = AvroSchema::parse( json_encode( array(
+                       'type' => 'record',
+                       'name' => 'ut',
+                       'fields' => array(
+                               array( 'name' => 'count', 'type' => array( 'int', 'null' ) ),
+                       ),
+               ) ) );
+
+               return array(
+                       array(
+                               'No errors with a simple string serialization',
+                               $stringSchema, 'foobar', array(),
+                       ),
+
+                       array(
+                               'Cannot serialize integer into string',
+                               $stringSchema, 5, 'Expected string, but recieved integer',
+                       ),
+
+                       array(
+                               'Cannot serialize array into string',
+                               $stringSchema, array(), 'Expected string, but recieved array',
+                       ),
+
+                       array(
+                               'allows and ignores extra fields',
+                               $recordSchema, array( 'id' => 4, 'foo' => 'bar' ), array(),
+                       ),
+
+                       array(
+                               'detects missing fields',
+                               $recordSchema, array(), array( 'id' => 'Missing expected field' ),
+                       ),
+
+                       array(
+                               'handles first element in enum',
+                               $enumSchema, array( 'count' => 4 ), array(),
+                       ),
+
+                       array(
+                               'handles second element in enum',
+                               $enumSchema, array( 'count' => null ), array(),
+                       ),
+
+                       array(
+                               'rejects element not in union',
+                               $enumSchema, array( 'count' => 'invalid' ), array( 'count' => array(
+                                       'Expected any one of these to be true',
+                                       array(
+                                               'Expected integer, but recieved string',
+                                               'Expected null, but recieved string',
+                                       )
+                               ) )
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider getErrorsProvider
+        */
+       public function testGetErrors( $message, $schema, $datum, $expected ) {
+               $this->assertEquals(
+                       $expected,
+                       AvroValidator::getErrors( $schema, $datum ),
+                       $message
+               );
+       }
+}
index 2c92e30..eefc926 100644 (file)
@@ -118,6 +118,22 @@ class ResourcesTest extends MediaWikiTestCase {
                }
        }
 
+       /**
+        * CSSMin::getAllLocalFileReferences should ignore url(...) expressions
+        * that have been commented out.
+        */
+       public function testCommentedLocalFileReferences() {
+               $basepath = __DIR__ . '/../data/css/';
+               $css = file_get_contents( $basepath . 'comments.css' );
+               $files = CSSMin::getAllLocalFileReferences( $css, $basepath );
+               $expected = array( $basepath . 'not-commented.gif' );
+               $this->assertArrayEquals(
+                       $expected,
+                       $files,
+                       'Url(...) expression in comment should be omitted.'
+               );
+       }
+
        /**
         * Get all registered modules from ResouceLoader.
         * @return array
@@ -276,6 +292,25 @@ class ResourcesTest extends MediaWikiTestCase {
                                        ( $file instanceof ResourceLoaderFilePath ? $file->getPath() : $file ),
                                );
                        }
+
+                       // To populate missingLocalFileRefs. Not sure how sane this is inside this test...
+                       $module->readStyleFiles(
+                               $module->getStyleFiles( $data['context'] ),
+                               $module->getFlip( $data['context'] ),
+                               $data['context']
+                       );
+
+                       $property = $reflectedModule->getProperty( 'missingLocalFileRefs' );
+                       $property->setAccessible( true );
+                       $missingLocalFileRefs = $property->getValue( $module );
+
+                       foreach ( $missingLocalFileRefs as $file ) {
+                               $cases[] = array(
+                                       $file,
+                                       $moduleName,
+                                       $file,
+                               );
+                       }
                }
 
                return $cases;
index 78771de..01f9625 100644 (file)
@@ -8,12 +8,12 @@
        /**
         * Add bogus to url to prevent IE crazy caching
         *
-        * @param value {String} a relative path (eg. 'data/foo.js'
+        * @param {String} value a relative path (eg. 'data/foo.js'
         * or 'data/test.php?foo=bar').
         * @return {String} Such as 'data/foo.js?131031765087663960'
         */
        QUnit.fixurl = function ( value ) {
-               return value + (/\?/.test( value ) ? '&' : '?')
+               return value + ( /\?/.test( value ) ? '&' : '?' )
                        + String( new Date().getTime() )
                        + String( parseInt( Math.random() * 100000, 10 ) );
        };
@@ -66,7 +66,7 @@
        sinon.config = {
                injectIntoThis: true,
                injectInto: null,
-               properties: ['spy', 'stub', 'mock', 'sandbox'],
+               properties: [ 'spy', 'stub', 'mock', 'sandbox' ],
                // Don't fake timers by default
                useFakeTimers: false,
                useFakeServer: false
        /**
         * Reset mw.config and others to a fresh copy of the live config for each test(),
         * and restore it back to the live one afterwards.
-        * @param localEnv {Object} [optional]
+        *
+        * @param {Object} [localEnv]
         * @example (see test suite at the bottom of this file)
         * </code>
         */
                                                $.each( $.timers, function ( i, timer ) {
                                                        var node = timer.elem;
                                                        mw.log.warn( 'Unfinished animation #' + i + ' in ' + timer.queue + ' queue on ' +
-                                                               mw.html.element( node.nodeName.toLowerCase(), $(node).getAttrs() )
+                                                               mw.html.element( node.nodeName.toLowerCase(), $( node ).getAttrs() )
                                                        );
                                                } );
                                                // Force animations to stop to give the next test a clean start
                        children = $node.contents();
                        processedChildren = [];
                        for ( i = 0, len = children.length; i < len; i++ ) {
-                               el = children[i];
+                               el = children[ i ];
                                if ( el.nodeType === Node.ELEMENT_NODE || el.nodeType === Node.TEXT_NODE ) {
                                        processedChildren.push( getDomStructure( el ) );
                                }
         * @param {string} html HTML markup for one or more nodes.
         */
        function getHtmlStructure( html ) {
-               var el = $( '<div>' ).append( html )[0];
+               var el = $( '<div>' ).append( html )[ 0 ];
                return getDomStructure( el );
        }
 
                        missing = [];
 
                for ( i = 0, len = modules.length; i < len; i++ ) {
-                       state = mw.loader.getState( modules[i] );
+                       state = mw.loader.getState( modules[ i ] );
                        if ( state === 'error' ) {
-                               error.push( modules[i] );
+                               error.push( modules[ i ] );
                        } else if ( state === 'missing' ) {
-                               missing.push( modules[i] );
+                               missing.push( modules[ i ] );
                        }
                }
 
index 4484467..cf34fc1 100644 (file)
@@ -1,7 +1,7 @@
 ( function ( $ ) {
        QUnit.module( 'jquery.accessKeyLabel', QUnit.newMwEnvironment( {
                messages: {
-                       'brackets': '[$1]',
+                       brackets: '[$1]',
                        'word-separator': ' '
                }
        } ) );
@@ -9,23 +9,23 @@
        var getAccessKeyPrefixTestData = [
                        // ua string, platform string, expected prefix
                        // Internet Explorer
-                       ['Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-'],
-                       ['Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-'],
-                       ['Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 'Win64', 'alt-'],
+                       [ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-' ],
+                       [ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-' ],
+                       [ 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 'Win64', 'alt-' ],
                        // Firefox
-                       ['Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19', 'MacIntel', 'ctrl-'],
-                       ['Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17', 'Linux i686', 'alt-shift-'],
-                       ['Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 'Win32', 'alt-shift-'],
+                       [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19', 'MacIntel', 'ctrl-' ],
+                       [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17', 'Linux i686', 'alt-shift-' ],
+                       [ 'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 'Win32', 'alt-shift-' ],
                        // Safari / Konqueror
-                       ['Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'MacIntel', 'ctrl-alt-'],
-                       ['Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'Win32', 'alt-'],
-                       ['Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9', 'Linux i686', 'ctrl-'],
+                       [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'MacIntel', 'ctrl-alt-' ],
+                       [ 'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'Win32', 'alt-' ],
+                       [ 'Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9', 'Linux i686', 'ctrl-' ],
                        // Opera
-                       ['Opera/9.80 (Windows NT 5.1)', 'Win32', 'shift-esc-'],
-                       ['Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130', 'Win32', 'shift-esc-'],
+                       [ 'Opera/9.80 (Windows NT 5.1)', 'Win32', 'shift-esc-' ],
+                       [ 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130', 'Win32', 'shift-esc-' ],
                        // Chrome
-                       ['Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30', 'MacIntel', 'ctrl-option-'],
-                       ['Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-']
+                       [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30', 'MacIntel', 'ctrl-option-' ],
+                       [ 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-' ]
                ],
                // strings appended to title to make sure updateTooltipAccessKeys handles them correctly
                updateTooltipAccessKeysTestData = [ '', ' [a]', ' [test-a]', ' [alt-b]' ];
@@ -39,9 +39,9 @@
                var i;
                for ( i = 0; i < getAccessKeyPrefixTestData.length; i++ ) {
                        assert.equal( $.fn.updateTooltipAccessKeys.getAccessKeyPrefix( {
-                               userAgent: getAccessKeyPrefixTestData[i][0],
-                               platform: getAccessKeyPrefixTestData[i][1]
-                       } ), getAccessKeyPrefixTestData[i][2], 'Correct prefix for ' + getAccessKeyPrefixTestData[i][0] );
+                               userAgent: getAccessKeyPrefixTestData[ i ][ 0 ],
+                               platform: getAccessKeyPrefixTestData[ i ][ 1 ]
+                       } ), getAccessKeyPrefixTestData[ i ][ 2 ], 'Correct prefix for ' + getAccessKeyPrefixTestData[ i ][ 0 ] );
                }
        } );
 
                        // (no browser is known using such a short prefix, though) or "Alt+Umschalt+" in German Firefox.
                        result = /^Title \[(.+)[aA]\]$/.exec( title );
                assert.ok( result, 'title should match expected structure.' );
-               assert.notEqual( result[1], 'test-', 'Prefix used for testing shouldn\'t be used in production.' );
+               assert.notEqual( result[ 1 ], 'test-', 'Prefix used for testing shouldn\'t be used in production.' );
        } );
 
        QUnit.test( 'updateTooltipAccessKeys - no access key', updateTooltipAccessKeysTestData.length, function ( assert ) {
                var i, oldTitle, $input, newTitle;
                for ( i = 0; i < updateTooltipAccessKeysTestData.length; i++ ) {
-                       oldTitle = 'Title' + updateTooltipAccessKeysTestData[i];
+                       oldTitle = 'Title' + updateTooltipAccessKeysTestData[ i ];
                        $input = $( makeInput( oldTitle ) );
                        $( '#qunit-fixture' ).append( $input );
                        newTitle = $input.updateTooltipAccessKeys().prop( 'title' );
@@ -70,7 +70,7 @@
                $.fn.updateTooltipAccessKeys.setTestMode( true );
                var i, oldTitle, $input, newTitle;
                for ( i = 0; i < updateTooltipAccessKeysTestData.length; i++ ) {
-                       oldTitle = 'Title' + updateTooltipAccessKeysTestData[i];
+                       oldTitle = 'Title' + updateTooltipAccessKeysTestData[ i ];
                        $input = $( makeInput( oldTitle, 'a' ) );
                        $( '#qunit-fixture' ).append( $input );
                        newTitle = $input.updateTooltipAccessKeys().prop( 'title' );
index e8c5121..a1b2e5c 100644 (file)
@@ -11,7 +11,7 @@
 
        function findDivergenceIndex( a, b ) {
                var i = 0;
-               while ( i < a.length && i < b.length && a[i] === b[i] ) {
+               while ( i < a.length && i < b.length && a[ i ] === b[ i ] ) {
                        i++;
                }
                return i;
@@ -41,7 +41,7 @@
                // Add two characters using scary black magic
                spanText = $span.text();
                d = findDivergenceIndex( origText, spanText );
-               spanTextNew = spanText.slice( 0, d ) + origText[d] + origText[d] + '...';
+               spanTextNew = spanText.slice( 0, d ) + origText[ d ] + origText[ d ] + '...';
 
                assert.gt( spanTextNew.length, spanText.length, 'Verify that the new span-length is indeed greater' );
 
index c8e8ac7..9afd793 100644 (file)
@@ -10,7 +10,7 @@
 
                $canvas.animate( { backgroundColor: '#000' }, 10 ).promise().then( function () {
                        var endColors = $.colorUtil.getRGB( $canvas.css( 'background-color' ) );
-                       assert.deepEqual( endColors, [0, 0, 0], 'end state' );
+                       assert.deepEqual( endColors, [ 0, 0, 0 ], 'end state' );
                } );
 
                this.clock.tick( 20 );
index 39ae363..00de895 100644 (file)
@@ -4,25 +4,25 @@
        QUnit.test( 'getRGB', 18, function ( assert ) {
                assert.strictEqual( $.colorUtil.getRGB(), undefined, 'No arguments' );
                assert.strictEqual( $.colorUtil.getRGB( '' ), undefined, 'Empty string' );
-               assert.deepEqual( $.colorUtil.getRGB( [0, 100, 255] ), [0, 100, 255], 'Parse array of rgb values' );
-               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0,100,255)' ), [0, 100, 255], 'Parse simple rgb string' );
-               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0, 100, 255)' ), [0, 100, 255], 'Parse simple rgb string with spaces' );
-               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%,20%,40%)' ), [0, 51, 102], 'Parse rgb string with percentages' );
-               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%, 20%, 40%)' ), [0, 51, 102], 'Parse rgb string with percentages and spaces' );
-               assert.deepEqual( $.colorUtil.getRGB( '#f2ddee' ), [242, 221, 238], 'Hex string: 6 char lowercase' );
-               assert.deepEqual( $.colorUtil.getRGB( '#f2DDEE' ), [242, 221, 238], 'Hex string: 6 char uppercase' );
-               assert.deepEqual( $.colorUtil.getRGB( '#f2DdEe' ), [242, 221, 238], 'Hex string: 6 char mixed' );
-               assert.deepEqual( $.colorUtil.getRGB( '#eee' ), [238, 238, 238], 'Hex string: 3 char lowercase' );
-               assert.deepEqual( $.colorUtil.getRGB( '#EEE' ), [238, 238, 238], 'Hex string: 3 char uppercase' );
-               assert.deepEqual( $.colorUtil.getRGB( '#eEe' ), [238, 238, 238], 'Hex string: 3 char mixed' );
-               assert.deepEqual( $.colorUtil.getRGB( 'rgba(0, 0, 0, 0)' ), [255, 255, 255], 'Zero rgba for Safari 3; Transparent (whitespace)' );
+               assert.deepEqual( $.colorUtil.getRGB( [ 0, 100, 255 ] ), [ 0, 100, 255 ], 'Parse array of rgb values' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0,100,255)' ), [ 0, 100, 255 ], 'Parse simple rgb string' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0, 100, 255)' ), [ 0, 100, 255 ], 'Parse simple rgb string with spaces' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%,20%,40%)' ), [ 0, 51, 102 ], 'Parse rgb string with percentages' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%, 20%, 40%)' ), [ 0, 51, 102 ], 'Parse rgb string with percentages and spaces' );
+               assert.deepEqual( $.colorUtil.getRGB( '#f2ddee' ), [ 242, 221, 238 ], 'Hex string: 6 char lowercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#f2DDEE' ), [ 242, 221, 238 ], 'Hex string: 6 char uppercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#f2DdEe' ), [ 242, 221, 238 ], 'Hex string: 6 char mixed' );
+               assert.deepEqual( $.colorUtil.getRGB( '#eee' ), [ 238, 238, 238 ], 'Hex string: 3 char lowercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#EEE' ), [ 238, 238, 238 ], 'Hex string: 3 char uppercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#eEe' ), [ 238, 238, 238 ], 'Hex string: 3 char mixed' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgba(0, 0, 0, 0)' ), [ 255, 255, 255 ], 'Zero rgba for Safari 3; Transparent (whitespace)' );
 
                // Perhaps this is a bug in colorUtil, but it is the current behavior so, let's keep
                // track of it, so we will know in case it would ever change.
                assert.strictEqual( $.colorUtil.getRGB( 'rgba(0,0,0,0)' ), undefined, 'Zero rgba without whitespace' );
 
-               assert.deepEqual( $.colorUtil.getRGB( 'lightGreen' ), [144, 238, 144], 'Color names (lightGreen)' );
-               assert.deepEqual( $.colorUtil.getRGB( 'transparent' ), [255, 255, 255], 'Color names (transparent)' );
+               assert.deepEqual( $.colorUtil.getRGB( 'lightGreen' ), [ 144, 238, 144 ], 'Color names (lightGreen)' );
+               assert.deepEqual( $.colorUtil.getRGB( 'transparent' ), [ 255, 255, 255 ], 'Color names (transparent)' );
                assert.strictEqual( $.colorUtil.getRGB( 'mediaWiki' ), undefined, 'Inexisting color name' );
        } );
 
@@ -37,9 +37,9 @@
 
                // Re-create the rgbToHsl return array items, limited to two decimals.
                hsl = $.colorUtil.rgbToHsl( 144, 238, 144 );
-               ret = [ dualDecimals( hsl[0] ), dualDecimals( hsl[1] ), dualDecimals( hsl[2] ) ];
+               ret = [ dualDecimals( hsl[ 0 ] ), dualDecimals( hsl[ 1 ] ), dualDecimals( hsl[ 2 ] ) ];
 
-               assert.deepEqual( ret, [0.33, 0.73, 0.75], 'rgb(144, 238, 144): hsl(0.33, 0.73, 0.75)' );
+               assert.deepEqual( ret, [ 0.33, 0.73, 0.75 ], 'rgb(144, 238, 144): hsl(0.33, 0.73, 0.75)' );
        } );
 
        QUnit.test( 'hslToRgb', 1, function ( assert ) {
@@ -47,9 +47,9 @@
                rgb = $.colorUtil.hslToRgb( 0.3, 0.7, 0.8 );
 
                // Re-create the hslToRgb return array items, rounded to whole numbers.
-               ret = [ Math.round( rgb[0] ), Math.round( rgb[1] ), Math.round( rgb[2] ) ];
+               ret = [ Math.round( rgb[ 0 ] ), Math.round( rgb[ 1 ] ), Math.round( rgb[ 2 ] ) ];
 
-               assert.deepEqual( ret, [183, 240, 168], 'hsl(0.3, 0.7, 0.8): rgb(183, 240, 168)' );
+               assert.deepEqual( ret, [ 183, 240, 168 ], 'hsl(0.3, 0.7, 0.8): rgb(183, 240, 168)' );
        } );
 
        QUnit.test( 'getColorBrightness', 2, function ( assert ) {
index 906369e..8c62876 100644 (file)
@@ -6,6 +6,22 @@
                assert.equal( typeof devicePixelRatio, 'number', '$.devicePixelRatio() returns a number' );
        } );
 
+       QUnit.test( 'bracketedDevicePixelRatio', 1, function ( assert ) {
+               var devicePixelRatio = $.devicePixelRatio();
+               assert.equal( typeof devicePixelRatio, 'number', '$.bracketedDevicePixelRatio() returns a number' );
+       } );
+
+       QUnit.test( 'bracketDevicePixelRatio', 8, function ( assert ) {
+               assert.equal( $.bracketDevicePixelRatio( 0.75 ), 1, '0.75 gives 1' );
+               assert.equal( $.bracketDevicePixelRatio( 1 ), 1, '1 gives 1' );
+               assert.equal( $.bracketDevicePixelRatio( 1.25 ), 1.5, '1.25 gives 1.5' );
+               assert.equal( $.bracketDevicePixelRatio( 1.5 ), 1.5, '1.5 gives 1.5' );
+               assert.equal( $.bracketDevicePixelRatio( 1.75 ), 2, '1.75 gives 2' );
+               assert.equal( $.bracketDevicePixelRatio( 2 ), 2, '2 gives 2' );
+               assert.equal( $.bracketDevicePixelRatio( 2.5 ), 2, '2.5 gives 2' );
+               assert.equal( $.bracketDevicePixelRatio( 3 ), 2, '3 gives 2' );
+       } );
+
        QUnit.test( 'matchSrcSet', 6, function ( assert ) {
                var srcset = 'onefive.png 1.5x, two.png 2x';
 
index 3ef2790..c503fc9 100644 (file)
@@ -76,8 +76,8 @@
                html = '<div><span title-msg="title"><html:msg key="label" /></span></div>';
                $lc = $( html ).localize( {
                        keys: {
-                               'title': 'foo-' + x + '-title',
-                               'label': 'foo-' + x + '-label'
+                               title: 'foo-' + x + '-title',
+                               label: 'foo-' + x + '-label'
                        }
                } ).find( 'span' );
 
@@ -88,7 +88,7 @@
                html = '<div><span><html:msg key="foo-welcome" /></span></div>';
                $lc = $( html ).localize( {
                        params: {
-                               'foo-welcome': [sitename, 'yesterday']
+                               'foo-welcome': [ sitename, 'yesterday' ]
                        }
                } ).find( 'span' );
 
                $lc = $( html ).localize( {
                        prefix: 'foo-',
                        keys: {
-                               'title': x + '-title',
-                               'label': x + '-label'
+                               title: x + '-title',
+                               label: x + '-label'
                        },
                        params: {
-                               'title': [sitename, '3 minutes ago'],
-                               'label': [sitename, '3 minutes ago']
+                               title: [ sitename, '3 minutes ago' ],
+                               label: [ sitename, '3 minutes ago' ]
 
                        }
                } ).find( 'span' );
index 911e9d0..029edd5 100644 (file)
@@ -8,7 +8,7 @@
                teardown: function () {
                        this.restoreWarnings();
                }
-       }) );
+       } ) );
 
        QUnit.test( 'String functions', 7, function ( assert ) {
                assert.equal( $.trimLeft( '  foo bar  ' ), 'foo bar  ', 'trimLeft' );
@@ -52,9 +52,9 @@
        } );
 
        QUnit.test( 'Comparison functions', 5, function ( assert ) {
-               assert.ok( $.compareArray( [0, 'a', [], [2, 'b'] ], [0, 'a', [], [2, 'b'] ] ),
+               assert.ok( $.compareArray( [ 0, 'a', [], [ 2, 'b' ] ], [ 0, 'a', [], [ 2, 'b' ] ] ),
                        'compareArray: Two deep arrays that are excactly the same' );
-               assert.ok( !$.compareArray( [1], [2] ), 'compareArray: Two different arrays (false)' );
+               assert.ok( !$.compareArray( [ 1 ], [ 2 ] ), 'compareArray: Two different arrays (false)' );
 
                assert.ok( $.compareObject( {}, {} ), 'compareObject: Two empty objects' );
                assert.ok( $.compareObject( { foo: 1 }, { foo: 1 } ), 'compareObject: Two the same objects' );
index 78c185f..5d0ddeb 100644 (file)
@@ -1,13 +1,13 @@
-( function ($) {
+( function ( $ ) {
 
-       QUnit.module('jquery.placeholder', QUnit.newMwEnvironment());
+       QUnit.module( 'jquery.placeholder', QUnit.newMwEnvironment() );
 
-       QUnit.test('caches results of feature tests', 2, function (assert) {
-               assert.strictEqual( typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input');
-               assert.strictEqual( typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea');
-       });
+       QUnit.test( 'caches results of feature tests', 2, function ( assert ) {
+               assert.strictEqual( typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input' );
+               assert.strictEqual( typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea' );
+       } );
 
-       if ($.fn.placeholder.input && $.fn.placeholder.textarea) {
+       if ( $.fn.placeholder.input && $.fn.placeholder.textarea ) {
                return;
        }
 
                        '<input id="input-type-password" type="password" placeholder="e.g. hunter2">' +
                        '<textarea id="textarea" name="message" placeholder="Your message goes here"></textarea>' +
                '</form>',
-       testElement = function ($el, assert) {
+       testElement = function ( $el, assert ) {
 
-               var el = $el[0],
-                       placeholder = el.getAttribute('placeholder');
+               var el = $el[ 0 ],
+                       placeholder = el.getAttribute( 'placeholder' );
 
-               assert.strictEqual($el.placeholder(), $el, 'should be chainable');
+               assert.strictEqual( $el.placeholder(), $el, 'should be chainable' );
 
-               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+               assert.strictEqual( el.value, placeholder, 'should set `placeholder` text as `value`' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( $el.hasClass( 'placeholder' ), 'should have `placeholder` class' );
 
                // test on focus
                $el.focus();
-               assert.strictEqual(el.value, '', '`value` should be the empty string on focus');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok(!$el.hasClass('placeholder'), 'should not have `placeholder` class on focus');
+               assert.strictEqual( el.value, '', '`value` should be the empty string on focus' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( !$el.hasClass( 'placeholder' ), 'should not have `placeholder` class on focus' );
 
                // and unfocus (blur) again
                $el.blur();
 
-               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+               assert.strictEqual( el.value, placeholder, 'should set `placeholder` text as `value`' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( $el.hasClass( 'placeholder' ), 'should have `placeholder` class' );
 
                // change the value
-               $el.val('lorem ipsum');
-               assert.strictEqual($el.prop('value'), 'lorem ipsum', '`$el.val(string)` should change the `value` property');
-               assert.strictEqual(el.value, 'lorem ipsum', '`$el.val(string)` should change the `value` attribute');
-               assert.ok(!$el.hasClass('placeholder'), '`$el.val(string)` should remove `placeholder` class');
+               $el.val( 'lorem ipsum' );
+               assert.strictEqual( $el.prop( 'value' ), 'lorem ipsum', '`$el.val(string)` should change the `value` property' );
+               assert.strictEqual( el.value, 'lorem ipsum', '`$el.val(string)` should change the `value` attribute' );
+               assert.ok( !$el.hasClass( 'placeholder' ), '`$el.val(string)` should remove `placeholder` class' );
 
                // and clear it again
-               $el.val('');
-               assert.strictEqual($el.prop('value'), '', '`$el.val("")` should change the `value` property');
-               assert.strictEqual(el.value, placeholder, '`$el.val("")` should change the `value` attribute');
-               assert.ok($el.hasClass('placeholder'), '`$el.val("")` should re-enable `placeholder` class');
+               $el.val( '' );
+               assert.strictEqual( $el.prop( 'value' ), '', '`$el.val("")` should change the `value` property' );
+               assert.strictEqual( el.value, placeholder, '`$el.val("")` should change the `value` attribute' );
+               assert.ok( $el.hasClass( 'placeholder' ), '`$el.val("")` should re-enable `placeholder` class' );
 
                // make sure the placeholder property works as expected.
-               assert.strictEqual($el.prop('placeholder'), placeholder, '$el.prop(`placeholder`) should return the placeholder value');
-               $el.placeholder('new placeholder');
-               assert.strictEqual(el.getAttribute('placeholder'), 'new placeholder', '$el.placeholder(<string>) should set the placeholder value');
-               assert.strictEqual(el.value, 'new placeholder', '$el.placeholder(<string>) should update the displayed placeholder value');
-               $el.placeholder(placeholder);
+               assert.strictEqual( $el.prop( 'placeholder' ), placeholder, '$el.prop(`placeholder`) should return the placeholder value' );
+               $el.placeholder( 'new placeholder' );
+               assert.strictEqual( el.getAttribute( 'placeholder' ), 'new placeholder', '$el.placeholder(<string>) should set the placeholder value' );
+               assert.strictEqual( el.value, 'new placeholder', '$el.placeholder(<string>) should update the displayed placeholder value' );
+               $el.placeholder( placeholder );
        };
 
-       QUnit.test('emulates placeholder for <input type=text>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#input-type-text'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <input type=text>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#input-type-text' ), assert );
+       } );
 
-       QUnit.test('emulates placeholder for <input type=search>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#input-type-search'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <input type=search>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#input-type-search' ), assert );
+       } );
 
-       QUnit.test('emulates placeholder for <input type=email>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#input-type-email'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <input type=email>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#input-type-email' ), assert );
+       } );
 
-       QUnit.test('emulates placeholder for <input type=url>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#input-type-url'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <input type=url>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#input-type-url' ), assert );
+       } );
 
-       QUnit.test('emulates placeholder for <input type=tel>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#input-type-tel'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <input type=tel>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#input-type-tel' ), assert );
+       } );
 
-       QUnit.test('emulates placeholder for <input type=password>', 13, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
+       QUnit.test( 'emulates placeholder for <input type=password>', 13, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
 
                var selector = '#input-type-password',
-                       $el = $(selector),
-                       el = $el[0],
-                       placeholder = el.getAttribute('placeholder');
+                       $el = $( selector ),
+                       el = $el[ 0 ],
+                       placeholder = el.getAttribute( 'placeholder' );
 
-               assert.strictEqual($el.placeholder(), $el, 'should be chainable');
+               assert.strictEqual( $el.placeholder(), $el, 'should be chainable' );
 
                // Re-select the element, as it gets replaced by another one in some browsers
-               $el = $(selector);
-               el = $el[0];
+               $el = $( selector );
+               el = $el[ 0 ];
 
-               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+               assert.strictEqual( el.value, placeholder, 'should set `placeholder` text as `value`' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( $el.hasClass( 'placeholder' ), 'should have `placeholder` class' );
 
                // test on focus
                $el.focus();
 
                // Re-select the element, as it gets replaced by another one in some browsers
-               $el = $(selector);
-               el = $el[0];
+               $el = $( selector );
+               el = $el[ 0 ];
 
-               assert.strictEqual(el.value, '', '`value` should be the empty string on focus');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok(!$el.hasClass('placeholder'), 'should not have `placeholder` class on focus');
+               assert.strictEqual( el.value, '', '`value` should be the empty string on focus' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( !$el.hasClass( 'placeholder' ), 'should not have `placeholder` class on focus' );
 
                // and unfocus (blur) again
                $el.blur();
 
                // Re-select the element, as it gets replaced by another one in some browsers
-               $el = $(selector);
-               el = $el[0];
+               $el = $( selector );
+               el = $el[ 0 ];
 
-               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+               assert.strictEqual( el.value, placeholder, 'should set `placeholder` text as `value`' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( $el.hasClass( 'placeholder' ), 'should have `placeholder` class' );
 
-       });
+       } );
 
-       QUnit.test('emulates placeholder for <textarea></textarea>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#textarea'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <textarea></textarea>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#textarea' ), assert );
+       } );
 
-}(jQuery));
+}( jQuery ) );
index 00d4a08..032551d 100644 (file)
                setup: function () {
                        this.liveMonths = mw.language.months;
                        mw.language.months = {
-                               'keys': {
-                                       'names': ['january', 'february', 'march', 'april', 'may_long', 'june',
-                                               'july', 'august', 'september', 'october', 'november', 'december'],
-                                       'genitive': ['january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
-                                               'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen'],
-                                       'abbrev': ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
-                                               'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
+                               keys: {
+                                       names: [ 'january', 'february', 'march', 'april', 'may_long', 'june',
+                                               'july', 'august', 'september', 'october', 'november', 'december' ],
+                                       genitive: [ 'january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
+                                               'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen' ],
+                                       abbrev: [ 'jan', 'feb', 'mar', 'apr', 'may', 'jun',
+                                               'jul', 'aug', 'sep', 'oct', 'nov', 'dec' ]
                                },
-                               'names': ['January', 'February', 'March', 'April', 'May', 'June',
-                                               'July', 'August', 'September', 'October', 'November', 'December'],
-                               'genitive': ['January', 'February', 'March', 'April', 'May', 'June',
-                                               'July', 'August', 'September', 'October', 'November', 'December'],
-                               'abbrev': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
-                                               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+                               names: [ 'January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December' ],
+                               genitive: [ 'January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December' ],
+                               abbrev: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+                                               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
                        };
                },
                teardown: function () {
@@ -36,8 +36,8 @@
                        /* default date format of the content language */
                        wgDefaultDateFormat: 'dmy',
                        /* These two are important for numeric interpretations */
-                       wgSeparatorTransformTable: ['', ''],
-                       wgDigitTransformTable: ['', '']
+                       wgSeparatorTransformTable: [ '', '' ],
+                       wgDigitTransformTable: [ '', '' ]
                }
        } ) );
 
                QUnit.test( msg, data.length * 2, function ( assert ) {
                        var extractedR, extractedF, parser;
 
-                       if (callback !== undefined ) {
+                       if ( callback !== undefined ) {
                                callback();
                        }
 
                        parser = $.tablesorter.getParser( parserId );
                        $.each( data, function ( index, testcase ) {
-                               extractedR = parser.is( testcase[0] );
-                               extractedF = parser.format( testcase[0] );
+                               extractedR = parser.is( testcase[ 0 ] );
+                               extractedF = parser.format( testcase[ 0 ] );
 
-                               assert.strictEqual( extractedR, testcase[1], 'Detect: ' + testcase[3] );
-                               assert.strictEqual( extractedF, testcase[2], 'Sortkey: ' + testcase[3] );
+                               assert.strictEqual( extractedR, testcase[ 1 ], 'Detect: ' + testcase[ 3 ] );
+                               assert.strictEqual( extractedF, testcase[ 2 ], 'Sortkey: ' + testcase[ 3 ] );
                        } );
 
                } );
 
        ipv4 = [
                // Some randomly generated fake IPs
-               ['0.0.0.0', true, 0, 'An IP address' ],
-               ['255.255.255.255', true, 255255255255, 'An IP address' ],
-               ['45.238.27.109', true, 45238027109, 'An IP address' ],
-               ['1.238.27.1', true, 1238027001, 'An IP address with small numbers' ],
-               ['238.27.1', false, 238027001, 'A malformed IP Address' ],
-               ['1', false, 1, 'A super malformed IP Address' ],
-               ['Just text', false, 0, 'A line with just text' ],
-               ['45.238.27.109Postfix', false, 45238027109, 'An IP address with a connected postfix' ],
-               ['45.238.27.109 postfix', false, 45238027109, 'An IP address with a seperated postfix' ]
+               [ '0.0.0.0', true, 0, 'An IP address' ],
+               [ '255.255.255.255', true, 255255255255, 'An IP address' ],
+               [ '45.238.27.109', true, 45238027109, 'An IP address' ],
+               [ '1.238.27.1', true, 1238027001, 'An IP address with small numbers' ],
+               [ '238.27.1', false, 238027001, 'A malformed IP Address' ],
+               [ '1', false, 1, 'A super malformed IP Address' ],
+               [ 'Just text', false, 0, 'A line with just text' ],
+               [ '45.238.27.109Postfix', false, 45238027109, 'An IP address with a connected postfix' ],
+               [ '45.238.27.109 postfix', false, 45238027109, 'An IP address with a seperated postfix' ]
        ];
        parserTest( 'IPv4', 'IPAddress', ipv4 );
 
        simpleMDYDatesInMDY = [
-               ['January 17, 2010',    true, 20100117, 'Long middle endian date'],
-               ['Jan 17, 2010',        true, 20100117, 'Short middle endian date'],
-               ['1/17/2010',           true, 20100117, 'Numeric middle endian date'],
-               ['01/17/2010',          true, 20100117, 'Numeric middle endian date with padding on month'],
-               ['01/07/2010',          true, 20100107, 'Numeric middle endian date with padding on day'],
-               ['01/07/0010',          true, 20100107, 'Numeric middle endian date with padding on year'],
-               ['5.12.1990',           true, 19900512, 'Numeric middle endian date with . separator']
+               [ 'January 17, 2010',   true, 20100117, 'Long middle endian date' ],
+               [ 'Jan 17, 2010',       true, 20100117, 'Short middle endian date' ],
+               [ '1/17/2010',          true, 20100117, 'Numeric middle endian date' ],
+               [ '01/17/2010',         true, 20100117, 'Numeric middle endian date with padding on month' ],
+               [ '01/07/2010',         true, 20100107, 'Numeric middle endian date with padding on day' ],
+               [ '01/07/0010',         true, 20100107, 'Numeric middle endian date with padding on year' ],
+               [ '5.12.1990',          true, 19900512, 'Numeric middle endian date with . separator' ]
        ];
        parserTest( 'MDY Dates using mdy content language', 'date', simpleMDYDatesInMDY );
 
        simpleMDYDatesInDMY = [
-               ['January 17, 2010',    true, 20100117, 'Long middle endian date'],
-               ['Jan 17, 2010',        true, 20100117, 'Short middle endian date'],
-               ['1/17/2010',           true, 20101701, 'Numeric middle endian date'],
-               ['01/17/2010',          true, 20101701, 'Numeric middle endian date with padding on month'],
-               ['01/07/2010',          true, 20100701, 'Numeric middle endian date with padding on day'],
-               ['01/07/0010',          true, 20100701, 'Numeric middle endian date with padding on year'],
-               ['5.12.1990',           true, 19901205, 'Numeric middle endian date with . separator']
+               [ 'January 17, 2010',   true, 20100117, 'Long middle endian date' ],
+               [ 'Jan 17, 2010',       true, 20100117, 'Short middle endian date' ],
+               [ '1/17/2010',          true, 20101701, 'Numeric middle endian date' ],
+               [ '01/17/2010',         true, 20101701, 'Numeric middle endian date with padding on month' ],
+               [ '01/07/2010',         true, 20100701, 'Numeric middle endian date with padding on day' ],
+               [ '01/07/0010',         true, 20100701, 'Numeric middle endian date with padding on year' ],
+               [ '5.12.1990',          true, 19901205, 'Numeric middle endian date with . separator' ]
        ];
        parserTest( 'MDY Dates using dmy content language', 'date', simpleMDYDatesInDMY, function () {
                mw.config.set( {
-                       'wgDefaultDateFormat': 'dmy',
-                       'wgPageContentLanguage': 'de'
+                       wgDefaultDateFormat: 'dmy',
+                       wgPageContentLanguage: 'de'
                } );
        } );
 
        oldMDYDates = [
-               ['January 19, 1400 BC',         false, '99999999', 'BC'],
-               ['January 19, 1400BC',          false, '99999999', 'Connected BC'],
-               ['January, 19 1400 B.C.',       false, '99999999', 'B.C.'],
-               ['January 19, 1400 AD',         false, '99999999', 'AD'],
-               ['January, 19 10',                      true, 20100119, 'AD'],
-               ['January, 19 1',                       false, '99999999', 'AD']
+               [ 'January 19, 1400 BC',                false, '99999999', 'BC' ],
+               [ 'January 19, 1400BC',         false, '99999999', 'Connected BC' ],
+               [ 'January, 19 1400 B.C.',      false, '99999999', 'B.C.' ],
+               [ 'January 19, 1400 AD',                false, '99999999', 'AD' ],
+               [ 'January, 19 10',                     true, 20100119, 'AD' ],
+               [ 'January, 19 1',                      false, '99999999', 'AD' ]
        ];
        parserTest( 'Very old MDY dates', 'date', oldMDYDates );
 
        complexMDYDates = [
-               ['January, 19 2010',    true, 20100119, 'Comma after month'],
-               ['January 19, 2010',    true, 20100119, 'Comma after day'],
-               ['January/19/2010',             true, 20100119, 'Forward slash separator'],
-               ['04 22 1991',                  true, 19910422, 'Month with 0 padding'],
-               ['April 21 1991',               true, 19910421, 'Space separation'],
-               ['04 22 1991',                  true, 19910422, 'Month with 0 padding'],
-               ['December 12 \'10',    true, 20101212, ''],
-               ['Dec 12 \'10',                 true, 20101212, ''],
-               ['Dec. 12 \'10',                true, 20101212, '']
+               [ 'January, 19 2010',   true, 20100119, 'Comma after month' ],
+               [ 'January 19, 2010',   true, 20100119, 'Comma after day' ],
+               [ 'January/19/2010',            true, 20100119, 'Forward slash separator' ],
+               [ '04 22 1991',                 true, 19910422, 'Month with 0 padding' ],
+               [ 'April 21 1991',              true, 19910421, 'Space separation' ],
+               [ '04 22 1991',                 true, 19910422, 'Month with 0 padding' ],
+               [ 'December 12 \'10',   true, 20101212, '' ],
+               [ 'Dec 12 \'10',                        true, 20101212, '' ],
+               [ 'Dec. 12 \'10',               true, 20101212, '' ]
        ];
        parserTest( 'MDY Dates', 'date', complexMDYDates );
 
        clobberedDates = [
-               ['January, 19 2010 - January, 20 2010', false, '99999999', 'Date range with hyphen'],
-               ['January, 19 2010 — January, 20 2010',       false, '99999999', 'Date range with mdash'],
-               ['prefixJanuary, 19 2010',      false, '99999999', 'Connected prefix'],
-               ['prefix January, 19 2010',     false, '99999999', 'Prefix'],
-               ['December 12 2010postfix',     false, '99999999', 'ConnectedPostfix'],
-               ['December 12 2010 postfix',    false, '99999999', 'Postfix'],
-               ['A simple text',               false, '99999999', 'Plain text in date sort'],
-               ['04l22l1991',                  false, '99999999', 'l char as separator'],
-               ['January\\19\\2010',   false, '99999999', 'backslash as date separator']
+               [ 'January, 19 2010 - January, 20 2010',        false, '99999999', 'Date range with hyphen' ],
+               [ 'January, 19 2010 — January, 20 2010',      false, '99999999', 'Date range with mdash' ],
+               [ 'prefixJanuary, 19 2010',     false, '99999999', 'Connected prefix' ],
+               [ 'prefix January, 19 2010',    false, '99999999', 'Prefix' ],
+               [ 'December 12 2010postfix',    false, '99999999', 'ConnectedPostfix' ],
+               [ 'December 12 2010 postfix',   false, '99999999', 'Postfix' ],
+               [ 'A simple text',              false, '99999999', 'Plain text in date sort' ],
+               [ '04l22l1991',                 false, '99999999', 'l char as separator' ],
+               [ 'January\\19\\2010',  false, '99999999', 'backslash as date separator' ]
        ];
        parserTest( 'Clobbered Dates', 'date', clobberedDates );
 
        MYDates = [
-               ['December 2010',       false, '99999999', 'Plain month year'],
-               ['Dec 2010',            false, '99999999', 'Abreviated month year'],
-               ['12 2010',                     false, '99999999', 'Numeric month year']
+               [ 'December 2010',      false, '99999999', 'Plain month year' ],
+               [ 'Dec 2010',           false, '99999999', 'Abreviated month year' ],
+               [ '12 2010',                    false, '99999999', 'Numeric month year' ]
        ];
        parserTest( 'MY Dates', 'date', MYDates );
 
        YDates = [
-               ['2010',        false, '99999999', 'Plain 4-digit year'],
-               ['876',         false, '99999999', '3-digit year'],
-               ['76',          false, '99999999', '2-digit year'],
-               ['\'76',        false, '99999999', '2-digit millenium bug year'],
-               ['2010 BC',     false, '99999999', '4-digit year BC']
+               [ '2010',       false, '99999999', 'Plain 4-digit year' ],
+               [ '876',                false, '99999999', '3-digit year' ],
+               [ '76',         false, '99999999', '2-digit year' ],
+               [ '\'76',       false, '99999999', '2-digit millenium bug year' ],
+               [ '2010 BC',    false, '99999999', '4-digit year BC' ]
        ];
        parserTest( 'Y Dates', 'date', YDates );
 
        currencyData = [
-               ['1.02 $',      true, 1.02, ''],
-               ['$ 3.00',      true, 3, ''],
-               ['€ 2,99',    true, 299, ''],
-               ['$ 1.00',      true, 1, ''],
-               ['$3.50',       true, 3.50, ''],
-               ['$ 1.50',      true, 1.50, ''],
-               ['€ 0.99',    true, 0.99, ''],
-               ['$ 299.99',    true, 299.99, ''],
-               ['$ 2,299.99',  true, 2299.99, ''],
-               ['$ 2,989',     true, 2989, ''],
-               ['$ 2 299.99',  true, 2299.99, ''],
-               ['$ 2 989',     true, 2989, ''],
-               ['$ 2.989',     true, 2.989, '']
+               [ '1.02 $',     true, 1.02, '' ],
+               [ '$ 3.00',     true, 3, '' ],
+               [ '€ 2,99',   true, 299, '' ],
+               [ '$ 1.00',     true, 1, '' ],
+               [ '$3.50',      true, 3.50, '' ],
+               [ '$ 1.50',     true, 1.50, '' ],
+               [ '€ 0.99',   true, 0.99, '' ],
+               [ '$ 299.99',   true, 299.99, '' ],
+               [ '$ 2,299.99', true, 2299.99, '' ],
+               [ '$ 2,989',    true, 2989, '' ],
+               [ '$ 2 299.99', true, 2299.99, '' ],
+               [ '$ 2 989',    true, 2989, '' ],
+               [ '$ 2.989',    true, 2.989, '' ]
        ];
        parserTest( 'Currency', 'currency', currencyData );
 
        transformedCurrencyData = [
-               ['1.02 $',      true, 102, ''],
-               ['$ 3.00',      true, 300, ''],
-               ['€ 2,99',    true, 2.99, ''],
-               ['$ 1.00',      true, 100, ''],
-               ['$3.50',       true, 350, ''],
-               ['$ 1.50',      true, 150, ''],
-               ['€ 0.99',    true, 99, ''],
-               ['$ 299.99',    true, 29999, ''],
-               ['$ 2\'299,99', true, 2299.99, ''],
-               ['$ 2,989',     true, 2.989, ''],
-               ['$ 2 299.99',  true, 229999, ''],
-               ['2 989 $',     true, 2989, ''],
-               ['299.99 $',    true, 29999, ''],
-               ['2\'299,99 $', true, 2299.99, ''],
-               ['2,989 $',     true, 2.989, ''],
-               ['2 299.99 $',  true, 229999, ''],
-               ['2 989 $',     true, 2989, '']
+               [ '1.02 $',     true, 102, '' ],
+               [ '$ 3.00',     true, 300, '' ],
+               [ '€ 2,99',   true, 2.99, '' ],
+               [ '$ 1.00',     true, 100, '' ],
+               [ '$3.50',      true, 350, '' ],
+               [ '$ 1.50',     true, 150, '' ],
+               [ '€ 0.99',   true, 99, '' ],
+               [ '$ 299.99',   true, 29999, '' ],
+               [ '$ 2\'299,99',        true, 2299.99, '' ],
+               [ '$ 2,989',    true, 2.989, '' ],
+               [ '$ 2 299.99', true, 229999, '' ],
+               [ '2 989 $',    true, 2989, '' ],
+               [ '299.99 $',   true, 29999, '' ],
+               [ '2\'299,99 $',        true, 2299.99, '' ],
+               [ '2,989 $',    true, 2.989, '' ],
+               [ '2 299.99 $', true, 229999, '' ],
+               [ '2 989 $',    true, 2989, '' ]
        ];
        parserTest( 'Currency with european separators', 'currency', transformedCurrencyData, function () {
                mw.config.set( {
                        // We expect 22'234.444,22
                        // Map from ascii separators => localized separators
-                       wgSeparatorTransformTable: [',  .       ,', '\' ,       .'],
-                       wgDigitTransformTable: ['', '']
+                       wgSeparatorTransformTable: [ ', .       ,', '\' ,       .' ],
+                       wgDigitTransformTable: [ '', '' ]
                } );
        } );
 
index acd98a6..d4d0ce1 100644 (file)
@@ -1,5 +1,19 @@
 ( function ( $, mw ) {
-       var header,
+       var header = [ 'Planet', 'Radius (km)' ],
+
+               // Data set "planets"
+               mercury = [ 'Mercury', '2439.7' ],
+               venus = [ 'Venus', '6051.8' ],
+               earth = [ 'Earth', '6371.0' ],
+               mars = [ 'Mars', '3390.0' ],
+               jupiter = [ 'Jupiter', '69911' ],
+               saturn = [ 'Saturn', '58232' ],
+               planets = [ mercury, venus, earth, mars, jupiter, saturn ],
+               planetsAscName = [ earth, jupiter, mars, mercury, saturn, venus ],
+               planetsAscRadius = [ mercury, mars, venus, earth, saturn, jupiter ],
+               planetsRowspan,
+               planetsRowspanII,
+               planetsAscNameLegacy,
 
                // Data set "simple"
                a1 = [ 'A', '1' ],
                b1 = [ 'B', '1' ],
                b2 = [ 'B', '2' ],
                b3 = [ 'B', '3' ],
-               simple = [a2, b3, a1, a3, b2, b1],
-               simpleAsc = [a1, a2, a3, b1, b2, b3],
-               simpleDescasc = [b1, b2, b3, a1, a2, a3],
+               simple = [ a2, b3, a1, a3, b2, b1 ],
+               simpleAsc = [ a1, a2, a3, b1, b2, b3 ],
+               simpleDescasc = [ b1, b2, b3, a1, a2, a3 ],
 
                // Data set "colspan"
+               header4 = [ 'column1a', 'column1b', 'column1c', 'column2' ],
                aaa1 = [ 'A', 'A', 'A', '1' ],
                aab5 = [ 'A', 'A', 'B', '5' ],
                abc3 = [ 'A', 'B', 'C', '3' ],
                caa4 = [ 'C', 'A', 'A', '4' ],
                colspanInitial = [ aab5, aaa1, abc3, bbc2, caa4 ],
 
-               // Data set "planets"
-               mercury = [ 'Mercury', '2439.7' ],
-               venus = [ 'Venus', '6051.8' ],
-               earth = [ 'Earth', '6371.0' ],
-               mars = [ 'Mars', '3390.0' ],
-               jupiter = [ 'Jupiter', '69911' ],
-               saturn = [ 'Saturn', '58232' ],
-               planets = [mercury, venus, earth, mars, jupiter, saturn],
-               planetsAscName = [earth, jupiter, mars, mercury, saturn, venus],
-               planetsAscRadius = [mercury, mars, venus, earth, saturn, jupiter],
-               planetsRowspan,
-               planetsRowspanII,
-               planetsAscNameLegacy,
-
                // Data set "ipv4"
                ipv4 = [
                        // Some randomly generated fake IPs
-                       ['45.238.27.109'],
-                       ['44.172.9.22'],
-                       ['247.240.82.209'],
-                       ['204.204.132.158'],
-                       ['170.38.91.162'],
-                       ['197.219.164.9'],
-                       ['45.68.154.72'],
-                       ['182.195.149.80']
+                       [ '45.238.27.109' ],
+                       [ '44.172.9.22' ],
+                       [ '247.240.82.209' ],
+                       [ '204.204.132.158' ],
+                       [ '170.38.91.162' ],
+                       [ '197.219.164.9' ],
+                       [ '45.68.154.72' ],
+                       [ '182.195.149.80' ]
                ],
                ipv4Sorted = [
                        // Sort order should go octet by octet
-                       ['44.172.9.22'],
-                       ['45.68.154.72'],
-                       ['45.238.27.109'],
-                       ['170.38.91.162'],
-                       ['182.195.149.80'],
-                       ['197.219.164.9'],
-                       ['204.204.132.158'],
-                       ['247.240.82.209']
+                       [ '44.172.9.22' ],
+                       [ '45.68.154.72' ],
+                       [ '45.238.27.109' ],
+                       [ '170.38.91.162' ],
+                       [ '182.195.149.80' ],
+                       [ '197.219.164.9' ],
+                       [ '204.204.132.158' ],
+                       [ '247.240.82.209' ]
                ],
 
                // Data set "umlaut"
                umlautWords = [
-                       ['Günther'],
-                       ['Peter'],
-                       ['Björn'],
-                       ['Bjorn'],
-                       ['Apfel'],
-                       ['Äpfel'],
-                       ['Strasse'],
-                       ['Sträßschen']
+                       [ 'Günther' ],
+                       [ 'Peter' ],
+                       [ 'Björn' ],
+                       [ 'Bjorn' ],
+                       [ 'Apfel' ],
+                       [ 'Äpfel' ],
+                       [ 'Strasse' ],
+                       [ 'Sträßschen' ]
                ],
                umlautWordsSorted = [
-                       ['Äpfel'],
-                       ['Apfel'],
-                       ['Björn'],
-                       ['Bjorn'],
-                       ['Günther'],
-                       ['Peter'],
-                       ['Sträßschen'],
-                       ['Strasse']
+                       [ 'Äpfel' ],
+                       [ 'Apfel' ],
+                       [ 'Björn' ],
+                       [ 'Bjorn' ],
+                       [ 'Günther' ],
+                       [ 'Peter' ],
+                       [ 'Sträßschen' ],
+                       [ 'Strasse' ]
                ],
 
                complexMDYDates = [
-                       ['January, 19 2010'],
-                       ['April 21 1991'],
-                       ['04 22 1991'],
-                       ['5.12.1990'],
-                       ['December 12 \'10']
+                       [ 'January, 19 2010' ],
+                       [ 'April 21 1991' ],
+                       [ '04 22 1991' ],
+                       [ '5.12.1990' ],
+                       [ 'December 12 \'10' ]
                ],
                complexMDYSorted = [
-                       ['5.12.1990'],
-                       ['April 21 1991'],
-                       ['04 22 1991'],
-                       ['January, 19 2010'],
-                       ['December 12 \'10']
+                       [ '5.12.1990' ],
+                       [ 'April 21 1991' ],
+                       [ '04 22 1991' ],
+                       [ 'January, 19 2010' ],
+                       [ 'December 12 \'10' ]
                ],
 
                currencyUnsorted = [
-                       ['1.02 $'],
-                       ['$ 3.00'],
-                       ['€ 2,99'],
-                       ['$ 1.00'],
-                       ['$3.50'],
-                       ['$ 1.50'],
-                       ['€ 0.99']
+                       [ '1.02 $' ],
+                       [ '$ 3.00' ],
+                       [ '€ 2,99' ],
+                       [ '$ 1.00' ],
+                       [ '$3.50' ],
+                       [ '$ 1.50' ],
+                       [ '€ 0.99' ]
                ],
                currencySorted = [
-                       ['€ 0.99'],
-                       ['$ 1.00'],
-                       ['1.02 $'],
-                       ['$ 1.50'],
-                       ['$ 3.00'],
-                       ['$3.50'],
+                       [ '€ 0.99' ],
+                       [ '$ 1.00' ],
+                       [ '1.02 $' ],
+                       [ '$ 1.50' ],
+                       [ '$ 3.00' ],
+                       [ '$3.50' ],
                        // Comma's sort after dots
                        // Not intentional but test to detect changes
-                       ['€ 2,99']
+                       [ '€ 2,99' ]
                ],
 
                numbers = [
-                       [ '12'    ],
-                       [  '7'    ],
-                       [ '13,000'],
-                       [  '9'    ],
-                       [ '14'    ],
-                       [  '8.0'  ]
+                       [ '12' ],
+                       [ '7' ],
+                       [ '13,000' ],
+                       [ '9' ],
+                       [ '14' ],
+                       [ '8.0' ]
                ],
                numbersAsc = [
-                       [  '7'    ],
-                       [  '8.0'  ],
-                       [  '9'    ],
-                       [ '12'    ],
-                       [ '14'    ],
-                       [ '13,000']
+                       [ '7' ],
+                       [ '8.0' ],
+                       [ '9' ],
+                       [ '12' ],
+                       [ '14' ],
+                       [ '13,000' ]
                ],
 
                correctDateSorting1 = [
-                       ['01 January 2010'],
-                       ['05 February 2010'],
-                       ['16 January 2010']
+                       [ '01 January 2010' ],
+                       [ '05 February 2010' ],
+                       [ '16 January 2010' ]
                ],
                correctDateSortingSorted1 = [
-                       ['01 January 2010'],
-                       ['16 January 2010'],
-                       ['05 February 2010']
+                       [ '01 January 2010' ],
+                       [ '16 January 2010' ],
+                       [ '05 February 2010' ]
                ],
 
                correctDateSorting2 = [
-                       ['January 01 2010'],
-                       ['February 05 2010'],
-                       ['January 16 2010']
+                       [ 'January 01 2010' ],
+                       [ 'February 05 2010' ],
+                       [ 'January 16 2010' ]
                ],
                correctDateSortingSorted2 = [
-                       ['January 01 2010'],
-                       ['January 16 2010'],
-                       ['February 05 2010']
+                       [ 'January 01 2010' ],
+                       [ 'January 16 2010' ],
+                       [ 'February 05 2010' ]
                ];
 
        QUnit.module( 'jquery.tablesorter', QUnit.newMwEnvironment( {
                setup: function () {
                        this.liveMonths = mw.language.months;
                        mw.language.months = {
-                               'keys': {
-                                       'names': ['january', 'february', 'march', 'april', 'may_long', 'june',
-                                               'july', 'august', 'september', 'october', 'november', 'december'],
-                                       'genitive': ['january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
-                                               'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen'],
-                                       'abbrev': ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
-                                               'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
+                               keys: {
+                                       names: [ 'january', 'february', 'march', 'april', 'may_long', 'june',
+                                               'july', 'august', 'september', 'october', 'november', 'december' ],
+                                       genitive: [ 'january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
+                                               'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen' ],
+                                       abbrev: [ 'jan', 'feb', 'mar', 'apr', 'may', 'jun',
+                                               'jul', 'aug', 'sep', 'oct', 'nov', 'dec' ]
                                },
-                               'names': ['January', 'February', 'March', 'April', 'May', 'June',
-                                               'July', 'August', 'September', 'October', 'November', 'December'],
-                               'genitive': ['January', 'February', 'March', 'April', 'May', 'June',
-                                               'July', 'August', 'September', 'October', 'November', 'December'],
-                               'abbrev': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
-                                               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+                               names: [ 'January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December' ],
+                               genitive: [ 'January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December' ],
+                               abbrev: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+                                               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
                        };
                },
                teardown: function () {
                },
                config: {
                        wgDefaultDateFormat: 'dmy',
-                       wgSeparatorTransformTable: ['', ''],
-                       wgDigitTransformTable: ['', ''],
+                       wgSeparatorTransformTable: [ '', '' ],
+                       wgDigitTransformTable: [ '', '' ],
                        wgPageContentLanguage: 'en'
                }
        } ) );
         *
         * @param {String[]} header
         * @param {String[][]} data
-        * @return jQuery
+        * @return {jQuery}
         */
        function tableCreate( header, data ) {
                var i,
                for ( i = 0; i < data.length; i++ ) {
                        /*jshint loopfunc: true */
                        $tr = $( '<tr>' );
-                       $.each( data[i], function ( j, str ) {
+                       $.each( data[ i ], function ( j, str ) {
                                var $td = $( '<td>' );
                                $td.text( str ).appendTo( $tr );
                        } );
         * Extract text from table.
         *
         * @param {jQuery} $table
-        * @return String[][]
+        * @return {String[][]}
         */
        function tableExtract( $table ) {
                var data = [];
        }
 
        // Sample data set using planets named and their radius
-       header = [ 'Planet', 'Radius (km)'];
 
        tableTest(
                'Basic planet table: sorting initially - ascending by name',
                        $table.find( '.headerSort:eq(1)' ).click().click();
                }
        );
-
-       header = [ 'column1', 'column2' ];
-
        tableTest(
                'Sorting multiple columns by passing sort list',
                header,
 
                        // Pretend to click while pressing the multi-sort key
                        var event = $.Event( 'click' );
-                       event[$table.data( 'tablesorter' ).config.sortMultiSortKey] = true;
+                       event[ $table.data( 'tablesorter' ).config.sortMultiSortKey ] = true;
                        $table.find( '.headerSort:eq(1)' ).trigger( event );
                }
        );
        } );
 
        // Sorting with colspans
-       header = [ 'column1a', 'column1b', 'column1c', 'column2' ];
 
        tableTest( 'Sorting with colspanned headers: spanned column',
-               header,
+               header4,
                colspanInitial,
                [ aaa1, aab5, abc3, bbc2, caa4 ],
                function ( $table ) {
                }
        );
        tableTest( 'Sorting with colspanned headers: sort spanned column twice',
-               header,
+               header4,
                colspanInitial,
                [ caa4, bbc2, abc3, aab5, aaa1 ],
                function ( $table ) {
                }
        );
        tableTest( 'Sorting with colspanned headers: subsequent column',
-               header,
+               header4,
                colspanInitial,
                [ aaa1, bbc2, abc3, caa4, aab5 ],
                function ( $table ) {
                }
        );
        tableTest( 'Sorting with colspanned headers: sort subsequent column twice',
-               header,
+               header4,
                colspanInitial,
                [ aab5, caa4, abc3, bbc2, aaa1 ],
                function ( $table ) {
                }
        );
 
-       tableTest(
-               'Basic planet table: one unsortable column',
-               header,
-               planets,
-               planets,
-               function ( $table ) {
-                       $table.find( 'tr:eq(0) > th:eq(0)' ).addClass( 'unsortable' );
+       QUnit.test( 'Basic planet table: one unsortable column', 3, function ( assert ) {
+               var $table = tableCreate( header, planets ),
+                       $cell;
+               $table.find( 'tr:eq(0) > th:eq(0)' ).addClass( 'unsortable' );
 
-                       $table.tablesorter();
-                       $table.find( 'tr:eq(0) > th:eq(0)' ).click();
-               }
-       );
+               $table.tablesorter();
+               $table.find( 'tr:eq(0) > th:eq(0)' ).click();
+
+               assert.deepEqual(
+                       tableExtract( $table ),
+                       planets,
+                       'table not sorted'
+               );
+
+               $cell = $table.find( 'tr:eq(0) > th:eq(0)' );
+               $table.find( 'tr:eq(0) > th:eq(1)' ).click();
+
+               assert.equal(
+                       $cell.hasClass( 'headerSortUp' ) || $cell.hasClass( 'headerSortDown' ),
+                       false,
+                       'after sort: no class headerSortUp or headerSortDown'
+               );
+
+               assert.equal(
+                       $cell.attr( 'title' ),
+                       undefined,
+                       'after sort: no title tag added'
+               );
+
+       } );
 
        // Regression tests!
        tableTest(
                'Bug 28775: German-style (dmy) short numeric dates',
-               ['Date'],
+               [ 'Date' ],
                [
                        // German-style dates are day-month-year
-                       ['11.11.2011'],
-                       ['01.11.2011'],
-                       ['02.10.2011'],
-                       ['03.08.2011'],
-                       ['09.11.2011']
+                       [ '11.11.2011' ],
+                       [ '01.11.2011' ],
+                       [ '02.10.2011' ],
+                       [ '03.08.2011' ],
+                       [ '09.11.2011' ]
                ],
                [
                        // Sorted by ascending date
-                       ['03.08.2011'],
-                       ['02.10.2011'],
-                       ['01.11.2011'],
-                       ['09.11.2011'],
-                       ['11.11.2011']
+                       [ '03.08.2011' ],
+                       [ '02.10.2011' ],
+                       [ '01.11.2011' ],
+                       [ '09.11.2011' ],
+                       [ '11.11.2011' ]
                ],
                function ( $table ) {
                        mw.config.set( 'wgDefaultDateFormat', 'dmy' );
 
        tableTest(
                'Bug 28775: American-style (mdy) short numeric dates',
-               ['Date'],
+               [ 'Date' ],
                [
                        // American-style dates are month-day-year
-                       ['11.11.2011'],
-                       ['01.11.2011'],
-                       ['02.10.2011'],
-                       ['03.08.2011'],
-                       ['09.11.2011']
+                       [ '11.11.2011' ],
+                       [ '01.11.2011' ],
+                       [ '02.10.2011' ],
+                       [ '03.08.2011' ],
+                       [ '09.11.2011' ]
                ],
                [
                        // Sorted by ascending date
-                       ['01.11.2011'],
-                       ['02.10.2011'],
-                       ['03.08.2011'],
-                       ['09.11.2011'],
-                       ['11.11.2011']
+                       [ '01.11.2011' ],
+                       [ '02.10.2011' ],
+                       [ '03.08.2011' ],
+                       [ '09.11.2011' ],
+                       [ '11.11.2011' ]
                ],
                function ( $table ) {
                        mw.config.set( 'wgDefaultDateFormat', 'mdy' );
 
        tableTest(
                'Bug 17141: IPv4 address sorting',
-               ['IP'],
+               [ 'IP' ],
                ipv4,
                ipv4Sorted,
                function ( $table ) {
        );
        tableTest(
                'Bug 17141: IPv4 address sorting (reverse)',
-               ['IP'],
+               [ 'IP' ],
                ipv4,
                reversed( ipv4Sorted ),
                function ( $table ) {
 
        tableTest(
                'Accented Characters with custom collation',
-               ['Name'],
+               [ 'Name' ],
                umlautWords,
                umlautWordsSorted,
                function ( $table ) {
                        mw.config.set( 'tableSorterCollation', {
-                               'ä': 'ae',
-                               'ö': 'oe',
-                               'ß': 'ss',
-                               'ü': 'ue'
+                               ä: 'ae',
+                               ö: 'oe',
+                               ß: 'ss',
+                               ü: 'ue'
                        } );
 
                        $table.tablesorter();
 
        tableTest(
                'Complex date parsing I',
-               ['date'],
+               [ 'date' ],
                complexMDYDates,
                complexMDYSorted,
                function ( $table ) {
 
        tableTest(
                'Currency parsing I',
-               ['currency'],
+               [ 'currency' ],
                currencyUnsorted,
                currencySorted,
                function ( $table ) {
        );
 
        planetsAscNameLegacy = planetsAscName.slice( 0 );
-       planetsAscNameLegacy[4] = planetsAscNameLegacy[5];
+       planetsAscNameLegacy[ 4 ] = planetsAscNameLegacy[ 5 ];
        planetsAscNameLegacy.pop();
 
        tableTest(
                $table.find( '.headerSort:eq(0)' ).click();
 
                assert.equal(
-                       $table.data( 'tablesorter' ).config.parsers[0].id,
+                       $table.data( 'tablesorter' ).config.parsers[ 0 ].id,
                        'number',
                        'Correctly detected column content skipping sortbottom'
                );
        } );
 
        tableTest( 'bug 8115: sort numbers with commas (ascending)',
-               ['Numbers'], numbers, numbersAsc,
+               [ 'Numbers' ], numbers, numbersAsc,
                function ( $table ) {
                        $table.tablesorter();
                        $table.find( '.headerSort:eq(0)' ).click();
        );
 
        tableTest( 'bug 8115: sort numbers with commas (descending)',
-               ['Numbers'], numbers, reversed( numbersAsc ),
+               [ 'Numbers' ], numbers, reversed( numbersAsc ),
                function ( $table ) {
                        $table.tablesorter();
                        $table.find( '.headerSort:eq(0)' ).click().click();
 
        tableTest(
                'Correct date sorting I',
-               ['date'],
+               [ 'date' ],
                correctDateSorting1,
                correctDateSortingSorted1,
                function ( $table ) {
 
        tableTest(
                'Correct date sorting II',
-               ['date'],
+               [ 'date' ],
                correctDateSorting2,
                correctDateSortingSorted2,
                function ( $table ) {
                                '</tbody></table>' );
 
                        $table.tablesorter();
-                       assert.equal( $table.find( 'tr:eq(1) th:eq(1)').data('headerIndex'),
+                       assert.equal( $table.find( 'tr:eq(1) th:eq(1)' ).data( 'headerIndex' ),
                                2,
                                'Incorrect index of sort header'
                        );
        tableTestHTML(
                'Rowspan exploding with colspanned cells (2)',
                '<table class="sortable">' +
-                       '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th><th>baz</th><th>quux</th></tr></thead>' +
+                       '<thead><tr><th>n</th><th>foo</th><th>bar</th><th>baz</th><th id="sortme">n2</th></tr></thead>' +
                        '<tbody>' +
-                       '<tr><td>1</td><td>foo</td><td>bar</td><td rowspan="2">baz</td><td>quux</td></tr>' +
-                       '<tr><td>2</td><td colspan="2">foobar</td><td>quux</td></tr>' +
+                       '<tr><td>1</td><td>foo</td><td>bar</td><td rowspan="2">baz</td><td>2</td></tr>' +
+                       '<tr><td>2</td><td colspan="2">foobar</td><td>1</td></tr>' +
                        '</tbody></table>',
                [
-                       [ '1', 'foo', 'bar', 'baz', 'quux' ],
-                       [ '2', 'foobar', 'baz', 'quux' ]
+                       [ '2', 'foobar', 'baz', '1' ],
+                       [ '1', 'foo', 'bar', 'baz', '2' ]
                ]
        );
 
                ]
        );
 
+       QUnit.test( 'bug 105731 - incomplete rows in table body', 3, function ( assert ) {
+               var $table, parsers;
+               $table = $(
+                       '<table class="sortable">' +
+                               '<tr><th>A</th><th>B</th></tr>' +
+                               '<tr><td>3</td></tr>' +
+                               '<tr><td>1</td><td>2</td></tr>' +
+                               '</table>'
+               );
+               $table.tablesorter();
+               $table.find( '.headerSort:eq(0)' ).click();
+               // now the first row have 2 columns
+               $table.find( '.headerSort:eq(1)' ).click();
+
+               parsers = $table.data( 'tablesorter' ).config.parsers;
+
+               assert.equal(
+                       parsers.length,
+                       2,
+                       'detectParserForColumn() detect 2 parsers'
+               );
+
+               assert.equal(
+                       parsers[ 1 ].id,
+                       'number',
+                       'detectParserForColumn() detect parser.id "number" for second column'
+               );
+
+               assert.equal(
+                       parsers[ 1 ].format( $table.find( 'tbody > tr > td:eq(1)' ).text() ),
+                       0,
+                       'empty cell is sorted as number 0'
+               );
+
+       } );
 }( jQuery, mediaWiki ) );
index 4bf44b0..2e6f05e 100644 (file)
@@ -5,13 +5,13 @@
        /**
         * Test factory for $.fn.textSelection( 'encapsulateText' )
         *
-        * @param options {object} associative array containing:
-        *   description {string}
-        *   input {string}
-        *   output {string}
-        *   start {int} starting char for selection
-        *   end {int} ending char for selection
-        *   params {object} add'l parameters for $().textSelection( 'encapsulateText' )
+        * @param {Object} options Associative configuration array
+        * @param {string} options.description Description
+        * @param {string} options.input Input
+        * @param {string} options.output Output
+        * @param {int} options.start Starting char for selection
+        * @param {int} options.end Ending char for selection
+        * @param {object} options.params Additional parameters for $().textSelection( 'encapsulateText' )
         */
        function encapsulateTest( options ) {
                var opt = $.extend( {
                        }
 
                        pos = $textarea.textSelection( 'getCaretPosition', { startAndEnd: true } );
-                       among( pos[0], options.start, 'Caret start should be where we set it.' );
-                       among( pos[1], options.end, 'Caret end should be where we set it.' );
+                       among( pos[ 0 ], options.start, 'Caret start should be where we set it.' );
+                       among( pos[ 1 ], options.end, 'Caret end should be where we set it.' );
                } );
        }
 
index 26b6f57..8033458 100644 (file)
@@ -14,7 +14,7 @@
        function sequence( responses ) {
                var i = 0;
                return function ( request ) {
-                       var response = responses[i];
+                       var response = responses[ i ];
                        if ( response ) {
                                i++;
                                request.respond.apply( request, response );
@@ -24,7 +24,7 @@
 
        function sequenceBodies( status, headers, bodies ) {
                jQuery.each( bodies, function ( i, body ) {
-                       bodies[i] = [ status, headers, body ];
+                       bodies[ i ] = [ status, headers, body ];
                } );
                return sequence( bodies );
        }
                } );
 
                assert.equal( this.server.requests.length, 2, 'Request made' );
-               assert.equal( this.server.requests[0].requestHeaders['X-Foo'], 'Bar', 'Header sent' );
+               assert.equal( this.server.requests[ 0 ].requestHeaders[ 'X-Foo' ], 'Bar', 'Header sent' );
        } );
 
        QUnit.test( 'postWithToken() - badtoken', function ( assert ) {
index 1afbd35..030e703 100644 (file)
@@ -18,7 +18,7 @@
                        return $.Deferred().promise();
                } );
 
-               api.uploadWithIframe( $( '<input>' )[0], { filename: 'Testing API upload.jpg' } );
+               api.uploadWithIframe( $( '<input>' )[ 0 ], { filename: 'Testing API upload.jpg' } );
 
                $iframe = $( 'iframe' );
                $form = $( 'form.mw-api-upload-form' );
index 5965ab7..64a5184 100644 (file)
                } );
 
                api.watch( [ 'Foo' ] ).done( function ( items ) {
-                       assert.equal( items[0].title, 'Foo' );
+                       assert.equal( items[ 0 ].title, 'Foo' );
                } );
 
                api.watch( [ 'Foo', 'Bar' ] ).done( function ( items ) {
-                       assert.equal( items[0].title, 'Foo' );
-                       assert.equal( items[1].title, 'Bar' );
+                       assert.equal( items[ 0 ].title, 'Foo' );
+                       assert.equal( items[ 1 ].title, 'Bar' );
                } );
 
                // Requests are POST, match requestBody instead of url
index 284f21a..641a5a5 100644 (file)
                                // testing custom / localized namespace
                                100: 'Penguins'
                        },
+                       // jscs: disable requireCamelCaseOrUpperCaseIdentifiers
                        wgNamespaceIds: {
-                               'media': -2,
-                               'special': -1,
+                               media: -2,
+                               special: -1,
                                '': 0,
-                               'talk': 1,
-                               'user': 2,
-                               'user_talk': 3,
-                               'wikipedia': 4,
-                               'wikipedia_talk': 5,
-                               'file': 6,
-                               'file_talk': 7,
-                               'mediawiki': 8,
-                               'mediawiki_talk': 9,
-                               'template': 10,
-                               'template_talk': 11,
-                               'help': 12,
-                               'help_talk': 13,
-                               'category': 14,
-                               'category_talk': 15,
-                               'image': 6,
-                               'image_talk': 7,
-                               'project': 4,
-                               'project_talk': 5,
+                               talk: 1,
+                               user: 2,
+                               user_talk: 3,
+                               wikipedia: 4,
+                               wikipedia_talk: 5,
+                               file: 6,
+                               file_talk: 7,
+                               mediawiki: 8,
+                               mediawiki_talk: 9,
+                               template: 10,
+                               template_talk: 11,
+                               help: 12,
+                               help_talk: 13,
+                               category: 14,
+                               category_talk: 15,
+                               image: 6,
+                               image_talk: 7,
+                               project: 4,
+                               project_talk: 5,
                                // Testing custom namespaces and aliases
-                               'penguins': 100,
-                               'antarctic_waterfowl': 100
+                               penguins: 100,
+                               antarctic_waterfowl: 100
                        },
+                       // jscs: enable requireCamelCaseOrUpperCaseIdentifiers
                        wgCaseSensitiveNamespaces: []
                }
        } ) );
        QUnit.test( 'constructor', cases.invalid.length, function ( assert ) {
                var i, title;
                for ( i = 0; i < cases.valid.length; i++ ) {
-                       title = new mw.Title( cases.valid[i] );
+                       title = new mw.Title( cases.valid[ i ] );
                }
                for ( i = 0; i < cases.invalid.length; i++ ) {
                        /*jshint loopfunc:true */
-                       title = cases.invalid[i];
+                       title = cases.invalid[ i ];
                        assert.throws( function () {
                                return new mw.Title( title );
-                       }, cases.invalid[i] );
+                       }, cases.invalid[ i ] );
                }
        } );
 
                var i;
                for ( i = 0; i < cases.valid.length; i++ ) {
                        assert.equal(
-                               $.type( mw.Title.newFromText( cases.valid[i] ) ),
+                               $.type( mw.Title.newFromText( cases.valid[ i ] ) ),
                                'object',
-                               cases.valid[i]
+                               cases.valid[ i ]
                        );
                }
                for ( i = 0; i < cases.invalid.length; i++ ) {
                        assert.equal(
-                               $.type( mw.Title.newFromText( cases.invalid[i] ) ),
+                               $.type( mw.Title.newFromText( cases.invalid[ i ] ) ),
                                'null',
-                               cases.invalid[i]
+                               cases.invalid[ i ]
                        );
                }
        } );
                assert.equal( title.toString(), 'Article', 'Default config: No sensitive namespaces by default. First-letter becomes uppercase' );
 
                // $wgCapitalLinks = false;
-               mw.config.set( 'wgCaseSensitiveNamespaces', [0, -2, 1, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15] );
+               mw.config.set( 'wgCaseSensitiveNamespaces', [ 0, -2, 1, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15 ] );
 
                title = new mw.Title( 'article' );
                assert.equal( title.toString(), 'article', '$wgCapitalLinks=false: Article namespace is sensitive, first-letter case stays lowercase' );
                assert.strictEqual( title.exists(), null, 'Return null with empty existance registry' );
 
                // Basic registry, checks default to boolean
-               mw.Title.exist.set( ['Does_exist', 'User_talk:NeilK', 'Wikipedia:Sandbox_rules'], true );
-               mw.Title.exist.set( ['Does_not_exist', 'User:John', 'Foobar'], false );
+               mw.Title.exist.set( [ 'Does_exist', 'User_talk:NeilK', 'Wikipedia:Sandbox_rules' ], true );
+               mw.Title.exist.set( [ 'Does_not_exist', 'User:John', 'Foobar' ], false );
 
                title = new mw.Title( 'Project:Sandbox rules' );
                assert.assertTrue( title.exists(), 'Return true for page titles marked as existing' );
 
                title = new mw.Title( 'Foobar' );
                assert.equal( title.getUrl(), '/wiki/Foobar', 'Basic functionality, getUrl uses mw.util.getUrl' );
-               assert.equal( title.getUrl({ action: 'edit' }), '/wiki/Foobar?action=edit', 'Basic functionality, \'params\' parameter' );
+               assert.equal( title.getUrl( { action: 'edit' } ), '/wiki/Foobar?action=edit', 'Basic functionality, \'params\' parameter' );
 
                title = new mw.Title( 'John Doe', 3 );
                assert.equal( title.getUrl(), '/wiki/User_talk:John_Doe', 'Escaping in title and namespace for urls' );
                        ];
 
                for ( i = 0; i < cases.length; i++ ) {
-                       thisCase = cases[i];
+                       thisCase = cases[ i ];
                        title = mw.Title.newFromImg( { src: thisCase.url } );
 
                        if ( thisCase.nameText !== undefined ) {
                        ];
 
                for ( i = 0; i < cases.length; i++ ) {
-                       thisCase = cases[i];
+                       thisCase = cases[ i ];
 
                        title = mw.Title.newFromText( thisCase.text );
                        assert.equal( title.getRelativeText( thisCase.relativeTo ), thisCase.expectedResult );
                }
        } );
 
-       QUnit.test( 'newFromUserInput', 8, function ( assert ) {
+       QUnit.test( 'normalizeExtension', 5, function ( assert ) {
+               var extension, i, thisCase, prefix,
+                       cases = [
+                               {
+                                       extension: 'png',
+                                       expected: 'png',
+                                       description: 'Extension already in canonical form'
+                               },
+                               {
+                                       extension: 'PNG',
+                                       expected: 'png',
+                                       description: 'Extension lowercased in canonical form'
+                               },
+                               {
+                                       extension: 'jpeg',
+                                       expected: 'jpg',
+                                       description: 'Extension changed in canonical form'
+                               },
+                               {
+                                       extension: 'JPEG',
+                                       expected: 'jpg',
+                                       description: 'Extension lowercased and changed in canonical form'
+                               },
+                               {
+                                       extension: '~~~',
+                                       expected: '',
+                                       description: 'Extension invalid and discarded'
+                               }
+                       ];
+
+               for ( i = 0; i < cases.length; i++ ) {
+                       thisCase = cases[ i ];
+                       extension = mw.Title.normalizeExtension( thisCase.extension );
+
+                       prefix = '[' + thisCase.description + '] ';
+                       assert.equal( extension, thisCase.expected, prefix + 'Extension as expected' );
+               }
+       } );
+
+       QUnit.test( 'newFromUserInput', 12, function ( assert ) {
                var title, i, thisCase, prefix,
                        cases = [
                                {
                                        title: 'DCS0001557854455.JPG',
-                                       defaultNamespace: 0,
-                                       options: {
-                                               fileExtension: 'PNG'
-                                       },
                                        expected: 'DCS0001557854455.JPG',
                                        description: 'Title in normal namespace without anything invalid but with "file extension"'
                                },
                                {
                                        title: 'MediaWiki:Msg-awesome',
-                                       defaultNamespace: undefined,
                                        expected: 'MediaWiki:Msg-awesome',
                                        description: 'Full title (page in MediaWiki namespace) supplied as string'
                                },
                                        },
                                        expected: 'File:The/Mw/Sound.kml',
                                        description: 'Page in File-namespace without explicit options'
+                               },
+                               {
+                                       title: 'File:Foo.JPEG',
+                                       expected: 'File:Foo.JPEG',
+                                       description: 'Page in File-namespace with non-canonical extension'
+                               },
+                               {
+                                       title: 'File:Foo.JPEG  ',
+                                       expected: 'File:Foo.JPEG',
+                                       description: 'Page in File-namespace with trailing whitespace'
                                }
                        ];
 
                for ( i = 0; i < cases.length; i++ ) {
-                       thisCase = cases[i];
+                       thisCase = cases[ i ];
                        title = mw.Title.newFromUserInput( thisCase.title, thisCase.defaultNamespace, thisCase.options );
 
                        if ( thisCase.expected !== undefined ) {
                }
        } );
 
-       QUnit.test( 'newFromFileName', 62, function ( assert ) {
+       QUnit.test( 'newFromFileName', 54, function ( assert ) {
                var title, i, thisCase, prefix,
                        cases = [
                                {
                                        fileName: 'DCS0001557854455.JPG',
                                        typeOfName: 'Standard camera output',
                                        nameText: 'DCS0001557854455',
-                                       prefixedText: 'File:DCS0001557854455.JPG',
-                                       extensionDesired: 'jpg'
+                                       prefixedText: 'File:DCS0001557854455.JPG'
                                },
                                {
                                        fileName: 'File:Sample.png',
                                        fileName: 'Treppe 2222 Test upload.jpg',
                                        typeOfName: 'File name with spaces in it and lower case file extension',
                                        nameText: 'Treppe 2222 Test upload',
-                                       prefixedText: 'File:Treppe 2222 Test upload.jpg',
-                                       extensionDesired: 'JPG'
+                                       prefixedText: 'File:Treppe 2222 Test upload.jpg'
                                },
                                {
                                        fileName: 'I contain a \ttab.jpg',
                                        nameText: 'Dot. dot',
                                        prefixedText: 'File:Dot. dot. dot'
                                },
-                               {
-                                       fileName: 'dot. dot ._dot',
-                                       typeOfName: 'File name with different file extension desired',
-                                       nameText: 'Dot. dot . dot',
-                                       prefixedText: 'File:Dot. dot . dot.png',
-                                       extensionDesired: 'png'
-                               },
-                               {
-                                       fileName: 'fileWOExt',
-                                       typeOfName: 'File W/O extension with extension desired',
-                                       nameText: 'FileWOExt',
-                                       prefixedText: 'File:FileWOExt.png',
-                                       extensionDesired: 'png'
-                               },
                                {
                                        fileName: '𠜎𠜱𠝹𠱓𠱸𠲖𠳏𠳕𠴕𠵼𠵿𠸎𠸏𠹷𠺝𠺢𠻗𠻹𠻺𠼭𠼮𠽌𠾴𠾼𠿪𡁜𡁯𡁵𡁶𡁻𡃁𡃉𡇙𢃇𢞵𢫕𢭃𢯊𢱑𢱕𢳂𠻹𠻺𠼭𠼮𠽌𠾴𠾼𠿪𡁜𡁯𡁵𡁶𡁻𡃁𡃉𡇙𢃇𢞵𢫕𢭃𢯊𢱑𢱕𢳂.png',
                                        typeOfName: 'File name longer than 240 bytes',
                        ];
 
                for ( i = 0; i < cases.length; i++ ) {
-                       thisCase = cases[i];
-                       title = mw.Title.newFromFileName( thisCase.fileName, thisCase.extensionDesired );
+                       thisCase = cases[ i ];
+                       title = mw.Title.newFromFileName( thisCase.fileName );
 
                        if ( thisCase.nameText !== undefined ) {
                                prefix = '[' + thisCase.typeOfName + '] ';
index ba36655..51374bd 100644 (file)
@@ -11,7 +11,7 @@
                }
        } ) );
 
-       $.each( [true, false], function ( i, strictMode ) {
+       $.each( [ true, false ], function ( i, strictMode ) {
                QUnit.test( 'Basic construction and properties (' + ( strictMode ? '' : 'non-' ) + 'strict mode)', 2, function ( assert ) {
                        var uriString, uri;
                        uriString = 'http://www.ietf.org/rfc/rfc2396.txt';
@@ -76,8 +76,8 @@
                } );
 
                assert.strictEqual( uri.query.n, '1', 'Simple parameter with overrideKeys:false' );
-               assert.strictEqual( uri.query.m[0], 'foo', 'Order of multi-value parameters with overrideKeys:true' );
-               assert.strictEqual( uri.query.m[1], 'bar', 'Order of multi-value parameters with overrideKeys:true' );
+               assert.strictEqual( uri.query.m[ 0 ], 'foo', 'Order of multi-value parameters with overrideKeys:true' );
+               assert.strictEqual( uri.query.m[ 1 ], 'bar', 'Order of multi-value parameters with overrideKeys:true' );
                assert.strictEqual( uri.query.m.length, 2, 'Number of mult-value field is correct' );
 
                uri = new mw.Uri( 'ftp://usr:pwd@192.0.2.16/' );
 
                assert.deepEqual(
                        original.query,
-                       { 'one': '1', 'two': '2' },
+                       { one: '1', two: '2' },
                        'Properties is deep cloned (bug 37708)'
                );
        } );
                                host: 'example.com',
                                port: undefined,
                                path: '/wiki/Foo',
-                               query: { 'v': '2' },
+                               query: { v: '2' },
                                fragment: undefined
                        },
                        'basic object properties'
index 779a0ed..399db91 100644 (file)
@@ -65,9 +65,9 @@
                QUnit.test( 'Plural Test for ' + langCode, tests.length, function ( assert ) {
                        for ( var i = 0; i < tests.length; i++ ) {
                                assert.equal(
-                                       mw.language.convertPlural( tests[i][0], tests[i][1] ),
-                                       tests[i][2],
-                                       tests[i][3]
+                                       mw.language.convertPlural( tests[ i ][ 0 ], tests[ i ][ 1 ] ),
+                                       tests[ i ][ 2 ],
+                                       tests[ i ][ 3 ]
                                );
                        }
                } );
index f5f199e..7a13f0f 100644 (file)
                } );
 
                call = $.cookie.lastCall.args;
-               assert.strictEqual( call[0], 'myPrefixfoo' );
+               assert.strictEqual( call[ 0 ], 'myPrefixfoo' );
                assert.deepEqual( call[ 2 ], {
                        expires: expiryDate,
                        domain: 'myDomain',
                } );
 
                call = $.cookie.lastCall.args;
-               assert.strictEqual( call[0], 'myPrefixfoo' );
+               assert.strictEqual( call[ 0 ], 'myPrefixfoo' );
                assert.deepEqual( call[ 2 ], {
                        expires: date,
                        domain: 'myDomain',
index 7c3f1ec..587c893 100644 (file)
@@ -7,7 +7,7 @@
                        errorUrl = 'http://example.com',
                        errorLine = '123',
                        errorColumn = '45',
-                       errorObject = new Error( 'Foo'),
+                       errorObject = new Error( 'Foo' ),
                        oldHandler = this.sandbox.stub();
 
                this.sandbox.stub( mw, 'track' );
index d9fd6a7..e7f4517 100644 (file)
@@ -70,7 +70,7 @@
         */
        function getMwLanguage( langCode ) {
                if ( !hasOwn.call( mwLanguageCache, langCode ) ) {
-                       mwLanguageCache[langCode] = $.ajax( {
+                       mwLanguageCache[ langCode ] = $.ajax( {
                                url: mw.util.wikiScript( 'load' ),
                                data: {
                                        skin: mw.config.get( 'skin' ),
                                return mw.language;
                        } );
                }
-               return mwLanguageCache[langCode];
+               return mwLanguageCache[ langCode ];
        }
 
        /**
         * @param {Function[]} tasks List of functions that perform tasks
         *  that may be asynchronous. Invoke the callback parameter when done.
         * @param {Function} complete Called when all tasks are done, or when the sequence is aborted.
-        * @return
         */
        function process( tasks, complete ) {
+               /*jshint latedef:false */
                function abort() {
                        tasks.splice( 0, tasks.length );
                        next();
        QUnit.test( 'Curly brace transformation', 16, function ( assert ) {
                var oldUserLang = mw.config.get( 'wgUserLanguage' );
 
-               assertBothModes( assert, ['gender-msg', 'Bob', 'male'], 'Bob: blue', 'gender is resolved' );
+               assertBothModes( assert, [ 'gender-msg', 'Bob', 'male' ], 'Bob: blue', 'gender is resolved' );
 
-               assertBothModes( assert, ['plural-msg', 5], 'Found 5 items', 'plural is resolved' );
+               assertBothModes( assert, [ 'plural-msg', 5 ], 'Found 5 items', 'plural is resolved' );
 
-               assertBothModes( assert, ['grammar-msg'], 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'grammar is resolved' );
+               assertBothModes( assert, [ 'grammar-msg' ], 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'grammar is resolved' );
 
                mw.config.set( 'wgUserLanguage', 'en' );
-               assertBothModes( assert, ['formatnum-msg', '987654321.654321'], '987,654,321.654', 'formatnum is resolved' );
+               assertBothModes( assert, [ 'formatnum-msg', '987654321.654321' ], '987,654,321.654', 'formatnum is resolved' );
 
                // Test non-{{ wikitext, where behavior differs
 
                        'curly-brace': '{{int:message}}',
                        'single-square-bracket': '[https://www.mediawiki.org/ MediaWiki]',
                        'double-square-bracket': '[[Some page]]',
-                       'regular': 'Other message'
+                       regular: 'Other message'
                } );
 
                oldGMF = mw.jqueryMsg.getMessageFunction;
                        outerCalled = false;
                        innerCalled = false;
                        message = mw.message( key );
-                       message[format]();
+                       message[ format ]();
                        assert.strictEqual( outerCalled, shouldCall, 'Outer function called for ' + key );
                        assert.strictEqual( innerCalled, shouldCall, 'Inner function called for ' + key );
                }
        QUnit.test( 'HTML', 26, function ( assert ) {
                mw.messages.set( 'jquerymsg-italics-msg', '<i>Very</i> important' );
 
-               assertBothModes( assert, ['jquerymsg-italics-msg'], mw.messages.get( 'jquerymsg-italics-msg' ), 'Simple italics unchanged' );
+               assertBothModes( assert, [ 'jquerymsg-italics-msg' ], mw.messages.get( 'jquerymsg-italics-msg' ), 'Simple italics unchanged' );
 
                mw.messages.set( 'jquerymsg-bold-msg', '<b>Strong</b> speaker' );
-               assertBothModes( assert, ['jquerymsg-bold-msg'], mw.messages.get( 'jquerymsg-bold-msg' ), 'Simple bold unchanged' );
+               assertBothModes( assert, [ 'jquerymsg-bold-msg' ], mw.messages.get( 'jquerymsg-bold-msg' ), 'Simple bold unchanged' );
 
                mw.messages.set( 'jquerymsg-bold-italics-msg', 'It is <b><i>key</i></b>' );
-               assertBothModes( assert, ['jquerymsg-bold-italics-msg'], mw.messages.get( 'jquerymsg-bold-italics-msg' ), 'Bold and italics nesting order preserved' );
+               assertBothModes( assert, [ 'jquerymsg-bold-italics-msg' ], mw.messages.get( 'jquerymsg-bold-italics-msg' ), 'Bold and italics nesting order preserved' );
 
                mw.messages.set( 'jquerymsg-italics-bold-msg', 'It is <i><b>vital</b></i>' );
-               assertBothModes( assert, ['jquerymsg-italics-bold-msg'], mw.messages.get( 'jquerymsg-italics-bold-msg' ), 'Italics and bold nesting order preserved' );
+               assertBothModes( assert, [ 'jquerymsg-italics-bold-msg' ], mw.messages.get( 'jquerymsg-italics-bold-msg' ), 'Italics and bold nesting order preserved' );
 
                mw.messages.set( 'jquerymsg-italics-with-link', 'An <i>italicized [[link|wiki-link]]</i>' );
 
index 3328ce3..3b5915a 100644 (file)
@@ -61,7 +61,7 @@
                        expected = repeat( '\n', n ) + 'some text';
 
                        $textarea = $( '<textarea>\n' + expected + '</textarea>' );
-                       assert.equal( $textarea.val(), expected, 'Expecting ' + n + ' newlines (HTML contained ' + (n + 1) + ')' );
+                       assert.equal( $textarea.val(), expected, 'Expecting ' + n + ' newlines (HTML contained ' + ( n + 1 ) + ')' );
 
                        $textarea = $( '<textarea>' ).val( expected );
                        assert.equal( $textarea.val(), expected, 'Expecting ' + n + ' newlines (from DOM set with ' + n + ')' );
index 670914e..399290c 100644 (file)
@@ -11,7 +11,7 @@
                },
                messages: {
                        // mw.language.listToText test
-                       'and': ' and',
+                       and: ' and',
                        'comma-separator': ', ',
                        'word-separator': ' '
                }
@@ -51,9 +51,9 @@
 
                        for ( var i = 0; i < test.length; i++ ) {
                                assert.equal(
-                                       mw.language.convertGrammar( test[i].word, test[i].grammarForm ),
-                                       test[i].expected,
-                                       test[i].description
+                                       mw.language.convertGrammar( test[ i ].word, test[ i ].grammarForm ),
+                                       test[ i ].expected,
+                                       test[ i ].description
                                );
                        }
                } );
 
        QUnit.test( 'List to text test', 4, function ( assert ) {
                assert.equal( mw.language.listToText( [] ), '', 'Blank list' );
-               assert.equal( mw.language.listToText( ['a'] ), 'a', 'Single item' );
-               assert.equal( mw.language.listToText( ['a', 'b'] ), 'a and b', 'Two items' );
-               assert.equal( mw.language.listToText( ['a', 'b', 'c'] ), 'a, b and c', 'More than two items' );
+               assert.equal( mw.language.listToText( [ 'a' ] ), 'a', 'Single item' );
+               assert.equal( mw.language.listToText( [ 'a', 'b' ] ), 'a and b', 'Two items' );
+               assert.equal( mw.language.listToText( [ 'a', 'b', 'c' ] ), 'a, b and c', 'More than two items' );
        } );
 }( mediaWiki, jQuery ) );
index 61bab03..288b527 100644 (file)
@@ -12,7 +12,7 @@
 
                mw.messagePoster.factory.register( TEST_MODEL, testMessagePosterConstructor );
                assert.strictEqual(
-                       mw.messagePoster.factory.contentModelToClass[TEST_MODEL],
+                       mw.messagePoster.factory.contentModelToClass[ TEST_MODEL ],
                        testMessagePosterConstructor,
                        'Constructor is registered'
                );
index fcf6dda..111d85b 100644 (file)
 
                // Multiple values at once
                someValues = {
-                       'foo': 'bar',
-                       'lorem': 'ipsum',
-                       'MediaWiki': true
+                       foo: 'bar',
+                       lorem: 'ipsum',
+                       MediaWiki: true
                };
                assert.strictEqual( conf.set( someValues ), true, 'Map.set returns boolean true if multiple values were set by passing an object' );
-               assert.deepEqual( conf.get( ['foo', 'lorem'] ), {
-                       'foo': 'bar',
-                       'lorem': 'ipsum'
+               assert.deepEqual( conf.get( [ 'foo', 'lorem' ] ), {
+                       foo: 'bar',
+                       lorem: 'ipsum'
                }, 'Map.get returns multiple values correctly as an object' );
 
                assert.deepEqual( conf, new mw.Map( conf.values ), 'new mw.Map maps over existing values-bearing object' );
 
-               assert.deepEqual( conf.get( ['foo', 'notExist'] ), {
-                       'foo': 'bar',
-                       'notExist': null
+               assert.deepEqual( conf.get( [ 'foo', 'notExist' ] ), {
+                       foo: 'bar',
+                       notExist: null
                }, 'Map.get return includes keys that were not found as null values' );
 
                // Interacting with globals and accessing the values object
                this.restoreWarnings();
 
                // Change value via global Map
-               globalConf.set('anotherGlobalMapChecker', 'Again');
+               globalConf.set( 'anotherGlobalMapChecker', 'Again' );
                assert.equal( globalConf.get( 'anotherGlobalMapChecker' ), 'Again', 'Change in global Map reflected via get()' );
                this.suppressWarnings();
                assert.equal( window.anotherGlobalMapChecker, 'Again', 'Change in global Map reflected window object' );
                                len = formats.length;
 
                        for ( i = 0; i < len; i++ ) {
-                               format = formats[i];
-                               assert.equal( mw.message.apply( null, messageArguments )[format](), expectedResult, assertMessage + ' when format is ' + format );
+                               format = formats[ i ];
+                               assert.equal( mw.message.apply( null, messageArguments )[ format ](), expectedResult, assertMessage + ' when format is ' + format );
                        }
                }
 
                assert.equal( hello.format, 'escaped', 'Message.escaped correctly updated the "format" property' );
 
                assert.ok( mw.messages.set( 'multiple-curly-brace', '"{{SITENAME}}" is the home of {{int:other-message}}' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['multiple-curly-brace'], ['text', 'parse'], '"' + siteName + '" is the home of Other Message', 'Curly brace format works correctly' );
+               assertMultipleFormats( [ 'multiple-curly-brace' ], [ 'text', 'parse' ], '"' + siteName + '" is the home of Other Message', 'Curly brace format works correctly' );
                assert.equal( mw.message( 'multiple-curly-brace' ).plain(), mw.messages.get( 'multiple-curly-brace' ), 'Plain format works correctly for curly brace message' );
                assert.equal( mw.message( 'multiple-curly-brace' ).escaped(), mw.html.escape( '"' + siteName + '" is the home of Other Message' ), 'Escaped format works correctly for curly brace message' );
 
                assert.ok( mw.messages.set( 'multiple-square-brackets-and-ampersand', 'Visit the [[Project:Community portal|community portal]] & [[Project:Help desk|help desk]]' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['multiple-square-brackets-and-ampersand'], ['plain', 'text'], mw.messages.get( 'multiple-square-brackets-and-ampersand' ), 'Square bracket message is not processed' );
+               assertMultipleFormats( [ 'multiple-square-brackets-and-ampersand' ], [ 'plain', 'text' ], mw.messages.get( 'multiple-square-brackets-and-ampersand' ), 'Square bracket message is not processed' );
                assert.equal( mw.message( 'multiple-square-brackets-and-ampersand' ).escaped(), 'Visit the [[Project:Community portal|community portal]] &amp; [[Project:Help desk|help desk]]', 'Escaped format works correctly for square bracket message' );
                assert.htmlEqual( mw.message( 'multiple-square-brackets-and-ampersand' ).parse(), 'Visit the ' +
                        '<a title="Project:Community portal" href="/wiki/Project:Community_portal">community portal</a>' +
                        ' &amp; <a title="Project:Help desk" href="/wiki/Project:Help_desk">help desk</a>', 'Internal links work with parse' );
 
-               assertMultipleFormats( ['mediawiki-test-version-entrypoints-index-php'], ['plain', 'text', 'escaped'], mw.messages.get( 'mediawiki-test-version-entrypoints-index-php' ), 'External link markup is unprocessed' );
+               assertMultipleFormats( [ 'mediawiki-test-version-entrypoints-index-php' ], [ 'plain', 'text', 'escaped' ], mw.messages.get( 'mediawiki-test-version-entrypoints-index-php' ), 'External link markup is unprocessed' );
                assert.htmlEqual( mw.message( 'mediawiki-test-version-entrypoints-index-php' ).parse(), '<a href="https://www.mediawiki.org/wiki/Manual:index.php">index.php</a>', 'External link works correctly in parse mode' );
 
-               assertMultipleFormats( ['external-link-replace', 'http://example.org/?x=y&z'], ['plain', 'text'], 'Foo [http://example.org/?x=y&z bar]', 'Parameters are substituted but external link is not processed' );
+               assertMultipleFormats( [ 'external-link-replace', 'http://example.org/?x=y&z' ], [ 'plain', 'text' ], 'Foo [http://example.org/?x=y&z bar]', 'Parameters are substituted but external link is not processed' );
                assert.equal( mw.message( 'external-link-replace', 'http://example.org/?x=y&z' ).escaped(), 'Foo [http://example.org/?x=y&amp;z bar]', 'In escaped mode, parameters are substituted and ampersand is escaped, but external link is not processed' );
                assert.htmlEqual( mw.message( 'external-link-replace', 'http://example.org/?x=y&z' ).parse(), 'Foo <a href="http://example.org/?x=y&amp;z">bar</a>', 'External link with replacement works in parse mode without double-escaping' );
 
                goodbye = mw.message( 'goodbye' );
                assert.strictEqual( goodbye.exists(), false, 'Message.exists returns false for nonexistent messages' );
 
-               assertMultipleFormats( ['goodbye'], ['plain', 'text'], '<goodbye>', 'Message.toString returns <key> if key does not exist' );
+               assertMultipleFormats( [ 'goodbye' ], [ 'plain', 'text' ], '<goodbye>', 'Message.toString returns <key> if key does not exist' );
                // bug 30684
-               assertMultipleFormats( ['goodbye'], ['parse', 'escaped'], '&lt;goodbye&gt;', 'Message.toString returns properly escaped &lt;key&gt; if key does not exist' );
+               assertMultipleFormats( [ 'goodbye' ], [ 'parse', 'escaped' ], '&lt;goodbye&gt;', 'Message.toString returns properly escaped &lt;key&gt; if key does not exist' );
 
                assert.ok( mw.messages.set( 'plural-test-msg', 'There {{PLURAL:$1|is|are}} $1 {{PLURAL:$1|result|results}}' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['plural-test-msg', 6], ['text', 'parse', 'escaped'], 'There are 6 results', 'plural get resolved' );
+               assertMultipleFormats( [ 'plural-test-msg', 6 ], [ 'text', 'parse', 'escaped' ], 'There are 6 results', 'plural get resolved' );
                assert.equal( mw.message( 'plural-test-msg', 6 ).plain(), 'There {{PLURAL:6|is|are}} 6 {{PLURAL:6|result|results}}', 'Parameter is substituted but plural is not resolved in plain' );
 
                assert.ok( mw.messages.set( 'plural-test-msg-explicit', 'There {{plural:$1|is one car|are $1 cars|0=are no cars|12=are a dozen cars}}' ), 'mw.messages.set: Register message with explicit plural forms' );
-               assertMultipleFormats( ['plural-test-msg-explicit', 12], ['text', 'parse', 'escaped'], 'There are a dozen cars', 'explicit plural get resolved' );
+               assertMultipleFormats( [ 'plural-test-msg-explicit', 12 ], [ 'text', 'parse', 'escaped' ], 'There are a dozen cars', 'explicit plural get resolved' );
 
                assert.ok( mw.messages.set( 'plural-test-msg-explicit-beginning', 'Basket has {{plural:$1|0=no eggs|12=a dozen eggs|6=half a dozen eggs|one egg|$1 eggs}}' ), 'mw.messages.set: Register message with explicit plural forms' );
-               assertMultipleFormats( ['plural-test-msg-explicit-beginning', 1], ['text', 'parse', 'escaped'], 'Basket has one egg', 'explicit plural given at beginning get resolved for singular' );
-               assertMultipleFormats( ['plural-test-msg-explicit-beginning', 4], ['text', 'parse', 'escaped'], 'Basket has 4 eggs', 'explicit plural given at beginning get resolved for plural' );
-               assertMultipleFormats( ['plural-test-msg-explicit-beginning', 6], ['text', 'parse', 'escaped'], 'Basket has half a dozen eggs', 'explicit plural given at beginning get resolved for 6' );
-               assertMultipleFormats( ['plural-test-msg-explicit-beginning', 0], ['text', 'parse', 'escaped'], 'Basket has no eggs', 'explicit plural given at beginning get resolved for 0' );
+               assertMultipleFormats( [ 'plural-test-msg-explicit-beginning', 1 ], [ 'text', 'parse', 'escaped' ], 'Basket has one egg', 'explicit plural given at beginning get resolved for singular' );
+               assertMultipleFormats( [ 'plural-test-msg-explicit-beginning', 4 ], [ 'text', 'parse', 'escaped' ], 'Basket has 4 eggs', 'explicit plural given at beginning get resolved for plural' );
+               assertMultipleFormats( [ 'plural-test-msg-explicit-beginning', 6 ], [ 'text', 'parse', 'escaped' ], 'Basket has half a dozen eggs', 'explicit plural given at beginning get resolved for 6' );
+               assertMultipleFormats( [ 'plural-test-msg-explicit-beginning', 0 ], [ 'text', 'parse', 'escaped' ], 'Basket has no eggs', 'explicit plural given at beginning get resolved for 0' );
 
-               assertMultipleFormats( ['mediawiki-test-pagetriage-del-talk-page-notify-summary'], ['plain', 'text'], mw.messages.get( 'mediawiki-test-pagetriage-del-talk-page-notify-summary' ), 'Double square brackets with no parameters unchanged' );
+               assertMultipleFormats( [ 'mediawiki-test-pagetriage-del-talk-page-notify-summary' ], [ 'plain', 'text' ], mw.messages.get( 'mediawiki-test-pagetriage-del-talk-page-notify-summary' ), 'Double square brackets with no parameters unchanged' );
 
-               assertMultipleFormats( ['mediawiki-test-pagetriage-del-talk-page-notify-summary', specialCharactersPageName], ['plain', 'text'], 'Notifying author of deletion nomination for [[' + specialCharactersPageName + ']]', 'Double square brackets with one parameter' );
+               assertMultipleFormats( [ 'mediawiki-test-pagetriage-del-talk-page-notify-summary', specialCharactersPageName ], [ 'plain', 'text' ], 'Notifying author of deletion nomination for [[' + specialCharactersPageName + ']]', 'Double square brackets with one parameter' );
 
                assert.equal( mw.message( 'mediawiki-test-pagetriage-del-talk-page-notify-summary', specialCharactersPageName ).escaped(), 'Notifying author of deletion nomination for [[' + mw.html.escape( specialCharactersPageName ) + ']]', 'Double square brackets with one parameter, when escaped' );
 
                assert.ok( mw.messages.set( 'mediawiki-test-wikieditor-toolbar-help-content-signature-result', '<a href=\'#\' title=\'{{#special:mypage}}\'>Username</a> (<a href=\'#\' title=\'{{#special:mytalk}}\'>talk</a>)' ), 'mw.messages.set: Register' );
                assert.equal( mw.message( 'mediawiki-test-wikieditor-toolbar-help-content-signature-result' ).plain(), mw.messages.get( 'mediawiki-test-wikieditor-toolbar-help-content-signature-result' ), 'HTML message with curly braces is not changed in plain mode' );
 
-               assertMultipleFormats( ['gender-plural-msg', 'male', 1], ['text', 'parse', 'escaped'], 'he is awesome', 'Gender and plural are resolved' );
+               assertMultipleFormats( [ 'gender-plural-msg', 'male', 1 ], [ 'text', 'parse', 'escaped' ], 'he is awesome', 'Gender and plural are resolved' );
                assert.equal( mw.message( 'gender-plural-msg', 'male', 1 ).plain(), '{{GENDER:male|he|she|they}} {{PLURAL:1|is|are}} awesome', 'Parameters are substituted, but gender and plural are not resolved in plain mode' );
 
                assert.equal( mw.message( 'grammar-msg' ).plain(), mw.messages.get( 'grammar-msg' ), 'Grammar is not resolved in plain mode' );
-               assertMultipleFormats( ['grammar-msg'], ['text', 'parse'], 'Przeszukaj ' + siteName, 'Grammar is resolved' );
+               assertMultipleFormats( [ 'grammar-msg' ], [ 'text', 'parse' ], 'Przeszukaj ' + siteName, 'Grammar is resolved' );
                assert.equal( mw.message( 'grammar-msg' ).escaped(), 'Przeszukaj ' + siteName, 'Grammar is resolved in escaped mode' );
 
-               assertMultipleFormats( ['formatnum-msg', '987654321.654321'], ['text', 'parse', 'escaped'], '987,654,321.654', 'formatnum is resolved' );
+               assertMultipleFormats( [ 'formatnum-msg', '987654321.654321' ], [ 'text', 'parse', 'escaped' ], '987,654,321.654', 'formatnum is resolved' );
                assert.equal( mw.message( 'formatnum-msg' ).plain(), mw.messages.get( 'formatnum-msg' ), 'formatnum is not resolved in plain mode' );
 
-               assertMultipleFormats( ['int-msg'], ['text', 'parse', 'escaped'], 'Some Other Message', 'int is resolved' );
+               assertMultipleFormats( [ 'int-msg' ], [ 'text', 'parse', 'escaped' ], 'Some Other Message', 'int is resolved' );
                assert.equal( mw.message( 'int-msg' ).plain(), mw.messages.get( 'int-msg' ), 'int is not resolved in plain mode' );
 
                assert.ok( mw.messages.set( 'mediawiki-italics-msg', '<i>Very</i> important' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['mediawiki-italics-msg'], ['plain', 'text', 'parse'], mw.messages.get( 'mediawiki-italics-msg' ), 'Simple italics unchanged' );
+               assertMultipleFormats( [ 'mediawiki-italics-msg' ], [ 'plain', 'text', 'parse' ], mw.messages.get( 'mediawiki-italics-msg' ), 'Simple italics unchanged' );
                assert.htmlEqual(
                        mw.message( 'mediawiki-italics-msg' ).escaped(),
                        '&lt;i&gt;Very&lt;/i&gt; important',
                );
 
                assert.ok( mw.messages.set( 'mediawiki-italics-with-link', 'An <i>italicized [[link|wiki-link]]</i>' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['mediawiki-italics-with-link'], ['plain', 'text'], mw.messages.get( 'mediawiki-italics-with-link' ), 'Italics with link unchanged' );
+               assertMultipleFormats( [ 'mediawiki-italics-with-link' ], [ 'plain', 'text' ], mw.messages.get( 'mediawiki-italics-with-link' ), 'Italics with link unchanged' );
                assert.htmlEqual(
                        mw.message( 'mediawiki-italics-with-link' ).escaped(),
                        'An &lt;i&gt;italicized [[link|wiki-link]]&lt;/i&gt;',
                );
 
                assert.ok( mw.messages.set( 'mediawiki-script-msg', '<script  >alert( "Who put this script here?" );</script>' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['mediawiki-script-msg'], ['plain', 'text'], mw.messages.get( 'mediawiki-script-msg' ), 'Script unchanged' );
+               assertMultipleFormats( [ 'mediawiki-script-msg' ], [ 'plain', 'text' ], mw.messages.get( 'mediawiki-script-msg' ), 'Script unchanged' );
                assert.htmlEqual(
                        mw.message( 'mediawiki-script-msg' ).escaped(),
                        '&lt;script  &gt;alert( "Who put this script here?" );&lt;/script&gt;',
         * The sync style load test (for @import). This is, in a way, also an open bug for
         * ResourceLoader ("execute js after styles are loaded"), but browsers don't offer a
         * way to get a callback from when a stylesheet is loaded (that is, including any
-        * @import rules inside). To work around this, we'll have a little time loop to check
+        * `@import` rules inside). To work around this, we'll have a little time loop to check
         * if the styles apply.
+        *
         * Note: This test originally used new Image() and onerror to get a callback
         * when the url is loaded, but that is fragile since it doesn't monitor the
         * same request as the css @import, and Safari 4 has issues with
                        isAwesomeDone = true;
                };
 
-               mw.loader.implement( 'test.callback', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' )] );
+               mw.loader.implement( 'test.callback', [ QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' ) ] );
 
                mw.loader.using( 'test.callback', function () {
 
                        isAwesomeDone = true;
                };
 
-               mw.loader.implement( 'hasOwnProperty', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' )], {}, {} );
+               mw.loader.implement( 'hasOwnProperty', [ QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' ) ], {}, {} );
 
                mw.loader.using( 'hasOwnProperty', function () {
 
                        isAwesomeDone = true;
                };
 
-               mw.loader.implement( 'test.promise', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' )] );
+               mw.loader.implement( 'test.promise', [ QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' ) ] );
 
                mw.loader.using( 'test.promise' )
                .done( function () {
                                QUnit.start();
                        },
                        {
-                               'all': '.mw-test-implement-a { float: right; }'
+                               all: '.mw-test-implement-a { float: right; }'
                        }
                );
 
                                } );
                        },
                        {
-                               'url': {
-                                       'print': [urlStyleTest( '.mw-test-implement-b1', 'text-align', 'center' )],
-                                       'screen': [
+                               url: {
+                                       print: [ urlStyleTest( '.mw-test-implement-b1', 'text-align', 'center' ) ],
+                                       screen: [
                                                // bug 40834: Make sure it actually works with more than 1 stylesheet reference
                                                urlStyleTest( '.mw-test-implement-b2', 'float', 'left' ),
                                                urlStyleTest( '.mw-test-implement-b3', 'float', 'right' )
                                QUnit.start();
                        },
                        {
-                               'all': '.mw-test-implement-c { float: right; }'
+                               all: '.mw-test-implement-c { float: right; }'
                        }
                );
 
                                } );
                        },
                        {
-                               'all': [urlStyleTest( '.mw-test-implement-d', 'float', 'right' )],
-                               'print': [urlStyleTest( '.mw-test-implement-d2', 'text-align', 'center' )]
+                               all: [ urlStyleTest( '.mw-test-implement-d', 'float', 'right' ) ],
+                               print: [ urlStyleTest( '.mw-test-implement-d2', 'text-align', 'center' ) ]
                        }
                );
 
                                assert.strictEqual( isJsExecuted, undefined, 'script not executed multiple times' );
                                isJsExecuted = true;
 
-                               assert.equal( mw.loader.getState( 'test.implement.import' ), 'loading', 'module state during implement() script execution' );
+                               assert.equal( mw.loader.getState( 'test.implement.import' ), 'executing', 'module state during implement() script execution' );
 
                                $element = $( '<div class="mw-test-implement-import">Foo bar</div>' ).appendTo( '#qunit-fixture' );
 
                                } );
                        },
                        {
-                               'css': [
+                               css: [
                                        '@import url(\''
                                                + urlStyleTest( '.mw-test-implement-import', 'float', 'right' )
                                                + '\');\n'
                );
 
                mw.loader.register( [
-                       [ 'test.implement.e', '0', ['test.implement.e2']],
+                       [ 'test.implement.e', '0', [ 'test.implement.e2' ] ],
                        [ 'test.implement.e2', '0' ]
                ] );
 
                                QUnit.start();
                        },
                        {
-                               'all': '.mw-test-implement-e { float: right; }'
+                               all: '.mw-test-implement-e { float: right; }'
                        }
                );
 
                                );
                        },
                        {
-                               'all': '.mw-test-implement-e2 { float: left; }'
+                               all: '.mw-test-implement-e2 { float: left; }'
                        }
                );
 
        QUnit.asyncTest( 'mw.loader.implement( only messages )', 2, function ( assert ) {
                assert.assertFalse( mw.messages.exists( 'bug_29107' ), 'Verify that the test message doesn\'t exist yet' );
 
-               mw.loader.implement( 'test.implement.msgs', [], {}, { 'bug_29107': 'loaded' } );
+               // jscs: disable requireCamelCaseOrUpperCaseIdentifiers
+               mw.loader.implement( 'test.implement.msgs', [], {}, { bug_29107: 'loaded' } );
+               // jscs: enable requireCamelCaseOrUpperCaseIdentifiers
                mw.loader.using( 'test.implement.msgs', function () {
                        QUnit.start();
                        assert.ok( mw.messages.exists( 'bug_29107' ), 'Bug 29107: messages-only module should implement ok' );
                this.sandbox.stub( mw, 'track' );
 
                mw.loader.register( [
-                       ['test.module1', '0'],
-                       ['test.module2', '0', ['test.module1']],
-                       ['test.module3', '0', ['test.module2']]
+                       [ 'test.module1', '0' ],
+                       [ 'test.module2', '0', [ 'test.module1' ] ],
+                       [ 'test.module3', '0', [ 'test.module2' ] ]
                ] );
                mw.loader.implement( 'test.module1', function () {
                        throw new Error( 'expected' );
 
        QUnit.test( 'mw.loader out-of-order implementation', 9, function ( assert ) {
                mw.loader.register( [
-                       ['test.module4', '0'],
-                       ['test.module5', '0', ['test.module4']],
-                       ['test.module6', '0', ['test.module5']]
+                       [ 'test.module4', '0' ],
+                       [ 'test.module5', '0', [ 'test.module4' ] ],
+                       [ 'test.module6', '0', [ 'test.module5' ] ]
                ] );
                mw.loader.implement( 'test.module4', function () {} );
                assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
 
        QUnit.test( 'mw.loader missing dependency', 13, function ( assert ) {
                mw.loader.register( [
-                       ['test.module7', '0'],
-                       ['test.module8', '0', ['test.module7']],
-                       ['test.module9', '0', ['test.module8']]
+                       [ 'test.module7', '0' ],
+                       [ 'test.module8', '0', [ 'test.module7' ] ],
+                       [ 'test.module9', '0', [ 'test.module8' ] ]
                ] );
                mw.loader.implement( 'test.module8', function () {} );
                assert.strictEqual( mw.loader.getState( 'test.module7' ), 'registered', 'Expected "registered" state for test.module7' );
                assert.strictEqual( mw.loader.getState( 'test.module8' ), 'error', 'Expected "error" state for test.module8' );
                assert.strictEqual( mw.loader.getState( 'test.module9' ), 'error', 'Expected "error" state for test.module9' );
                mw.loader.using(
-                       ['test.module7'],
+                       [ 'test.module7' ],
                        function () {
                                assert.ok( false, 'Success fired despite missing dependency' );
                                assert.ok( true, 'QUnit expected() count dummy' );
                        },
                        function ( e, dependencies ) {
                                assert.strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
-                               assert.deepEqual( dependencies, ['test.module7'], 'Error callback called with module test.module7' );
+                               assert.deepEqual( dependencies, [ 'test.module7' ], 'Error callback called with module test.module7' );
                        }
                );
                mw.loader.using(
-                       ['test.module9'],
+                       [ 'test.module9' ],
                        function () {
                                assert.ok( false, 'Success fired despite missing dependency' );
                                assert.ok( true, 'QUnit expected() count dummy' );
                                dependencies.sort();
                                assert.deepEqual(
                                        dependencies,
-                                       ['test.module7', 'test.module8', 'test.module9'],
+                                       [ 'test.module7', 'test.module8', 'test.module9' ],
                                        'Error callback called with all three modules as dependencies'
                                );
                        }
        QUnit.asyncTest( 'mw.loader dependency handling', 5, function ( assert ) {
                mw.loader.register( [
                        // [module, version, dependencies, group, source]
-                       ['testMissing', '1', [], null, 'testloader'],
-                       ['testUsesMissing', '1', ['testMissing'], null, 'testloader'],
-                       ['testUsesNestedMissing', '1', ['testUsesMissing'], null, 'testloader']
+                       [ 'testMissing', '1', [], null, 'testloader' ],
+                       [ 'testUsesMissing', '1', [ 'testMissing' ], null, 'testloader' ],
+                       [ 'testUsesNestedMissing', '1', [ 'testUsesMissing' ], null, 'testloader' ]
                ] );
 
                function verifyModuleStates() {
                        assert.equal( mw.loader.getState( 'testUsesNestedMissing' ), 'error', 'Module with indirect missing dependency must have state "error"' );
                }
 
-               mw.loader.using( ['testUsesNestedMissing'],
+               mw.loader.using( [ 'testUsesNestedMissing' ],
                        function () {
                                assert.ok( false, 'Error handler should be invoked.' );
                                assert.ok( true ); // Dummy to reach QUnit expect()
                                // As soon as server spits out state('testMissing', 'missing');
                                // it will bubble up and trigger the error callback.
                                // Therefor the badmodules array is not testUsesMissing or testUsesNestedMissing.
-                               assert.deepEqual( badmodules, ['testMissing'], 'Bad modules as expected.' );
+                               assert.deepEqual( badmodules, [ 'testMissing' ], 'Bad modules as expected.' );
 
                                verifyModuleStates();
 
        QUnit.asyncTest( 'mw.loader skin-function handling', 5, function ( assert ) {
                mw.loader.register( [
                        // [module, version, dependencies, group, source, skip]
-                       ['testSkipped', '1', [], null, 'testloader', 'return true;'],
-                       ['testNotSkipped', '1', [], null, 'testloader', 'return false;'],
-                       ['testUsesSkippable', '1', ['testSkipped', 'testNotSkipped'], null, 'testloader']
+                       [ 'testSkipped', '1', [], null, 'testloader', 'return true;' ],
+                       [ 'testNotSkipped', '1', [], null, 'testloader', 'return false;' ],
+                       [ 'testUsesSkippable', '1', [ 'testSkipped', 'testNotSkipped' ], null, 'testloader' ]
                ] );
 
                function verifyModuleStates() {
                        assert.equal( mw.loader.getState( 'testUsesSkippable' ), 'ready', 'Module is ready when skippable dependencies are ready' );
                }
 
-               mw.loader.using( ['testUsesSkippable'],
+               mw.loader.using( [ 'testUsesSkippable' ],
                        function () {
                                assert.ok( true, 'Success handler should be invoked.' );
                                assert.ok( true ); // Dummy to match error handler and reach QUnit expect()
                // This bug was actually already fixed in 1.18 and later when discovered in 1.17.
                // Test is for regressions!
 
-               // Forge an URL to the test callback script
+               // Forge a URL to the test callback script
                var target = QUnit.fixurl(
                        mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/qunitOkCall.js'
                );
                mw.loader.load( target );
        } );
 
+       QUnit.asyncTest( 'mw.loader( "/absolute-path" )', 2, function ( assert ) {
+               // Forge a URL to the test callback script
+               var target = QUnit.fixurl(
+                       mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/qunitOkCall.js'
+               );
+
+               // Confirm that mw.loader.load() works with absolute-paths (relative to current hostname)
+               assert.equal( target.slice( 0, 1 ), '/', 'URL is relative to document root' );
+
+               // Async!
+               // The target calls QUnit.start
+               mw.loader.load( target );
+       } );
+
+       QUnit.asyncTest( 'mw.loader() executing race (T112232)', 2, function ( assert ) {
+               var done = false;
+
+               // The red herring schedules its CSS buffer first. In T112232, a bug in the
+               // state machine would cause the job for testRaceLoadMe to run with an earlier job.
+               mw.loader.implement(
+                       'testRaceRedHerring',
+                       function () {},
+                       { css: [ '.mw-testRaceRedHerring {}' ] }
+               );
+               mw.loader.implement(
+                       'testRaceLoadMe',
+                       function () {
+                               done = true;
+                       },
+                       { css: [ '.mw-testRaceLoadMe { float: left; }' ] }
+               );
+
+               mw.loader.load( [ 'testRaceRedHerring', 'testRaceLoadMe' ] );
+               mw.loader.using( 'testRaceLoadMe', function () {
+                       assert.strictEqual( done, true, 'script ran' );
+                       assert.strictEqual( mw.loader.getState( 'testRaceLoadMe' ), 'ready', 'state' );
+               } ).always( QUnit.start );
+       } );
+
        QUnit.test( 'mw.html', 13, function ( assert ) {
                assert.throws( function () {
                        mw.html.escape();
 
                mw.hook( 'test.hook.data' ).add( function ( data1, data2 ) {
                        assert.equal( data1, 'example', 'Fire with data (string param)' );
-                       assert.deepEqual( data2, ['two'], 'Fire with data (array param)' );
+                       assert.deepEqual( data2, [ 'two' ], 'Fire with data (array param)' );
                } );
-               mw.hook( 'test.hook.data' ).fire( 'example', ['two'] );
+               mw.hook( 'test.hook.data' ).fire( 'example', [ 'two' ] );
 
                hook = mw.hook( 'test.hook.chainable' );
                assert.strictEqual( hook.add(), hook, 'hook.add is chainable' );
                add = hook.add;
                fire = hook.fire;
                add( function ( x, y ) {
-                       assert.deepEqual( [x, y], ['x', 'y'], 'Detached (contextless) with data' );
+                       assert.deepEqual( [ x, y ], [ 'x', 'y' ], 'Detached (contextless) with data' );
                } );
                fire( 'x', 'y' );
 
                                assert.equal( chr, 'z', 'Adding callback later invokes right away with last data' );
                        } );
 
-               assert.deepEqual( chars, ['x', 'y', 'z'], 'Multiple callbacks with multiple fires' );
+               assert.deepEqual( chars, [ 'x', 'y', 'z' ], 'Multiple callbacks with multiple fires' );
 
                chars = [];
                callback = function ( chr ) {
 
                assert.deepEqual(
                        chars,
-                       ['x', 'x', 'x', 'x', 'y', 'z'],
+                       [ 'x', 'x', 'x', 'x', 'y', 'z' ],
                        '"add" and "remove" support variadic arguments. ' +
                                '"add" does not filter unique. ' +
                                '"remove" removes all equal by reference. ' +
index b73d2e3..c1f1484 100644 (file)
@@ -2,54 +2,54 @@
        var
                // Based on IPTest.php > testisIPv4
                IPV4_CASES = [
-                       [false, false, 'Boolean false is not an IP'],
-                       [false, true, 'Boolean true is not an IP'],
-                       [false, '', 'Empty string is not an IP'],
-                       [false, 'abc', '"abc" is not an IP'],
-                       [false, ':', 'Colon is not an IP'],
-                       [false, '124.24.52', 'IPv4 not enough quads'],
-                       [false, '24.324.52.13', 'IPv4 out of range'],
-                       [false, '.24.52.13', 'IPv4 starts with period'],
-
-                       [true, '124.24.52.13', '124.24.52.134 is a valid IP'],
-                       [true, '1.24.52.13', '1.24.52.13 is a valid IP'],
-                       [false, '74.24.52.13/20', 'IPv4 ranges are not recognized as valid IPs']
+                       [ false, false, 'Boolean false is not an IP' ],
+                       [ false, true, 'Boolean true is not an IP' ],
+                       [ false, '', 'Empty string is not an IP' ],
+                       [ false, 'abc', '"abc" is not an IP' ],
+                       [ false, ':', 'Colon is not an IP' ],
+                       [ false, '124.24.52', 'IPv4 not enough quads' ],
+                       [ false, '24.324.52.13', 'IPv4 out of range' ],
+                       [ false, '.24.52.13', 'IPv4 starts with period' ],
+
+                       [ true, '124.24.52.13', '124.24.52.134 is a valid IP' ],
+                       [ true, '1.24.52.13', '1.24.52.13 is a valid IP' ],
+                       [ false, '74.24.52.13/20', 'IPv4 ranges are not recognized as valid IPs' ]
                ],
 
                // Based on IPTest.php > testisIPv6
                IPV6_CASES = [
-                       [false, ':fc:100::', 'IPv6 starting with lone ":"'],
-                       [false, 'fc:100:::', 'IPv6 ending with a ":::"'],
-                       [false, 'fc:300', 'IPv6 with only 2 words'],
-                       [false, 'fc:100:300', 'IPv6 with only 3 words'],
-
-                       [false, 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"'],
-                       [false, 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"'],
-
-                       [false, ':::'],
-                       [false, '::0:', 'IPv6 ending in a lone ":"'],
-
-                       [true,  '::', 'IPv6 zero address'],
-
-                       [false, '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words'],
-                       [false, '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words'],
-
-                       [false, ':fc::100', 'IPv6 starting with lone ":"'],
-                       [false, 'fc::100:', 'IPv6 ending with lone ":"'],
-                       [false, 'fc:::100', 'IPv6 with ":::" in the middle'],
-
-                       [true,  'fc::100', 'IPv6 with "::" and 2 words'],
-                       [true,  'fc::100:a', 'IPv6 with "::" and 3 words'],
-                       [true,  'fc::100:a:d', 'IPv6 with "::" and 4 words'],
-                       [true,  'fc::100:a:d:1', 'IPv6 with "::" and 5 words'],
-                       [true,  'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words'],
-                       [true,  'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words'],
-                       [true,  '2001::df', 'IPv6 with "::" and 2 words'],
-                       [true,  '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words'],
-                       [true,  '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words'],
-
-                       [false, 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words'],
-                       [false, 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words']
+                       [ false, ':fc:100::', 'IPv6 starting with lone ":"' ],
+                       [ false, 'fc:100:::', 'IPv6 ending with a ":::"' ],
+                       [ false, 'fc:300', 'IPv6 with only 2 words' ],
+                       [ false, 'fc:100:300', 'IPv6 with only 3 words' ],
+
+                       [ false, 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"' ],
+                       [ false, 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"' ],
+
+                       [ false, ':::' ],
+                       [ false, '::0:', 'IPv6 ending in a lone ":"' ],
+
+                       [ true,  '::', 'IPv6 zero address' ],
+
+                       [ false, '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' ],
+                       [ false, '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' ],
+
+                       [ false, ':fc::100', 'IPv6 starting with lone ":"' ],
+                       [ false, 'fc::100:', 'IPv6 ending with lone ":"' ],
+                       [ false, 'fc:::100', 'IPv6 with ":::" in the middle' ],
+
+                       [ true,  'fc::100', 'IPv6 with "::" and 2 words' ],
+                       [ true,  'fc::100:a', 'IPv6 with "::" and 3 words' ],
+                       [ true,  'fc::100:a:d', 'IPv6 with "::" and 4 words' ],
+                       [ true,  'fc::100:a:d:1', 'IPv6 with "::" and 5 words' ],
+                       [ true,  'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words' ],
+                       [ true,  'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words' ],
+                       [ true,  '2001::df', 'IPv6 with "::" and 2 words' ],
+                       [ true,  '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words' ],
+                       [ true,  '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words' ],
+
+                       [ false, 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' ],
+                       [ false, 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' ]
                ];
 
        Array.prototype.push.apply( IPV6_CASES,
@@ -70,7 +70,7 @@
                        '::fc:100:a:d:1:e:ac',
                        'fc:100:a:d:1:e:ac:0'
                ], function ( el ) {
-                       return [[ true, el, el + ' is a valid IP' ]];
+                       return [ [ true, el, el + ' is a valid IP' ] ];
                } )
        );
 
@@ -83,7 +83,7 @@
                },
                messages: {
                        // Used by accessKeyLabel in test for addPortletLink
-                       'brackets': '[$1]',
+                       brackets: '[$1]',
                        'word-separator': ' '
                }
        } ) );
 
        QUnit.test( 'wikiScript', 4, function ( assert ) {
                mw.config.set( {
-                       'wgScript': '/w/i.php', // customized wgScript for bug 39103
-                       'wgLoadScript': '/w/l.php', // customized wgLoadScript for bug 39103
-                       'wgScriptPath': '/w',
-                       'wgScriptExtension': '.php'
+                       wgScript: '/w/i.php', // customized wgScript for bug 39103
+                       wgLoadScript: '/w/l.php', // customized wgLoadScript for bug 39103
+                       wgScriptPath: '/w',
+                       wgScriptExtension: '.php'
                } );
 
                assert.equal( mw.util.wikiScript(), mw.config.get( 'wgScript' ),
                url = 'http://example.org/#&foo=bad';
                assert.strictEqual( mw.util.getParamValue( 'foo', url ), null, 'Ignore hash if param is not in querystring but in hash (bug 27427)' );
 
-               url = 'example.org?' + $.param( { 'TEST': 'a b+c' } );
+               url = 'example.org?' + $.param( { TEST: 'a b+c' } );
                assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c', 'Bug 30441: getParamValue must understand "+" encoding of space' );
 
-               url = 'example.org?' + $.param( { 'TEST': 'a b+c d' } ); // check for sloppy code from r95332 :)
+               url = 'example.org?' + $.param( { TEST: 'a b+c d' } ); // check for sloppy code from r95332 :)
                assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c d', 'Bug 30441: getParamValue must understand "+" encoding of space (multiple spaces)' );
        } );
 
                );
 
                assert.equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-test-tb', 'Link was inserted within correct portlet' );
-               assert.strictEqual( $tbMW.next()[0], tbRL, 'Link is in the correct position (nextnode as Node object)' );
+               assert.strictEqual( $tbMW.next()[ 0 ], tbRL, 'Link is in the correct position (nextnode as Node object)' );
 
                cuQuux = mw.util.addPortletLink( 'p-test-custom', '#', 'Quux', null, 'Example [shift-x]', 'q' );
                $cuQuux = $( cuQuux );
                tbRLDM = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm', 'List of all default modules ', 'd', '#t-rl' );
 
-               assert.strictEqual( $( tbRLDM ).next()[0], tbRL, 'Link is in the correct position (CSS selector as nextnode)' );
+               assert.strictEqual( $( tbRLDM ).next()[ 0 ], tbRL, 'Link is in the correct position (CSS selector as nextnode)' );
 
                caFoo = mw.util.addPortletLink( 'p-test-views', '#', 'Foo' );
 
                assert.strictEqual( $( caFoo ).find( 'span' ).length, 1, 'A <span> element should be added for porlets with vectorTabs class.' );
 
                addedAfter = mw.util.addPortletLink( 'p-test-tb', '#', 'After foo', 'post-foo', 'After foo', null, $( tbRL ) );
-               assert.strictEqual( $( addedAfter ).next()[0], tbRL, 'Link is in the correct position (jQuery object as nextnode)' );
+               assert.strictEqual( $( addedAfter ).next()[ 0 ], tbRL, 'Link is in the correct position (jQuery object as nextnode)' );
 
                // test case - nonexistent id as next node
                tbRLDMnonexistentid = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm-nonexistent', 'List of all default modules ', 'd', '#t-rl-nonexistent' );
 
-               assert.equal( tbRLDMnonexistentid, $( '#p-test-tb li:last' )[0], 'Fallback to adding at the end (nextnode non-matching CSS selector)' );
+               assert.equal( tbRLDMnonexistentid, $( '#p-test-tb li:last' )[ 0 ], 'Fallback to adding at the end (nextnode non-matching CSS selector)' );
 
                // test case - empty jquery object as next node
                tbRLDMemptyjquery = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm-empty-jquery', 'List of all default modules ', 'd', $( '#t-rl-nonexistent' ) );
 
-               assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[0], 'Fallback to adding at the end (nextnode as empty jQuery object)' );
+               assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[ 0 ], 'Fallback to adding at the end (nextnode as empty jQuery object)' );
        } );
 
        QUnit.test( 'validateEmail', 6, function ( assert ) {
 
        QUnit.test( 'isIPv6Address', 40, function ( assert ) {
                $.each( IPV6_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv6Address( ipCase[1] ), ipCase[0], ipCase[2] );
+                       assert.strictEqual( mw.util.isIPv6Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
        } );
 
        QUnit.test( 'isIPv4Address', 11, function ( assert ) {
                $.each( IPV4_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv4Address( ipCase[1] ), ipCase[0], ipCase[2] );
+                       assert.strictEqual( mw.util.isIPv4Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
        } );
 
        QUnit.test( 'isIPAddress', 51, function ( assert ) {
                $.each( IPV4_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv4Address( ipCase[1] ), ipCase[0], ipCase[2] );
+                       assert.strictEqual( mw.util.isIPv4Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
 
                $.each( IPV6_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv6Address( ipCase[1] ), ipCase[0], ipCase[2] );
+                       assert.strictEqual( mw.util.isIPv6Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
        } );
 }( mediaWiki, jQuery ) );