├── .eslintignore ├── .eslintrc.json ├── .gitignore ├── .gitreview ├── .mailmap ├── .phan ├── config.php └── stubs │ └── namespaces.php ├── .phpcs.xml ├── .stylelintrc.json ├── CODE_OF_CONDUCT.md ├── COPYING ├── CREDITS ├── Gruntfile.js ├── INSTALL ├── README ├── UploadWizard.alias.php ├── UploadWizard.config.php ├── composer.json ├── extension.json ├── i18n ├── acm.json ├── af.json ├── alt.json ├── am.json ├── ami.json ├── an.json ├── anp.json ├── api │ ├── ar.json │ ├── ast.json │ ├── be.json │ ├── bg.json │ ├── ce.json │ ├── de.json │ ├── el.json │ ├── en.json │ ├── es.json │ ├── et.json │ ├── eu.json │ ├── fa.json │ ├── fi.json │ ├── fr.json │ ├── gl.json │ ├── he.json │ ├── hi.json │ ├── hu.json │ ├── ia.json │ ├── id.json │ ├── is.json │ ├── ja.json │ ├── ko.json │ ├── ksh.json │ ├── lb.json │ ├── lrc.json │ ├── lt.json │ ├── lv.json │ ├── mk.json │ ├── ml.json │ ├── mnc.json │ ├── nap.json │ ├── nb.json │ ├── nl.json │ ├── pl.json │ ├── pt-br.json │ ├── pt.json │ ├── qqq.json │ ├── ro.json │ ├── roa-tara.json │ ├── ru.json │ ├── sl.json │ ├── sv.json │ ├── szy.json │ ├── tr.json │ ├── uk.json │ ├── vi.json │ ├── zh-hans.json │ └── zh-hant.json ├── ar.json ├── arc.json ├── arq.json ├── as.json ├── ast.json ├── atj.json ├── av.json ├── awa.json ├── az.json ├── azb.json ├── ba.json ├── ban.json ├── bbc-latn.json ├── bcl.json ├── be-tarask.json ├── be.json ├── bew.json ├── bg.json ├── bgn.json ├── bjn.json ├── blk.json ├── bn.json ├── bqi.json ├── br.json ├── bs.json ├── ca.json ├── ccp.json ├── ce.json ├── ckb.json ├── crh-latn.json ├── cs.json ├── cu.json ├── cv.json ├── cy.json ├── da.json ├── dag.json ├── de-ch.json ├── de-formal.json ├── de.json ├── dga.json ├── diq.json ├── dsb.json ├── dty.json ├── el.json ├── en-ca.json ├── en-gb.json ├── en.json ├── eo.json ├── es.json ├── et.json ├── eu.json ├── fa.json ├── fi.json ├── fit.json ├── fo.json ├── fr.json ├── frc.json ├── frp.json ├── frr.json ├── fur.json ├── fy.json ├── ga.json ├── gd.json ├── gl.json ├── gn.json ├── gom-latn.json ├── gor.json ├── gpe.json ├── grc.json ├── gsw.json ├── gu.json ├── guc.json ├── gur.json ├── ha.json ├── he.json ├── hi.json ├── hif-latn.json ├── hr.json ├── hsb.json ├── ht.json ├── hu.json ├── hy.json ├── hyw.json ├── ia.json ├── id.json ├── ie.json ├── ig.json ├── ilo.json ├── inh.json ├── io.json ├── is.json ├── isv-latn.json ├── it.json ├── ja.json ├── jbo.json ├── jv.json ├── ka.json ├── kaa.json ├── kab.json ├── kcg.json ├── kge.json ├── kiu.json ├── kjh.json ├── kjp.json ├── kk-cyrl.json ├── km.json ├── kn.json ├── ko-kp.json ├── ko.json ├── koi.json ├── krc.json ├── ksh.json ├── ku-latn.json ├── kum.json ├── kus.json ├── ky.json ├── lad.json ├── lb.json ├── lez.json ├── lfn.json ├── li.json ├── lij.json ├── lki.json ├── lmo.json ├── lo.json ├── lrc.json ├── lt.json ├── lus.json ├── lv.json ├── lzh.json ├── mag.json ├── mai.json ├── mg.json ├── min.json ├── mk.json ├── ml.json ├── mn.json ├── mnc.json ├── mos.json ├── mr.json ├── ms.json ├── mt.json ├── mui.json ├── mwl.json ├── my.json ├── mzn.json ├── nap.json ├── nb.json ├── nds-nl.json ├── ne.json ├── nl-informal.json ├── nl.json ├── nn.json ├── nqo.json ├── oc.json ├── olo.json ├── om.json ├── or.json ├── os.json ├── pa.json ├── pam.json ├── pdc.json ├── pfl.json ├── pl.json ├── pms.json ├── pnb.json ├── ps.json ├── pt-br.json ├── pt.json ├── pwn.json ├── qqq.json ├── qu.json ├── rki.json ├── rmc.json ├── ro.json ├── roa-tara.json ├── ru.json ├── rue.json ├── rw.json ├── sa.json ├── sah.json ├── sat.json ├── sc.json ├── scn.json ├── sco.json ├── sd.json ├── sdh.json ├── se.json ├── sh-latn.json ├── shn.json ├── si.json ├── sje.json ├── sk.json ├── skr-arab.json ├── sl.json ├── smn.json ├── sms.json ├── so.json ├── sq.json ├── sr-ec.json ├── sr-el.json ├── su.json ├── sv.json ├── sw.json ├── syl.json ├── szl.json ├── szy.json ├── ta.json ├── tay.json ├── tcy.json ├── te.json ├── tet.json ├── tg-cyrl.json ├── th.json ├── ti.json ├── tig.json ├── tl.json ├── tly.json ├── tok.json ├── tpi.json ├── tr.json ├── trv.json ├── tt-cyrl.json ├── ttj.json ├── tyv.json ├── tzm.json ├── udm.json ├── ug-arab.json ├── uk.json ├── ur.json ├── uz.json ├── vec.json ├── vep.json ├── vi.json ├── wa.json ├── wal.json ├── wuu-hans.json ├── xmf.json ├── xsy.json ├── yi.json ├── yo.json ├── yua.json ├── yue-hant.json ├── zgh.json ├── zh-hans.json └── zh-hant.json ├── includes ├── ApiFlickrBlacklist.php ├── ApiMediaDetection.php ├── ApiQueryAllCampaigns.php ├── Campaign.php ├── CampaignContent.php ├── CampaignContentHandler.php ├── CampaignHooks.php ├── CampaignPageFormatter.php ├── CampaignSchema.php ├── CodeEditorHooks.php ├── Config.php ├── FlickrBlacklist.php ├── Hooks.php ├── SchemaHooks.php ├── Specials │ ├── SpecialCampaigns.php │ ├── SpecialUploadWizard.php │ └── UploadWizardSimpleForm.php └── Tutorial.php ├── jsdoc.json ├── maintenance └── migrateCampaigns.php ├── package-lock.json ├── package.json ├── resources ├── .eslintrc.json ├── controller │ ├── uw.controller.Deed.js │ ├── uw.controller.Details.js │ ├── uw.controller.Step.js │ ├── uw.controller.Thanks.js │ ├── uw.controller.Tutorial.js │ ├── uw.controller.Upload.js │ └── uw.controller.base.js ├── deed │ ├── dialog │ │ ├── uw.deed.dialog.PatentDialog.js │ │ └── uw.deed.dialog.base.js │ ├── uw.deed.Abstract.js │ ├── uw.deed.Custom.js │ ├── uw.deed.OwnWork.js │ ├── uw.deed.ThirdParty.js │ └── uw.deed.base.js ├── details │ ├── uw.CampaignDetailsWidget.js │ ├── uw.CategoriesDetailsWidget.js │ ├── uw.CategoriesDetailsWidget.less │ ├── uw.DateDetailsWidget.js │ ├── uw.DateDetailsWidget.less │ ├── uw.LanguageDropdownWidget.js │ ├── uw.LocationDetailsWidget.js │ ├── uw.LocationDetailsWidget.less │ ├── uw.MultipleLanguageInputWidget.js │ ├── uw.MultipleLanguageInputWidget.less │ ├── uw.OtherDetailsWidget.js │ ├── uw.SingleLanguageInputWidget.js │ ├── uw.SingleLanguageInputWidget.less │ ├── uw.StatementWidget.js │ ├── uw.StatementWidget.less │ ├── uw.TitleDetailsWidget.js │ └── uw.UlsWidget.js ├── ext.uploadWizard.uploadCampaign.display │ ├── content.less │ └── list.less ├── handlers │ ├── mw.ApiUploadFormDataHandler.js │ ├── mw.ApiUploadHandler.js │ └── mw.ApiUploadPostHandler.js ├── images │ ├── 32px-Blank-document-broken.svg.png │ ├── 32px-Blank-document.svg.png │ ├── 36px-Cc-by_new_white.svg.png │ ├── 36px-Cc-public_domain_mark_white.svg.png │ ├── 36px-Cc-zero.svg.png │ ├── 36px-Share_Alike.svg.png │ ├── 64px-OOjs_UI_icon_alert_image_warning.svg.png │ ├── cc.svg │ ├── cta-icon.svg │ ├── down-chevron.png │ ├── no-weapons.svg │ └── zero.svg ├── jquery.arrowSteps │ ├── jquery.arrowSteps.js │ └── jquery.arrowSteps.less ├── jquery │ ├── jquery.lazyload.js │ └── jquery.morphCrossfade.js ├── mw.DestinationChecker.js ├── mw.Escaper.js ├── mw.FlickrChecker.js ├── mw.GroupProgressBar.js ├── mw.QuickTitleChecker.js ├── mw.UploadWizard.js ├── mw.UploadWizardDeedChooser.js ├── mw.UploadWizardDetails.js ├── mw.UploadWizardLicenseInput.js ├── mw.UploadWizardPage.js ├── mw.UploadWizardUpload.js ├── mw.UploadWizardUploadInterface.js ├── mw.canvas.js ├── mw.errorDialog.js ├── mw.fileApi.js ├── transports │ └── mw.FormDataTransport.js ├── ui │ ├── steps │ │ ├── uw.ui.Deed.js │ │ ├── uw.ui.Deed.less │ │ ├── uw.ui.Details.js │ │ ├── uw.ui.Details.less │ │ ├── uw.ui.Thanks.js │ │ ├── uw.ui.Thanks.less │ │ ├── uw.ui.Tutorial.js │ │ ├── uw.ui.Tutorial.less │ │ ├── uw.ui.Upload.js │ │ └── uw.ui.Upload.less │ ├── uw.ui.Step.js │ ├── uw.ui.Step.less │ ├── uw.ui.Wizard.js │ └── uw.ui.base.js ├── uploadWizard.less ├── uploadWizard.noJs.css ├── uw.ConcurrentQueue.js ├── uw.CopyMetadataWidget.js ├── uw.DetailsWidget.js ├── uw.FieldLayout.js ├── uw.FieldLayout.less ├── uw.LicenseGroup.js ├── uw.LicensePreviewDialog.js ├── uw.ValidatableElement.js ├── uw.ValidationMessageElement.js ├── uw.ValidationStatus.js ├── uw.units.js └── uw │ └── uw.base.js ├── sql ├── abstractSchemaChanges │ └── patch-uw_campaigns-cleanup.json ├── mysql │ ├── patch-uw_campaigns-cleanup.sql │ └── tables-generated.sql ├── postgres │ ├── patch-uw_campaigns-cleanup.sql │ └── tables-generated.sql ├── sqlite │ ├── patch-uw_campaigns-cleanup.sql │ └── tables-generated.sql └── tables.json └── tests ├── api ├── requirements.txt └── test-image-rosa-mx-15x15.png ├── phpunit ├── ApiFlickrBlacklistTest.php ├── ConfigTest.php └── SpecialUploadWizardTest.php └── qunit ├── .eslintrc.json ├── controller ├── uw.controller.Deed.test.js ├── uw.controller.Details.test.js ├── uw.controller.Step.test.js ├── uw.controller.Thanks.test.js ├── uw.controller.Tutorial.test.js └── uw.controller.Upload.test.js ├── details └── uw.LocationDetailsWidget.test.js ├── mw.FlickrChecker.test.js ├── mw.UploadWizardLicenseInput.test.js ├── mw.UploadWizardUpload.test.js ├── mw.fileApi.test.js ├── transports └── mw.FormDataTransport.test.js ├── uw.ConcurrentQueue.test.js ├── uw.CopyMetadataWidget.test.js └── uw.TitleDetailsWidget.test.js /.eslintignore: -------------------------------------------------------------------------------- 1 | # TODO: Move to a /lib folder 2 | /resources/jquery/jquery.lazyload.js 3 | /vendor/ 4 | /docs/ 5 | 6 | # Language files written automatically by TranslateWiki 7 | /**/i18n/**/*.json 8 | !/**/i18n/**/en.json 9 | !/**/i18n/**/qqq.json 10 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "wikimedia/server" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .svn 2 | *~ 3 | *.kate-swp 4 | .*.swp 5 | docs/ 6 | *.pyc 7 | node_modules 8 | .tox 9 | vendor 10 | composer.lock 11 | .DS_Store 12 | .eslintcache 13 | /.stylelintcache 14 | -------------------------------------------------------------------------------- /.gitreview: -------------------------------------------------------------------------------- 1 | [gerrit] 2 | host=gerrit.wikimedia.org 3 | port=29418 4 | project=mediawiki/extensions/UploadWizard.git 5 | track=1 6 | defaultrebase=0 7 | -------------------------------------------------------------------------------- /.phan/config.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | . 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "stylelint-config-wikimedia", 3 | "rules": { 4 | "selector-max-id": null, 5 | "no-descending-specificity": null, 6 | "declaration-property-unit-disallowed-list": null 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct). 2 | -------------------------------------------------------------------------------- /CREDITS: -------------------------------------------------------------------------------- 1 | We would like to recognize the following names for their 2 | contribution to this extension. 3 | 4 | 5 | * Aaron Arcos 6 | * Aaron Schulz 7 | * Alexander Monk 8 | * Alexandre Emsenhuber 9 | * Amir E. Aharoni 10 | * ananay 11 | * Andre Klapper 12 | * Ankur Anand 13 | * Antoine Musso 14 | * Arthur Richards 15 | * Bartosz Dziewoński 16 | * Bene 17 | * Benny Situ 18 | * Brad Jorsch 19 | * Brian Wolff 20 | * Brion Vibber 21 | * Chad Horohoe 22 | * Chris McMahon 23 | * Dan Duvall 24 | * dan-nl 25 | * Daren Welsh 26 | * David E. Narváez 27 | * Derk-Jan Hartman 28 | * Dmitriy Sintsov 29 | * Ebrahim Byagowi 30 | * Erik Moeller 31 | * Florian Schmidt 32 | * fomafix 33 | * Geoffrey Mon 34 | * Gergő Tisza 35 | * Gilles Dubuc 36 | * haritha28 37 | * Ian Baker 38 | * inchikutty 39 | * James Forrester 40 | * Jan Gerber 41 | * Jeff Janes 42 | * Jeroen De Dauw 43 | * John Du Hart 44 | * Justin Du 45 | * Kai_WMDE 46 | * kghbln 47 | * Kunal Mehta 48 | * Leo Koppelkamm 49 | * liangent 50 | * lokal-profil 51 | * Lupo 52 | * m4tx 53 | * Maarten Dammers 54 | * Mark Hershberger 55 | * Mark Holmquist 56 | * Matthew Flaschen 57 | * Matthias Mullie 58 | * Max Semenik 59 | * mayankmadan 60 | * mhutti1 61 | * Michael Dale 62 | * Nazmul Chowdhury 63 | * Neil Kandalgaonkar 64 | * Nemo bis 65 | * Niklas Laxström 66 | * Nischay Nahata 67 | * Ocean behind ears 68 | * Ori Livneh 69 | * paladox 70 | * Platonides 71 | * pmolina 72 | * PranavK 73 | * Prateek Saxena 74 | * Purodha Blissenbach 75 | * rahul21 76 | * Raimond Spekking 77 | * Ramunas Geciauskas 78 | * richa 79 | * Ricordisamoa 80 | * rillke 81 | * Roan Kattouw 82 | * Rob Moen 83 | * Robin Pepermans 84 | * Ryan Kaldari 85 | * Sam Reed 86 | * Siebrand Mazeland 87 | * theopolisme 88 | * Thomas David Baker 89 | * Tim Starling 90 | * Timo Tijhof 91 | * Tony Thomas 92 | * Trevor Parscal 93 | * Umherirrender 94 | * Vikas S Yaligar 95 | * Yuki Shira 96 | * Yuri Astrakhan 97 | * Yuvi Panda 98 | * Željko Filipin 99 | * zhuyifei1999 100 | 101 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function ( grunt ) { 4 | const conf = grunt.file.readJSON( 'extension.json' ); 5 | 6 | grunt.loadNpmTasks( 'grunt-banana-checker' ); 7 | grunt.loadNpmTasks( 'grunt-contrib-watch' ); 8 | grunt.loadNpmTasks( 'grunt-eslint' ); 9 | grunt.loadNpmTasks( 'grunt-stylelint' ); 10 | 11 | grunt.initConfig( { 12 | eslint: { 13 | options: { 14 | cache: true, 15 | fix: grunt.option( 'fix' ) 16 | }, 17 | all: '.' 18 | }, 19 | stylelint: { 20 | options: { 21 | reportNeedlessDisables: true, 22 | cache: true 23 | }, 24 | all: 'resources/{**/,}*.{css,less}' 25 | }, 26 | banana: conf.MessagesDirs, 27 | watch: { 28 | files: [ 29 | '.{stylelintrc,eslintrc}.json', 30 | '<%= eslint.all %>', 31 | '<%= stylelint.all %>' 32 | ], 33 | tasks: 'test' 34 | } 35 | } ); 36 | 37 | grunt.registerTask( 'test', [ 'eslint', 'stylelint', 'banana' ] ); 38 | grunt.registerTask( 'default', 'test' ); 39 | }; 40 | -------------------------------------------------------------------------------- /INSTALL: -------------------------------------------------------------------------------- 1 | UploadWizard Extension, v.1.1 2 | 3 | * download the latest available version and extract it to your wiki extension directory. 4 | * add the following line to LocalSettings.php 5 | 6 | $wgEnableUploads = true; 7 | $wgUseImageMagick = true; 8 | $wgImageMagickConvertCommand = ; # often /usr/bin/convert 9 | 10 | wfLoadExtension( 'UploadWizard' ); 11 | 12 | * check out the Special:Version page to verify the installation 13 | * make sure that your $IP/images directory is writable by the web server 14 | 15 | See https://www.mediawiki.org/wiki/Extension:UploadWizard for further details. 16 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | UploadWizard is an extension for MediaWiki, which adds a more user-friendly wizard for uploading media files. 2 | 3 | Although developed with Wikimedia Commons in mind, it should be useful for other users of MediaWiki as well. 4 | However it has not been tested extensively with non-Wikimedia installations of MediaWiki. Your feedback will 5 | help greatly. 6 | 7 | UploadWizard is licensed under the same terms as MediaWiki itself. 8 | 9 | If you are using UploadWizard in an environment where licenses are not used, you may want to add the 10 | configuration below in LocalSettings.php. This will limit the license choices to a single default that 11 | references the wiki's generic disclaimer. Note that there are many other configuration settings to add 12 | depending on your use case. 13 | 14 | ```php 15 | $wgUploadWizardConfig = [ 16 | 'licensing' => [ 17 | 'ownWorkDefault' => 'own', 18 | 'ownWork' => [ 19 | 'type' => 'or', 20 | 'template' => 'licensing', // this adds a link to Template:Licensing to the file info page 21 | 'licenses' => [ 22 | 'generic', 23 | ] 24 | ] 25 | ] 26 | ]; 27 | ``` 28 | 29 | If you wish to modify the generic messages, you can modify them within the wiki at the following pages: 30 | * MediaWiki:mwe-upwiz-source-ownwork 31 | * MediaWiki:Mwe-upwiz-source-ownwork-assert-generic 32 | * MediaWiki:Mwe-upwiz-source-ownwork-generic-explain 33 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require-dev": { 3 | "mediawiki/mediawiki-codesniffer": "47.0.0", 4 | "mediawiki/mediawiki-phan-config": "0.15.1", 5 | "mediawiki/minus-x": "1.1.3", 6 | "php-parallel-lint/php-console-highlighter": "1.0.0", 7 | "php-parallel-lint/php-parallel-lint": "1.4.0" 8 | }, 9 | "scripts": { 10 | "test": [ 11 | "parallel-lint . --exclude vendor --exclude node_modules", 12 | "@phpcs", 13 | "minus-x check ." 14 | ], 15 | "fix": [ 16 | "minus-x fix .", 17 | "phpcbf" 18 | ], 19 | "phan": "phan -d . --long-progress-bar", 20 | "phpcs": "phpcs -sp --cache" 21 | }, 22 | "config": { 23 | "allow-plugins": { 24 | "dealerdirect/phpcodesniffer-composer-installer": true 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /i18n/acm.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "MRidhaAJ" 5 | ] 6 | }, 7 | "uploadwizard": "مُعالِج الرَّفع", 8 | "uploadwizard-desc": "مُعالِج الرَّفع أداةٌ سهلة الاستخدام لرفع الوسائط المُتعدِدة", 9 | "tag-uploadwizard": "مُعالِج الرَّفع" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/alt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kareyac" 5 | ] 6 | }, 7 | "mwe-upwiz-dialog-no": "Јок" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/am.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Elfalem" 5 | ] 6 | }, 7 | "api-error-noimageinfo": "ፋይል መላኩ ተሳክቷል ግን አቅራቢው ምንም ዓይነት መረጃ ስለ ፋይሉ አልሰጠም።", 8 | "mwe-upwiz-api-warning-exists": "በውኪው ላይ [$1 ሌላ ፋይል] በዚህ ስም አለ።", 9 | "mwe-upwiz-tutorial-error-localized-file-missing": "ይቅርታ፣ መማሪያ በእርስዎ ቋንቋ ማግኘት አልተቻለም። በሱ ቦታ የእንግሊዝኛው ይታያል።", 10 | "mwe-upwiz-help-desk": "የእርዳታ ቦታ", 11 | "mwe-upwiz-transport-started": "እየጀመረ ነው...", 12 | "mwe-upwiz-uploading": "በመላክ ላይ ነው...", 13 | "mwe-upwiz-transported": "መላኩን በመጨረስ ላይ ነው...", 14 | "mwe-upwiz-stashed-upload": "እሺ", 15 | "mwe-upwiz-getting-metadata": "የፋይሉን መረጃና ቅድመ-ዕይታ በማግኘት ላይ ነው...", 16 | "mwe-upwiz-submitting-details": "ዝርዝሮችን በመላክና በማሳተም ላይ ነው...", 17 | "mwe-upwiz-published": "ተጭኗል!", 18 | "mwe-upwiz-failed": "አልተቻለም።", 19 | "mwe-upwiz-remove": "ለማጥፋት", 20 | "mwe-upwiz-remove-upload": "ይህን ፋይል ከሚላኩት ፋይሎች ዝርዝር ላይ አጥፋ", 21 | "mwe-upwiz-remove-description": "ይህን ገለፃ አጥፋ", 22 | "mwe-upwiz-upload": "ለመላክ", 23 | "mwe-upwiz-file-all-ok": "የተላኩት ሁሉ ስኬታማ ናቸው!", 24 | "mwe-upwiz-file-some-failed": "አንዳንድ ፋይሎችን መላክ አልተቻለም።", 25 | "mwe-upwiz-file-retry": "ለመላክ ያልተቻሉትን እንደገና ሞክር", 26 | "mwe-upwiz-next-file-despite-failures": "ቢሆንም ቀጥል", 27 | "mwe-upwiz-skip-tutorial-future": "ወደፊት ይህንን ደረጃ ዘልለህ እለፍ", 28 | "mwe-upwiz-file-all-failed": "ለመላክ ከተሞከሩት ማናቸውም አልተሳኩም።", 29 | "mwe-upwiz-upload-count": "ከ$2 ውስጥ $1 {{PLURAL:$2|ፋይል ተላከ።|ፋይሎች ተላኩ።}}", 30 | "mwe-upwiz-progressbar-uploading": "በመላክ ላይ ነው", 31 | "mwe-upwiz-finished": "ተጨረሸ!" 32 | } 33 | -------------------------------------------------------------------------------- /i18n/ami.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Vickylin77s" 5 | ] 6 | }, 7 | "mwe-upwiz-remove": "falah", 8 | "mwe-upwiz-copy-metadata-button-undo": "patikor", 9 | "mwe-upwiz-desc": "kimad", 10 | "mwe-upwiz-date-created": "O romi’ad", 11 | "mwe-upwiz-categories": "pisakilac", 12 | "prefs-upwiz-licensing": "o sakipatorod a tilid" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/anp.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Vinitutpal" 5 | ] 6 | }, 7 | "mwe-upwiz-step-tutorial": "सीखएँ", 8 | "mwe-upwiz-step-file": "चढ़ाऊ" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/ar.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Maroen1990", 5 | "Meno25", 6 | "بهتين شوكت", 7 | "ديفيد" 8 | ] 9 | }, 10 | "apihelp-flickrblacklist-summary": "تحقق من مسار Flickr بواسطة استخدام معرف المستخدم (NSID) للقائمة السوداء.", 11 | "apihelp-flickrblacklist-extended-description": "عند استخدامه مع خيار list، يرجع كل المعرفات في القائمة السوداء.", 12 | "apihelp-flickrblacklist-param-url": "مسار Flickr للاختبار.", 13 | "apihelp-flickrblacklist-param-list": "عندما تكون مضبوطة، يتم إرجاع القائمة السوداء الكاملة. لا يمكن استخدامها مع $1url.", 14 | "apihelp-flickrblacklist-example-1": "تحقق من الرابط في قائمة السوداء", 15 | "apihelp-flickrblacklist-example-2": "العودة إلى القائمة السوداء", 16 | "apihelp-query+allcampaigns-summary": "رقم كل حملات UploadWizard.", 17 | "apihelp-query+allcampaigns-param-enabledonly": "فقط اعرض الحملات المفعلة.", 18 | "apihelp-query+allcampaigns-param-limit": "عدد من الحملات للعودة.", 19 | "apihelp-query+allcampaigns-example-1": "رقم الحملات المفعلة", 20 | "apihelp-mediadetection-summary": "إرجاع احتمالية أن الصورة المخزنة التي يمثلها مفتاح الملف المقدم هي شعار", 21 | "apihelp-mediadetection-param-filename": "هنا اسم صفحة الملف", 22 | "apihelp-mediadetection-param-filekey": "تم إرجاع filekey من طلب API stash", 23 | "apihelp-mediadetection-example-filename": "إرجاع احتمالية هو أن الصورة التي يمثلها اسم الملف المقدم وهي شعار", 24 | "apihelp-mediadetection-example-filekey": "إرجاع احتمالية أن الصورة المخزنة التي يمثلها مفتاح الملف المقدم هي شعار", 25 | "apierror-mediadetection-no-valid-thumbnail": "لا توجد صورة صغيره للصورة لذا لا يمكن إرسالها إلى المصنف", 26 | "apierror-mediadetection-invalid-mime-type": "نقطة نهاية API غير متاحة لهذا النوع من الملفات - الأنواع المسموح بها هي image/jpeg، image/gif، image/png، image/bmp" 27 | } 28 | -------------------------------------------------------------------------------- /i18n/api/ast.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Xuacu" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-summary": "Validar una URL de Flickr usando l'identificador del usuariu (NSID) na llista prieta.", 8 | "apihelp-flickrblacklist-extended-description": "Cuando s'usa cola opción list, devuelve toles IDs de la llista prieta.", 9 | "apihelp-flickrblacklist-param-url": "La URL de Flickr a comprobar.", 10 | "apihelp-flickrblacklist-param-list": "Al definilo, devuélvese la llista prieta completa. Nun puede utilizase xunto con $1url.", 11 | "apihelp-flickrblacklist-example-1": "Comprobar una URL escontra la llista prieta", 12 | "apihelp-flickrblacklist-example-2": "Devuelve la llista prieta completa", 13 | "apihelp-query+allcampaigns-summary": "Enumerar toles campañes del Asistente de cargues.", 14 | "apihelp-query+allcampaigns-param-enabledonly": "Llistar sólo les campañes actives.", 15 | "apihelp-query+allcampaigns-param-limit": "Númberu de campañes a devolver.", 16 | "apihelp-query+allcampaigns-example-1": "Enumerar les campañes actives" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/api/be.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Liashko" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "URL-адрас на Flickr, які мусіць быць правераны.", 8 | "apihelp-flickrblacklist-param-list": "Пры ўсталяванні вяртаецца поўны чорны спіс. Не можа выкарыстоўвацца разам з $1url.", 9 | "apihelp-flickrblacklist-example-1": "Праверыць URL-адрас у чорным спісе", 10 | "apihelp-flickrblacklist-example-2": "Вярнуць запіс чорнага спіса", 11 | "apihelp-query+allcampaigns-param-enabledonly": "Спіс толькі тых кампаній, якія зараз актыўныя.", 12 | "apihelp-query+allcampaigns-param-limit": "Колькасць кампаній для вяртання.", 13 | "apihelp-query+allcampaigns-example-1": "Пералічыць уключаныя кампаніі" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/api/bg.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "StanProg" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "URL-адрес от Flickr за тестване." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/api/ce.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Умар" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "Талла дезаш долу Flickr тӀехь долу URL-адрес.", 8 | "apihelp-flickrblacklist-example-1": "URL-адрес Ӏаьржачу могӀаман таллар", 9 | "apihelp-flickrblacklist-example-2": "Ӏаьржачу могӀаман дӀайаздар йухадерзор", 10 | "apihelp-query+allcampaigns-param-enabledonly": "Жигара йолу кампанийн могӀам бен.", 11 | "apihelp-query+allcampaigns-param-limit": "Йухайерзош йолу кампанийн дукхалла.", 12 | "apihelp-query+allcampaigns-example-1": "Йукъахь йолу кампанеш йагарйан" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/api/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Brettchenweber", 5 | "Creepario", 6 | "Inkowik", 7 | "Kghbln", 8 | "Metalhead64", 9 | "Predatorix" 10 | ] 11 | }, 12 | "apihelp-flickrblacklist-summary": "Validiert eine Flickr-URL durch die Verwendung der Benutzerkennung (NSID) für die Schwarzlistung.", 13 | "apihelp-flickrblacklist-extended-description": "Wenn sie mit der list-Option benutzt wird, gibt sie alle Kennungen aus, die in der Negativliste stehen.", 14 | "apihelp-flickrblacklist-param-url": "Die zu testende Flickr-URL.", 15 | "apihelp-flickrblacklist-param-list": "Wenn eingestellt, wird die gesamte Negativliste zurückgegeben. Darf nicht zusammen mit $1url verwendet werden.", 16 | "apihelp-flickrblacklist-example-1": "Gleicht eine URL mit der Negativliste ab", 17 | "apihelp-flickrblacklist-example-2": "Gibt die ganze Negativliste zurück", 18 | "apihelp-query+allcampaigns-summary": "Zählt alle Kampagnen des Hochladeassistenten auf.", 19 | "apihelp-query+allcampaigns-param-enabledonly": "Listet nur Kampagnen auf, die aktiviert sind.", 20 | "apihelp-query+allcampaigns-param-limit": "Anzahl der zurückzugebenden Kampagnen.", 21 | "apihelp-query+allcampaigns-example-1": "Listet aktivierte Kampagnen auf", 22 | "apihelp-mediadetection-summary": "Gibt die Wahrscheinlichkeit zurück, dass das gespeicherte Bild, das durch den angegebenen Dateischlüssel dargestellt wird, ein Logo ist", 23 | "apihelp-mediadetection-param-filename": "Name der Dateiseite", 24 | "apihelp-mediadetection-param-filekey": "filekey wurde von der API-Anforderung stash zurückgegeben", 25 | "apihelp-mediadetection-example-filename": "Gibt die Wahrscheinlichkeit zurück, dass das Bild, das durch den angegebenen Dateinamen dargestellt wird, ein Logo ist", 26 | "apihelp-mediadetection-example-filekey": "Gibt die Wahrscheinlichkeit zurück, dass das gespeicherte Bild, das durch den angegebenen Dateischlüssel dargestellt wird, ein Logo ist", 27 | "apierror-mediadetection-no-valid-thumbnail": "Für das Bild ist kein Miniaturbild vorhanden, daher kann es nicht an den Klassifizierer gesendet werden", 28 | "apierror-mediadetection-invalid-mime-type": "Für diesen Dateityp ist kein API-Endpunkt verfügbar. Zulässige Typen sind image/jpeg, image/gif, image/png und image/bmp." 29 | } 30 | -------------------------------------------------------------------------------- /i18n/api/el.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Protnet" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "Η προς δοκιμή διεύθυνση URL του Flickr.", 8 | "apihelp-flickrblacklist-example-1": "Έλεγχος διεύθυνσης URL στη μαύρη λίστα", 9 | "apihelp-flickrblacklist-example-2": "Επιστροφή ολόκληρης της μαύρης λίστας" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/api/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "apihelp-flickrblacklist-summary": "Validate a Flickr URL by using the user ID (NSID) for blacklisting.", 6 | "apihelp-flickrblacklist-extended-description": "When used with the list option, returns all blacklisted IDs.", 7 | "apihelp-flickrblacklist-param-url": "The Flickr URL to be tested.", 8 | "apihelp-flickrblacklist-param-list": "When set, the complete blacklist is returned. Cannot be used together with $1url.", 9 | "apihelp-flickrblacklist-example-1": "Check a URL against the blacklist", 10 | "apihelp-flickrblacklist-example-2": "Return the entire blacklist", 11 | "apihelp-query+allcampaigns-summary": "Enumerate all UploadWizard campaigns.", 12 | "apihelp-query+allcampaigns-param-enabledonly": "Only list campaigns that are enabled.", 13 | "apihelp-query+allcampaigns-param-limit": "Number of campaigns to return.", 14 | "apihelp-query+allcampaigns-example-1": "Enumerate enabled campaigns", 15 | "apihelp-mediadetection-summary": "Return the likelihood that the stashed image represented by the supplied filekey is a logo", 16 | "apihelp-mediadetection-param-filename": "Name of the file page", 17 | "apihelp-mediadetection-param-filekey": "filekey returned from the stash API request", 18 | "apihelp-mediadetection-example-filename": "Return the likelihood that the image represented by the supplied filename is a logo", 19 | "apihelp-mediadetection-example-filekey": "Return the likelihood that the stashed image represented by the supplied filekey is a logo", 20 | "apierror-mediadetection-no-valid-thumbnail": "No thumbnail exists for the image, so cannot send it to the classifier", 21 | "apierror-mediadetection-invalid-mime-type": "Api endpoint not available for this type of file - allowed types are image/jpeg, image/gif, image/png, image/bmp" 22 | } 23 | -------------------------------------------------------------------------------- /i18n/api/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dgstranz", 5 | "Jelou", 6 | "Macofe", 7 | "MarcoAurelio" 8 | ] 9 | }, 10 | "apihelp-flickrblacklist-param-url": "El URL de Flickr para ser probado.", 11 | "apihelp-flickrblacklist-param-list": "Cuando se establece, se devuelve la lista negra completa. No puede usarse junto con $1url.", 12 | "apihelp-flickrblacklist-example-1": "Verificar la URL contra la lista negra", 13 | "apihelp-flickrblacklist-example-2": "Devolver la lista negra completa", 14 | "apihelp-query+allcampaigns-summary": "Enumerar todas las campañas de UploadWizard", 15 | "apihelp-query+allcampaigns-param-enabledonly": "Solo listar las campañas que están activadas.", 16 | "apihelp-query+allcampaigns-param-limit": "Número de campañas que devolver.", 17 | "apihelp-query+allcampaigns-example-1": "Enumerar campañas activadas" 18 | } 19 | -------------------------------------------------------------------------------- /i18n/api/et.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Pikne" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "Flickri internetiaadress, mida kontrollida.", 8 | "apihelp-flickrblacklist-param-list": "Kui määratud, tagastatakse kogu must nimekiri. Ei saa kasutada koos atribuudiga \"$1url\".", 9 | "apihelp-flickrblacklist-example-1": "Kontrolli internetiaadressi musta nimekirja vastu", 10 | "apihelp-flickrblacklist-example-2": "Tagasta kogu must nimekiri", 11 | "apihelp-query+allcampaigns-param-enabledonly": "Loetle ainult lubatud kampaaniad.", 12 | "apihelp-query+allcampaigns-param-limit": "Tagastatavate kampaaniate arv.", 13 | "apihelp-query+allcampaigns-example-1": "Loetle lubatud kampaaniad" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/api/eu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Theklan" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-summary": "Balidatu Flickr URL bat zerrenda beltzeko erabiltzailearen IDa (NSID) erabiliz.", 8 | "apihelp-flickrblacklist-extended-description": "Zerrenda aukerarekin erabiltzen denean, zerrenda beltzeko ID guztiak itzultzen ditu.", 9 | "apihelp-flickrblacklist-param-url": "Probatu behar den Flickr URLa.", 10 | "apihelp-flickrblacklist-param-list": "Ezarritakoan, zerrenda beltz osoa itzultzen da. Ezin da $1url-rekin batera erabili.", 11 | "apihelp-flickrblacklist-example-1": "Egiaztatu URL bat zerrenda beltzean", 12 | "apihelp-flickrblacklist-example-2": "Itzuli zerrenda beltz osoa", 13 | "apihelp-query+allcampaigns-summary": "Zerrendatu IgoeraMorroiaren kanpaina guztiak.", 14 | "apihelp-query+allcampaigns-param-enabledonly": "Gaituta dauden kanpainak soilik zerrendatu.", 15 | "apihelp-query+allcampaigns-param-limit": "Itzuli beharreko kanpaina kopurua.", 16 | "apihelp-query+allcampaigns-example-1": "Zerrendatu gaitutako kanpainak" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/api/fa.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Alifakoor", 5 | "Ladsgroup", 6 | "Reza1615" 7 | ] 8 | }, 9 | "apihelp-flickrblacklist-extended-description": "وقتی با گزینهٔ list استفاده شود، تمامی شناسه‌های مشمول در فهرست سیاه رابرمی‌گرداند.", 10 | "apihelp-flickrblacklist-param-url": "نشانی فلیکر بررسی شد.", 11 | "apihelp-flickrblacklist-param-list": "وفتی که تنظیم شود تمام فهرست سیاه به صورت کامل برگردانده می‌شود. نمی‌توان همطمان با $1url از آن استفاده کرد", 12 | "apihelp-flickrblacklist-example-1": "آزمایش یک پیوند در برابر فهرست سیاه", 13 | "apihelp-flickrblacklist-example-2": "کل فهرست سیاه را برگردان", 14 | "apihelp-query+allcampaigns-summary": "شمارش همهٔ کمپین‌های جادوگرهای بارگذاری", 15 | "apihelp-query+allcampaigns-param-enabledonly": "فقط فهرست کردن کمپین‌هایی که فعال هستند", 16 | "apihelp-query+allcampaigns-param-limit": "تعداد کمپین‌ها برای ارائه", 17 | "apihelp-query+allcampaigns-example-1": "آوردن تمام کمپین‌های فعال" 18 | } 19 | -------------------------------------------------------------------------------- /i18n/api/fi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "BiscuitMan" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "Testattava Flickr-osoite." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/api/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Framafan", 5 | "Gomoko", 6 | "Mahabarata", 7 | "Méthodes Bulebe Hangi", 8 | "Verdy p", 9 | "Wladek92" 10 | ] 11 | }, 12 | "apihelp-flickrblacklist-summary": "Valide une URL Flickr en utilisant l’identifiant de l’utilisateur (NSID) d’après la liste des interdits.", 13 | "apihelp-flickrblacklist-extended-description": "Quand c’est utilisé avec l’option list, cela renvoie tous les identifiants sur la liste des interdits.", 14 | "apihelp-flickrblacklist-param-url": "Le lien Flickr à tester.", 15 | "apihelp-flickrblacklist-param-list": "Si positionné, la liste complète des interdits est renvoyée. Impossible à utiliser avec $1url.", 16 | "apihelp-flickrblacklist-example-1": "Vérifier une URL d’après la liste des interdits", 17 | "apihelp-flickrblacklist-example-2": "Renvoyer la liste complète des interdits", 18 | "apihelp-query+allcampaigns-summary": "Énumère toutes les campagnes de l’assistant de téléversement (UploadWizard).", 19 | "apihelp-query+allcampaigns-param-enabledonly": "Lister seulement les campagnes qui sont activées.", 20 | "apihelp-query+allcampaigns-param-limit": "Nombre de campagnes à renvoyer.", 21 | "apihelp-query+allcampaigns-example-1": "Énumérer les campagnes activées", 22 | "apihelp-mediadetection-summary": "Renvoie la probabilité que l'image stockée représentée par la clé de fichier fournie soit un logo", 23 | "apihelp-mediadetection-param-filename": "Nom de la page de fichier", 24 | "apihelp-mediadetection-param-filekey": "filekey renvoyé par la requête API stash", 25 | "apihelp-mediadetection-example-filename": "Retournez la probabilité que l'image représentée par le nom de fichier fourni soit un logo", 26 | "apihelp-mediadetection-example-filekey": "Renvoie la probabilité que l'image stockée représentée par la clé de fichier fournie soit un logo", 27 | "apierror-mediadetection-no-valid-thumbnail": "Il n'existe pas de thumbnail pour l'image, donc ne peut pas l'envoyer au classifiateur", 28 | "apierror-mediadetection-invalid-mime-type": "Le point de terminaison d'API n'est pas disponible pour ce type de fichier - les types autorisés sont image/jpeg, image/gif, image/png, image/bmp" 29 | } 30 | -------------------------------------------------------------------------------- /i18n/api/gl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Elisardojm", 5 | "Toliño" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-summary": "Validar un enderezo URL de Flickr verificando o identificador do usuario (NSID) na lista negra.", 9 | "apihelp-flickrblacklist-extended-description": "Cando se usa coa opción list, devolve tódolos identificadores da lista negra.", 10 | "apihelp-flickrblacklist-param-url": "O enderezo URL do Flickr a probar.", 11 | "apihelp-flickrblacklist-param-list": "Ao definilo, devólvese a lista negra ao completo. Non se pode utilizar xunto a $1url.", 12 | "apihelp-flickrblacklist-example-1": "Comprobar un enderezo URL contra a lista negra", 13 | "apihelp-flickrblacklist-example-2": "Devolver a lista negra ao completo", 14 | "apihelp-query+allcampaigns-summary": "Enumerar todas as campañas do asistente de cargas.", 15 | "apihelp-query+allcampaigns-param-enabledonly": "Listar unicamente as campañas activas.", 16 | "apihelp-query+allcampaigns-param-limit": "Número de campañas a devolver.", 17 | "apihelp-query+allcampaigns-example-1": "Enumerar as campañas activas", 18 | "apihelp-mediadetection-summary": "Devolver a probabilidade de que a imaxe almacenada representada pola clave de ficheiro proporcionada sexa un logotipo", 19 | "apihelp-mediadetection-param-filename": "Nome da páxina do ficheiro", 20 | "apihelp-mediadetection-param-filekey": "filekey devolto pola solicitude á API stash", 21 | "apihelp-mediadetection-example-filename": "Devolver a probabilidade de que a imaxe almacenada representada polo nome de ficheiro proporcionado sexa un logotipo", 22 | "apihelp-mediadetection-example-filekey": "Devolver a probabilidade de que a imaxe almacenada representada pola clave de ficheiro proporcionada sexa un logotipo", 23 | "apierror-mediadetection-no-valid-thumbnail": "Non existe ningunha miniatura para a imaxe, polo que non se pode enviar ao clasificador", 24 | "apierror-mediadetection-invalid-mime-type": "O extremo da API non está dispoñible para este tipo de ficheiros; os tipos permitidos son: image/jpeg, image/gif, image/png, image/bmp" 25 | } 26 | -------------------------------------------------------------------------------- /i18n/api/he.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Amire80" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-summary": "בדיקת תקינות URL של פליקר באמצעות שימוש במזהה משתמש (NSID) להוספה לרשימה השחורה.", 8 | "apihelp-flickrblacklist-extended-description": "בעת שימוש באפשרות list, זה יחזיר את כל המזהים ברשימה השחורה.", 9 | "apihelp-flickrblacklist-param-url": "URL בפליקר שצריך לבדוק.", 10 | "apihelp-flickrblacklist-param-list": "כשזה מוגדר, מוחזרת כל הרשימה השחורה. אי־אפשר להשתמש בזה יחד עם $1url.", 11 | "apihelp-flickrblacklist-example-1": "בדיקה של URL אל מול הרשימה השחורה", 12 | "apihelp-flickrblacklist-example-2": "החזרת כל הרשימה השחורה", 13 | "apihelp-query+allcampaigns-summary": "למנות את כל מבצעי קידום ההעלאות של אשף ההעלאות.", 14 | "apihelp-query+allcampaigns-param-enabledonly": "רשימה רק של מסעות פרסום מופעלים.", 15 | "apihelp-query+allcampaigns-param-limit": "מספר מסעות הפרסום שצריך להחזיר.", 16 | "apihelp-query+allcampaigns-example-1": "ספירה של מסעות פרסום מופעלים", 17 | "apihelp-mediadetection-summary": "החזרת הסבירות שהתמונה השמורה במאגר ההעלאות שמיוצגת על־ידי מפתח הקובץ שסופק היא סמל", 18 | "apihelp-mediadetection-param-filename": "שם דף הקובץ", 19 | "apihelp-mediadetection-param-filekey": "ערך ה־filekey שהוחזר מבקשת stash של ה־API", 20 | "apihelp-mediadetection-example-filename": "החזרת הסבירות שהתמונה שמיוצגת על־ידי הקובץ שסופק היא סמל", 21 | "apihelp-mediadetection-example-filekey": "החזרת הסבירות שהתמונה השמורה במאגר ההעלאות שמיוצגת על־ידי מפתח הקובץ שסופק היא סמל", 22 | "apierror-mediadetection-no-valid-thumbnail": "לא קיימת תמונה ממוזערת עבור התמונה, ולכן לא ניתן לשלוח אותה למסווג", 23 | "apierror-mediadetection-invalid-mime-type": "נקודת קצה של API אינה זמינה עבור סוג הקובץ הזה - הסוגים המותרים הם image\n/jpeg‏, image/gif‏, image/png‏, image/bmp" 24 | } 25 | -------------------------------------------------------------------------------- /i18n/api/hi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Saurmandal", 5 | "Sfic" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-example-2": "पूरा ब्लैकलिस्ट लौटाता है" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/hu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Tacsipacsi" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-summary": "Egy Flickr-URL érvényesítése a felhasználóazonosító (NSID) használatával feketelistázáshoz.", 8 | "apihelp-flickrblacklist-extended-description": "A list paraméterrel használva az összes feketelistázott azonosítót adja vissza.", 9 | "apihelp-flickrblacklist-param-url": "A tesztelendő Flickr-URL.", 10 | "apihelp-flickrblacklist-param-list": "Ha meg van adva, a teljes feketelista visszaadása. Nem használható az $1url paraméterrel együtt.", 11 | "apihelp-flickrblacklist-example-1": "Egy URL ellenőrzése a feketelista alapján.", 12 | "apihelp-flickrblacklist-example-2": "A teljes feketelista lekérése.", 13 | "apihelp-query+allcampaigns-summary": "Az összes Feltöltésvarázsló-kampány felsorolása.", 14 | "apihelp-query+allcampaigns-param-enabledonly": "Csak az engedélyezett kampányok listázása.", 15 | "apihelp-query+allcampaigns-param-limit": "A lekérendő kampányok száma.", 16 | "apihelp-query+allcampaigns-example-1": "Az engedélyezett kampányok felsorolása" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/api/ia.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Karmwiki", 5 | "McDutchie" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-summary": "Validar un URL de Flickr usante le ID de usator (NSID) pro blocar.", 9 | "apihelp-flickrblacklist-extended-description": "Quando es usate con le option list, restitue tote le IDs blocate.", 10 | "apihelp-flickrblacklist-param-url": "Le URL de Flickr a testar.", 11 | "apihelp-flickrblacklist-param-list": "Si es definite, le lista de blocage complete se restitue. Non pote esser usate insimul con $1url.", 12 | "apihelp-flickrblacklist-example-1": "Verificar un URL contra le lista de blocage", 13 | "apihelp-flickrblacklist-example-2": "Restitue tote le lista de blocage", 14 | "apihelp-query+allcampaigns-summary": "Enumerar tote le campanias del Assistente de incargamento.", 15 | "apihelp-query+allcampaigns-param-enabledonly": "Solmente listar le campanias que ha essite activate.", 16 | "apihelp-query+allcampaigns-param-limit": "Numero de campanias a restituer.", 17 | "apihelp-query+allcampaigns-example-1": "Enumerar le campanias activate", 18 | "apihelp-mediadetection-summary": "Restituer le probabilitate que le imagine in reserva representate per le clave de file fornite es un logotypo", 19 | "apihelp-mediadetection-param-filename": "Nomine del pagina de file", 20 | "apihelp-mediadetection-param-filekey": "Le clave de file (filekey) restituite del requesta API stash", 21 | "apihelp-mediadetection-example-filename": "Restituer le probabilitate que le imagine representate per le nomine de file fornite es un logotypo", 22 | "apihelp-mediadetection-example-filekey": "Restituer le probabilitate que le imagine in reserva representate per le clave de file fornite es un logotypo", 23 | "apierror-mediadetection-no-valid-thumbnail": "Nulle miniatura existe pro le imagine, dunque non es possibile inviar lo al classificator", 24 | "apierror-mediadetection-invalid-mime-type": "Necun puncto final API es disponibile pro iste typo de file. Le typos permittite es image/jpeg, image/gif, image/png, image/bmp" 25 | } 26 | -------------------------------------------------------------------------------- /i18n/api/id.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Daud I.F. Argana", 5 | "Ilham151096", 6 | "Kenrick95" 7 | ] 8 | }, 9 | "apihelp-flickrblacklist-summary": "Mengesahkan URL Flickr dengan menggunakan ID pengguna (NSID) untuk pemeriksaan di daftar hitam.", 10 | "apihelp-flickrblacklist-extended-description": "Ketika dipakai bersamaan dengan pilihan daftar, kembalikan semua ID yang masuk daftar hitam.", 11 | "apihelp-flickrblacklist-param-url": "URL Flickr yang akan dicoba.", 12 | "apihelp-flickrblacklist-param-list": "Ketika disetel, seluruh isi daftar hitam akan dikembalikan. Tidak dapat digunakan bersamaan dengan $1url.", 13 | "apihelp-flickrblacklist-example-1": "Periksa sebuah URL di daftar hitam", 14 | "apihelp-flickrblacklist-example-2": "Kembalikan seluruh isi daftar hitam", 15 | "apihelp-query+allcampaigns-summary": "Tampilkan semua kampanye Wisaya Pengunggahan.", 16 | "apihelp-query+allcampaigns-param-enabledonly": "Hanya tampilkan semua kampanye aktif.", 17 | "apihelp-query+allcampaigns-param-limit": "Jumlah kampanye yang dikembalikan.", 18 | "apihelp-query+allcampaigns-example-1": "Tampilkan semua kampanye aktif" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/api/is.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Sveinn í Felli" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "Flickr-slóðin sem á að prófa.", 8 | "apihelp-query+allcampaigns-summary": "Telja upp allar innsendingaherferðir", 9 | "apihelp-query+allcampaigns-param-enabledonly": "Einungis telja upp þær innsendingaherferðir sem eru virkar.", 10 | "apihelp-query+allcampaigns-param-limit": "Fjöldi herferða sem á að birta.", 11 | "apihelp-query+allcampaigns-example-1": "Telja upp virkar innsendingaherferðir" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/api/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "2nd-player", 5 | "Chqaz", 6 | "Omotecho", 7 | "Shirayuki", 8 | "Yusuke1109" 9 | ] 10 | }, 11 | "apihelp-flickrblacklist-param-url": "テストする Flickr URL です。", 12 | "apihelp-flickrblacklist-param-list": "設定すると、ブラックリスト全体を返します。$1url とは同時に使用できません。", 13 | "apihelp-flickrblacklist-example-1": "URL をブラックリストで検証", 14 | "apihelp-flickrblacklist-example-2": "ブラックリスト全体を返す", 15 | "apihelp-query+allcampaigns-param-enabledonly": "有効になっているキャンペーンのみを列挙します。", 16 | "apihelp-query+allcampaigns-param-limit": "キャンペーンの件数を返します。", 17 | "apihelp-query+allcampaigns-example-1": "有効になっているキャンペーンを列挙する", 18 | "apihelp-mediadetection-param-filename": "ファイルページの名前", 19 | "apihelp-mediadetection-example-filekey": "Return the likelihood that the stashed image represented by the supplied filekey is a logo\n指定のファイルキーが示す保存済みの画像がロゴである確立を返す" 20 | } 21 | -------------------------------------------------------------------------------- /i18n/api/ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "YeBoy371", 5 | "Ykhwong" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-param-url": "테스트할 플리커 URL입니다.", 9 | "apihelp-flickrblacklist-example-1": "블랙리스트에 대해 URL을 검사합니다", 10 | "apihelp-flickrblacklist-example-2": "모든 블랙리스트를 반환합니다", 11 | "apihelp-mediadetection-param-filename": "파일 문서 이름" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/api/ksh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Purodha" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "Dä URL bei Flickr zom Pröhfe.", 8 | "apihelp-flickrblacklist-param-list": "Wann dat jesaz es, donn de jannze „schwazze Leß“ ußjävve. Kam_mer nit zersamme met $1url bruche.", 9 | "apihelp-flickrblacklist-example-1": "Donn en URL jähje de „schwazze Leß“ pröhve.", 10 | "apihelp-flickrblacklist-example-2": "Donn de jannze „schwazze Leß“ ußjävve.", 11 | "apihelp-query+allcampaigns-param-enabledonly": "Donn blohß de aanjeshalld Kampannje opzälle.", 12 | "apihelp-query+allcampaigns-param-limit": "De Aanzahl Kampannje zom ußjävve.", 13 | "apihelp-query+allcampaigns-example-1": "Donn de aanjeshalld Kampannje opzälle." 14 | } 15 | -------------------------------------------------------------------------------- /i18n/api/lb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Robby", 5 | "Volvox" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-param-url": "D'Flickr-URL déi getest gi soll", 9 | "apihelp-flickrblacklist-example-1": "Nokucken ob eng URL op der schwaarzer Lëscht steet", 10 | "apihelp-flickrblacklist-example-2": "Déi komplett schwaarz Lëscht zréckschécken", 11 | "apihelp-mediadetection-param-filename": "Numm vun der Fichierssäit" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/api/lrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mogoeilor" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "یو آر ال فلیکر ازماشت بیه.", 8 | "apihelp-flickrblacklist-example-1": "یه گل یو آر ال نه سی نومگه سئ وارسی بک" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/lt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Manvydasz", 5 | "Salpusnis" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-param-url": "Flickr URL turi būti išbandytas.", 9 | "apihelp-flickrblacklist-param-list": "Nustačius grąžinamas pilnas juodasis sąrašas. Negali būti naudojamas kartu su $1url.", 10 | "apihelp-flickrblacklist-example-1": "Patikrinti URL pagal juodąjį sąrašą", 11 | "apihelp-flickrblacklist-example-2": "Grąžinti pilną juodąjį sąrašą", 12 | "apihelp-query+allcampaigns-param-enabledonly": "Pateikti tik aktyvuotas kampanijas.", 13 | "apihelp-query+allcampaigns-param-limit": "Grąžinamų kampanijų skaičius.", 14 | "apihelp-query+allcampaigns-example-1": "Išvardinti aktyvuotas kampanijas" 15 | } 16 | -------------------------------------------------------------------------------- /i18n/api/lv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Papuass" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "Pārbaudāmais Flickr URL.", 8 | "apihelp-flickrblacklist-example-1": "Pārbaudīt URL pret melno sarakstu", 9 | "apihelp-flickrblacklist-example-2": "Atgriezt visu melno sarakstu", 10 | "apihelp-query+allcampaigns-param-limit": "Atgriežamo kampaņu skaits." 11 | } 12 | -------------------------------------------------------------------------------- /i18n/api/mk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bjankuloski06" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-summary": "Завери URL од Flickr користејќи ја корисничката назнака (NSID) за црн список.", 8 | "apihelp-flickrblacklist-extended-description": "Кога се користи со можноста за список (list), ги дава сите назнаки на црниот список.", 9 | "apihelp-flickrblacklist-param-url": "URL-адреса од Flickr што треба да се провери.", 10 | "apihelp-flickrblacklist-param-list": "Кога е зададено, ќе се даде целиот црн список. Не може да се користи заедно со $1url.", 11 | "apihelp-flickrblacklist-example-1": "Провери URL во црниот список", 12 | "apihelp-flickrblacklist-example-2": "Дај го целиот црн список", 13 | "apihelp-query+allcampaigns-summary": "Наброј ги сите походи на Помошникот за подигање.", 14 | "apihelp-query+allcampaigns-param-enabledonly": "Испиши ги само походите кои се во тек.", 15 | "apihelp-query+allcampaigns-param-limit": "Број на походи во исписот.", 16 | "apihelp-query+allcampaigns-example-1": "Наброј ги тековните походи", 17 | "apihelp-mediadetection-summary": "Дај ја веројатноста дека складираната слика претставена од укажаниот податотечен клуч е лого", 18 | "apihelp-mediadetection-param-filename": "Име на податотечната страница", 19 | "apihelp-mediadetection-param-filekey": "filekey добиен од барањето stash до приложникот", 20 | "apihelp-mediadetection-example-filename": "Дај ја веројатноста дека сликата претставена од укажаното податотечно име е лого", 21 | "apihelp-mediadetection-example-filekey": "Дај ја веројатноста дека складираната слика претставена од укажаниот податотечен клуч е лого", 22 | "apierror-mediadetection-no-valid-thumbnail": "Не постои минијатура за сликата, па затоа не можам да ја испратам во класификаторот", 23 | "apierror-mediadetection-invalid-mime-type": "Крајната точка на приложникот е недостапна за овој тип на податотека. Се допуштаат: image/jpeg, image/gif, image/png, image/bmp" 24 | } 25 | -------------------------------------------------------------------------------- /i18n/api/ml.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Praveenp" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "ഫ്ലിക്കർ യു.ആർ.എൽ. പരിശോധിക്കുന്നു.", 8 | "apihelp-flickrblacklist-param-list": "സജ്ജമാക്കിയാൽ പൂർണ്ണമായ കരിമ്പട്ടിക നൽകുന്നതാണ്. ഇതിനൊപ്പം $1url ഉപയോഗിക്കാനാവുന്നതല്ല.", 9 | "apihelp-flickrblacklist-example-1": "കരിമ്പട്ടികയിൽ ഒരു യു.ആർ.എൽ. പരിശോധിക്കുക", 10 | "apihelp-flickrblacklist-example-2": "പൂർണ്ണമായ കരിമ്പട്ടിക നൽകുക", 11 | "apihelp-query+allcampaigns-summary": "എല്ലാ അപ്‌ലോഡ് സഹായി മേളയുടേയും കണക്കെടുക്കുക.", 12 | "apihelp-query+allcampaigns-param-enabledonly": "സജ്ജമാക്കിയ മേളകൾ മാത്രം പട്ടികയാക്കുക.", 13 | "apihelp-query+allcampaigns-param-limit": "നൽകേണ്ട മേളകളുടെ എണ്ണം.", 14 | "apihelp-query+allcampaigns-example-1": "സജ്ജമാക്കിയ മേളകളുടെ എണ്ണം." 15 | } 16 | -------------------------------------------------------------------------------- /i18n/api/mnc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "MiiCii" 5 | ] 6 | }, 7 | "apihelp-mediadetection-param-filename": "Bithei afaha -i gebu", 8 | "apierror-mediadetection-no-valid-thumbnail": "Ere nirugan de šoyobuha nirugan akū be dahame, imbe dendebure tetun de selgiyeme muterakū." 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/nap.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "C.R." 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "'O sito ncopp'a Flickr cu n'URL a se pruvà.", 8 | "apihelp-flickrblacklist-param-list": "Quanno fossere mis'apposto, 'a lista nera fatta se turnasse. Nun se putess'ausà nziem'a $1url.", 9 | "apihelp-flickrblacklist-example-1": "Cuntrullate n'URL nfacci' 'a lista nera", 10 | "apihelp-flickrblacklist-example-2": "Torna 'a lista nera sana sana", 11 | "apihelp-query+allcampaigns-param-enabledonly": "Elenca surtanto 'iniziative ca fossero abbiàte.", 12 | "apihelp-query+allcampaigns-param-limit": "Nummero 'e campagne 'a turnà.", 13 | "apihelp-query+allcampaigns-example-1": "Miette nummero a 'e campagne abbiàte" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/api/nb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Danmichaelo", 5 | "Jon Harald Søby" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-summary": "Valider en Flickr-URL ved å sjekke bruker-ID-en (NSID) for svartelisting.", 9 | "apihelp-flickrblacklist-extended-description": "Når den brukes med valget list returneres alle svartelistede ID-er.", 10 | "apihelp-flickrblacklist-param-url": "Flickr-URL som skal testes.", 11 | "apihelp-flickrblacklist-param-list": "Returnerer den fullstendige svartelisten. Kan ikke brukes sammen med $1url.", 12 | "apihelp-flickrblacklist-example-1": "Sjekk en URL mot svartelisten", 13 | "apihelp-flickrblacklist-example-2": "Returner hele svartelisten", 14 | "apihelp-query+allcampaigns-summary": "List opp alle opplastingsveiviserkampanjer.", 15 | "apihelp-query+allcampaigns-param-enabledonly": "Bare list opp kampanjer som er aktivert.", 16 | "apihelp-query+allcampaigns-param-limit": "Antall kampanjer som skal returneres.", 17 | "apihelp-query+allcampaigns-example-1": "List opp aktiverte kampanjer" 18 | } 19 | -------------------------------------------------------------------------------- /i18n/api/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "McDutchie", 5 | "Siebrand" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-summary": "Een Flickr-URL valideren met behulp van de gebruikers-ID (NSID) voor plaatsing op de zwarte lijst.", 9 | "apihelp-flickrblacklist-extended-description": "Bij gebruik met de optie list worden alle ID’s op de zwarte lijst geretourneerd.", 10 | "apihelp-flickrblacklist-param-url": "De te testen Flickr-URL.", 11 | "apihelp-flickrblacklist-param-list": "Indien ingesteld wordt de volledige zwarte lijst geretourneerd. Kan niet samen met $1url worden gebruikt.", 12 | "apihelp-flickrblacklist-example-1": "Controleren of een URL op de zwarte lijst staat", 13 | "apihelp-flickrblacklist-example-2": "Volledige zwarte lijst ophalen", 14 | "apihelp-query+allcampaigns-summary": "Alle UploadWizard-campagnes inventariseren.", 15 | "apihelp-query+allcampaigns-param-enabledonly": "Alleen campagnes weergeven die zijn ingeschakeld.", 16 | "apihelp-query+allcampaigns-param-limit": "Aantal te retourneren campagnes.", 17 | "apihelp-query+allcampaigns-example-1": "Ingeschakelde campagnes inventariseren", 18 | "apihelp-mediadetection-summary": "Geeft de waarschijnlijkheid terug dat de opgeborgen afbeelding waarnaar de opgegeven bestandssleutel verwijst een logo is", 19 | "apihelp-mediadetection-param-filename": "Naam van de bestandspagina", 20 | "apihelp-mediadetection-param-filekey": "De vanuit de API-aanvraag stash teruggegeven filekey", 21 | "apihelp-mediadetection-example-filename": "Geeft de waarschijnlijkheid terug dat de opgeborgen afbeelding waarnaar de opgegeven bestandsnaam verwijst een logo is", 22 | "apihelp-mediadetection-example-filekey": "Geeft de waarschijnlijkheid terug dat de opgeborgen afbeelding waarnaar de opgegeven bestandssleutel verwijst een logo is", 23 | "apierror-mediadetection-no-valid-thumbnail": "Er is geen miniatuur voor de afbeelding. Daarom kan deze niet naar de classificeerder worden verzonden.", 24 | "apierror-mediadetection-invalid-mime-type": "Er is geen API-eindpunt beschikbaar voor dit type bestand. De toegestane typen zijn image/jpeg, image/gif, image/png, image/bmp." 25 | } 26 | -------------------------------------------------------------------------------- /i18n/api/pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Chrumps" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-param-url": "Adres URL na Flickr do sprawdzenia.", 8 | "apihelp-flickrblacklist-example-1": "Sprawdź adres URL pod kątem obecności na czarnej liście" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/pt-br.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "EPorto (WMB)", 5 | "Felipe L. Ewald" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-summary": "Valide um URL do Flickr usando o ID do usuário (NSID) para a lista negra.", 9 | "apihelp-flickrblacklist-extended-description": "Quando usado com a opção list, retorna todos os IDs da lista negra.", 10 | "apihelp-flickrblacklist-param-url": "O URL do Flickr a ser testado.", 11 | "apihelp-flickrblacklist-param-list": "Quando definido, a lista negra completa é retornada. Não pode ser usado em conjunto com $1url.", 12 | "apihelp-flickrblacklist-example-1": "Verifique um URL contra a lista negra", 13 | "apihelp-flickrblacklist-example-2": "Retorna a lista negra inteira", 14 | "apihelp-query+allcampaigns-summary": "Enumerar todas as campanhas do UploadWizard.", 15 | "apihelp-query+allcampaigns-param-enabledonly": "Apenas lista as campanhas habilitadas.", 16 | "apihelp-query+allcampaigns-param-limit": "Número de campanhas para retornar.", 17 | "apihelp-query+allcampaigns-example-1": "Enumerar todas as campanhas", 18 | "apierror-mediadetection-no-valid-thumbnail": "Não existe nenhuma miniatura para a imagem, então não pode ser enviada para o classificador", 19 | "apierror-mediadetection-invalid-mime-type": "A chamada da API não está disponível para esse tipo de arquivo - tipos permitidos são image/jpeg, image/gif, image/png, image/bmp" 20 | } 21 | -------------------------------------------------------------------------------- /i18n/api/pt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Hamilton Abreu" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-summary": "Validar um URL do Flickr verificando o identificador do utilizador (NSID) contra a lista negra.", 8 | "apihelp-flickrblacklist-extended-description": "Quando usado com a opção list, devolve todos os identificadores na lista negra.", 9 | "apihelp-flickrblacklist-param-url": "O URL do Flickr a ser testado.", 10 | "apihelp-flickrblacklist-param-list": "Quando definido, a lista negra completa é devolvida. Não pode ser usado em conjunto com $1url.", 11 | "apihelp-flickrblacklist-example-1": "Verificar um URL contra a lista negra", 12 | "apihelp-flickrblacklist-example-2": "Devolver a lista negra completa", 13 | "apihelp-query+allcampaigns-summary": "Enumerar todas as campanhas do Assistente de Envio de Ficheiros.", 14 | "apihelp-query+allcampaigns-param-enabledonly": "Listar só as campanhas que estão ativas.", 15 | "apihelp-query+allcampaigns-param-limit": "Número de campanhas a serem listadas.", 16 | "apihelp-query+allcampaigns-example-1": "Enumerar as campanhas ativas" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/api/qqq.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "apihelp-flickrblacklist-summary": "{{doc-apihelp-summary|flickrblacklist}}", 6 | "apihelp-flickrblacklist-extended-description": "{{doc-apihelp-extended-description|flickrblacklist}}", 7 | "apihelp-flickrblacklist-param-url": "{{doc-apihelp-param|flickrblacklist|url}}", 8 | "apihelp-flickrblacklist-param-list": "{{doc-apihelp-param|flickrblacklist|list}}", 9 | "apihelp-flickrblacklist-example-1": "{{doc-apihelp-example|flickrblacklist}}", 10 | "apihelp-flickrblacklist-example-2": "{{doc-apihelp-example|flickrblacklist}}", 11 | "apihelp-query+allcampaigns-summary": "{{doc-apihelp-summary|query+allcampaigns}}", 12 | "apihelp-query+allcampaigns-param-enabledonly": "{{doc-apihelp-param|query+allcampaigns|enabledonly}}", 13 | "apihelp-query+allcampaigns-param-limit": "{{doc-apihelp-param|query+allcampaigns|limit}}", 14 | "apihelp-query+allcampaigns-example-1": "{{doc-apihelp-example|query+allcampaigns}}", 15 | "apihelp-mediadetection-summary": "{{doc-apihelp-summary|mediadetection}}", 16 | "apihelp-mediadetection-param-filename": "{{doc-apihelp-param|mediadetection|filename}}", 17 | "apihelp-mediadetection-param-filekey": "{{doc-apihelp-param|mediadetection|filekey}}", 18 | "apihelp-mediadetection-example-filename": "{{doc-apihelp-example-filename|mediadetection}}", 19 | "apihelp-mediadetection-example-filekey": "{{doc-apihelp-example-filekey|mediadetection}}", 20 | "apierror-mediadetection-no-valid-thumbnail": "Error msg for when detection fails because the image has no valid thumbnail", 21 | "apierror-mediadetection-invalid-mime-type": "Error msg for when detection fails because the upload file is the wrong mime type - allowed types are image/jpeg, image/gif, image/png, image/bmp" 22 | } 23 | -------------------------------------------------------------------------------- /i18n/api/ro.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "NGC 54", 5 | "Paloi Sciurala" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-param-url": "Adresa URL Flickr care să fie testată." 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/roa-tara.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Joetaras" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-summary": "Valide 'na URL de Flickr ausanne l'ID de l'utende (NSID) pa lista gnore.", 8 | "apihelp-flickrblacklist-extended-description": "Quanne jè ausate cu l'opzione list, torne tutte le ID jndr'à lista gnore.", 9 | "apihelp-flickrblacklist-param-url": "L'URL Flickr da pruvà.", 10 | "apihelp-flickrblacklist-param-list": "Quanne 'mbostate, avène date 'a lista gnore comblete. Non ge pò essere ausate 'nzieme cu $1url.", 11 | "apihelp-flickrblacklist-example-1": "Condrolle 'n'URL jndr'à lista gnore", 12 | "apihelp-flickrblacklist-example-2": "Tuèrne totte 'a lista gnore", 13 | "apihelp-query+allcampaigns-summary": "Numere tutte le cambagne UploadWizard.", 14 | "apihelp-query+allcampaigns-param-enabledonly": "Sulamende le elenghe de le cambagne ca sò attive.", 15 | "apihelp-query+allcampaigns-param-limit": "Numere de le cambagne da dà.", 16 | "apihelp-query+allcampaigns-example-1": "Numere le cambagne attive" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/api/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dirruw'o", 5 | "Kaganer", 6 | "Okras" 7 | ] 8 | }, 9 | "apihelp-flickrblacklist-param-url": "URL-адрес на Flickr, который должен быть проверен.", 10 | "apihelp-flickrblacklist-param-list": "При установке возвращается полный чёрный список. Не может использоваться вместе с $1url.", 11 | "apihelp-flickrblacklist-example-1": "Проверить URL-адрес по чёрному списку", 12 | "apihelp-flickrblacklist-example-2": "Вернуть запись чёрного списка", 13 | "apihelp-query+allcampaigns-param-enabledonly": "Список только тех кампаний, которые сейчас активны.", 14 | "apihelp-query+allcampaigns-param-limit": "Возвращаемое число кампаний.", 15 | "apihelp-query+allcampaigns-example-1": "Перечислить включённые кампании", 16 | "apihelp-mediadetection-param-filename": "Название файловой страницы" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/api/sl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Eleassar", 5 | "Janezdrilc" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-summary": "Preveri Flickr URL z uporabo ID-ja uporabnika (NSID) glede vključenosti na črni seznam.", 9 | "apihelp-flickrblacklist-extended-description": "Ko se uporablja z možnostjo list, vrne vse ID-je na črnem seznamu.", 10 | "apihelp-flickrblacklist-param-url": "Flickrjev URL za preizkus.", 11 | "apihelp-flickrblacklist-param-list": "Ko je nastavljeno, se vrne celotni črni seznam. Tega ni mogoče uporabljati skupaj z $1url.", 12 | "apihelp-flickrblacklist-example-1": "Preveri spletni naslov napram črnemu seznamu", 13 | "apihelp-flickrblacklist-example-2": "Vrni celotni črni seznam", 14 | "apihelp-query+allcampaigns-summary": "Naštetje vseh kampanj čarovnika za nalaganje.", 15 | "apihelp-query+allcampaigns-param-enabledonly": "Naštetje samo omogočenih kampanj.", 16 | "apihelp-query+allcampaigns-param-limit": "Število prikazanih kampanj.", 17 | "apihelp-query+allcampaigns-example-1": "Naštetje omogočenih kampanj", 18 | "apihelp-mediadetection-param-filekey": "filekey, vrnjen iz API-zahtevka stash", 19 | "apihelp-mediadetection-example-filekey": "Vrnitev verjetnosti, da je shranjena slika, ki jo predstavlja podani datotečni ključ, logotip" 20 | } 21 | -------------------------------------------------------------------------------- /i18n/api/sv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Lokal Profil", 5 | "WikiPhoenix" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-summary": "Validera en Flickr-URL med hjälp av användar-ID (NSID) för svartlistor.", 9 | "apihelp-flickrblacklist-extended-description": "Returnerar alla svartlistade ID:n när det används med alternativet list.", 10 | "apihelp-flickrblacklist-param-url": "Webbadress till Flickr att testa.", 11 | "apihelp-flickrblacklist-param-list": "När angiven, returneras den kompletta svartlistan. Kan inte användas tillsammans med $1url.", 12 | "apihelp-flickrblacklist-example-1": "Kontrollera en URL-adress mot svartlistan", 13 | "apihelp-flickrblacklist-example-2": "Returnera hela svartlistan", 14 | "apihelp-query+allcampaigns-summary": "Räkna upp alla UploadWizard-kampanjer.", 15 | "apihelp-query+allcampaigns-param-enabledonly": "Lista enbart kampanjer som är aktiverade.", 16 | "apihelp-query+allcampaigns-param-limit": "Antal kampanjer att returnera.", 17 | "apihelp-query+allcampaigns-example-1": "Räkna upp aktiverade kampanjer", 18 | "apihelp-mediadetection-param-filename": "Namnet på filsidan" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/api/szy.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Benel", 5 | "Bunukwiki" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-param-url": "amitanam a Flickr URL.", 9 | "apihelp-flickrblacklist-example-1": "kinsa URL namalangat ilabu nu piazihan-tu-sulit haw?", 10 | "apihelp-flickrblacklist-example-2": "tatiku leku malangat piazihan-tu-sulit", 11 | "apihelp-query+allcampaigns-param-limit": "nikayadah atatikuay a saungay nu binawlan." 12 | } 13 | -------------------------------------------------------------------------------- /i18n/api/tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "BaRaN6161 TURK" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-summary": "Kara liste için kullanıcı kimliğini (NSID) kullanarak bir Flickr URL'sini doğrulayın.", 8 | "apihelp-flickrblacklist-extended-description": "list seçeneğiyle kullanıldığında, kara listeye alınan tüm ID'leri döndürür.", 9 | "apihelp-flickrblacklist-param-url": "Test edilecek Flickr URL'si.", 10 | "apihelp-flickrblacklist-param-list": "Ayarlandığında, kara listenin tamamı döndürülür. $1url ile birlikte kullanılamaz.", 11 | "apihelp-flickrblacklist-example-1": "Kara listeye karşı bir URL kontrol edin", 12 | "apihelp-flickrblacklist-example-2": "Tüm kara listeye dön", 13 | "apihelp-query+allcampaigns-summary": "Tüm UploadWizard kampanyalarını numaralandırın.", 14 | "apihelp-query+allcampaigns-param-enabledonly": "Yalnızca etkin olan kampanyaları listeleyin.", 15 | "apihelp-query+allcampaigns-param-limit": "Döndürülecek kampanya sayısı.", 16 | "apihelp-query+allcampaigns-example-1": "Etkinleştirilmiş kampanyaları numaralandırın" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/api/uk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Piramidion", 5 | "Ата" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-summary": "Перевірити URL-адресу Flickr за допомогою ідентифікатора (NSID) користувача для занесення в чорний список.", 9 | "apihelp-flickrblacklist-extended-description": "При використанні опції list виводить усі ідентифікатори, що перебувають у чорному списку.", 10 | "apihelp-flickrblacklist-param-url": "URL-адреса Flickr для тестування.", 11 | "apihelp-flickrblacklist-param-list": "З цим вибором виводиться повний чорний список. Не можна використати разом з $1url.", 12 | "apihelp-flickrblacklist-example-1": "Перевірити URL-адресу у чорному списку", 13 | "apihelp-flickrblacklist-example-2": "Видати весь чорний список", 14 | "apihelp-query+allcampaigns-summary": "Перерахувати всі кампанії Майстра завантаження.", 15 | "apihelp-query+allcampaigns-param-enabledonly": "Тільки список увімкнених кампаній.", 16 | "apihelp-query+allcampaigns-param-limit": "Кількість кампаній для виведення.", 17 | "apihelp-query+allcampaigns-example-1": "Перерахувати увімкнені кампанії" 18 | } 19 | -------------------------------------------------------------------------------- /i18n/api/vi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "SongNgu.xyz" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-summary": "Xác thực URL Flickr bằng cách sử dụng ID người dùng (NSID) để đưa vào danh sách đen." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/api/zh-hans.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Liuxinyu970226" 5 | ] 6 | }, 7 | "apihelp-flickrblacklist-summary": "使用用户ID(NSID)验证Flickr URL以将其列入黑名单。", 8 | "apihelp-flickrblacklist-extended-description": "当与list选项一起使用时,返回所有列入黑名单的ID。", 9 | "apihelp-flickrblacklist-param-url": "要测试的Flickr URL。", 10 | "apihelp-flickrblacklist-param-list": "一旦设置,就会返回完整的黑名单。不能与$1url一起使用。", 11 | "apihelp-flickrblacklist-example-1": "检查URL是否触发黑名单", 12 | "apihelp-flickrblacklist-example-2": "返回全部黑名单", 13 | "apihelp-query+allcampaigns-summary": "列举所有UploadWizard活动。", 14 | "apihelp-query+allcampaigns-param-enabledonly": "只列出启用的通告。", 15 | "apihelp-query+allcampaigns-param-limit": "要返回的通告数。", 16 | "apihelp-query+allcampaigns-example-1": "列举启用的通告" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/api/zh-hant.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Cwlin0416", 5 | "Kly" 6 | ] 7 | }, 8 | "apihelp-flickrblacklist-summary": "透過利用使用者 ID(NSID)驗證 Flickr URL 來列入黑名單。", 9 | "apihelp-flickrblacklist-extended-description": "當與 list 選項使用時,回傳所有列入黑名單的 ID。", 10 | "apihelp-flickrblacklist-param-url": "要測試的 Flickr URL。", 11 | "apihelp-flickrblacklist-param-list": "當設定後,會回傳完整的黑名單。不能與 $1url 一同使用。", 12 | "apihelp-flickrblacklist-example-1": "檢查 URL 是否於封鎖清單中", 13 | "apihelp-flickrblacklist-example-2": "返回完整封鎖清單", 14 | "apihelp-query+allcampaigns-summary": "列舉所有上傳精靈行動。", 15 | "apihelp-query+allcampaigns-param-enabledonly": "僅列出已啟用的行動", 16 | "apihelp-query+allcampaigns-param-limit": "要回傳的行動數量。", 17 | "apihelp-query+allcampaigns-example-1": "列舉已啟用的行動。", 18 | "apihelp-mediadetection-summary": "傳回由所提供檔案鍵表示出貯藏圖片為標誌的可能性", 19 | "apihelp-mediadetection-param-filename": "檔案頁面名稱", 20 | "apihelp-mediadetection-param-filekey": "從 stash API 請求回傳的 filekey", 21 | "apihelp-mediadetection-example-filename": "傳回由所提供檔案名稱表示出圖片為標誌的可能性", 22 | "apihelp-mediadetection-example-filekey": "傳回由所提供檔案鍵表示出貯藏圖片為標誌的可能性", 23 | "apierror-mediadetection-no-valid-thumbnail": "圖片不存在縮圖,因此無法發送給分類器", 24 | "apierror-mediadetection-invalid-mime-type": "API 端點不適用於此類檔案 - 允許的類型為 image/jpeg、image/gif、image/png、image/bmp" 25 | } 26 | -------------------------------------------------------------------------------- /i18n/arc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Basharh" 5 | ] 6 | }, 7 | "mwe-upwiz-next": "ܕܒܬܪ", 8 | "mwe-upwiz-next-deeds": "ܕܒܬܪ" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/arq.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Oldstoneage" 5 | ] 6 | }, 7 | "mwe-upwiz-home": "روح لل پاجة اللولانيّة تاع الويكي" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/atj.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Benoit Rochon" 5 | ] 6 | }, 7 | "mwe-upwiz-remove": "Manina", 8 | "mwe-upwiz-desc": "E witcikemakak" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/av.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kaganer", 5 | "Omarov M.", 6 | "Аль-Гимравий" 7 | ] 8 | }, 9 | "mwe-upwiz-step-file": "Жанибе реххизе", 10 | "mwe-upwiz-upload-another": "Жеги файлал жанире реххизе", 11 | "mwe-upwiz-file-too-large-text": "Нужеда бажаруларо $1-ялдаса роцен кӀудияб файл жанибе реххизе. Нужеца абуни хӀал бихьулеб буго $2 роценалъул файл жанибе реххизе." 12 | } 13 | -------------------------------------------------------------------------------- /i18n/awa.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "1AnuraagPandey" 5 | ] 6 | }, 7 | "api-error-noimageinfo": "अपलोड सफल, लेकिन सर्वर ने फ़ाइल के बारे में हमें कोई जानकारी नहीं दी." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/azb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Amir a57", 5 | "Bir morty", 6 | "E THP", 7 | "Ebrahimi-amir", 8 | "Erdemaslancan", 9 | "Mousa" 10 | ] 11 | }, 12 | "uploadwizard": "یوکلمه سئهربازی", 13 | "api-error-noimageinfo": "یوکله‌مک باشاریلی اولدور، اما خیدمت‌چی فایلا گؤره هئچ بیر بیلگیلر وئرمه‌دی.", 14 | "mwe-upwiz-step-tutorial": "اویرن", 15 | "mwe-upwiz-step-file": "یوکله", 16 | "mwe-upwiz-step-deeds": "یایلما (نشر) حقوق‌لار", 17 | "mwe-upwiz-step-details": "ایضاح", 18 | "mwe-upwiz-step-thanks": "ایستفاده", 19 | "mwe-upwiz-help-desk": "یاردیم خیدمتی", 20 | "mwe-upwiz-help-desk-url": "{{ns:project}}:یاردیم خیدمتی", 21 | "mwe-upwiz-add-flickr-or": "یوخسا", 22 | "mwe-upwiz-transport-started": "باشلا...", 23 | "mwe-upwiz-uploading": "یوکلنیر...", 24 | "mwe-upwiz-stashed-upload": "یوکلندی", 25 | "mwe-upwiz-published": "یایینلانیب!", 26 | "mwe-upwiz-failed": "یانلیش.", 27 | "mwe-upwiz-remove": "سیل", 28 | "mwe-upwiz-upload": "یوکله", 29 | "mwe-upwiz-progressbar-uploading": "فایل یوکلمه", 30 | "mwe-upwiz-finished": "قورتولدی!", 31 | "mwe-upwiz-desc": "شرح", 32 | "mwe-upwiz-title": "باشلیق", 33 | "mwe-upwiz-location": "یئرلشمه‌سی", 34 | "mwe-upwiz-location-lat": "جغرافیایی ائنی", 35 | "mwe-upwiz-location-lon": "جغرافیایی اوزوناسی", 36 | "mwe-upwiz-location-alt": "يوکسکلیک", 37 | "mwe-upwiz-ok": "اولدو", 38 | "mwe-upwiz-next": "سونراکی", 39 | "mwe-upwiz-next-file": "داوام ائت", 40 | "mwe-upwiz-next-deeds": "سونراکی", 41 | "mwe-upwiz-home": "ویکی‌نین آناصحیفه‌سینه گئدین", 42 | "mwe-upwiz-tooltip-more-info": "آرتیق بیلگی", 43 | "mwe-upwiz-error-signature-too-long": "ایمضانیز چوخ اوزون‌دور.\nاو گرک {{PLURAL:$1|بیر| بیر}} $1 حرف‌دن اوزون اولمایا.", 44 | "mwe-upwiz-error-blank": "بو دَیَر لازیم‌دیر", 45 | "mwe-upwiz-license-fal": "آزاد مجوزلی هنر", 46 | "mwe-upwiz-license-pd-old-100": "مؤلف 100 ایلدن داها اول وفات ائدیب", 47 | "mwe-upwiz-license-pd-old": "مؤلف 70 ایلدن داها اول وفات ائدیب", 48 | "mwe-upwiz-license-pd-us": "ایلک دفعه 1930-جی ایلدن اؤنجه آمریکا بیرلشمیش ایالتلرینده نشر ائدیلیب", 49 | "mwe-upwiz-license-pd-usgov-nasa": "ناسا-نین اوریژینال ایشی", 50 | "mwe-upwiz-license-pd-usgov-military-navy": "ایالات متحده آمریکا حربی دونانماسینین اوریژینال ایشی", 51 | "mwe-upwiz-license-gfdl": "گنو آزاد سندلشدیرمه مجوزلری", 52 | "mwe-upwiz-license-custom-preview": "سیناق گؤستریشی", 53 | "mwe-upwiz-categories": "بؤلمه‌لر", 54 | "mwe-upwiz-errordialog-ok": "اولدو", 55 | "prefs-upwiz-licensing": "لیسانس" 56 | } 57 | -------------------------------------------------------------------------------- /i18n/bbc-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ProudBatak", 5 | "WBT001Erin" 6 | ] 7 | }, 8 | "mwe-upwiz-add-file-n": "Tambahon lobi surat", 9 | "mwe-upwiz-add-file-0-free": "Pillit media file laho dibagihon", 10 | "mwe-upwiz-add-file-flickr": "Bagihon gombar sian Flickr", 11 | "mwe-upwiz-fileexists-replace-no-link": "Bahen ulu ni surat na asing, siala ulu ni surat on dipangke file na asing", 12 | "mwe-upwiz-metadata-notice-header": "Surirang diri" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/bgn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ibrahim khashrowdi" 5 | ] 6 | }, 7 | "uploadwizard": "برز کنوکین جادوگر", 8 | "mwe-upwiz-home": "به ویکیي بُنیادین تاکدیما شوتین" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/bjn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ezagren", 5 | "Riemogerz" 6 | ] 7 | }, 8 | "api-error-noimageinfo": "Paunggahan tuntung, tagal paladen kada mambarii inpurmasi napa haja masalah barakas.", 9 | "mwe-upwiz-patent-dialog-link-warranty": "Palajari salangkapnya", 10 | "mwe-upwiz-patent-dialog-link-license": "Palajari salangkapnya", 11 | "mwe-upwiz-desc": "Paparan", 12 | "mwe-upwiz-title": "Judul", 13 | "mwe-upwiz-tooltip-more-info": "Palajari labih lanjut", 14 | "mwe-upwiz-mv-cta-user-preference-unset": "Pian kada lagi manarima pamadahan gasan mambari unggahan Pian tag." 15 | } 16 | -------------------------------------------------------------------------------- /i18n/bqi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mogoeilor" 5 | ] 6 | }, 7 | "mwe-upwiz-step-tutorial": "یاڌ بگرین", 8 | "mwe-upwiz-step-file": "سوڤارکرد", 9 | "mwe-upwiz-step-details": "تۉزی داڌن", 10 | "mwe-upwiz-step-thanks": "ڤا کار ڤٱندن", 11 | "mwe-upwiz-help-desk": "میز هومیاری", 12 | "mwe-upwiz-help-desk-url": "{{ns:project}}:میز هومیاری", 13 | "mwe-upwiz-add-file-n": "جانیایٱل بیشتر ناْ اْزاف کونین", 14 | "mwe-upwiz-add-flickr-or": "یا", 15 | "mwe-upwiz-add-flickr": "گرهڌن ز فلیکر", 16 | "mwe-upwiz-flickr-input-placeholder": "یۊ آر اْل فلیکر", 17 | "mwe-upwiz-transport-started": "ب هال و بار شورۊ کردن", 18 | "mwe-upwiz-uploading": "ب هال و بال سوڤار كرد", 19 | "mwe-upwiz-queued": "ب هال و بال سر گیٛی بیڌن...", 20 | "mwe-upwiz-assembling": "ب هال و بال سریٱک کردن", 21 | "mwe-upwiz-publish": "ب هال و بال دٱرتیچ کردن....", 22 | "mwe-upwiz-transported": "سوڤارکردن تموم ڤابیڌاْ", 23 | "mwe-upwiz-stashed-upload": "سوڤارکرد ڤابیڌاْ", 24 | "mwe-upwiz-published": "دٱرتیچ ڤابیڌاْ!", 25 | "mwe-upwiz-failed": "ناخوش سرٱنجوم بی.", 26 | "mwe-upwiz-remove": "ڤورداشدن", 27 | "mwe-upwiz-upload": "سوڤارکرد", 28 | "mwe-upwiz-progressbar-uploading": "ب هال و بال سوڤار كرد", 29 | "mwe-upwiz-finished": "تموم ڤابیڌاْ!", 30 | "mwe-upwiz-patent-dialog-button-back": "دیندا", 31 | "mwe-upwiz-patent-dialog-button-next": "نیایی", 32 | "mwe-upwiz-patent-dialog-link-warranty": "بیشتر یاڌ بگرین", 33 | "mwe-upwiz-patent-dialog-link-license": "بیشتر یاڌ بگرین", 34 | "mwe-upwiz-copy-metadata-button-undo": "ٱنجومشیڤ کردن", 35 | "mwe-upwiz-copied-metadata": "کوپی ڤابی!", 36 | "mwe-upwiz-undid-metadata": "کوپی ٱنجوم نٱڤابی", 37 | "mwe-upwiz-desc": "تۉزی", 38 | "mwe-upwiz-title": "داسوݩ ٱسگ", 39 | "mwe-upwiz-date-created": "ڤیرگار", 40 | "mwe-upwiz-location": "جاگٱ", 41 | "mwe-upwiz-location-button": "نشوݩ داڌن میٛن نٱشقاْ", 42 | "mwe-upwiz-ok": "خۊڤاْ", 43 | "mwe-upwiz-next": "نیایی", 44 | "mwe-upwiz-next-file": "ديندا گرهڌن", 45 | "mwe-upwiz-next-deeds": "نیایی", 46 | "mwe-upwiz-publish-details": "دٱرتیچ کردن", 47 | "mwe-upwiz-previous": "دیندا", 48 | "mwe-upwiz-tooltip-more-info": "بیشتر یاڌ بگرین", 49 | "mwe-upwiz-label-optional": "اْختیاری", 50 | "mwe-upwiz-file-too-large": "جانیٱ غٱلٱڤاْ گٱپ", 51 | "mwe-upwiz-dialog-yes": "هٱراٛ", 52 | "mwe-upwiz-dialog-no": "نٱ", 53 | "mwe-upwiz-campaign-upload-button": "سوڤارکرد!", 54 | "mwe-upwiz-license-custom-preview": "پيش ساٛیل", 55 | "mwe-upwiz-categories": "دٱسداْیٱل", 56 | "mwe-upwiz-errordialog-ok": "خۊڤاْ", 57 | "prefs-uploads": "ب هال و بال سوڤار كرد", 58 | "prefs-upwiz-licensing": "میٛن هال و بال ليسانس دار ڤابيڌن", 59 | "mwe-upload-campaigns-pagination-next": "بٱلگاْ نيايی" 60 | } 61 | -------------------------------------------------------------------------------- /i18n/ccp.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "BivutiChakma" 5 | ] 6 | }, 7 | "mwe-upwiz-blacklisted-details": "𑄃𑄬𑄭 𑄜𑄭𑄣𑄮𑄖𑄴 𑄎𑄉𑄪𑄣𑄪𑄇𑄴𑄬 𑄦𑄧𑄢𑄧𑄇𑄴 𑄃𑅅 𑄜𑄧𑄢𑄴𑄟𑄬𑄑𑄴 𑄃𑄊𑄬𑅁 ([$2 𑄃𑄨𑄠𑄮𑄖𑄴 𑄇𑄳𑄣𑄨𑄇𑄴 𑄉𑄧𑄢𑄴] 𑄃𑄬𑄭 𑄎𑄉𑄪𑄣𑄪𑄇𑄴𑄝𑄮𑄖𑄴𑄬𑄊𑄚𑄴 𑄥𑄮𑄢𑄴 𑄉𑄧𑄢𑄨𑄝𑄖𑄴𑄬 𑄥𑄪𑄙𑄮𑄟𑄴𑅁)", 8 | "mwe-upwiz-label-optional": "𑄃𑄧𑄛𑄴𑄥𑄮𑄚𑄣𑄴", 9 | "mwe-upwiz-categories": "𑄇𑄬𑄑𑄉𑄧𑄢𑄨𑄎𑄴" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/crh-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Don Alessandro" 5 | ] 6 | }, 7 | "mwe-upwiz-copy-categories-label": "Kategoriyalar", 8 | "mwe-upwiz-tooltip-categories-v2": "Çalışmañıznı qoymaq içün bar olğan bir kategoriyanı qıdırıñız.", 9 | "mwe-upwiz-campaign-view-all-media": "Yüklengen medialarnıñ episini köster", 10 | "mwe-upwiz-categories": "Kategoriya" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/cu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ОйЛ" 5 | ] 6 | }, 7 | "mwe-upwiz-title": "имѧ", 8 | "mwe-upwiz-dialog-yes": "да", 9 | "mwe-upwiz-dialog-no": "нѣтъ" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/cv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Astahar", 5 | "Chuvash2014" 6 | ] 7 | }, 8 | "uploadwizard": "Тиев пулӑшуҫи", 9 | "uploadwizard-desc": "Тиев пулӑшуҫи — медиафайлсене тиеме ҫӑмӑллатакан меллӗ хатӗр", 10 | "tag-uploadwizard": "Тиев пулӑшуҫи", 11 | "tag-uploadwizard-description": "Тиев пулӑшуҫипе усӑ курса тунӑ тиевсем", 12 | "tag-uploadwizard-flickr-description": "ТИев пулӑшуҫипе усӑ курса Flickr ҫинчен тиенисем", 13 | "mwe-upwiz-categories": "Категорисем", 14 | "mwe-upload-campaigns-pagination-next": "Тепĕр страница" 15 | } 16 | -------------------------------------------------------------------------------- /i18n/de-ch.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Das Schäfchen", 5 | "Filzstift", 6 | "Geitost" 7 | ] 8 | }, 9 | "mwe-upwiz-tutorial-error-cannot-transform": "Es konnte leider kein Bild des Lernprogramms aufgerufen werden, das sich der Bildschirmgrösse anpasst. Dies könnte ein vorübergehendes Problem von ''Wikimedia Commons'' sein. Versuche es später noch einmal.", 10 | "mwe-upwiz-source-ownwork-cc-by-sa-3.0-explain": "(Jeder darf {{PLURAL:$1|dieses Werk|diese Werke}} nutzen, weitergeben oder verändern, solange ich als Urheber angegeben werde und Änderungen gemäss der gleichen Lizenz weitergegeben werden.)", 11 | "mwe-upwiz-tooltip-title": "Vergib einen eindeutigen und beschreibenden Titel in Klartext mit Leerschlägen. Lasse die Dateierweiterung weg.", 12 | "mwe-upwiz-error-title-duplicate": "Dieser Titel wurde für mehr als eine hochzuladende Datei angegeben. Unterstriche werden als Leerschläge behandelt, eine Dateierweiterung wird automatisch hinzugefügt.", 13 | "mwe-upwiz-file-too-large": "Die Datei ist zu gross.", 14 | "mwe-upwiz-dialog-title": "Warnung", 15 | "mwe-upwiz-license-cc-head": "Der Urheberrechtsinhaber hat {{PLURAL:$1|dieses Werk|diese Werke}} gemäss der richtigen «Creative Commons»-Lizenz lizenziert.", 16 | "mwe-upwiz-license-flickr-head": "Der Urheberrechtsinhaber hat {{PLURAL:$1|sein Foto oder Video|seine Fotos oder Videos}} auf Flickr gemäss der richtigen Lizenz veröffentlicht." 17 | } 18 | -------------------------------------------------------------------------------- /i18n/dty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Nirajan pant", 5 | "राम प्रसाद जोशी" 6 | ] 7 | }, 8 | "tag-uploadwizard": "अपलोड विजार्ड", 9 | "tag-uploadwizard-description": "अपलोड विजार्ड हताँ अरीयाऽ अपलोडअन", 10 | "mwe-upwiz-tutorial-error-localized-file-missing": "माफ गर्या, हामीले तमरो भाषामी ट्यूटोरियल पाएनौं, यैको सट्टामी $1 भाषा को प्रदर्शन गरियाको छ ।", 11 | "mwe-upwiz-patent-dialog-link-license": "आँजि सिकः" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/en-ca.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dantman", 5 | "Nemo bis", 6 | "Paladox", 7 | "Shirayuki", 8 | "Zachyoung6969" 9 | ] 10 | }, 11 | "mwe-upwiz-license-show-all": "Use a different licence", 12 | "mwe-upwiz-license-show-recommended": "Use the site's recommended licence", 13 | "mwe-upwiz-license-fal": "Free Art Licence", 14 | "mwe-upwiz-license-gfdl": "GNU Free Documentation Licence", 15 | "mwe-upwiz-license-cc-head": "The copyright holder published {{PLURAL:$1|this work|these works}} with the right Creative Commons licence", 16 | "mwe-upwiz-license-cc-subhead": "Not all Creative Commons licences are good for this site. Make sure the copyright holder used one of these licences.", 17 | "mwe-upwiz-license-flickr-head": "The copyright holder published their {{PLURAL:$1|photo or video|photos or videos}} on Flickr with the right licence", 18 | "mwe-upwiz-license-flickr-subhead": "Check the \"Licence\" header on the side of the Flickr page. Both the icons and licence name that they used have to match one of the choices here.", 19 | "mwe-upwiz-license-external": "This file is under the following licence on \"$1\": $2.", 20 | "mwe-upwiz-license-external-invalid": "This file on $1 is under the following licence: $2.

Unfortunately, this wiki does not accept that licence." 21 | } 22 | -------------------------------------------------------------------------------- /i18n/fit.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Pyscowicz" 5 | ] 6 | }, 7 | "mwe-upwiz-step-file": "Lattaa ylös", 8 | "mwe-upwiz-patent-dialog-button-back": "Takashiin", 9 | "mwe-upwiz-patent-dialog-button-next": "Seuraava", 10 | "mwe-upwiz-patent-dialog-link-warranty": "Lue lissää", 11 | "mwe-upwiz-patent-dialog-link-license": "Lue lissää", 12 | "mwe-upwiz-deleted-duplicate-unknown-filename": "Tuntematon fiilinimi", 13 | "mwe-upwiz-publish-details": "Anna ulos fiilit", 14 | "mwe-upwiz-publish-metadata": "Anna ulos taatta", 15 | "mwe-upwiz-previous": "Takashiin", 16 | "mwe-upwiz-home": "Siiry wikin alkusivule", 17 | "mwe-upwiz-dialog-yes": "Joo", 18 | "mwe-upwiz-dialog-no": "Ei", 19 | "mwe-upwiz-dialog-title": "Varotus", 20 | "mwe-upwiz-license-custom-preview": "Esikattelu", 21 | "mwe-upwiz-categories": "Katekuurit" 22 | } 23 | -------------------------------------------------------------------------------- /i18n/frc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Hangmanwa7id" 5 | ] 6 | }, 7 | "mwe-upwiz-unparseable-filename": "Impossible d’interpréter le nom de fichier « $1 »." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/frr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Murma174" 5 | ] 6 | }, 7 | "api-error-noimageinfo": "Det huuchschüüren hää loket, oober di server hää nian datei-dooten.", 8 | "mwe-upwiz-dialog-yes": "Ja", 9 | "mwe-upwiz-dialog-no": "Naan" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/fur.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Klenje", 5 | "Matma Rex" 6 | ] 7 | }, 8 | "mwe-upwiz-step-tutorial": "Impare", 9 | "mwe-upwiz-step-file": "Cjame", 10 | "mwe-upwiz-step-deeds": "Libere i dirits", 11 | "mwe-upwiz-step-details": "Descrîf", 12 | "mwe-upwiz-step-thanks": "Dopre", 13 | "mwe-upwiz-add-file-n": "Zonte un altri file", 14 | "mwe-upwiz-uploading": "Daûr a cjamâ…", 15 | "mwe-upwiz-stashed-upload": "Va ben", 16 | "mwe-upwiz-remove": "Gjave", 17 | "mwe-upwiz-upload": "Cjame", 18 | "mwe-upwiz-desc": "Descrizion", 19 | "mwe-upwiz-title": "Titul", 20 | "mwe-upwiz-date-created": "Date di creazion", 21 | "mwe-upwiz-location": "Lûc", 22 | "mwe-upwiz-next": "Prossim", 23 | "mwe-upwiz-next-file": "Va indevant", 24 | "mwe-upwiz-next-deeds": "Prossim", 25 | "mwe-upwiz-deeds-require-selection": "Sielç par plasê une licence.", 26 | "mwe-upwiz-categories": "Categoriis" 27 | } 28 | -------------------------------------------------------------------------------- /i18n/ga.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Alison", 5 | "Nmacu", 6 | "පසිඳු කාවින්ද" 7 | ] 8 | }, 9 | "mwe-upwiz-add-flickr-or": "nó", 10 | "mwe-upwiz-title": "Teideal", 11 | "mwe-upwiz-location-heading": "Ceannteideal", 12 | "mwe-upwiz-next": "Ar aghaidh", 13 | "mwe-upwiz-next-deeds": "Ar aghaidh", 14 | "mwe-upwiz-categories": "Catagóirí" 15 | } 16 | -------------------------------------------------------------------------------- /i18n/gd.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "GunChleoc" 5 | ] 6 | }, 7 | "uploadwizard": "Draoidh luchdaidh suas", 8 | "uploadwizard-desc": "Draoidh luchdaidh suas, seo inneal feumail dhan luchd-cleachdaidh gus iomadh meadhan a luchdadh suas", 9 | "right-upwizcampaigns": "Rèitich iomairtean le draoidh luchdaidh suas", 10 | "action-upwizcampaigns": "rèitich na h-iomairtean luchdaidh suas", 11 | "group-upwizcampeditors": "Deasaichean airson iomairtean le draoidh luchdaidh suas", 12 | "group-upwizcampeditors-member": "Deasaiche airson iomairtean le draoidh luchdaidh suas", 13 | "grouppage-upwizcampeditors": "{{ns:project}}:Deasaichean airson iomairtean le draoidh luchdaidh suas", 14 | "group-upwizcampeditors.css": "/* Cha bhi buaidh aig an CSS a chuireas tu an-seo ach air deasaichean airson iomairtean le draoidh luchdaidh suas */", 15 | "group-upwizcampeditors.js": "/* Cha dèid an JavaScript a chuireas tu an-seo a luchdadh ach airson deasaichean airson iomairtean le draoidh luchdaidh suas */", 16 | "api-error-noimageinfo": "Shoirbhich leis an luchdadh suas, ach cha dug am frithealaiche fiosrachadh sam bith dhuinn mun fhaidhle.", 17 | "mwe-upwiz-campaign-name-duplicate": "Tha iomairt air a bheil an t-ainm seo ann mar-thà.", 18 | "mwe-upwiz-feedback-title": "Cuir beachd thugainn mun draoidh luchdaidh suas", 19 | "mwe-upwiz-error-nosuchcampaign": "Cha eil iomairt air a bheil \"$1\" ann.", 20 | "mwe-upwiz-error-campaigndisabled": "Cha deach an iomairt \"$1\" a chur an comas.", 21 | "campaigns": "Iomairtean le draoidh luchdaidh suas", 22 | "mwe-upload-campaigns-list-title": "Liosta dhe na h-iomairtean luchdaidh suas" 23 | } 24 | -------------------------------------------------------------------------------- /i18n/gn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "P. S. F. Freitas" 5 | ] 6 | }, 7 | "mwe-upwiz-title": "Ta'anga réra", 8 | "mwe-upwiz-date-created": "Arange", 9 | "mwe-upwiz-label-optional": "Poravorã" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/gom-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "The Discoverer" 5 | ] 6 | }, 7 | "tag-uploadwizard-description": "Upload Wizarda vorvim kelole upload", 8 | "tag-uploadwizard-flickr-description": "Upload Wizarda vorvim Flickr savn kelole upload", 9 | "mwe-upwiz-transport-started": "Survat zata..." 10 | } 11 | -------------------------------------------------------------------------------- /i18n/gor.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Lukman Tomayahu", 5 | "Marwan Mohamad" 6 | ] 7 | }, 8 | "mwe-upwiz-copy-metadata-button-undo": "Mopowuwalingo", 9 | "mwe-upwiz-copied-metadata": "Yilapato lohemi", 10 | "mwe-upwiz-undid-metadata": "Mohemi bilatali" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/gpe.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "DaSupremo" 5 | ] 6 | }, 7 | "mwe-upwiz-feedback-blacklist-line-intro": "Dis be de title list entry wey dem disallow wey dey match am:\n$1" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/grc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Crazymadlover" 5 | ] 6 | }, 7 | "mwe-upwiz-ok": "εἶεν" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/hif-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Karthi.dr", 5 | "Smcnarayan" 6 | ] 7 | }, 8 | "api-error-noimageinfo": "Upload hoe gais, lekin server file ke baare me koi jaankari nai diis.", 9 | "mwe-upwiz-ok": "Thik hae", 10 | "mwe-upwiz-errordialog-ok": "Thik hae" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/ht.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Schery19" 5 | ] 6 | }, 7 | "mwe-upwiz-error-title-too-long": "Tit sa twò long.\nTanpri asire ke tit sa fè pou pi plis $1 {{PLURAL:$1|byte|bytes}}.", 8 | "mwe-upwiz-error-title-too-short": "Tit sa twò kout.\nTanpri asire ke tit sa fè pou piti $1 {{PLURAL:$1|byte|bytes}}." 9 | } 10 | -------------------------------------------------------------------------------- /i18n/hyw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kareyac" 5 | ] 6 | }, 7 | "mwe-upwiz-add-flickr-or": "կամ", 8 | "mwe-upwiz-patent-dialog-button-back": "Ետ", 9 | "mwe-upwiz-copy-description-label": "Նկարագրութիւն", 10 | "mwe-upwiz-copy-categories-label": "Ստորոգութիւններ", 11 | "mwe-upwiz-ok": "Լաւ", 12 | "mwe-upwiz-previous": "Ետ", 13 | "mwe-upwiz-dialog-yes": "Այո", 14 | "mwe-upwiz-errordialog-ok": "Լաւ" 15 | } 16 | -------------------------------------------------------------------------------- /i18n/ie.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "OIS" 5 | ] 6 | }, 7 | "mwe-upwiz-publish-metadata-error": "Ples corecter omni errores." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/ig.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ukabia" 5 | ] 6 | }, 7 | "mwe-upwiz-date-created": "Úbọchì okìkè", 8 | "mwe-upwiz-location": "Ébéà", 9 | "mwe-upwiz-ok": "Ngwanu", 10 | "mwe-upwiz-next": "Nàíhú", 11 | "mwe-upwiz-next-deeds": "Nàíhú", 12 | "mwe-upwiz-home": "Gá na ihü mbu nke wiki", 13 | "mwe-upwiz-categories": "Ụdàkọ" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/inh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Adam-Yourist" 5 | ] 6 | }, 7 | "uploadwizard": "Файл чуяккхара пхьар", 8 | "uploadwizard-desc": "Файл чуяккхара пхьар — медиафайлаш чуяха атта хургдолаш лелаю кечал я", 9 | "tag-uploadwizard": "Файл чуяккхара пхьар", 10 | "mwe-upwiz-copied-metadata": "Шолхадаьккхад", 11 | "mwe-upwiz-categories": "ОагӀат", 12 | "prefs-uploads": "Чуяккхар" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/isv-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "IJzeren Jan" 5 | ] 6 | }, 7 | "mwe-upwiz-blacklisted-details-feedback": "Prosimo, vvedite ino, bolje opisyvajuče zaglavje ([$2 veče informacij]) • [$3 Izslati vaše mněnje]" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/jbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Gleki" 5 | ] 6 | }, 7 | "mwe-upwiz-step-tutorial": "cilre" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/kab.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mmistmurt" 5 | ] 6 | }, 7 | "api-error-noimageinfo": "Azdam yetwaxdam, maca aqeddac ur d-yefka ara tilɣa ɣef ufaylu." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/kge.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Es Krim 5 Juta Rasa" 5 | ] 6 | }, 7 | "mwe-upwiz-patent-dialog-link-license-grant": "Kode Sah" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/kiu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mirzali" 5 | ] 6 | }, 7 | "mwe-upwiz-dialog-yes": "Heya", 8 | "mwe-upwiz-dialog-no": "Nê" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/kjh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Sibday", 5 | "Матыр" 6 | ] 7 | }, 8 | "mwe-upwiz-source-ownwork-question": "Хайдағ лицензияҷа {{GENDER:$2|you}} {{PLURAL:$1|this work|these works\n}} сығар турарға сағынчазар? Викискладта прай материаллар пос лицензияҷа сығарыларға киректер.", 9 | "mwe-upwiz-dialog-yes": "Я", 10 | "mwe-upwiz-categories-missing": "Категориялар аразында тексті пар чарыдығлығ страницазы чоғыл осхас. Страница ады орта адал парған ма? Алҷаас чоғыл?" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/kjp.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Rul1902" 5 | ] 6 | }, 7 | "mwe-upwiz-campaign-contributors-count-desc": "{{PLURAL:$1|ထ္ၜါခေဝ်က်ုဆါႋ|ထ္ၜါခေဝ်က်ုဆါႋလ်ုဖး}}", 8 | "mwe-upload-campaigns-pagination-next": "လ်ုယာ့လိက်မေံၜၠါ်" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/ko-kp.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Delim" 5 | ] 6 | }, 7 | "uploadwizard": "올리적재 조수", 8 | "uploadwizard-desc": "올리적재 조수, 다매체를 올리적재하기 위한 사용자에게 친한 도구", 9 | "tag-uploadwizard": "올리적재 조수", 10 | "tag-uploadwizard-description": "올리적재 조수로 올리적재된 서류들", 11 | "tag-uploadwizard-flickr-description": "올리적재 조수로 올리적재된 깜박거리 서류들", 12 | "right-upwizcampaigns": "올리적재 조수 운동을 설정하기", 13 | "action-upwizcampaigns": "올리적재 운동을 설정할", 14 | "group-upwizcampeditors": "올리적재 조수 운동의 편집자", 15 | "group-upwizcampeditors-member": "{{GENDER:$1|올리적재 조수 운동의 편집자}}", 16 | "grouppage-upwizcampeditors": "{{ns:project}}:올리적재 조수 운동 편집자" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/kum.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ArslanX" 5 | ] 6 | }, 7 | "mwe-upwiz-step-metadata": "Беримлер къошмакъ", 8 | "mwe-upwiz-add-flickr-or": "яда", 9 | "mwe-upwiz-publish-metadata": "Басмаламакъ" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/lad.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Menachem.Moreira", 5 | "Universal Life" 6 | ] 7 | }, 8 | "mwe-upwiz-published": "Publikado!", 9 | "mwe-upwiz-dialog-yes": "Si", 10 | "mwe-upwiz-dialog-no": "No", 11 | "mwe-upwiz-categories": "Kategorías" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/lez.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Soul Train" 5 | ] 6 | }, 7 | "mwe-upwiz-remove": "Алудун", 8 | "mwe-upwiz-categories": "Категорияр" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/lfn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Robin van der Vliet" 5 | ] 6 | }, 7 | "mwe-upwiz-desc": "Descrive" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/lo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Aefgh39622" 5 | ] 6 | }, 7 | "mwe-upwiz-previous": "ກັບຄຶນ" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/lzh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Itsmine", 5 | "Jason924tw", 6 | "Yanteng3" 7 | ] 8 | }, 9 | "uploadwizard": "貢之靈", 10 | "mwe-upwiz-campaign-view-all-media": "檢閱貢奉" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/mai.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ggajendra", 5 | "Manojberma77", 6 | "Vinitutpal", 7 | "बिप्लब आनन्द" 8 | ] 9 | }, 10 | "uploadwizard": "उपारोपण तन्त्र", 11 | "uploadwizard-desc": "उपारोपण तन्त्र, विकसित कएल गेल दृश्य-श्रव्य उपयोग अनुदान लेल", 12 | "mwe-upwiz-extension-disabled": "ई पन्ना अस्थायी तकनीकी समस्याक कारणसँ अशक्त कएल गेल अछि। ऐ बीच सामान्य उपारोपण आवेदनक प्रयोग करू।", 13 | "mwe-upwiz-step-tutorial": "सीखू", 14 | "mwe-upwiz-step-file": "उपारोपण", 15 | "mwe-upwiz-step-deeds": "अनावरण अधिकार", 16 | "mwe-upwiz-step-details": "विस्तारसँ कहू", 17 | "mwe-upwiz-step-thanks": "प्रयोग करू", 18 | "mwe-upwiz-help-desk": "सहायता कोष्ठ", 19 | "mwe-upwiz-add-file-n": "दोसर संचिका जोड़ू", 20 | "mwe-upwiz-add-file-0-free": "एकटा दृश्य-श्रव्य सञ्चिका दान लेल चुनी", 21 | "mwe-upwiz-transport-started": "शुरू भऽ रहल अछि...", 22 | "mwe-upwiz-uploading": "उपारोपण भऽ रहल अछि...", 23 | "mwe-upwiz-transported": "उपारोपण समाप्त भेल...", 24 | "mwe-upwiz-stashed-upload": "उपारोपण भेल", 25 | "mwe-upwiz-getting-metadata": "संचिका सूचना आ पूर्वदृश्य आनि रहल छी ...", 26 | "mwe-upwiz-submitting-details": "विवरण द' रहल छी आ प्रकाशित क' रहल छी...", 27 | "mwe-upwiz-published": "प्रकाशित भेल !", 28 | "mwe-upwiz-failed": "नै भेल।", 29 | "mwe-upwiz-remove": "हटाउ", 30 | "mwe-upwiz-next-file-despite-failures": "कोनहुना जारी राखू", 31 | "mwe-upwiz-skip-tutorial-future": "ई पद भविष्यमे छोडि कऽ बढी", 32 | "mwe-upwiz-progressbar-uploading": "उपारोपण भऽ रहल अछि।", 33 | "mwe-upwiz-finished": "खतम भेल!" 34 | } 35 | -------------------------------------------------------------------------------- /i18n/mg.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jagwar" 5 | ] 6 | }, 7 | "api-error-noimageinfo": "Nahomby ilay fandikana, fa tsy nanome antsika fampahalalana mahakasika ilay rakitra ilay lohamilina.", 8 | "mwe-upwiz-location-button": "Aseho amin'ny sarintany", 9 | "mwe-upwiz-custom-date": "Hmapiasa ny endri-daty nofaritana manokana" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/min.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Iwan Novirion" 5 | ] 6 | }, 7 | "group-upwizcampeditors-member": "{{GENDER:$1|editor kampanye Upload Wizard}}" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/mn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Chinneeb", 5 | "Munkhzaya.E", 6 | "Wisdom" 7 | ] 8 | }, 9 | "api-error-noimageinfo": "upload хийгдсэн боловч файлын талаар ямарч мэдээлэл сервер өгсөнгүй.", 10 | "mwe-upwiz-select-date": "Огноо сонгоно уу", 11 | "mwe-upwiz-categories": "Ангиллууд", 12 | "mwe-upwiz-prefs-def-license-custom": "Хэрэглэгчийн тодорхойлсон стандард лиценз", 13 | "mwe-upwiz-prefs-def-license-custom-help": "Хэрвээ та дээр байгаа хамгийн сүүлчийн боломжийг сонгосон тохиолдолд л энэ талбар ашиглагдана." 14 | } 15 | -------------------------------------------------------------------------------- /i18n/mnc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Chulsu463" 5 | ] 6 | }, 7 | "mwe-upwiz-patent-dialog-link-license-grant": "fafungga temge", 8 | "mwe-upwiz-error-title-too-few-characters": "ere colo umesi foholon. ere colo {{PLURAL:$1|character|chacters}} ocina." 9 | } 10 | -------------------------------------------------------------------------------- /i18n/mui.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Es Krim 5 Juta Rasa", 5 | "Jawadywn" 6 | ] 7 | }, 8 | "mwe-upwiz-author-text": "Isike namo wong yang aslinyo ngawek {{PLURAL:$1|gawean ini|gawean-gawean ini}}.", 9 | "mwe-upwiz-source-text": "Dari mano nian {{GENDER:$2|Dulur}} bolé {{PLURAL:$1|gawîan ni|gawî-gawîan ni}}? Isike namo situs, buku, apo sumber laénnyo.", 10 | "mwe-upwiz-error-question-blank": "Jawaban pertanyaan ini diperluke" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/mwl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Athena in Wonderland", 5 | "MokaAkashiyaPT" 6 | ] 7 | }, 8 | "uploadwizard": "Assistente de ambio de fexeiros", 9 | "uploadwizard-desc": "Assistente de Ambio de Fexeiros, ua ferramienta de outelizaçon fácele pa cargar fexeiros multimédia", 10 | "mwe-upwiz-tutorial-error-localized-file-missing": "Çculpe, nun fui ancontrado nanhun guia na sue lhéngua. L guia será amostrado an $1.", 11 | "mwe-upwiz-skip-tutorial-future": "Eignorar este passo ne l feturo" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/oc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "BrennodAloisi", 5 | "Cedric31", 6 | "Envlh", 7 | "McDutchie" 8 | ] 9 | }, 10 | "uploadwizard": "Assistent d'impòrt", 11 | "uploadwizard-desc": "Assistent d'impòrt, desvolopat per la subvencion Multimedia Usability", 12 | "right-upwizcampaigns": "Configurar las campanhas de l’Assistent d’impòrt", 13 | "action-upwizcampaigns": "configurar las campanhas d’impòrt", 14 | "group-upwizcampeditors": "Editors de campanha de l’Assistent d’impòrt", 15 | "api-error-noimageinfo": "Lo mandadís a capitat, mas lo servidor a pas donat cap d'informacions sul fichièr.", 16 | "mwe-upwiz-step-tutorial": "Aprendre", 17 | "mwe-upwiz-step-file": "Importar", 18 | "mwe-upwiz-step-deeds": "Dreits acordats", 19 | "mwe-upwiz-step-details": "Descriure", 20 | "mwe-upwiz-step-thanks": "Utilizacion", 21 | "mwe-upwiz-add-file-n": "Apondre d'autres fichièrs", 22 | "mwe-upwiz-add-file-flickr-n": "Apondre d’autres imatges dempuèi Flickr", 23 | "mwe-upwiz-add-flickr-or": "O", 24 | "mwe-upwiz-transport-started": "Aviada...", 25 | "mwe-upwiz-uploading": "Cargament en cors...", 26 | "mwe-upwiz-queued": "En espèra...", 27 | "mwe-upwiz-assembling": "En cors d'assemblatge...", 28 | "mwe-upwiz-publish": "En cors de publicacion…", 29 | "mwe-upwiz-transported": "Cargament acabat...", 30 | "mwe-upwiz-stashed-upload": "Cargat", 31 | "mwe-upwiz-published": "Publicat !", 32 | "mwe-upwiz-failed": "Fracàs.", 33 | "mwe-upwiz-remove": "Levar", 34 | "mwe-upwiz-title": "Títol", 35 | "mwe-upwiz-date-created": "Data de creacion", 36 | "mwe-upwiz-location": "Emplaçament", 37 | "mwe-upwiz-location-lat": "Latitud", 38 | "mwe-upwiz-location-lon": "Longitud", 39 | "mwe-upwiz-location-alt": "Altitud", 40 | "mwe-upwiz-location-heading": "Orientation", 41 | "mwe-upwiz-ok": "D'acòrdi", 42 | "mwe-upwiz-next": "Seguent", 43 | "mwe-upwiz-next-file": "Contunhar", 44 | "mwe-upwiz-next-deeds": "Seguent", 45 | "mwe-upwiz-tooltip-skiptutorial": "Podètz reactivar aqueste didacticial dins [$1 vòstras preferéncias personalas], jos $2 → $3.", 46 | "mwe-upwiz-file-need-file": "D'en primièr, apondre un fichièr d'importar.", 47 | "mwe-upwiz-license-custom-url": "//commons.wikimedia.org/wiki/Commons:Bendèls de licéncia", 48 | "mwe-upwiz-license-fal": "Licéncia Art Liura", 49 | "mwe-upwiz-license-gfdl": "Licéncia de documentacion liura GNU", 50 | "mwe-upwiz-license-custom-preview": "Previsualizacion", 51 | "mwe-upwiz-categories": "Categorias", 52 | "mwe-upwiz-subhead-alt-upload": "Retorn a l’ancian formulari", 53 | "mwe-upwiz-feedback-prompt": "Daissar un comentari", 54 | "mwe-upwiz-errordialog-ok": "D'acòrdi" 55 | } 56 | -------------------------------------------------------------------------------- /i18n/olo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ilja.mos", 5 | "Mashoi7", 6 | "Pyscowicz" 7 | ] 8 | }, 9 | "mwe-upwiz-step-tutorial": "Opastu", 10 | "mwe-upwiz-step-thanks": "Käytä", 11 | "mwe-upwiz-add-flickr-or": "libo", 12 | "mwe-upwiz-publish": "Piästetäh ilmah...", 13 | "mwe-upwiz-published": "Piästetty ilmah!", 14 | "mwe-upwiz-finished": "Valmis!", 15 | "mwe-upwiz-deleted-duplicate-unknown-filename": "Tundematoi failan nimi", 16 | "mwe-upwiz-next": "Tulii", 17 | "mwe-upwiz-next-file": "Jatka", 18 | "mwe-upwiz-next-deeds": "Tulii", 19 | "mwe-upwiz-home": "Mene wikin ezisivule", 20 | "mwe-upwiz-error-blank": "Tämä tiedo piädy.", 21 | "mwe-upwiz-file-too-large": "Failu on liijan suuri.", 22 | "mwe-upwiz-dialog-yes": "Muga", 23 | "mwe-upwiz-dialog-no": "Ei", 24 | "mwe-upwiz-campaign-contributors-count-desc": "{{PLURAL:$1|Kirjuttai|Kirjuttajat}}", 25 | "mwe-upwiz-license-custom-preview": "Ezikačo", 26 | "mwe-upwiz-license-none-head": "Lövvin sen netaspäi engo ole varmu", 27 | "mwe-upwiz-categories": "Kategouriet", 28 | "mwe-upwiz-calendar-date": "Valliče päivy kalenduaraspäi", 29 | "mwe-upload-campaigns-pagination-next": "Tulii sivu" 30 | } 31 | -------------------------------------------------------------------------------- /i18n/om.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Tumsaa" 5 | ] 6 | }, 7 | "mwe-upwiz-select-date": "Guyyaa filadhu", 8 | "mwe-upwiz-feedback-prompt": "Yaada kenni" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/os.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bouron" 5 | ] 6 | }, 7 | "api-error-noimageinfo": "Æвгæд æххæст у, фæлæ нын сервер ницыуал рабæрæг кодта файлы тыххæй.", 8 | "mwe-upwiz-transport-started": "Байдайгæ...", 9 | "mwe-upwiz-uploading": "Æвгæнгæ...", 10 | "mwe-upwiz-transported": "Æвгæд...", 11 | "mwe-upwiz-stashed-upload": "Хорз", 12 | "mwe-upwiz-upload": "Бавгæнын", 13 | "mwe-upwiz-finished": "Æххæст!", 14 | "mwe-upwiz-prefs-license-own": "Хи куыст - $1", 15 | "mwe-upwiz-prefs-license-thirdparty": "Æндæр кæйдæр куыст - $1" 16 | } 17 | -------------------------------------------------------------------------------- /i18n/pa.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Babanwalia", 5 | "Bgo eiu", 6 | "Cabal", 7 | "Kuldeepburjbhalaike", 8 | "Speedytwo" 9 | ] 10 | }, 11 | "uploadwizard": "ਅੱਪਲੋਡ ਸਹਾਇਕ", 12 | "tag-uploadwizard-flickr": "ਫਲਿੱਕਰ", 13 | "api-error-noimageinfo": "ਚੜ੍ਹਾਉਣਾ ਸਫਲ਼ ਹੋਇਆ ਪਰ ਸਰਵਰ ਨੇ ਇਸ ਫ਼ਾਈਲ ਬਾਰੇ ਸਾਨੂੰ ਕੋਈ ਜਾਣਕਾਰੀ ਨਹੀਂ ਦਿੱਤੀ।", 14 | "mwe-upwiz-step-tutorial": "ਸਿੱਖੋ", 15 | "mwe-upwiz-step-file": "ਚੜ੍ਹਾਉ", 16 | "mwe-upwiz-step-deeds": "ਜਾਰੀ ਕਰਨ ਦੇ ਅਧਿਕਾਰ", 17 | "mwe-upwiz-step-details": "ਵਰਣਨ", 18 | "mwe-upwiz-step-metadata": "ਡਾਟਾ ਸ਼ਾਮਲ ਕਰੋ", 19 | "mwe-upwiz-step-thanks": "ਵਰਤੋਂ", 20 | "mwe-upwiz-help-desk": "ਸਹਾਇਤਾ ਕੇਂਦਰ", 21 | "mwe-upwiz-help-desk-url": "{{ns:project}}:ਸਹਾਇਤਾ ਕੇਂਦਰ", 22 | "mwe-upwiz-add-file-n": "ਹੋਰ ਫ਼ਾਈਲਾਂ ਸ਼ਾਮਲ ਕਰੋ", 23 | "mwe-upwiz-add-file-0-free": "ਸ਼ੇਅਰ ਕਰਨ ਲਈ ਮੀਡੀਆ ਫਾਈਲਾਂ ਦੀ ਚੋਣ ਕਰੋ", 24 | "mwe-upwiz-add-file-flickr": "ਫਲਿੱਕਰ ਤੋਂ ਤਸਵੀਰਾਂ ਸਾਂਝੀਆਂ ਕਰੋ", 25 | "mwe-upwiz-add-file-flickr-n": "ਫਲਿੱਕਰ ਤੋਂ ਹੋਰ ਤਸਵੀਰਾਂ ਸ਼ਾਮਲ ਕਰੋ", 26 | "mwe-upwiz-add-flickr-or": "ਜਾਂ", 27 | "mwe-upwiz-add-flickr": "ਫਲਿੱਕਰ ਤੋਂ ਪ੍ਰਾਪਤ ਕਰੋ", 28 | "mwe-upwiz-flickr-input-placeholder": "ਫਲਿੱਕਰ ਯੂਆਰਐੱਲ", 29 | "mwe-upwiz-select-flickr": "ਚੁਣੀਆਂ ਗਈਆਂ ਤਸਵੀਰਾਂ ਚੜ੍ਹਾਉ", 30 | "mwe-upwiz-transport-started": "ਸ਼ੁਰੂ ਹੋ ਰਿਹਾ ਹੈ…", 31 | "mwe-upwiz-uploading": "ਚੜ੍ਹਾਉਣਾ ਜਾਰੀ ਹੈ", 32 | "mwe-upwiz-publish": "ਸਾਂਭਿਆ ਜਾ ਰਿਹਾ ਹੈ...", 33 | "mwe-upwiz-copy-statements-depicts": "ਮੁੱਢਲੇ ਵਿਸ਼ੇ", 34 | "mwe-upwiz-categories": "ਸ਼੍ਰੇਣੀ" 35 | } 36 | -------------------------------------------------------------------------------- /i18n/pam.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Leeheonjin" 5 | ] 6 | }, 7 | "prefs-uploads": "Lululan (uploading)" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/pdc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Xqt" 5 | ] 6 | }, 7 | "mwe-upwiz-step-tutorial": "Lanne", 8 | "mwe-upwiz-step-file": "Ufflaade", 9 | "mwe-upwiz-stashed-upload": "OK", 10 | "mwe-upwiz-title": "Titel", 11 | "mwe-upwiz-ok": "OK", 12 | "mwe-upwiz-next": "Neegschte", 13 | "mwe-upwiz-next-file": "Weider", 14 | "mwe-upwiz-next-deeds": "Neegschte", 15 | "mwe-upwiz-tooltip-more-info": "Mehner lanne.", 16 | "mwe-upwiz-license-custom-preview": "Aasicht", 17 | "mwe-upwiz-categories": "Abdeelinge", 18 | "mwe-upwiz-errordialog-ok": "OK" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/pfl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Manuae", 5 | "Xqt" 6 | ] 7 | }, 8 | "mwe-upwiz-tutorial-error-localized-file-missing": "Dud uns leed, awa's hod nix in doinere Schbrooch. Nemme mas hald uff Englisch.", 9 | "mwe-upwiz-finished": "Ferdisch!", 10 | "mwe-upwiz-next": "Negschte", 11 | "mwe-upwiz-next-file": "Waida mache", 12 | "mwe-upwiz-next-deeds": "Negschte", 13 | "mwe-upwiz-deeds-need-deed": "Vagligga ma bidde, wuhea die {{PLURAL:$1|Dadai|Dadaie}} hoschd un was'es uff de Websaid bringd, indem do ä Meschlischkaid wähle duschd.", 14 | "mwe-upwiz-too-many-files": "Zuviel Dadaije" 15 | } 16 | -------------------------------------------------------------------------------- /i18n/pwn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Akamycoco" 5 | ] 6 | }, 7 | "mwe-upwiz-remove": "semualap" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/qu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "AlimanRuna" 5 | ] 6 | }, 7 | "api-error-noimageinfo": "Willañiqiqa churkusqañam, chaywanpas sirwiq manam willawanchu ima willañiqimantapas.", 8 | "mwe-upwiz-help-desk": "Yanapa", 9 | "mwe-upwiz-select-flickr": "Akllasqa rikchakunata churkuy", 10 | "mwe-upwiz-date-created": "Kamariy p'unchaw", 11 | "mwe-upwiz-license-none": "Iñini, kay {{PLURAL:$1|rurasqaqa|rurasqakunaqa}} qispilla saqillayniyuqmi icha kamachikama Sapsi Chaskinanchapim kachkan. Hap'ini, muchuq saqillana willaykunata pisi pachapi mana yapaptiyqa, {{PLURAL:$1|willañiqi|willañiqikuna}} qullusqa kanqachá." 12 | } 13 | -------------------------------------------------------------------------------- /i18n/rki.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ReyLon Mrat" 5 | ] 6 | }, 7 | "prefs-description-uploads": "စာရီးသူနာမည်ထေ့ပါပြီးကေ မူရင်းလိုင်အတိုင်းထား" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/rmc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Adehertogh" 5 | ] 6 | }, 7 | "mwe-upwiz-add-flickr-or": "abo", 8 | "mwe-upwiz-date-created": "Datumos", 9 | "mwe-upwiz-location-alt": "Učiben opre moros", 10 | "mwe-upwiz-ok": "Va", 11 | "mwe-upwiz-dialog-no": "Na", 12 | "mwe-upwiz-categories": "Kategoriji", 13 | "mwe-upwiz-errordialog-ok": "Va" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/rw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Germain92" 5 | ] 6 | }, 7 | "uploadwizard": "Aho bashyiriraho", 8 | "uploadwizard-desc": "Shyiraho, ibikoresho byo gushyira kubitangazamakuru", 9 | "tag-uploadwizard": "Aho bashyiriraho", 10 | "tag-uploadwizard-description": "Gushyiraho bikorwa nabashyiraho" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/sat.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ramjit Tudu" 5 | ] 6 | }, 7 | "mwe-upwiz-add-file-n": "ᱵᱟᱹᱲᱛᱤ ᱨᱮᱫᱠᱚ ᱥᱮᱞᱮᱫᱽᱢᱮ", 8 | "mwe-upwiz-select-flickr": "ᱵᱟᱪᱷᱚᱱᱟᱜ ᱪᱤᱛᱟᱹᱨᱠᱚ ᱞᱟᱫᱮ", 9 | "mwe-upwiz-objref-pick-image": "ᱱᱚᱣᱟ ᱪᱤᱛᱟᱹᱨ ᱨᱮ ᱡᱟᱦᱟᱸᱱ ᱥᱟᱹᱠᱷᱭᱟᱹᱛ ᱠᱚ ᱥᱮᱞᱮᱫ", 10 | "mwe-upwiz-upload-another": "ᱵᱟᱹᱲᱛᱤ ᱨᱮᱫᱠᱚ ᱞᱟᱫᱮᱢᱮ" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/sc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "L2212" 5 | ] 6 | }, 7 | "uploadwizard": "Assistente de carrigamentu", 8 | "tag-uploadwizard": "Assistente de carrigamentu", 9 | "tag-uploadwizard-description": "Carrigamentos fatos cun s'Assistente de carrigamentu", 10 | "tag-uploadwizard-flickr-description": "Carrigamentos de Flickr fatos cun s'Assistente de carrigamentu", 11 | "mwe-upwiz-step-tutorial": "Impara", 12 | "mwe-upwiz-step-file": "Càrriga", 13 | "mwe-upwiz-step-deeds": "Diritos de publicatzione", 14 | "mwe-upwiz-step-details": "Descrie", 15 | "mwe-upwiz-step-metadata": "Annanghe datos", 16 | "mwe-upwiz-step-thanks": "Imprea", 17 | "mwe-upwiz-flickr-input-placeholder": "URL de Flickr", 18 | "mwe-upwiz-select-flickr": "Càrriga sas immàgines seletzionadas", 19 | "mwe-upwiz-finished": "Acabadu!", 20 | "mwe-upwiz-patent-dialog-button-next": "Sighi", 21 | "mwe-upwiz-next": "Sighi", 22 | "mwe-upwiz-next-deeds": "Sighi", 23 | "mwe-upwiz-dialog-yes": "Eja", 24 | "mwe-upwiz-dialog-no": "Nono", 25 | "mwe-upload-campaigns-pagination-next": "Pàgina imbeniente" 26 | } 27 | -------------------------------------------------------------------------------- /i18n/scn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ajeje Brazorf", 5 | "Aushulz", 6 | "GianAntonucci", 7 | "Sarvaturi" 8 | ] 9 | }, 10 | "uploadwizard": "Carricamentu guidatu", 11 | "tag-uploadwizard": "Carricamentu guidatu", 12 | "api-error-aborted": "Càrricamentu annullatu.", 13 | "api-error-noimageinfo": "Lu carricamentu arriniscìu, pirò lu server nun ni desi nuḍḍa nfurmazzioni a prupòsitu dû file.", 14 | "mwe-upwiz-step-file": "Càrrica", 15 | "mwe-upwiz-step-thanks": "Usa", 16 | "mwe-upwiz-add-file-n": "Agghiunci àutri file", 17 | "mwe-upwiz-add-flickr-or": "o", 18 | "mwe-upwiz-flickr-input-placeholder": "URL Flickr", 19 | "mwe-upwiz-remove": "Leva", 20 | "mwe-upwiz-finished": "Allistutu!", 21 | "mwe-upwiz-patent-dialog-link-warranty": "Àutri nfurmazzioni", 22 | "mwe-upwiz-patent-dialog-link-license": "Àutri nfurmazzioni", 23 | "mwe-upwiz-copy-metadata-button-undo": "Annulla", 24 | "mwe-upwiz-desc": "Discrizzioni", 25 | "mwe-upwiz-title": "Tìtulu dâ mmàggini", 26 | "mwe-upwiz-location-lat": "Latitùdini", 27 | "mwe-upwiz-location-lon": "Loncitùdini", 28 | "mwe-upwiz-location-heading": "Direzzioni", 29 | "mwe-upwiz-deleted-duplicate-unknown-filename": "Nomu dû file scanusciutu", 30 | "mwe-upwiz-ok": "OK", 31 | "mwe-upwiz-next": "N avanti", 32 | "mwe-upwiz-next-file": "Camina", 33 | "mwe-upwiz-next-deeds": "N avanti", 34 | "mwe-upwiz-upload-another": "Càrrica àutri file", 35 | "mwe-upwiz-tooltip-more-info": "Autri nfurmazzioni.", 36 | "mwe-upwiz-label-optional": "Facultativu", 37 | "mwe-upwiz-too-many-files": "Troppi file.", 38 | "mwe-upwiz-dialog-yes": "Sì", 39 | "mwe-upwiz-dialog-no": "No", 40 | "mwe-upwiz-dialog-title": "Accura", 41 | "mwe-upwiz-license-custom-preview": "Antiprima", 42 | "mwe-upwiz-categories": "Catigurìi", 43 | "mwe-upwiz-errordialog-ok": "OK", 44 | "prefs-upwiz-interface": "Ntirfacci di l'utenti", 45 | "mwe-upwiz-prefs-license-name": "Nomu di l'auturi", 46 | "campaigns": "Campagni di carricamentu guidatu" 47 | } 48 | -------------------------------------------------------------------------------- /i18n/sco.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "CiphriusKane", 5 | "Envlh", 6 | "John Reid", 7 | "MJL" 8 | ] 9 | }, 10 | "api-error-noimageinfo": "The uplaid wis successfu, but the server didnae gie us ony information anent the file.", 11 | "mwe-upwiz-desc": "Descreeption", 12 | "mwe-upwiz-dialog-yes": "Aye" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/sdh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kurdbuddha" 5 | ] 6 | }, 7 | "mwe-upwiz-add-flickr-or": "یا", 8 | "mwe-upwiz-ok": "باشە", 9 | "mwe-upwiz-dialog-yes": "بەڵێ", 10 | "mwe-upwiz-dialog-no": "نە", 11 | "mwe-upwiz-errordialog-ok": "باشە" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/se.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kimberli Mäkäräinen (WMNO)", 5 | "Yupik" 6 | ] 7 | }, 8 | "mwe-upwiz-remove": "Sihko", 9 | "mwe-upwiz-patent-dialog-button-back": "Ruovttoluotta", 10 | "mwe-upwiz-patent-dialog-button-next": "Čuovvovaš", 11 | "mwe-upwiz-patent-dialog-link-warranty": "Lassedieđut", 12 | "mwe-upwiz-patent-dialog-link-license": "Lassedieđut", 13 | "mwe-upwiz-copy-categories-label": "Kategoriijat", 14 | "mwe-upwiz-desc": "Govvádus", 15 | "mwe-upwiz-location-button": "Čájet kárttas", 16 | "mwe-upwiz-location-lat": "Govdodatgráda", 17 | "mwe-upwiz-location-lon": "Guhkkodatgráda", 18 | "mwe-upwiz-deleted-duplicate-unknown-filename": "Dovdameahttun fiilanamma", 19 | "mwe-upwiz-next": "Čuovvovaš", 20 | "mwe-upwiz-next-file": "Joatkke", 21 | "mwe-upwiz-next-deeds": "Čuovvovaš", 22 | "mwe-upwiz-metadata-title": "Lasit metadata", 23 | "mwe-upwiz-previous": "Ruovttoluotta", 24 | "mwe-upwiz-tooltip-more-info": "Lassedieđut", 25 | "mwe-upwiz-label-optional": "(eaktodáhtolaš)", 26 | "mwe-upwiz-dialog-title": "Várrehus", 27 | "mwe-upwiz-license-custom-preview": "Ovdačájáhus", 28 | "mwe-upwiz-categories": "Kategoriija", 29 | "mwe-upwiz-subhead-alternatives": "Eará vurkenvuogit", 30 | "mwe-upwiz-feedback-prompt": "Atte máhcahaga", 31 | "prefs-upwiz-interface": "Geavahanlakta", 32 | "mwe-upload-campaigns-pagination-next": "Čuovvovaš siidu" 33 | } 34 | -------------------------------------------------------------------------------- /i18n/shn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Saimawnkham", 5 | "Saosukham" 6 | ] 7 | }, 8 | "mwe-upwiz-desc": "ၶေႃႈသပ်းလႅင်း", 9 | "mwe-upwiz-error-signature-blank": "ၸဝ်ႈၵဝ်ႇတေလႆႈ တႅမ်ႈသႂ်ႇ ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း ဢမ်ႇၼၼ် ၸိုဝ်ႈတႄႉ ၸဝ်ႈၵဝ်ႇ ၼႂ်းလွၵ်း", 10 | "mwe-upwiz-license-custom-preview": "တူၺ်းတူဝ်ယၢင်ႇ" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/sje.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Olve Utne" 5 | ] 6 | }, 7 | "mwe-upwiz-desc": "Gåvådibme", 8 | "mwe-upwiz-desc-add": "{{PLURAL:$1|0=Lasedä gåvådimev|Lasedä gåvådimev ietjá gielan}}", 9 | "mwe-upwiz-ok": "Miededav", 10 | "mwe-upwiz-errordialog-ok": "Miededav" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/smn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Seipinne", 5 | "Yupik" 6 | ] 7 | }, 8 | "mwe-upwiz-step-file": "Vuorkkii", 9 | "mwe-upwiz-step-deeds": "Kevttimvuoigâdvuođah", 10 | "mwe-upwiz-step-details": "Valdâl", 11 | "mwe-upwiz-published": "Almostittum!", 12 | "mwe-upwiz-failed": "Ij luhostum.", 13 | "mwe-upwiz-remove": "Siho", 14 | "mwe-upwiz-upload": "Vuorkkii", 15 | "mwe-upwiz-patent-dialog-title": "Patentvuoigâdvuođah", 16 | "mwe-upwiz-patent-dialog-button-back": "Maassâd", 17 | "mwe-upwiz-patent-dialog-button-next": "Čuávuvâš", 18 | "mwe-upwiz-copied-metadata": "Kopijistum!", 19 | "mwe-upwiz-copy-categories-label": "Luokah", 20 | "mwe-upwiz-desc": "Kuvvim", 21 | "mwe-upwiz-location-button": "Čääiti káártást", 22 | "mwe-upwiz-deleted-duplicate-unknown-filename": "Tubdâmettum tiätuvuárkkánommâ", 23 | "mwe-upwiz-ok": "OK", 24 | "mwe-upwiz-next": "Čuávuvâš", 25 | "mwe-upwiz-next-file": "Juáđhi", 26 | "mwe-upwiz-next-deeds": "Čuávuvâš", 27 | "mwe-upwiz-previous": "Maassâd", 28 | "mwe-upwiz-label-optional": "(valjimiävtulâš)", 29 | "mwe-upwiz-dialog-title": "Váruttâs", 30 | "mwe-upwiz-campaign-upload-button": "Vuorkkii!", 31 | "mwe-upwiz-categories": "Luokka", 32 | "mwe-upwiz-feedback-prompt": "Addel macâttâs", 33 | "mwe-upwiz-errordialog-ok": "OK", 34 | "mwe-upload-campaigns-pagination-next": "Čuávuvâš sijđo", 35 | "mwe-upwiz-metadata-notice-header": "Persovntiäđuh" 36 | } 37 | -------------------------------------------------------------------------------- /i18n/so.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Maax", 5 | "Matma Rex" 6 | ] 7 | }, 8 | "mwe-upwiz-step-tutorial": "Baro", 9 | "mwe-upwiz-step-file": "Soo geli", 10 | "mwe-upwiz-step-deeds": "Soo deynta ogolaashadeeda", 11 | "mwe-upwiz-step-details": "Ka hadal", 12 | "mwe-upwiz-step-thanks": "Isticmaal", 13 | "mwe-upwiz-tutorial-error-file-missing": "Naga raali noqo, waa weynay wax fayl ah oo ku aadan daadihinta la rabay in ee meeshaan ku qornaato. Fadlan la hadal maamulaha combiyutarka.", 14 | "mwe-upwiz-add-file-n": "Ku dar fayl kale", 15 | "mwe-upwiz-add-file-0-free": "Dooro faylka wararka si aad u tabarucdid", 16 | "mwe-upwiz-transport-started": "Woo bilaabanooyaa...", 17 | "mwe-upwiz-uploading": "Woo soo galinooyaa...", 18 | "mwe-upwiz-transported": "Woo dhamaaday soo gelinta...", 19 | "mwe-upwiz-stashed-upload": "Waayahay", 20 | "mwe-upwiz-published": "Waa la soo bandhigay!", 21 | "mwe-upwiz-failed": "Waa ku guul dareysatay.", 22 | "mwe-upwiz-remove": "Ka saar", 23 | "mwe-upwiz-finished": "Woo dhamaaday", 24 | "mwe-upwiz-source-thirdparty-intro": "fadlan ku qor ciwaanka aa ka soo heshay fayl kasto", 25 | "mwe-upwiz-date-created": "taariikhda la sameeyay", 26 | "mwe-upwiz-upload-error-stashed-anyway": "Iska soo gali?", 27 | "mwe-upwiz-next-deeds": "Kan ku xiga", 28 | "mwe-upwiz-home": "Booqo bogga internetka ee wiki", 29 | "mwe-upwiz-deeds-require-selection": "fadlan dooro laysinka.", 30 | "mwe-upwiz-license-show-all": "Isticmaal laysin kala duwan" 31 | } 32 | -------------------------------------------------------------------------------- /i18n/syl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ꠢꠣꠍꠘ ꠞꠣꠎꠣ" 5 | ] 6 | }, 7 | "mwe-upwiz-step-tutorial": "ꠢꠤꠇꠂꠘ", 8 | "mwe-upwiz-step-file": "ꠍꠣꠞꠂꠘ", 9 | "mwe-upwiz-step-deeds": "ꠖꠣꠛꠤ ꠍꠣꠞꠂꠘ", 10 | "mwe-upwiz-step-thanks": "ꠛꠦꠛꠀꠞ" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/szl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Zpizza" 5 | ] 6 | }, 7 | "mwe-upwiz-previous": "Wstecz" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/tcy.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "BHARATHESHA ALASANDEMAJALU", 5 | "ChiK", 6 | "Ravi Mundkur" 7 | ] 8 | }, 9 | "uploadwizard": "ಅಪ್ಲೋಡ್ ವಿಜಾರ್ಡ್", 10 | "uploadwizard-desc": "ಅಪ್ಲೋಡ್ ವಿಜಾರ್ಡ್, ಮಲ್ಟಿಮೀಡಿಯಾ ಅಪ್ಲೋಡ್ ಮಲ್ಪರೆ \nಒಂಜಿ ಸುಲಬೋದ ಸದಾನೋ", 11 | "tag-uploadwizard": "ಅಪ್ಲೋಡ್ ವಿಜಾರ್ಡ್", 12 | "tag-uploadwizard-description": "ಅಪ್ಲೋಡ್ ವಿಜಾರ್ಡ್ ಮೂಲಕೊ ಮಲ್ತಿ ಅಪ್ಲೋಡ್‌ಲ್", 13 | "tag-uploadwizard-flickr-description": "ಅಪ್ಲೋಡ್ ವಿಜಾರ್ಡ್ ಮೂಲಕೊ ಮಲ್ತಿ ಫ್ಲಿಕರ್ ಅಪ್ಲೋಡುಲು", 14 | "mwe-upwiz-step-file": "ಅಪ್ಲೊಡ್", 15 | "mwe-upwiz-add-flickr-or": "ಅತ್ತಂಡ", 16 | "mwe-upwiz-transport-started": "ಸುರು ಅವೊಂತುಂಡು...", 17 | "mwe-upwiz-uploading": "ದಿಂಜೊಂತುಂಡು...", 18 | "mwe-upwiz-remove": "ದೆಪ್ಪುಲೆ", 19 | "mwe-upwiz-upload": "ಅಪ್ಲೊಡ್", 20 | "mwe-upwiz-patent-dialog-button-back": "ಪಿರ", 21 | "mwe-upwiz-patent-dialog-button-next": "ನನತಾ", 22 | "mwe-upwiz-license-metadata-content": "'ಪ್ರಕಟಿಸಾಲೆ' ಒತ್ತುನಗ ಈರ್ \nBy clicking \"publish\", you agree to the [[wmf:Terms_of_Use|ಬಳಕೆದ ಶರ್ತೊಲು]], ಒಪ್ಪುವರ್ ಬೊಕ ಪಿರತಿರ್ಗಾವಂದೆ ಇರೆನ ಕಾಣಿಕೆನ್ ಸೃಜಾನಾತ್ಮಿ ಸಾಮಾನ್ಯ ಲೈಸನ್ಸ್ ದಡಿ [https://creativecommons.org/publicdomain/zero/1.0/ Creative Commons CC0 License].ಬುಡಿಯರೆ ಒಪ್ಪುವರ್.", 23 | "mwe-upwiz-campaign-no-uploads-yet": "ನನಲ ಒವ್ವೆ ಅಪ್‌ಲೋಡ್‌‌ಲು ಅತ್‌ಜಿ!" 24 | } 25 | -------------------------------------------------------------------------------- /i18n/tet.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "MF-Warburg" 5 | ] 6 | }, 7 | "mwe-upwiz-remove": "Hasai" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/tg-cyrl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ToJack" 5 | ] 6 | }, 7 | "mwe-upwiz-categories": "Гурӯҳҳо", 8 | "mwe-upload-campaigns-pagination-next": "Саҳифаи баъдӣ" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/ti.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Joanmp17" 5 | ] 6 | }, 7 | "uploadwizard": "ሓጋዚ ምስቓላት", 8 | "tag-uploadwizard": "ሓጋዚ ምስቓላት", 9 | "tag-uploadwizard-description": "ብሓጋዚ ምስቓላት ዝተሰርሑ ምስቓላት", 10 | "mwe-upwiz-step-file": "ስቐል", 11 | "mwe-upwiz-step-deeds": "መሰል ምፍታሕ", 12 | "mwe-upwiz-step-details": "ግለጽ", 13 | "mwe-upwiz-tutorial-error-localized-file-missing": "ይቕሬታ፣ ብቋንቋኻ ሓጋዚ ስልጠና ክንረክብ ኣይከኣልናን። ኣብ ክንድኡ እቲ ናይ $1 እዩ ዝረአ።", 14 | "mwe-upwiz-add-flickr-or": "ወይ", 15 | "mwe-upwiz-add-flickr": "ካብ Flickr ርኸብ", 16 | "mwe-upwiz-publish": "የሕትም ኣሎ…", 17 | "mwe-upwiz-published": "ተሓቲሙ!", 18 | "mwe-upwiz-patent-dialog-button-back": "ተመለስ", 19 | "mwe-upwiz-patent-dialog-button-next": "ዝቕጽል", 20 | "mwe-upwiz-patent-dialog-link-warranty": "ተወሳኺ ፍለጥ", 21 | "mwe-upwiz-patent-dialog-link-license": "ተወሳኺ ሓበሬታ", 22 | "mwe-upwiz-copy-description-label": "መግለጺ", 23 | "mwe-upwiz-copy-date-label": "ዕለት ፍጥረት", 24 | "mwe-upwiz-location-lat": "ማእገር", 25 | "mwe-upwiz-location-lon": "ዝንግሪር", 26 | "mwe-upwiz-ok": "ሕራይ", 27 | "mwe-upwiz-label-optional": "(ኣማራጽያዊ)", 28 | "mwe-upwiz-dialog-yes": "እወ", 29 | "mwe-upwiz-dialog-no": "ኣይፋል", 30 | "mwe-upwiz-dialog-title": "መጠንቀቕታ", 31 | "mwe-upwiz-campaign-contributors-count-desc": "{{PLURAL:$1|ኣበርካቲ|ኣበርከትቲ}}", 32 | "mwe-upwiz-license-unknown": "ኣይፈልጥን", 33 | "mwe-upwiz-license-custom-preview": "ቅድመ ትርኢት", 34 | "mwe-upwiz-errordialog-ok": "ሕራይ", 35 | "prefs-upwiz-licensing": "ፍቓድ", 36 | "mwe-upwiz-prefs-license-own": "ናይ ገዛእ ርእስኻ ስራሕ - $1", 37 | "mwe-upwiz-prefs-license-thirdparty": "ናይ ካልእ ሰብ ስራሕ - $1", 38 | "mwe-upload-campaigns-pagination-next": "ዝቕጽል ገጽ", 39 | "mwe-upwiz-mv-cta-dismiss": "ስጎግ" 40 | } 41 | -------------------------------------------------------------------------------- /i18n/tig.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bbeshir" 5 | ] 6 | }, 7 | "mwe-upwiz-author-unknown": "ኬትባይ መን ከምቱ ይኣምርኒ", 8 | "mwe-upwiz-license-pd-old-100": "ከትባይ ቀደም 100 ሰነት ትወፋ", 9 | "mwe-upwiz-license-pd-old": "ከትባይ ቀደም 70 ሰነት ትወፋ", 10 | "mwe-upwiz-license-pd-old-70": "ከትባይ ቀደም 70 ሰነት ትወፋ", 11 | "mwe-upwiz-prefs-license-name": "ሰሜት ኬትባይ" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/tpi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Iketsi" 5 | ] 6 | }, 7 | "mwe-upwiz-stashed-upload": "OK", 8 | "mwe-upwiz-remove": "Rausim", 9 | "mwe-upwiz-ok": "OK", 10 | "mwe-upwiz-categories": "Ol grup" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/trv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Akamycoco", 5 | "Iyuqciyang", 6 | "Shidailun73" 7 | ] 8 | }, 9 | "mwe-upwiz-remove": "Hdlun pkungat", 10 | "mwe-upwiz-copy-metadata-button-undo": "pkbrih", 11 | "mwe-upwiz-desc": "Pgkla rmngaw", 12 | "mwe-upwiz-date-created": "jiyax", 13 | "mwe-upwiz-dialog-yes": "kiya", 14 | "mwe-upwiz-dialog-no": "aji", 15 | "mwe-upwiz-categories": "kleegan", 16 | "prefs-upwiz-licensing": "gaya mgay biyax kklawa", 17 | "mwe-upwiz-prefs-license-own": "Pntasan su nanak - $1" 18 | } 19 | -------------------------------------------------------------------------------- /i18n/ttj.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ahiise2" 5 | ] 6 | }, 7 | "uploadwizard": "Omurogo Owayetuura", 8 | "tag-uploadwizard": "Omurogo Owayetuura", 9 | "api-error-aborted": "Ekituurwa kitangwa.", 10 | "mwe-upwiz-step-tutorial": "Yega", 11 | "mwe-upwiz-step-file": "Yetuura", 12 | "mwe-upwiz-step-metadata": "Taho ebikwataho", 13 | "mwe-upwiz-step-thanks": "Kozesa", 14 | "mwe-upwiz-add-file-n": "Taho fayiro zindi", 15 | "mwe-upwiz-add-flickr-or": "rundi", 16 | "mwe-upwiz-uploading": "Nikyetuurwa...", 17 | "mwe-upwiz-publish": "Nikirangwa...", 18 | "mwe-upwiz-stashed-upload": "Kyetwirwe", 19 | "mwe-upwiz-published": "Kirangwa!", 20 | "mwe-upwiz-failed": "Kiremerwe.", 21 | "mwe-upwiz-upload": "Yetuura", 22 | "mwe-upwiz-file-some-failed": "Ebituurwa ebimu biremerwe.", 23 | "mwe-upwiz-progressbar-uploading": "nikyetuurwa", 24 | "mwe-upwiz-finished": "Kimazirwe!", 25 | "mwe-upwiz-patent-dialog-link-warranty": "Yega muno", 26 | "mwe-upwiz-patent-dialog-link-license": "Yega muno", 27 | "mwe-upwiz-desc": "Ensoborra", 28 | "mwe-upwiz-location-button": "Yoleka ha maapu", 29 | "mwe-upwiz-ok": "Kale", 30 | "mwe-upwiz-tooltip-more-info": "Yega muno.", 31 | "mwe-upwiz-dialog-yes": "Ego", 32 | "mwe-upwiz-dialog-no": "Nangwa", 33 | "mwe-upwiz-campaign-create-account-button": "Hanga akaunti na yetuura!", 34 | "mwe-upwiz-campaign-upload-button": "Yetuura!", 35 | "mwe-upwiz-categories": "Omuganda", 36 | "mwe-upwiz-errordialog-ok": "Kale", 37 | "prefs-uploads": "Okwetuura", 38 | "mwe-upwiz-prefs-license-name": "Ibara ly'omuhandiiki" 39 | } 40 | -------------------------------------------------------------------------------- /i18n/tzm.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Tifinaghes" 5 | ] 6 | }, 7 | "mwe-upwiz-ok": "ⵡⴰⵅⵅⴰ" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/udm.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kaganer", 5 | "Света Поторочина" 6 | ] 7 | }, 8 | "mwe-upwiz-copy-metadata-button-undo": "берланьтоно", 9 | "mwe-upwiz-license-custom-preview": "Азьпал учкон" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/ug-arab.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Sahran", 5 | "Uzdil" 6 | ] 7 | }, 8 | "api-error-noimageinfo": "مۇۋەپپەقىيەتلىك يۈكلەندى ئەمما مۇلازىمېتىر ھۆججەتكە مۇناسىۋەتلىك ئۇچۇر بەرمىدى.", 9 | "mwe-upwiz-step-file": "يۈكلە", 10 | "mwe-upwiz-step-thanks": "ئىشلەت", 11 | "mwe-upwiz-add-flickr-or": "ياكى", 12 | "mwe-upwiz-transport-started": "باشلاۋاتىدۇ…", 13 | "mwe-upwiz-uploading": "يۈكلەۋاتىدۇ…", 14 | "mwe-upwiz-stashed-upload": "يۈكلەندى", 15 | "mwe-upwiz-remove": "چىقىرىۋەت", 16 | "mwe-upwiz-upload": "يۈكلە", 17 | "mwe-upwiz-desc": "چۈشەندۈرۈش", 18 | "mwe-upwiz-title": "ماۋزۇ", 19 | "mwe-upwiz-location": "ئورنى", 20 | "mwe-upwiz-location-lat": "كەڭلىك", 21 | "mwe-upwiz-location-lon": "ئۇزۇنلۇق", 22 | "mwe-upwiz-location-alt": "دېڭىز يۈزىدىن ئېگىزلىك", 23 | "mwe-upwiz-ok": "جەزملە", 24 | "mwe-upwiz-next": "كەينى", 25 | "mwe-upwiz-next-file": "داۋاملاشتۇر", 26 | "mwe-upwiz-next-deeds": "كەينى", 27 | "mwe-upwiz-error-blank": "بۇ زۆرۈر مەزمۇندۇر", 28 | "mwe-upwiz-license-custom-preview": "ئالدىن كۆزەت", 29 | "mwe-upwiz-license-confirm-remove-title": "چىقىرىۋېتىشنى جەزملەش", 30 | "mwe-upwiz-categories": "تۈرلەر", 31 | "mwe-upwiz-errordialog-ok": "جەزملە", 32 | "prefs-uploads": "يۈكلەر", 33 | "prefs-upwiz-licensing": "ئىجازەت" 34 | } 35 | -------------------------------------------------------------------------------- /i18n/vep.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Игорь Бродский" 5 | ] 6 | }, 7 | "mwe-upwiz-step-file": "Jügutoitand", 8 | "mwe-upwiz-step-details": "Ümbrikirjutamine", 9 | "mwe-upwiz-step-thanks": "Kävutagat", 10 | "mwe-upwiz-help-desk": "Abun radnikoičend", 11 | "mwe-upwiz-help-desk-url": "Abun radnikoičend", 12 | "mwe-upwiz-add-file-n": "Ližata völ fail", 13 | "mwe-upwiz-transport-started": "Zavodind...", 14 | "mwe-upwiz-uploading": "Jügutoitmine serverha...", 15 | "mwe-upwiz-stashed-upload": "OK", 16 | "mwe-upwiz-published": "Publikuidud!", 17 | "mwe-upwiz-remove": "Čuta poiš", 18 | "mwe-upwiz-upload": "Jügutoitta", 19 | "mwe-upwiz-progressbar-uploading": "jügutoitmine", 20 | "mwe-upwiz-desc": "Ümbrikirjutand", 21 | "mwe-upwiz-title": "Pälkirjutez", 22 | "mwe-upwiz-location": "Sijaduz", 23 | "mwe-upwiz-ok": "OK", 24 | "mwe-upwiz-next": "Jäl'ghine", 25 | "mwe-upwiz-next-deeds": "Jäl'ghine", 26 | "mwe-upwiz-upload-another": "Jügutoitta failoid völ", 27 | "mwe-upwiz-tooltip-more-info": "Tedustagat völ.", 28 | "mwe-upwiz-deeds-require-selection": "Olgat hüväd, valikat licenzii.", 29 | "mwe-upwiz-license-show-all": "Kävutagat toine licenzii", 30 | "mwe-upwiz-license-show-recommended": "Kävutagat rekomenduidud licenzii", 31 | "mwe-upwiz-too-many-files": "Äjahko failoid.", 32 | "mwe-upwiz-license-misc": "Erazvuiččed süd", 33 | "mwe-upwiz-categories": "Kategorijad", 34 | "mwe-upwiz-errordialog-ok": "OK", 35 | "mwe-upwiz-prefs-def-license": "Licezii järgendusen mödhe" 36 | } 37 | -------------------------------------------------------------------------------- /i18n/wuu-hans.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Winston Sung" 5 | ] 6 | }, 7 | "mwe-upwiz-campaign-create-account-button": "建個帳號加上傳!", 8 | "mwe-upwiz-campaign-upload-button": "上傳!", 9 | "mwe-upwiz-campaign-media-count-desc": "{{PLURAL:$1|上传}}", 10 | "mwe-upwiz-campaign-view-all-media": "望全部上傳個媒體", 11 | "mwe-upwiz-campaign-no-uploads-yet": "嘸眼上傳!" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/xsy.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Lalotahes" 5 | ] 6 | }, 7 | "mwe-upwiz-remove": "tilkoraeh", 8 | "mwe-upwiz-copy-metadata-button-undo": " paklobih", 9 | "mwe-upwiz-desc": " papapnabih", 10 | "mwe-upwiz-date-created": " hahila:", 11 | "mwe-upwiz-categories": " ’a’apolen", 12 | "prefs-upwiz-licensing": " kinSiwa’ kina:at", 13 | "mwe-upwiz-prefs-license-own": "ni nonak ka pinaskayzaeh - $1" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/yo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Demmy" 5 | ] 6 | }, 7 | "api-error-noimageinfo": "Ìrùsòkè jásí rere, sùgbọ́n ẹ̀rọ-ìpèsè kò sọ ohùn kankan nípa fáìlì ọ̀hún.", 8 | "mwe-upwiz-title": "Àkọlé" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/yua.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Halle" 5 | ] 6 | }, 7 | "mwe-upwiz-categories-current": "$1 categoría na'" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/yue-hant.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "H78c67c", 5 | "Winston Sung" 6 | ] 7 | }, 8 | "uploadwizard": "上載精靈", 9 | "mwe-upwiz-step-tutorial": "學習", 10 | "mwe-upwiz-step-file": "上載", 11 | "mwe-upwiz-step-deeds": "發佈權", 12 | "mwe-upwiz-step-details": "描述", 13 | "mwe-upwiz-step-metadata": "加數據", 14 | "mwe-upwiz-step-thanks": "用", 15 | "mwe-upwiz-add-file-n": "加多啲檔案", 16 | "mwe-upwiz-add-file-0-free": "揀要分享嘅媒體檔案", 17 | "mwe-upwiz-add-file-flickr": "分享來自Flickr嘅相", 18 | "mwe-upwiz-add-file-flickr-n": "加多啲來自Flickr嘅相", 19 | "mwe-upwiz-add-flickr-or": "或者", 20 | "mwe-upwiz-stashed-upload": "已上載", 21 | "mwe-upwiz-remove": "移除", 22 | "mwe-upwiz-file-all-ok": "成功上載所有檔案!", 23 | "mwe-upwiz-upload-count": "$2個檔案中嘅$1個已經上載咗", 24 | "mwe-upwiz-source-ownwork-purpose-option-personal-use": "{{PLURAL:$1|呢份作品|呢啲作品}}係for我個人用途,例如係我自己、屋企人或朋友嘅相,或自我宣傳內容。", 25 | "mwe-upwiz-source-ownwork-origin-option-ai": "{{GENDER:$2|我}}用咗人工智能工具生成{{PLURAL:$1|呢份作品|呢啲作品}}[[COM:AI-generated_media|(睇指引)]]", 26 | "mwe-upwiz-desc-add": "{{PLURAL:$1|0=加一段説明|加另一個語言嘅説明}}", 27 | "mwe-upwiz-source-ai": "{{PLURAL:$1|呢份作品|呢啲作品}}用咗人工智能工具生成", 28 | "mwe-upwiz-next-file": "繼續", 29 | "mwe-upwiz-previous": "返轉頭", 30 | "mwe-upwiz-tooltip-source": "呢個數碼檔案嘅來源──可以係URL、書或者出版物。", 31 | "mwe-upwiz-metadata-notice-header": "私人數據", 32 | "mwe-upwiz-metadata-notice-description": "檔案裏面嘅EXIF中繼資料可能包含由相機自動加入嘅位置或其他私人數據。[https://commons.wikimedia.org/wiki/Commons:Exif 睇呢道]了解點樣修改或移除EXIF中繼資料。" 33 | } 34 | -------------------------------------------------------------------------------- /i18n/zgh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Hakim1bal", 5 | "Mohamed Belarhzali" 6 | ] 7 | }, 8 | "mwe-upwiz-patent-dialog-link-license-grant": "ⵜⴰⵏⴳⴰⵍⵜ ⵜⴰⵍⵓⴳⵏⴰⵏⵜ", 9 | "mwe-upwiz-dialog-yes": "ⵢⴰⵀ", 10 | "mwe-upwiz-dialog-no": "ⵓⵀⵓ" 11 | } 12 | -------------------------------------------------------------------------------- /includes/ApiFlickrBlacklist.php: -------------------------------------------------------------------------------- 1 | 19 | */ 20 | class ApiFlickrBlacklist extends ApiBase { 21 | public function execute() { 22 | $params = $this->extractRequestParams(); 23 | $this->requireOnlyOneParameter( $params, 'url', 'list' ); 24 | 25 | $flickrBlacklist = new FlickrBlacklist( Config::getConfig(), 26 | $this->getContext() ); 27 | 28 | if ( $params['list'] ) { 29 | $list = $flickrBlacklist->getBlacklist(); 30 | $this->getResult()->setIndexedTagName( $list, 'item' ); 31 | $this->getResult()->addValue( 'flickrblacklist', 'list', $list ); 32 | } 33 | 34 | if ( $params['url'] !== null ) { 35 | if ( $flickrBlacklist->isBlacklisted( $params['url'] ) ) { 36 | $this->getResult()->addValue( 'flickrblacklist', 'result', 'bad' ); 37 | } else { 38 | $this->getResult()->addValue( 'flickrblacklist', 'result', 'ok' ); 39 | } 40 | } 41 | } 42 | 43 | /** @inheritDoc */ 44 | public function getAllowedParams() { 45 | return [ 46 | 'url' => [ 47 | ParamValidator::PARAM_TYPE => 'string', 48 | ], 49 | 'list' => [ 50 | ParamValidator::PARAM_TYPE => 'boolean', 51 | ParamValidator::PARAM_DEFAULT => false, 52 | ], 53 | ]; 54 | } 55 | 56 | /** 57 | * @inheritDoc 58 | */ 59 | protected function getExamplesMessages() { 60 | return [ 61 | 'action=flickrblacklist&url=http%3A//farm1.staticflickr.com/44/147426941_98baf36fd1_o.jpg' 62 | => 'apihelp-flickrblacklist-example-1', 63 | 'action=flickrblacklist&list=' 64 | => 'apihelp-flickrblacklist-example-2', 65 | ]; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /includes/CampaignContent.php: -------------------------------------------------------------------------------- 1 | 10 | */ 11 | 12 | namespace MediaWiki\Extension\UploadWizard; 13 | 14 | use MediaWiki\Content\JsonContent; 15 | use MediaWiki\Extension\EventLogging\EventLogging; 16 | use MediaWiki\Extension\EventLogging\Libs\JsonSchemaValidation\JsonSchemaException; 17 | use MediaWiki\Json\FormatJson; 18 | 19 | /** 20 | * Represents the configuration of an Upload Campaign 21 | */ 22 | class CampaignContent extends JsonContent { 23 | 24 | /** 25 | * @param string $text 26 | */ 27 | public function __construct( $text ) { 28 | parent::__construct( $text, 'Campaign' ); 29 | } 30 | 31 | /** 32 | * Checks user input JSON to make sure that it produces a valid campaign object 33 | * 34 | * @throws JsonSchemaException If invalid. 35 | * @return bool True if valid. 36 | */ 37 | public function validate() { 38 | $campaign = $this->getJsonData(); 39 | if ( !is_array( $campaign ) ) { 40 | throw new JsonSchemaException( 'eventlogging-invalid-json' ); 41 | } 42 | 43 | $schema = include __DIR__ . '/CampaignSchema.php'; 44 | 45 | // Only validate fields we care about 46 | $campaignFields = array_keys( $schema['properties'] ); 47 | 48 | $fullConfig = Config::getConfig(); 49 | 50 | $defaultCampaignConfig = []; 51 | 52 | foreach ( $fullConfig as $key => $value ) { 53 | if ( in_array( $key, $campaignFields ) ) { 54 | $defaultCampaignConfig[ $key ] = $value; 55 | } 56 | } 57 | 58 | $mergedConfig = Config::arrayReplaceSanely( $defaultCampaignConfig, $campaign ); 59 | return EventLogging::schemaValidate( $mergedConfig, $schema ); 60 | } 61 | 62 | /** 63 | * @return bool Whether content is valid JSON Schema. 64 | */ 65 | public function isValid() { 66 | try { 67 | return parent::isValid() && $this->validate(); 68 | } catch ( JsonSchemaException $e ) { 69 | return false; 70 | } 71 | } 72 | 73 | /** 74 | * Deprecated in JsonContent but still useful here because we need to merge the schema's data 75 | * with a config array 76 | * 77 | * @return array|null 78 | */ 79 | public function getJsonData() { 80 | return FormatJson::decode( $this->getText(), true ); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /includes/CampaignContentHandler.php: -------------------------------------------------------------------------------- 1 | 20 | * @author Yuvi Panda 21 | */ 22 | 23 | class CampaignContentHandler extends JsonContentHandler { 24 | 25 | /** 26 | * @param string $modelId 27 | */ 28 | public function __construct( $modelId = 'Campaign' ) { 29 | parent::__construct( $modelId ); 30 | } 31 | 32 | /** 33 | * @return class-string 34 | */ 35 | protected function getContentClass() { 36 | return CampaignContent::class; 37 | } 38 | 39 | /** 40 | * @return CampaignContent 41 | */ 42 | public function makeEmptyContent() { 43 | $class = $this->getContentClass(); 44 | return new $class( '{"enabled":false}' ); 45 | } 46 | 47 | /** 48 | * @inheritDoc 49 | */ 50 | protected function fillParserOutput( 51 | Content $content, 52 | ContentParseParams $cpoParams, 53 | ParserOutput &$parserOutput 54 | ) { 55 | '@phan-var CampaignContent $content'; 56 | $title = Title::castFromPageReference( $cpoParams->getPage() ); 57 | if ( !$title ) { 58 | throw new UnexpectedValueException( '$title shouldn\'t be NULL' ); 59 | } 60 | 61 | $campaign = new Campaign( $title, $content->getJsonData() ); 62 | 63 | if ( $cpoParams->getGenerateHtml() ) { 64 | $html = $this->generateHtml( $campaign ); 65 | $parserOutput->setText( $html ); 66 | } 67 | 68 | // Register template usage 69 | // FIXME: should we be registering other stuff?? 70 | foreach ( $campaign->getTemplates() as $ns => $templates ) { 71 | foreach ( $templates as $dbk => $ids ) { 72 | $title = Title::makeTitle( $ns, $dbk ); 73 | $parserOutput->addTemplate( $title, $ids[0], $ids[1] ); 74 | } 75 | } 76 | 77 | $parserOutput->addModuleStyles( [ 'ext.uploadWizard.uploadCampaign.display' ] ); 78 | } 79 | 80 | /** 81 | * @param Campaign $campaign 82 | * 83 | * @return string 84 | */ 85 | private function generateHtml( $campaign ) { 86 | $formatter = new CampaignPageFormatter( $campaign ); 87 | 88 | return $formatter->generateReadHtml(); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /includes/CodeEditorHooks.php: -------------------------------------------------------------------------------- 1 | 16 | */ 17 | 18 | class CodeEditorHooks implements CodeEditorGetPageLanguageHook { 19 | /** 20 | * Declares JSON as the code editor language for Campaign: pages. 21 | * This hook only runs if the CodeEditor extension is enabled. 22 | * @param Title $title 23 | * @param string|null &$lang Page language. 24 | * @param string $model 25 | * @param string $format 26 | */ 27 | public function onCodeEditorGetPageLanguage( Title $title, ?string &$lang, string $model, string $format ): void { 28 | if ( $title->inNamespace( NS_CAMPAIGN ) ) { 29 | $lang = 'json'; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /includes/SchemaHooks.php: -------------------------------------------------------------------------------- 1 | getDB()->getType(); 19 | $path = dirname( __DIR__ ) . '/sql/'; 20 | 21 | $updater->addExtensionTable( 'uw_campaigns', "$path/$type/tables-generated.sql" ); 22 | 23 | // 1.38 24 | $updater->modifyExtensionField( 25 | 'uw_campaigns', 26 | 'uw_campaigns_enabled', 27 | "$path/$type/patch-uw_campaigns-cleanup.sql" 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /includes/Specials/UploadWizardSimpleForm.php: -------------------------------------------------------------------------------- 1 | . 16 | */ 17 | 18 | ( function ( uw ) { 19 | /** 20 | * The thanks step. 21 | * 22 | * @class 23 | * @extends uw.controller.Step 24 | * @param {mw.Api} api 25 | * @param {Object} config UploadWizard config object. 26 | */ 27 | uw.controller.Thanks = function UWControllerThanks( api, config ) { 28 | uw.controller.Step.call( 29 | this, 30 | new uw.ui.Thanks( config ), 31 | api, 32 | config 33 | ); 34 | 35 | this.stepName = 'thanks'; 36 | }; 37 | 38 | OO.inheritClass( uw.controller.Thanks, uw.controller.Step ); 39 | 40 | uw.controller.Thanks.prototype.load = function ( uploads ) { 41 | uw.controller.Step.prototype.load.call( this, uploads ); 42 | 43 | if ( uploads.length === 0 ) { 44 | // We got here after the user removed all uploads; just restart from "Upload" step 45 | this.moveNext(); 46 | return; 47 | } 48 | 49 | uploads.forEach( ( upload ) => { 50 | this.ui.addUpload( upload ); 51 | } ); 52 | 53 | this.emit( 'finished' ); 54 | }; 55 | 56 | uw.controller.Thanks.prototype.moveNext = function () { 57 | // remove all existing uploads before moving on 58 | mw.UploadWizardUpload.prototype.count = 0; 59 | this.removeUploads( this.uploads ); 60 | 61 | uw.controller.Step.prototype.moveNext.call( this ); 62 | }; 63 | 64 | uw.controller.Thanks.prototype.hasData = function () { 65 | return false; 66 | }; 67 | 68 | }( mw.uploadWizard ) ); 69 | -------------------------------------------------------------------------------- /resources/controller/uw.controller.base.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the MediaWiki extension UploadWizard. 3 | * 4 | * UploadWizard is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * UploadWizard is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with UploadWizard. If not, see . 16 | */ 17 | 18 | ( function ( uw ) { 19 | // create UploadWizard controller namespace 20 | uw.controller = {}; 21 | }( mw.uploadWizard ) ); 22 | -------------------------------------------------------------------------------- /resources/deed/dialog/uw.deed.dialog.base.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the MediaWiki extension UploadWizard. 3 | * 4 | * UploadWizard is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * UploadWizard is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with UploadWizard. If not, see . 16 | */ 17 | 18 | ( function ( uw ) { 19 | // create UploadWizard deed.dialog namespace 20 | uw.deed.dialog = {}; 21 | }( mw.uploadWizard ) ); 22 | -------------------------------------------------------------------------------- /resources/deed/uw.deed.Custom.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the MediaWiki extension UploadWizard. 3 | * 4 | * UploadWizard is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * UploadWizard is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with UploadWizard. If not, see . 16 | */ 17 | 18 | ( function ( uw ) { 19 | /** 20 | * @param {Object} config The UW config 21 | * @param {mw.UploadWizardUpload} upload Upload that this deed refers to 22 | * @class 23 | */ 24 | uw.deed.Custom = function UWDeedCustom( config, upload ) { 25 | uw.deed.Abstract.call( this, 'custom', config, [ upload ] ); 26 | 27 | this.upload = upload; 28 | }; 29 | 30 | OO.inheritClass( uw.deed.Custom, uw.deed.Abstract ); 31 | 32 | /** 33 | * @inheritdoc 34 | */ 35 | uw.deed.Custom.prototype.getSourceWikiText = function () { 36 | if ( typeof this.upload.file.sourceURL !== 'undefined' ) { 37 | return this.upload.file.sourceURL; 38 | } else { 39 | return this.upload.file.url; 40 | } 41 | }; 42 | 43 | /** 44 | * @inheritdoc 45 | */ 46 | uw.deed.Custom.prototype.getAuthorWikiText = function () { 47 | return this.upload.file.author; 48 | }; 49 | 50 | /** 51 | * @inheritdoc 52 | */ 53 | uw.deed.Custom.prototype.getLicenseWikiText = function () { 54 | return this.upload.file.licenseValue; 55 | }; 56 | }( mw.uploadWizard ) ); 57 | -------------------------------------------------------------------------------- /resources/deed/uw.deed.base.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the MediaWiki extension UploadWizard. 3 | * 4 | * UploadWizard is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * UploadWizard is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with UploadWizard. If not, see . 16 | */ 17 | 18 | ( function ( uw ) { 19 | // create UploadWizard deed namespace 20 | uw.deed = {}; 21 | }( mw.uploadWizard ) ); 22 | -------------------------------------------------------------------------------- /resources/details/uw.CategoriesDetailsWidget.less: -------------------------------------------------------------------------------- 1 | @import 'mediawiki.skin.variables.less'; 2 | 3 | .mwe-upwiz-categoriesDetailsWidget .oo-ui-menuSelectWidget .oo-ui-labelElement-label { 4 | // add some whitespace between and <arrow> (or PARENT CATEGORY text) 5 | display: flex; 6 | gap: 1em; 7 | text-wrap: wrap; 8 | 9 | /* 10 | * Below is a bit of a hack to apply styling to the non-title part of a category name. 11 | * 12 | * An entry will look something like: 13 | * This is a category title parent category 14 | * Where "This is a category title" is a variable category title, and "parent category" is a 15 | * localized message. 16 | * 17 | * The localized message part is the one that we would like to style differently, but I'd rather 18 | * not rely on (and impose the burden on) translators adding HTML tags as part of their message. 19 | * Instead, I'll simply apply the custom style on the node as a whole, and then undo it on the 20 | * category title part, where I can easily add one programmatically. 21 | */ 22 | &:has( .mwe-upwiz-categories-category-title ) { 23 | font-size: smaller; 24 | font-variant-caps: small-caps; 25 | color: @color-subtle; 26 | 27 | .mwe-upwiz-categories-category-title { 28 | font-size: larger; 29 | font-variant-caps: normal; 30 | color: @color-base; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /resources/details/uw.DateDetailsWidget.less: -------------------------------------------------------------------------------- 1 | .mwe-upwiz-dateDetailsWidget { 2 | .mwe-upwiz-dateDetailsWidget-toggler, 3 | .mwe-upwiz-dateDetailsWidget-date { 4 | display: inline-block; 5 | vertical-align: middle; 6 | } 7 | 8 | .mwe-upwiz-dateDetailsWidget-date { 9 | // Force width matching the date input for the text input 10 | width: 21em; 11 | // Date input has different margins 12 | margin-top: 0; 13 | margin-bottom: 0; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /resources/details/uw.LanguageDropdownWidget.js: -------------------------------------------------------------------------------- 1 | ( function ( uw ) { 2 | 3 | /** 4 | * A language dropdown within a description field in UploadWizard's "Details" step form. 5 | * 6 | * @class 7 | * @param {Object} [config] 8 | */ 9 | uw.LanguageDropdownWidget = function UWLanguageDropdownWidget( config ) { 10 | config = config || {}; 11 | 12 | uw.LanguageDropdownWidget.super.call( this ); 13 | 14 | this.languageDropdown = new OO.ui.DropdownWidget( { 15 | menu: { items: this.getLanguageMenuOptionWidgets( config.languages ) }, 16 | classes: config.classes 17 | } ); 18 | this.languageDropdown.getMenu().connect( this, { select: [ 'emit', 'select' ] } ); 19 | }; 20 | OO.inheritClass( uw.LanguageDropdownWidget, OO.ui.Widget ); 21 | OO.mixinClass( uw.LanguageDropdownWidget, OO.EventEmitter ); 22 | 23 | /** 24 | * @param {Object} languages 25 | */ 26 | uw.LanguageDropdownWidget.prototype.updateLanguages = function ( languages ) { 27 | const menu = this.languageDropdown.getMenu(), 28 | currentMenuItems = menu.getItems(), 29 | currentValue = this.getValue(); 30 | 31 | // remove all items except the one currently selected (don't want 32 | // to trigger another select by removing it) 33 | menu.removeItems( currentMenuItems.filter( ( item ) => !item.isSelected() ) ); 34 | 35 | // and add the rest of the languages back in there 36 | delete languages[ currentValue ]; 37 | menu.addItems( this.getLanguageMenuOptionWidgets( languages ) ); 38 | }; 39 | 40 | /** 41 | * @param {string} value 42 | */ 43 | uw.LanguageDropdownWidget.prototype.setValue = function ( value ) { 44 | this.languageDropdown.getMenu().selectItemByData( value ); 45 | }; 46 | 47 | /** 48 | * @return {string} 49 | */ 50 | uw.LanguageDropdownWidget.prototype.getValue = function () { 51 | return this.languageDropdown.getMenu().findSelectedItem().getData(); 52 | }; 53 | 54 | /** 55 | * @return {OO.ui.DropdownWidget} 56 | */ 57 | uw.LanguageDropdownWidget.prototype.getElement = function () { 58 | return this.languageDropdown.$element; 59 | }; 60 | 61 | /** 62 | * Get options for the dropdown list of all allowed languages. 63 | * 64 | * @private 65 | * @param {Object} languages 66 | * @return {OO.ui.MenuOptionWidget[]} 67 | */ 68 | uw.LanguageDropdownWidget.prototype.getLanguageMenuOptionWidgets = function ( languages ) { 69 | return Object.keys( languages ).map( ( code ) => new OO.ui.MenuOptionWidget( { 70 | data: code, 71 | label: languages[ code ] 72 | } ) ); 73 | }; 74 | 75 | }( mw.uploadWizard ) ); 76 | -------------------------------------------------------------------------------- /resources/details/uw.LocationDetailsWidget.less: -------------------------------------------------------------------------------- 1 | @import 'mediawiki.mixins'; 2 | 3 | .mwe-upwiz-locationDetailsWidget { 4 | .oo-ui-fieldLayout { 5 | margin-top: 0; 6 | margin-right: 1em; 7 | margin-bottom: 0; 8 | width: 12em; 9 | } 10 | 11 | .oo-ui-popupWidget { 12 | // Add extra spacing at the bottom if the popup is touching the bottom of viewport 13 | margin-bottom: 1em; 14 | } 15 | 16 | .oo-ui-fieldLayout, 17 | .oo-ui-popupButtonWidget { 18 | display: inline-block; 19 | vertical-align: bottom; 20 | 21 | a { 22 | margin-bottom: 1em; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /resources/details/uw.MultipleLanguageInputWidget.less: -------------------------------------------------------------------------------- 1 | .mwe-upwiz-multipleLanguageInputsWidget { 2 | .mwe-upwiz-multipleLanguageInputWidget-addItem { 3 | margin-top: 0; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /resources/details/uw.OtherDetailsWidget.js: -------------------------------------------------------------------------------- 1 | ( function ( uw ) { 2 | 3 | /** 4 | * An other informations field in UploadWizard's "Details" step form. 5 | * 6 | * @class 7 | * @extends uw.DetailsWidget 8 | */ 9 | uw.OtherDetailsWidget = function UWOtherDetailsWidget() { 10 | uw.OtherDetailsWidget.super.call( this ); 11 | 12 | this.textInput = new OO.ui.MultilineTextInputWidget( { 13 | classes: [ 'mwe-upwiz-other-textarea', 'mwe-upwiz-otherDetailsWidget-other' ], 14 | autosize: true 15 | } ); 16 | 17 | // Aggregate 'change' event 18 | // (but do not flash warnings in the user's face while they're typing) 19 | this.textInput.on( 'change', OO.ui.debounce( this.emit.bind( this, 'change' ), 500 ) ); 20 | 21 | this.$element.addClass( 'mwe-upwiz-otherDetailsWidget' ); 22 | this.$element.append( 23 | this.textInput.$element 24 | ); 25 | }; 26 | OO.inheritClass( uw.OtherDetailsWidget, uw.DetailsWidget ); 27 | 28 | /** 29 | * @inheritdoc 30 | */ 31 | uw.OtherDetailsWidget.prototype.getWikiText = function () { 32 | return this.textInput.getValue().trim(); 33 | }; 34 | 35 | /** 36 | * @inheritdoc 37 | * @return {Object} See #setSerialized 38 | */ 39 | uw.OtherDetailsWidget.prototype.getSerialized = function () { 40 | return { 41 | other: this.textInput.getValue() 42 | }; 43 | }; 44 | 45 | /** 46 | * @inheritdoc 47 | * @param {Object} serialized 48 | * @param {string} serialized.other Other informations text 49 | */ 50 | uw.OtherDetailsWidget.prototype.setSerialized = function ( serialized ) { 51 | this.textInput.setValue( serialized.other ); 52 | }; 53 | 54 | }( mw.uploadWizard ) ); 55 | -------------------------------------------------------------------------------- /resources/details/uw.SingleLanguageInputWidget.less: -------------------------------------------------------------------------------- 1 | @import 'mediawiki.skin.variables.less'; 2 | 3 | .mwe-upwiz-singleLanguageInputWidget { 4 | &:not( :first-of-type ) { 5 | border-top: 0; 6 | } 7 | 8 | .mwe-upwiz-singleLanguageInputWidget-body { 9 | background-color: @background-color-neutral-subtle; 10 | padding: 10px; 11 | border: @border-width-base @border-style-base @border-color-muted; 12 | border-radius: @border-radius-base; 13 | margin-bottom: 0.8em; 14 | 15 | .mwe-upwiz-singleLanguageInputWidget-text { 16 | padding-top: 0.5em; 17 | width: 100%; 18 | } 19 | 20 | .mwe-upwiz-singleLanguageInputWidget-removeItem { 21 | float: right; 22 | margin-right: 0; 23 | 24 | &.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { 25 | float: right; 26 | } 27 | } 28 | 29 | .mwe-upwiz-singleLanguageInputWidget-language, 30 | .mwe-upwiz-singleLanguageInputWidget-text, 31 | .mwe-upwiz-singleLanguageInputWidget-removeItem { 32 | display: inline-block; 33 | // 'top' because the description text input is autosized 34 | vertical-align: top; 35 | } 36 | } 37 | 38 | &.mwe-upwiz-singleLanguageInputWidget-removable .mwe-upwiz-singleLanguageInputWidget-language { 39 | // Lower the width to accommodate for the delete icon 40 | // 32px is icon width, 8px is this element's margin-right 41 | width: calc( 100% - 8px - 32px ); 42 | } 43 | 44 | &:not( .mwe-upwiz-singleLanguageInputWidget-removable ) .mwe-upwiz-singleLanguageInputWidget-removeItem { 45 | display: none; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /resources/details/uw.StatementWidget.less: -------------------------------------------------------------------------------- 1 | @import 'mediawiki.skin.variables.less'; 2 | 3 | .mwe-upwiz-statementWidget { 4 | border: @border-base; 5 | border-radius: 2px; 6 | padding: 0 4px; 7 | 8 | &.mwe-upwiz-statementWidget-active { 9 | border-color: @border-color-progressive; 10 | outline: 1px solid transparent; 11 | box-shadow: 0 0 0 1px @box-shadow-color-progressive--active; 12 | } 13 | 14 | .mwe-upwiz-statement-input { 15 | display: inline-block; 16 | width: 100%; 17 | 18 | input { 19 | height: 30px; 20 | } 21 | } 22 | 23 | .oo-ui-textInputWidget .oo-ui-inputWidget-input { 24 | border: 0; 25 | } 26 | 27 | .oo-ui-textInputWidget .oo-ui-inputWidget-input > input:first-child { 28 | padding-left: 0; 29 | } 30 | 31 | .oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input { 32 | box-shadow: none; 33 | } 34 | 35 | .oo-ui-tagItemWidget { 36 | margin: 1px 4px 0 0; 37 | } 38 | 39 | .tags { 40 | float: left; 41 | display: inline; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /resources/ext.uploadWizard.uploadCampaign.display/content.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Styles for rendering of pages with the Campaign content model. 3 | */ 4 | 5 | @import 'mediawiki.skin.variables.less'; 6 | 7 | /* This is like .ns-460.action-view, but without the unofficial 8 | link between content and namespace. The content model is 9 | a page-specific property. */ 10 | .mwe-upwiz-campaign-page #firstHeading { 11 | display: none; 12 | } 13 | 14 | #mw-campaign-primary-info { 15 | float: left; 16 | width: 60%; /* Not ideal, but hey, I'm writing CSS! */ 17 | } 18 | 19 | #mw-campaign-no-uploads-yet { 20 | padding: 24px; 21 | text-align: center; 22 | } 23 | 24 | #mw-campaign-title { 25 | font-size: 24px; 26 | border-bottom: @border-width-base @border-style-base @border-color-subtle; 27 | } 28 | 29 | #mw-campaign-description { 30 | margin-bottom: 24px; 31 | } 32 | 33 | #mw-campaign-header { 34 | background-color: @background-color-neutral-subtle; 35 | overflow: hidden; 36 | padding: 24px; 37 | margin: 12px; 38 | border: @border-width-base @border-style-base @border-color-subtle; 39 | } 40 | 41 | #mw-campaign-numbers { 42 | float: right; 43 | } 44 | 45 | .mw-campaign-number-container { 46 | text-align: center; 47 | float: left; 48 | margin-right: 24px; 49 | } 50 | 51 | .mw-campaign-number { 52 | font-size: 96px; 53 | line-height: 96px; 54 | font-weight: lighter; 55 | } 56 | 57 | .mw-campaign-number-desc { 58 | text-transform: uppercase; 59 | letter-spacing: 1px; 60 | } 61 | 62 | #mw-campaign-view-all { 63 | background-color: @background-color-neutral-subtle; 64 | display: block; 65 | border: @border-width-base @border-style-base @border-color-subtle; 66 | padding: 8px; 67 | text-align: center; 68 | } 69 | 70 | #mw-campaign-view-all:hover { 71 | text-decoration: none; 72 | } 73 | 74 | .mw-campaign-chevron { 75 | background: url( ../images/down-chevron.png ) no-repeat center; 76 | width: 16px; 77 | } 78 | 79 | .mw-campaign-float-left { 80 | float: left; 81 | } 82 | 83 | .mw-campaign-float-right { 84 | float: right; 85 | } 86 | -------------------------------------------------------------------------------- /resources/ext.uploadWizard.uploadCampaign.display/list.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Styles for Special:Campaigns. 3 | */ 4 | 5 | @import 'mediawiki.skin.variables.less'; 6 | 7 | #mwe-upload-campaigns-pagination { 8 | padding: 12px; 9 | border-top: @border-width-base @border-style-base @border-color-subtle; 10 | text-align: right; 11 | } 12 | -------------------------------------------------------------------------------- /resources/handlers/mw.ApiUploadFormDataHandler.js: -------------------------------------------------------------------------------- 1 | ( function () { 2 | /** 3 | * Represents an object which configures an html5 FormData object to upload. 4 | * Large files are uploaded in chunks. 5 | * 6 | * @class 7 | * @param {mw.UploadWizardUpload} upload 8 | * @param {mw.Api} api 9 | */ 10 | mw.ApiUploadFormDataHandler = function ( upload, api ) { 11 | mw.ApiUploadHandler.call( this, upload, api ); 12 | 13 | this.formData = { 14 | action: 'upload', 15 | stash: 1, 16 | format: 'json' 17 | }; 18 | 19 | this.transport = new mw.FormDataTransport( 20 | this.api, 21 | this.formData 22 | ).on( 'update-stage', ( stage ) => { 23 | upload.ui.setStatus( 'mwe-upwiz-' + stage ); 24 | } ); 25 | }; 26 | 27 | OO.inheritClass( mw.ApiUploadFormDataHandler, mw.ApiUploadHandler ); 28 | 29 | mw.ApiUploadFormDataHandler.prototype.abort = function () { 30 | this.transport.abort(); 31 | }; 32 | 33 | /** 34 | * @return {jQuery.Promise} 35 | */ 36 | mw.ApiUploadFormDataHandler.prototype.submit = function () { 37 | return this.configureEditToken().then( () => { 38 | this.beginTime = Date.now(); 39 | this.upload.ui.setStatus( 'mwe-upwiz-transport-started' ); 40 | this.upload.ui.showTransportProgress(); 41 | 42 | return this.transport.upload( this.upload.file, this.upload.title.getMainText() ) 43 | .progress( ( fraction ) => { 44 | if ( this.upload.state === 'aborted' ) { 45 | this.abort(); 46 | return; 47 | } 48 | 49 | if ( fraction !== null ) { 50 | this.upload.setTransportProgress( fraction ); 51 | } 52 | } ); 53 | } ); 54 | }; 55 | 56 | /** 57 | * Obtain a fresh edit token. 58 | * If successful, store token and call a callback. 59 | * 60 | * @return {jQuery.Promise} 61 | */ 62 | mw.ApiUploadFormDataHandler.prototype.configureEditToken = function () { 63 | return this.api.getEditToken().then( ( token ) => { 64 | this.formData.token = token; 65 | } ); 66 | }; 67 | }() ); 68 | -------------------------------------------------------------------------------- /resources/handlers/mw.ApiUploadPostHandler.js: -------------------------------------------------------------------------------- 1 | ( function () { 2 | /** 3 | * Represents an object which send a direct request to the MediaWiki API. 4 | * This is used when there is no actual file payload (eg. Flickr import) 5 | * 6 | * @class 7 | * @param {mw.UploadWizardUpload} upload current upload 8 | * @param {mw.Api} api 9 | */ 10 | mw.ApiUploadPostHandler = function ( upload, api ) { 11 | mw.ApiUploadHandler.call( this, upload, api ); 12 | 13 | this.request = null; 14 | }; 15 | 16 | OO.inheritClass( mw.ApiUploadPostHandler, mw.ApiUploadHandler ); 17 | 18 | mw.ApiUploadPostHandler.prototype.abort = function () { 19 | this.request.abort(); 20 | }; 21 | 22 | /** 23 | * @return {jQuery.Promise} 24 | */ 25 | mw.ApiUploadPostHandler.prototype.submit = function () { 26 | let tempname = this.upload.getFilename(); 27 | const ext = tempname.split( '.' ).pop(); 28 | 29 | // Limit filename length to 240 bytes (limit hardcoded in UploadBase.php). 30 | if ( tempname.length > 240 ) { 31 | tempname = tempname.slice( 0, 240 - ext.length - 1 ) + '.' + ext; 32 | } 33 | 34 | this.upload.ui.setStatus( 'mwe-upwiz-transport-started' ); 35 | 36 | this.request = this.api.postWithToken( 'csrf', { 37 | action: 'upload', 38 | stash: 1, 39 | ignorewarnings: 1, 40 | url: this.upload.file.url, 41 | filename: tempname 42 | } ); 43 | 44 | return this.request; 45 | }; 46 | }() ); 47 | -------------------------------------------------------------------------------- /resources/images/32px-Blank-document-broken.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-UploadWizard/1c37ea6f577a07559a1f9382bd2be902449c1bd2/resources/images/32px-Blank-document-broken.svg.png -------------------------------------------------------------------------------- /resources/images/32px-Blank-document.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-UploadWizard/1c37ea6f577a07559a1f9382bd2be902449c1bd2/resources/images/32px-Blank-document.svg.png -------------------------------------------------------------------------------- /resources/images/36px-Cc-by_new_white.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-UploadWizard/1c37ea6f577a07559a1f9382bd2be902449c1bd2/resources/images/36px-Cc-by_new_white.svg.png -------------------------------------------------------------------------------- /resources/images/36px-Cc-public_domain_mark_white.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-UploadWizard/1c37ea6f577a07559a1f9382bd2be902449c1bd2/resources/images/36px-Cc-public_domain_mark_white.svg.png -------------------------------------------------------------------------------- /resources/images/36px-Cc-zero.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-UploadWizard/1c37ea6f577a07559a1f9382bd2be902449c1bd2/resources/images/36px-Cc-zero.svg.png -------------------------------------------------------------------------------- /resources/images/36px-Share_Alike.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-UploadWizard/1c37ea6f577a07559a1f9382bd2be902449c1bd2/resources/images/36px-Share_Alike.svg.png -------------------------------------------------------------------------------- /resources/images/64px-OOjs_UI_icon_alert_image_warning.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-UploadWizard/1c37ea6f577a07559a1f9382bd2be902449c1bd2/resources/images/64px-OOjs_UI_icon_alert_image_warning.svg.png -------------------------------------------------------------------------------- /resources/images/cc.svg: -------------------------------------------------------------------------------- 1 | <svg enable-background="new 5.5 -3.5 64 64" height="64" viewBox="5.5 -3.5 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><circle cx="37.785" cy="28.501" fill="#fff" r="28.836"/><path d="m37.441-3.5c8.951 0 16.572 3.125 22.857 9.372 3.008 3.009 5.295 6.448 6.857 10.314 1.561 3.867 2.344 7.971 2.344 12.314 0 4.381-.773 8.486-2.314 12.313-1.543 3.828-3.82 7.21-6.828 10.143-3.123 3.085-6.666 5.448-10.629 7.086-3.961 1.638-8.057 2.457-12.285 2.457s-8.276-.808-12.143-2.429c-3.866-1.618-7.333-3.961-10.4-7.027s-5.4-6.524-7-10.372-2.4-7.904-2.4-12.171c0-4.229.809-8.295 2.428-12.2s3.972-7.4 7.057-10.486c6.095-6.208 13.58-9.314 22.456-9.314zm.116 5.772c-7.314 0-13.467 2.553-18.458 7.657-2.515 2.553-4.448 5.419-5.8 8.6-1.354 3.181-2.029 6.505-2.029 9.972 0 3.429.675 6.734 2.029 9.913 1.353 3.183 3.285 6.021 5.8 8.516 2.514 2.496 5.351 4.399 8.515 5.715 3.161 1.314 6.476 1.971 9.943 1.971 3.428 0 6.75-.665 9.973-1.999 3.219-1.335 6.121-3.257 8.713-5.771 4.99-4.876 7.484-10.99 7.484-18.344 0-3.543-.648-6.895-1.943-10.057-1.293-3.162-3.18-5.98-5.654-8.458-5.146-5.143-11.335-7.715-18.573-7.715zm-.401 20.915-4.287 2.229c-.458-.951-1.019-1.619-1.685-2-.667-.38-1.286-.571-1.858-.571-2.856 0-4.286 1.885-4.286 5.657 0 1.714.362 3.084 1.085 4.113.724 1.029 1.791 1.544 3.201 1.544 1.867 0 3.181-.915 3.944-2.743l3.942 2c-.838 1.563-2 2.791-3.486 3.686-1.484.896-3.123 1.343-4.914 1.343-2.857 0-5.163-.875-6.915-2.629-1.752-1.752-2.628-4.19-2.628-7.313 0-3.048.886-5.466 2.657-7.257 1.771-1.79 4.009-2.686 6.715-2.686 3.963-.002 6.8 1.541 8.515 4.627zm18.457 0-4.229 2.229c-.457-.951-1.02-1.619-1.686-2-.668-.38-1.307-.571-1.914-.571-2.857 0-4.287 1.885-4.287 5.657 0 1.714.363 3.084 1.086 4.113s1.789 1.544 3.201 1.544c1.865 0 3.18-.915 3.941-2.743l4 2c-.875 1.563-2.057 2.791-3.541 3.686-1.486.896-3.105 1.343-4.857 1.343-2.896 0-5.209-.875-6.941-2.629-1.736-1.752-2.602-4.19-2.602-7.313 0-3.048.885-5.466 2.658-7.257 1.77-1.79 4.008-2.686 6.713-2.686 3.962-.002 6.783 1.541 8.458 4.627z"/></svg> -------------------------------------------------------------------------------- /resources/images/cta-icon.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="121" height="89" viewBox="0 0 121 89"> 3 | <title> 4 | Group Copy 2 5 | 6 | 7 | Created with Sketch. 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /resources/images/down-chevron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-UploadWizard/1c37ea6f577a07559a1f9382bd2be902449c1bd2/resources/images/down-chevron.png -------------------------------------------------------------------------------- /resources/images/no-weapons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Group 5 4 | Created with Sketch. 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /resources/images/zero.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/mw.UploadWizardPage.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This script is run on [[Special:UploadWizard]]. 3 | * Configures and creates an interface for uploading files in multiple steps, hence "wizard". 4 | * 5 | * Tries to transform Javascript globals dumped on us by the SpecialUploadWizard.php into a more 6 | * compact configuration, owned by the UploadWizard created. 7 | */ 8 | 9 | // Create UploadWizard 10 | ( function () { 11 | 12 | function isCompatible() { 13 | return !!( 14 | window.FileReader && 15 | window.FormData && 16 | window.File && 17 | window.File.prototype.slice 18 | ); 19 | } 20 | 21 | /** 22 | * @class 23 | */ 24 | mw.UploadWizardPage = function () { 25 | const config = mw.config.get( 'UploadWizardConfig' ); 26 | 27 | // Default configuration value that cannot be removed 28 | config.maxUploads = config.maxUploads || 10; 29 | 30 | // Remove the initial spinner 31 | // eslint-disable-next-line no-jquery/no-global-selector 32 | $( '.mwe-first-spinner' ).remove(); 33 | 34 | // eslint-disable-next-line no-jquery/no-global-selector 35 | if ( $( '#upload-wizard' ).length === 0 ) { 36 | mw.log( 'UploadWizard is disabled, nothing to do.' ); 37 | return; 38 | } 39 | 40 | if ( !isCompatible() ) { 41 | // Display the same error message as for grade-C browsers 42 | // eslint-disable-next-line no-jquery/no-global-selector 43 | $( '.mwe-upwiz-unavailable' ).show(); 44 | return; 45 | } 46 | 47 | const uploadWizard = new mw.UploadWizard( config ); 48 | uploadWizard.createInterface( '#upload-wizard' ); 49 | }; 50 | 51 | $( () => { 52 | // show page. 53 | mw.UploadWizardPage(); 54 | } ); 55 | 56 | }() ); 57 | -------------------------------------------------------------------------------- /resources/mw.canvas.js: -------------------------------------------------------------------------------- 1 | ( function () { 2 | 3 | mw.canvas = { 4 | /** 5 | * @return {boolean} 6 | */ 7 | isAvailable: function () { 8 | return !!( document.createElement( 'canvas' ).getContext ); 9 | } 10 | 11 | }; 12 | 13 | }() ); 14 | -------------------------------------------------------------------------------- /resources/mw.errorDialog.js: -------------------------------------------------------------------------------- 1 | ( function () { 2 | 3 | OO.ui.getWindowManager().addWindows( { 4 | upwizErrorDialog: new OO.ui.MessageDialog( { size: 'medium' } ) 5 | } ); 6 | 7 | /** 8 | * Displays an error message. 9 | * 10 | * @param {jQuery|string} errorMessage 11 | * @param {string} [title] 12 | */ 13 | mw.errorDialog = function ( errorMessage, title ) { 14 | OO.ui.getWindowManager().openWindow( 'upwizErrorDialog', { 15 | message: new OO.ui.HtmlSnippet( errorMessage ), 16 | title: title || mw.message( 'mwe-upwiz-errordialog-title' ).text(), 17 | verbose: true, 18 | actions: [ 19 | { 20 | label: mw.message( 'mwe-upwiz-errordialog-ok' ).text(), 21 | action: 'accept' 22 | } 23 | ] 24 | } ); 25 | }; 26 | 27 | }() ); 28 | -------------------------------------------------------------------------------- /resources/mw.fileApi.js: -------------------------------------------------------------------------------- 1 | /* miscellaneous fileApi routines -- partially copied from mediawiki.special.upload.js, must refactor... */ 2 | 3 | ( function () { 4 | 5 | mw.fileApi = { 6 | 7 | /** 8 | * Check if this is a recognizable image type... 9 | * Also excludes files over 10M to avoid going insane on memory usage. 10 | * 11 | * TODO is there a way we can ask the browser what's supported in s? 12 | * TODO put SVG back after working around Firefox 7 bug 13 | * 14 | * @param {File} file 15 | * @return {boolean} 16 | */ 17 | isPreviewableFile: function ( file ) { 18 | const known = [ 'image/png', 'image/gif', 'image/jpeg' ], 19 | tooHuge = 10 * 1024 * 1024; 20 | return this.isPreviewableVideo( file ) || ( known.includes( file.type ) ) && file.size > 0 && file.size < tooHuge; 21 | }, 22 | 23 | /** 24 | * Check if this is a recognizable video type... 25 | * 26 | * @param {File} file 27 | * @return {boolean} 28 | */ 29 | isPreviewableVideo: function ( file ) { 30 | const video = document.createElement( 'video' ); 31 | return video.canPlayType && video.canPlayType( file.type ).replace( 'no', '' ) !== ''; 32 | } 33 | 34 | }; 35 | }() ); 36 | -------------------------------------------------------------------------------- /resources/ui/steps/uw.ui.Tutorial.less: -------------------------------------------------------------------------------- 1 | /* Position the popup */ 2 | #mwe-upwiz-skip { 3 | position: relative; 4 | } 5 | 6 | #mwe-upwiz-skip .oo-ui-popupWidget { 7 | position: absolute; 8 | left: 50%; 9 | } 10 | 11 | /* Override some silly styles */ 12 | #mwe-upwiz-skip .oo-ui-popupWidget, 13 | #mwe-upwiz-skip .oo-ui-popupWidget * { 14 | white-space: normal; 15 | text-align: left; 16 | } 17 | 18 | #mwe-upwiz-tutorial { 19 | text-align: center; 20 | 21 | #mwe-upwiz-tutorial-html > img { 22 | height: inherit; 23 | width: 100%; 24 | max-width: 720px; /* width of tutorial.png */ 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /resources/ui/uw.ui.Step.less: -------------------------------------------------------------------------------- 1 | @import 'mediawiki.skin.variables.less'; 2 | 3 | .mwe-upwiz-deed-title, 4 | .mwe-upwiz-details-fieldname, 5 | .oo-ui-fieldLayout-header .oo-ui-labelElement-label, 6 | .oo-ui-fieldsetLayout-header .oo-ui-labelElement-label { 7 | font-weight: @font-weight-bold; 8 | } 9 | 10 | .mwe-upwiz-fieldLayout-additional-info, 11 | .mwe-upwiz-details-templateoption { 12 | .mwe-upwiz-deed-title, 13 | .mwe-upwiz-details-fieldname, 14 | .oo-ui-fieldLayout-header .oo-ui-labelElement-label, 15 | .oo-ui-fieldsetLayout-header .oo-ui-labelElement-label { 16 | font-weight: @font-weight-normal; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /resources/ui/uw.ui.base.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the MediaWiki extension UploadWizard. 3 | * 4 | * UploadWizard is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * UploadWizard is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with UploadWizard. If not, see . 16 | */ 17 | 18 | ( function ( uw ) { 19 | // create UploadWizard UI namespace 20 | uw.ui = {}; 21 | }( mw.uploadWizard ) ); 22 | -------------------------------------------------------------------------------- /resources/uploadWizard.noJs.css: -------------------------------------------------------------------------------- 1 | #upload-wizard { 2 | margin-top: 18px; 3 | max-width: 900px; /* wild guess */ 4 | } 5 | 6 | .client-js .mwe-upwiz-unavailable { 7 | display: none; 8 | } 9 | 10 | .client-nojs #upload-wizard { 11 | display: none; 12 | } 13 | 14 | .mwe-first-spinner { 15 | height: 200px; 16 | line-height: 200px; 17 | text-align: center; 18 | } 19 | -------------------------------------------------------------------------------- /resources/uw.DetailsWidget.js: -------------------------------------------------------------------------------- 1 | ( function ( uw ) { 2 | 3 | /** 4 | * A single logical field in UploadWizard's "Details" step form. 5 | * 6 | * This can be composed of multiple smaller widgets, but represents a single unit (e.g. a 7 | * "location" field could be composed of "latitude" and "longitude" inputs). 8 | * 9 | * @class 10 | * @extends OO.ui.Widget 11 | * @abstract 12 | */ 13 | uw.DetailsWidget = function UWDetailsWidget() { 14 | uw.DetailsWidget.super.call( this ); 15 | }; 16 | OO.inheritClass( uw.DetailsWidget, OO.ui.Widget ); 17 | OO.mixinClass( uw.DetailsWidget, uw.ValidatableElement ); 18 | 19 | /** 20 | * A 'change' event is emitted when the state of this widget (and the serialized value) changes. 21 | * 22 | * @event uw.DetailsWidget.change 23 | */ 24 | 25 | /** 26 | * @inheritdoc OO.ui.mixin.PendingElement#pushPending 27 | */ 28 | uw.DetailsWidget.prototype.pushPending = function () { 29 | // Do nothing by default 30 | }; 31 | 32 | /** 33 | * @inheritdoc OO.ui.mixin.PendingElement#popPending 34 | */ 35 | uw.DetailsWidget.prototype.popPending = function () { 36 | // Do nothing by default 37 | }; 38 | 39 | /** 40 | * Get a wikitext snippet generated from current state of the widget. 41 | * 42 | * @method 43 | * @return {string} Wikitext 44 | */ 45 | uw.DetailsWidget.prototype.getWikiText = null; 46 | 47 | /** 48 | * Get a machine-readable representation of the current state of the widget. It can be passed to 49 | * #setSerialized to restore this state (or to set it for another instance of the same class). 50 | * 51 | * @method 52 | * @return {Object} 53 | */ 54 | uw.DetailsWidget.prototype.getSerialized = null; 55 | 56 | /** 57 | * Set the state of this widget from machine-readable representation, as returned by 58 | * #getSerialized. 59 | * 60 | * @method 61 | * @param {Object} serialized 62 | */ 63 | uw.DetailsWidget.prototype.setSerialized = null; 64 | 65 | }( mw.uploadWizard ) ); 66 | -------------------------------------------------------------------------------- /resources/uw.FieldLayout.js: -------------------------------------------------------------------------------- 1 | ( function ( uw ) { 2 | 3 | /** 4 | * FieldLayout with some UploadWizard-specific bonuses. 5 | * 6 | * @extends OO.ui.FieldLayout 7 | * 8 | * @class 9 | * @inheritdoc 10 | * @param {OO.ui.Widget} fieldWidget 11 | * @param {Object} [config] 12 | * @param {boolean} [config.required=false] Whether to mark this field as required 13 | * @param {boolean} [config.align='top'] 14 | */ 15 | uw.FieldLayout = function UWFieldLayout( fieldWidget, config ) { 16 | // FieldLayout will add an icon which, when clicked, reveals more information 17 | // about the input. We'll want to display that by default, so we're getting 18 | // rid of the "help" property here & will later append that after the header 19 | const help = config && config.help ? config.help : ''; 20 | config = Object.assign( { align: 'top', required: false }, config, { help: '' } ); 21 | 22 | uw.FieldLayout.super.call( this, fieldWidget, config ); 23 | uw.ValidationMessageElement.call( this, { validatedWidget: fieldWidget } ); 24 | 25 | this.required = null; 26 | this.optionalMarker = new OO.ui.LabelWidget( { 27 | classes: [ 'mwe-upwiz-fieldLayout-indicator' ], 28 | label: mw.msg( 'mwe-upwiz-label-optional' ) 29 | } ); 30 | 31 | this.$element.addClass( 'mwe-upwiz-fieldLayout' ); 32 | 33 | this.$element.addClass( 'mwe-upwiz-details-fieldname-input' ); 34 | this.$label.addClass( 'mwe-upwiz-details-fieldname' ); 35 | this.$field.addClass( 'mwe-upwiz-details-input' ); 36 | 37 | if ( help ) { 38 | this.help = new OO.ui.LabelWidget( { label: help } ); 39 | this.$header.after( this.help.$element.addClass( 'mwe-upwiz-details-help' ) ); 40 | } 41 | 42 | this.setRequired( config.required ); 43 | }; 44 | OO.inheritClass( uw.FieldLayout, OO.ui.FieldLayout ); 45 | OO.mixinClass( uw.FieldLayout, uw.ValidationMessageElement ); 46 | 47 | /** 48 | * @param {boolean} required Whether to mark this field as required 49 | */ 50 | uw.FieldLayout.prototype.setRequired = function ( required ) { 51 | this.required = !!required; 52 | // only add 'optional' marker after the label if that label 53 | // has content... 54 | if ( !this.required && this.$label.text() !== '' ) { 55 | this.$header.append( ' ', this.optionalMarker.$element ); 56 | } else { 57 | this.optionalMarker.$element.remove(); 58 | } 59 | }; 60 | 61 | }( mw.uploadWizard ) ); 62 | -------------------------------------------------------------------------------- /resources/uw.FieldLayout.less: -------------------------------------------------------------------------------- 1 | @import 'mediawiki.skin.variables.less'; 2 | 3 | .mwe-upwiz-fieldLayout { 4 | .mwe-upwiz-fieldLayout-indicator { 5 | color: @color-subtle; 6 | } 7 | 8 | .mwe-upwiz-details-help { 9 | padding-bottom: 0.5em; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /resources/uw.LicensePreviewDialog.js: -------------------------------------------------------------------------------- 1 | ( function ( uw ) { 2 | /** 3 | * @class 4 | * @extends OO.ui.Dialog 5 | * @inheritdoc 6 | */ 7 | uw.LicensePreviewDialog = function UWLicensePreviewDialog( config ) { 8 | uw.LicensePreviewDialog.super.call( this, config ); 9 | }; 10 | OO.inheritClass( uw.LicensePreviewDialog, OO.ui.Dialog ); 11 | 12 | uw.LicensePreviewDialog.static.name = 'licensePreviewDialog'; 13 | 14 | uw.LicensePreviewDialog.prototype.initialize = function () { 15 | uw.LicensePreviewDialog.super.prototype.initialize.call( this ); 16 | 17 | this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } ); 18 | this.$body.append( this.content.$element ); 19 | this.$spinner = $.createSpinner( { size: 'large', type: 'block' } ) 20 | .css( { width: 200, padding: 20, float: 'none', margin: '0 auto' } ); 21 | 22 | $( document.body ).on( 'click', ( e ) => { 23 | if ( !$.contains( this.$body.get( 0 ), e.target ) ) { 24 | this.close(); 25 | } 26 | } ); 27 | }; 28 | 29 | uw.LicensePreviewDialog.prototype.addCloseButton = function () { 30 | const closeButton = new OO.ui.ButtonWidget( { 31 | label: OO.ui.msg( 'ooui-dialog-process-dismiss' ) 32 | } ); 33 | 34 | closeButton.on( 'click', () => { 35 | this.close(); 36 | } ); 37 | 38 | this.content.$element.append( closeButton.$element ); 39 | }; 40 | 41 | uw.LicensePreviewDialog.prototype.getBodyHeight = function () { 42 | return this.content.$element.outerHeight( true ); 43 | }; 44 | 45 | uw.LicensePreviewDialog.prototype.setLoading = function ( isLoading ) { 46 | if ( isLoading ) { 47 | this.content.$element.empty().append( this.$spinner ); 48 | this.addCloseButton(); 49 | } else { 50 | this.content.$element.empty(); 51 | } 52 | 53 | this.updateSize(); 54 | }; 55 | 56 | uw.LicensePreviewDialog.prototype.setPreview = function ( html ) { 57 | this.content.$element.empty().append( html ); 58 | this.addCloseButton(); 59 | this.updateSize(); 60 | }; 61 | 62 | }( mw.uploadWizard ) ); 63 | -------------------------------------------------------------------------------- /resources/uw.ValidatableElement.js: -------------------------------------------------------------------------------- 1 | ( function ( uw ) { 2 | 3 | uw.ValidatableElement = function UWValidatableElement() {}; 4 | OO.initClass( uw.ValidatableElement ); 5 | 6 | /** 7 | * Convenience method to attach validatableElement methods to an on-the-fly 8 | * created instance of one of the existing widgets where this class hasn't 9 | * been mixed in. 10 | * 11 | * @param {OO.ui.Widget} widget 12 | */ 13 | uw.ValidatableElement.decorate = function ( widget ) { 14 | // copy ValidatableElement methods onto widget instance 15 | let key; 16 | for ( key in uw.ValidatableElement.prototype ) { 17 | if ( key !== 'constructor' && Object.prototype.hasOwnProperty.call( uw.ValidatableElement.prototype, key ) ) { 18 | widget[ key ] = uw.ValidatableElement.prototype[ key ]; 19 | } 20 | } 21 | }; 22 | 23 | /** 24 | * This method executes the validation. It is expected to return a promise 25 | * that either resolves (on success) or rejects (on failure), with up to 26 | * 3 arguments, in both cases, representing errors, warnings and notices 27 | * respectively. 28 | * 29 | * Notice that it is possible for a check to fail (rejected) without error, 30 | * or for there to be an error without failure (resolved). This can be 31 | * useful e.g. in case there was an error in a nested component, where it 32 | * is displayed in situ: we don't want to show a duplicate error in the 33 | * parent, but still want to report on the overall failure of the validation. 34 | * 35 | * @param {boolean} thorough 36 | * @return {jQuery.Promise} 37 | */ 38 | // eslint-disable-next-line no-unused-vars 39 | uw.ValidatableElement.prototype.validate = function ( thorough ) { 40 | return ( new uw.ValidationStatus() ).resolve(); 41 | }; 42 | 43 | }( mw.uploadWizard ) ); 44 | -------------------------------------------------------------------------------- /resources/uw.units.js: -------------------------------------------------------------------------------- 1 | ( function ( uw ) { 2 | 3 | const scaleMsgKeys = [ 'size-bytes', 'size-kilobytes', 'size-megabytes', 'size-gigabytes' ]; 4 | 5 | uw.units = { 6 | /** 7 | * Format a size in bytes for output, using an appropriate 8 | * unit (bytes, K, MB, GB, or TB) according to the magnitude in question 9 | * 10 | * Units above K get 2 fixed decimal places. 11 | * 12 | * @param {number} size Number of bytes 13 | * @return {string} formatted size 14 | */ 15 | bytes: function ( size ) { 16 | let i = 0; 17 | while ( size >= 1024 && i < scaleMsgKeys.length - 1 ) { 18 | size /= 1024.0; 19 | i++; 20 | } 21 | // Messages are documented above (scaleMsgKeys) 22 | // eslint-disable-next-line mediawiki/msg-doc 23 | return mw.message( scaleMsgKeys[ i ], size.toFixed( i > 1 ? 2 : 0 ) ).text(); 24 | } 25 | }; 26 | 27 | }( mw.uploadWizard ) ); 28 | -------------------------------------------------------------------------------- /resources/uw/uw.base.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the MediaWiki extension UploadWizard. 3 | * 4 | * UploadWizard is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * UploadWizard is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with UploadWizard. If not, see . 16 | */ 17 | 18 | // create UploadWizard namespace 19 | mw.uploadWizard = {}; 20 | -------------------------------------------------------------------------------- /sql/abstractSchemaChanges/patch-uw_campaigns-cleanup.json: -------------------------------------------------------------------------------- 1 | { 2 | "comment": "Correct unsigned primary key and type of campaign_enabled column after abstract schema migration - T300181", 3 | "before": { 4 | "name": "uw_campaigns", 5 | "comment": "Upload wizard campaigns. This is *not* the primary storage for campaigns. Just stores a copy of information that is already present in the appropriate wikipages, for easier indexing / querying", 6 | "columns": [ 7 | { 8 | "name": "campaign_id", 9 | "type": "integer", 10 | "options": { "autoincrement": true, "notnull": true, "unsigned": true } 11 | }, 12 | { 13 | "name": "campaign_name", 14 | "type": "string", 15 | "options": { "length": 255, "notnull": true } 16 | }, 17 | { 18 | "name": "campaign_enabled", 19 | "type": "integer", 20 | "options": { "default": 0, "length": 1, "notnull": true } 21 | } 22 | ], 23 | "indexes": [ 24 | { 25 | "name": "uw_campaigns_name", 26 | "columns": [ "campaign_name" ], 27 | "unique": true 28 | }, 29 | { 30 | "name": "uw_campaigns_enabled", 31 | "columns": [ "campaign_enabled", "campaign_id" ], 32 | "unique": false 33 | } 34 | ], 35 | "pk": [ "campaign_id" ] 36 | }, 37 | "after": { 38 | "name": "uw_campaigns", 39 | "comment": "Upload wizard campaigns. This is *not* the primary storage for campaigns. Just stores a copy of information that is already present in the appropriate wikipages, for easier indexing / querying", 40 | "columns": [ 41 | { 42 | "name": "campaign_id", 43 | "type": "integer", 44 | "options": { "autoincrement": true, "notnull": true } 45 | }, 46 | { 47 | "name": "campaign_name", 48 | "type": "string", 49 | "options": { "length": 255, "notnull": true } 50 | }, 51 | { 52 | "name": "campaign_enabled", 53 | "type": "mwtinyint", 54 | "options": { "default": 0, "length": 1, "notnull": true } 55 | } 56 | ], 57 | "indexes": [ 58 | { 59 | "name": "uw_campaigns_name", 60 | "columns": [ "campaign_name" ], 61 | "unique": true 62 | }, 63 | { 64 | "name": "uw_campaigns_enabled", 65 | "comment": "Since we sort on campaign_id for pagination", 66 | "columns": [ "campaign_enabled", "campaign_id" ], 67 | "unique": false 68 | } 69 | ], 70 | "pk": [ "campaign_id" ] 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /sql/mysql/patch-uw_campaigns-cleanup.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: sql/abstractSchemaChanges/patch-uw_campaigns-cleanup.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/uw_campaigns 6 | CHANGE campaign_id campaign_id INT AUTO_INCREMENT NOT NULL, 7 | CHANGE campaign_enabled campaign_enabled TINYINT(1) DEFAULT 0 NOT NULL; -------------------------------------------------------------------------------- /sql/mysql/tables-generated.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: sql/tables.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/uw_campaigns ( 6 | campaign_id INT AUTO_INCREMENT NOT NULL, 7 | campaign_name VARCHAR(255) NOT NULL, 8 | campaign_enabled TINYINT(1) DEFAULT 0 NOT NULL, 9 | UNIQUE INDEX uw_campaigns_name (campaign_name), 10 | INDEX uw_campaigns_enabled (campaign_enabled, campaign_id), 11 | PRIMARY KEY(campaign_id) 12 | ) /*$wgDBTableOptions*/; 13 | -------------------------------------------------------------------------------- /sql/postgres/patch-uw_campaigns-cleanup.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: sql/abstractSchemaChanges/patch-uw_campaigns-cleanup.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE uw_campaigns ALTER campaign_enabled TYPE SMALLINT; 6 | ALTER TABLE uw_campaigns ALTER campaign_enabled 7 | SET DEFAULT 0; -------------------------------------------------------------------------------- /sql/postgres/tables-generated.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: sql/tables.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE uw_campaigns ( 6 | campaign_id SERIAL NOT NULL, 7 | campaign_name VARCHAR(255) NOT NULL, 8 | campaign_enabled SMALLINT DEFAULT 0 NOT NULL, 9 | PRIMARY KEY(campaign_id) 10 | ); 11 | 12 | CREATE UNIQUE INDEX uw_campaigns_name ON uw_campaigns (campaign_name); 13 | 14 | CREATE INDEX uw_campaigns_enabled ON uw_campaigns (campaign_enabled, campaign_id); 15 | -------------------------------------------------------------------------------- /sql/sqlite/patch-uw_campaigns-cleanup.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: sql/abstractSchemaChanges/patch-uw_campaigns-cleanup.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | DROP INDEX uw_campaigns_name; 6 | DROP INDEX uw_campaigns_enabled; 7 | CREATE TEMPORARY TABLE /*_*/__temp__uw_campaigns AS 8 | SELECT campaign_id, campaign_name, campaign_enabled 9 | FROM /*_*/uw_campaigns; 10 | DROP TABLE /*_*/uw_campaigns; 11 | CREATE TABLE /*_*/uw_campaigns ( campaign_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, campaign_name VARCHAR(255) NOT NULL, campaign_enabled SMALLINT DEFAULT 0 NOT NULL ); 12 | INSERT INTO /*_*/uw_campaigns ( campaign_id, campaign_name, campaign_enabled ) 13 | SELECT campaign_id, campaign_name, campaign_enabled 14 | FROM /*_*/__temp__uw_campaigns; 15 | DROP TABLE /*_*/__temp__uw_campaigns; 16 | CREATE UNIQUE INDEX uw_campaigns_name ON /*_*/uw_campaigns (campaign_name); 17 | CREATE INDEX uw_campaigns_enabled ON /*_*/uw_campaigns (campaign_enabled, campaign_id); -------------------------------------------------------------------------------- /sql/sqlite/tables-generated.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: sql/tables.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/uw_campaigns ( 6 | campaign_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 7 | campaign_name VARCHAR(255) NOT NULL, 8 | campaign_enabled SMALLINT DEFAULT 0 NOT NULL 9 | ); 10 | 11 | CREATE UNIQUE INDEX uw_campaigns_name ON /*_*/uw_campaigns (campaign_name); 12 | 13 | CREATE INDEX uw_campaigns_enabled ON /*_*/uw_campaigns (campaign_enabled, campaign_id); 14 | -------------------------------------------------------------------------------- /sql/tables.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "uw_campaigns", 4 | "comment": "Upload wizard campaigns. This is *not* the primary storage for campaigns. Just stores a copy of information that is already present in the appropriate wikipages, for easier indexing / querying", 5 | "columns": [ 6 | { 7 | "name": "campaign_id", 8 | "type": "integer", 9 | "options": { "autoincrement": true, "notnull": true } 10 | }, 11 | { 12 | "name": "campaign_name", 13 | "type": "string", 14 | "options": { "length": 255, "notnull": true } 15 | }, 16 | { 17 | "name": "campaign_enabled", 18 | "type": "mwtinyint", 19 | "options": { "default": 0, "length": 1, "notnull": true } 20 | } 21 | ], 22 | "indexes": [ 23 | { 24 | "name": "uw_campaigns_name", 25 | "columns": [ "campaign_name" ], 26 | "unique": true 27 | }, 28 | { 29 | "name": "uw_campaigns_enabled", 30 | "comment": "Since we sort on campaign_id for pagination", 31 | "columns": [ "campaign_enabled", "campaign_id" ], 32 | "unique": false 33 | } 34 | ], 35 | "pk": [ "campaign_id" ] 36 | } 37 | ] 38 | -------------------------------------------------------------------------------- /tests/api/requirements.txt: -------------------------------------------------------------------------------- 1 | wikitools>=1.1 2 | poster>=0.8 3 | http://effbot.org/media/downloads/PIL-1.1.7.tar.gz#egg=PIL 4 | -------------------------------------------------------------------------------- /tests/api/test-image-rosa-mx-15x15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-UploadWizard/1c37ea6f577a07559a1f9382bd2be902449c1bd2/tests/api/test-image-rosa-mx-15x15.png -------------------------------------------------------------------------------- /tests/phpunit/SpecialUploadWizardTest.php: -------------------------------------------------------------------------------- 1 | getServiceContainer()->getUserOptionsLookup(); 20 | return new SpecialUploadWizard( $userOptionsLookup ); 21 | } 22 | 23 | /** 24 | * @covers \MediaWiki\Extension\UploadWizard\Specials\SpecialUploadWizard::isUserUploadAllowed 25 | * @dataProvider provideIsUserUploadAllowedForBlockedUser 26 | * @param bool $sitewide The block is a sitewide block 27 | * @param bool $expectException A UserBlockedError is expected 28 | */ 29 | public function testIsUserUploadAllowedForBlockedUser( $sitewide, $expectException ) { 30 | $this->overrideConfigValues( [ 31 | MainConfigNames::BlockDisablesLogin => false, 32 | MainConfigNames::EnableUploads => true, 33 | ] ); 34 | 35 | $user = $this->getTestUser()->getUser(); 36 | $this->getServiceContainer() 37 | ->getDatabaseBlockStore() 38 | ->insertBlockWithParams( [ 39 | 'targetUser' => $user, 40 | 'by' => $this->getTestSysop()->getUser(), 41 | 'expiry' => 'infinite', 42 | 'sitewide' => $sitewide, 43 | ] ); 44 | 45 | $caughtException = false; 46 | try { 47 | $this->executeSpecialPage( '', null, null, $user ); 48 | } catch ( UserBlockedError $e ) { 49 | $caughtException = true; 50 | } 51 | 52 | $this->assertSame( $expectException, $caughtException ); 53 | } 54 | 55 | public static function provideIsUserUploadAllowedForBlockedUser() { 56 | return [ 57 | 'User with sitewide block is blocked from uploading' => [ true, true ], 58 | 'User with partial block is allowed to upload' => [ false, false ], 59 | ]; 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /tests/qunit/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "../../resources/.eslintrc.json", 5 | "wikimedia/mediawiki/qunit" 6 | ], 7 | "rules": { 8 | "qunit/no-loose-assertions": "warn", 9 | "no-jquery/no-done-fail": "warn" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /tests/qunit/controller/uw.controller.Deed.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the MediaWiki extension DeedWizard. 3 | * 4 | * DeedWizard is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * DeedWizard is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with DeedWizard. If not, see . 16 | */ 17 | 18 | ( function ( uw ) { 19 | QUnit.module( 'mw.uploadWizard.controller.Deed', QUnit.newMwEnvironment() ); 20 | 21 | QUnit.test( 'Constructor sanity test', ( assert ) => { 22 | const step = new uw.controller.Deed(); 23 | assert.true( step instanceof uw.controller.Step ); 24 | assert.true( !!step.ui ); 25 | } ); 26 | 27 | QUnit.test( 'load', function ( assert ) { 28 | const step = new uw.controller.Deed( 29 | new mw.Api(), 30 | { licensing: { thirdParty: { type: 'test', licenses: [] } } } 31 | ), 32 | ststub = this.sandbox.stub().returns( $.Deferred().promise() ), 33 | uploads = [ 34 | { 35 | file: { fromURL: true }, 36 | getThumbnail: ststub, 37 | on: function () {}, 38 | title: mw.Title.newFromText( 'Test1.jpg', 6 ), 39 | getFilename: function () { 40 | return 'Test1.jpg'; 41 | } 42 | }, 43 | { 44 | file: {}, 45 | getThumbnail: ststub, 46 | on: function () {}, 47 | title: mw.Title.newFromText( 'Test2.jpg', 6 ), 48 | getFilename: function () { 49 | return 'Test2.jpg'; 50 | } 51 | }, 52 | { 53 | file: { fromURL: true }, 54 | getThumbnail: ststub, 55 | on: function () {}, 56 | title: mw.Title.newFromText( 'Test3.jpg', 6 ), 57 | getFilename: function () { 58 | return 'Test3.jpg'; 59 | } 60 | }, 61 | { 62 | file: {}, 63 | getThumbnail: ststub, 64 | on: function () {}, 65 | title: mw.Title.newFromText( 'Test4.jpg', 6 ), 66 | getFilename: function () { 67 | return 'Test4.jpg'; 68 | } 69 | } 70 | ]; 71 | 72 | step.load( uploads ); 73 | 74 | assert.strictEqual( ststub.callCount, 2 ); 75 | } ); 76 | }( mw.uploadWizard ) ); 77 | -------------------------------------------------------------------------------- /tests/qunit/controller/uw.controller.Step.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the MediaWiki extension DeedWizard. 3 | * 4 | * DeedWizard is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * DeedWizard is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with DeedWizard. If not, see . 16 | */ 17 | 18 | ( function ( uw ) { 19 | QUnit.module( 'mw.uploadWizard.controller.Step', QUnit.newMwEnvironment() ); 20 | 21 | QUnit.test( 'Constructor sanity test', ( assert ) => { 22 | const step = new uw.controller.Step( { on: function () {} }, new mw.Api(), {} ); 23 | assert.true( !!step ); 24 | assert.true( !!step.ui ); 25 | } ); 26 | 27 | }( mw.uploadWizard ) ); 28 | -------------------------------------------------------------------------------- /tests/qunit/controller/uw.controller.Tutorial.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the MediaWiki extension UploadWizard. 3 | * 4 | * UploadWizard is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * UploadWizard is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with UploadWizard. If not, see . 16 | */ 17 | 18 | ( function ( uw ) { 19 | QUnit.module( 'mw.uploadWizard.controller.Tutorial', QUnit.newMwEnvironment() ); 20 | 21 | QUnit.test( 'Constructor sanity test', ( assert ) => { 22 | const step = new uw.controller.Tutorial( new mw.Api() ); 23 | assert.true( step instanceof uw.controller.Step ); 24 | assert.true( !!step.ui ); 25 | assert.true( !!step.api ); 26 | } ); 27 | 28 | QUnit.test( 'setSkipPreference', function ( assert ) { 29 | const acwStub = { release: this.sandbox.stub() }; 30 | let api = new mw.Api(), 31 | step = new uw.controller.Tutorial( api ), 32 | pwtd = $.Deferred(); 33 | 34 | this.sandbox.stub( mw, 'confirmCloseWindow' ).returns( acwStub ); 35 | this.sandbox.stub( api, 'postWithToken' ).returns( pwtd.promise() ); 36 | 37 | step.setSkipPreference( true ); 38 | 39 | assert.true( mw.confirmCloseWindow.called ); 40 | assert.true( api.postWithToken.calledWithExactly( 'options', { 41 | action: 'options', 42 | change: 'upwiz_skiptutorial=1' 43 | } ) ); 44 | 45 | pwtd.resolve(); 46 | assert.true( acwStub.release.called ); 47 | 48 | api = new mw.Api(); 49 | step = new uw.controller.Tutorial( api ); 50 | acwStub.release.reset(); 51 | pwtd = $.Deferred(); 52 | const mnStub = this.sandbox.stub( mw, 'notify' ); 53 | 54 | this.sandbox.stub( api, 'postWithToken' ).returns( pwtd.promise() ); 55 | 56 | step.setSkipPreference( true ); 57 | assert.false( acwStub.release.called ); 58 | 59 | pwtd.reject( 'http', { textStatus: 'Foo bar' } ); 60 | assert.true( mnStub.calledWith( 'Foo bar' ) ); 61 | } ); 62 | }( mw.uploadWizard ) ); 63 | -------------------------------------------------------------------------------- /tests/qunit/details/uw.LocationDetailsWidget.test.js: -------------------------------------------------------------------------------- 1 | QUnit.module( 'mw.uploadWizard.LocationDetailsWidget' ); 2 | 3 | [ 4 | [ '', 0 ], 5 | [ '1', 1 ], 6 | [ ' -1,20° ', -1.2 ], 7 | [ '1.2 N', 1.2 ], 8 | [ '1.2 S', -1.2 ], 9 | [ '1.2 E', 1.2 ], 10 | [ '1.2 W', -1.2 ], 11 | [ '-1.2 W', 1.2 ], 12 | [ '3° 12.75\'', 3.2125 ], 13 | [ '3° 12\' 45"', 3.2125 ], 14 | [ '3° 12\' 100"', NaN ], 15 | [ '3° 100\' 45"', NaN ], 16 | [ '1000° 12\' 45"', NaN ], 17 | [ '0 1 2 3', 123 ], 18 | [ '1 2 3 4', NaN ], 19 | [ '3° 12\' 45" N 1° 00\' 00" E', NaN ], 20 | [ '1.2.3', NaN ] 21 | ].forEach( ( testCase ) => { 22 | const input = testCase[ 0 ], 23 | expected = testCase[ 1 ]; 24 | QUnit.test( 'normalizeCoordinate( \'' + input + '\' )', ( assert ) => { 25 | const result = mw.uploadWizard.LocationDetailsWidget.prototype.normalizeCoordinate( input ); 26 | assert.true( isFinite( result ) === isFinite( expected ) ); 27 | if ( isFinite( expected ) ) { 28 | assert.strictEqual( result, expected ); 29 | } 30 | } ); 31 | } ); 32 | -------------------------------------------------------------------------------- /tests/qunit/mw.UploadWizardLicenseInput.test.js: -------------------------------------------------------------------------------- 1 | QUnit.module( 'ext.uploadWizardLicenseInput', QUnit.newMwEnvironment( { 2 | beforeEach: function () { 3 | mw.UploadWizard.config = { 4 | licenses: { 5 | 'cc-by-sa-3.0': { 6 | msg: 'mwe-upwiz-license-cc-by-sa-3.0', 7 | icons: [ 'cc-by', 'cc-sa' ], 8 | url: '//creativecommons.org/licenses/by-sa/3.0/', 9 | languageCodePrefix: 'deed.', 10 | availableLanguages: [ 'ar', 'en', 'fr' ] 11 | } 12 | } 13 | }; 14 | } 15 | } ) ); 16 | 17 | QUnit.test( 'Smoke test', ( assert ) => { 18 | const config = { type: 'or', licenses: [] }; 19 | const $fixture = $( '
' ); 20 | const uwLicenseInput = new mw.UploadWizardLicenseInput( config ); 21 | $fixture.append( uwLicenseInput.$element ); 22 | assert.true( !!uwLicenseInput, 'LicenseInput object created !' ); 23 | } ); 24 | 25 | QUnit.test( 'createInputs()', ( assert ) => { 26 | const config = { type: 'or', licenses: [ 'cc-by-sa-3.0' ] }; 27 | const $fixture = $( '
' ); 28 | 29 | const uwLicenseInput = new mw.UploadWizardLicenseInput( config ); 30 | $fixture.append( uwLicenseInput.$element ); 31 | 32 | // Check radio button is there 33 | const $input = $fixture.find( '.oo-ui-radioInputWidget .oo-ui-inputWidget-input[value="cc-by-sa-3.0"]' ); 34 | assert.strictEqual( $input.length, 1, 'Radio button created.' ); 35 | 36 | // Check label is there 37 | const $label = $input.closest( '.oo-ui-radioOptionWidget' ).find( '.oo-ui-labelElement-label' ); 38 | assert.strictEqual( $label.length, 1, 'Label created.' ); 39 | } ); 40 | 41 | QUnit.test( 'createGroupedInputs()', ( assert ) => { 42 | const config = { 43 | type: 'or', 44 | defaults: [ 'cc-by-sa-3.0' ], 45 | licenseGroups: [ 46 | { 47 | head: 'mwe-upwiz-license-cc-head', 48 | subhead: 'mwe-upwiz-license-cc-subhead', 49 | licenses: [ 'cc-by-sa-3.0' ] 50 | } 51 | ] 52 | }; 53 | const $fixture = $( '
' ); 54 | 55 | const uwLicenseInput = new mw.UploadWizardLicenseInput( config ); 56 | uwLicenseInput.setDefaultValues(); 57 | $fixture.append( uwLicenseInput.$element ); 58 | 59 | // Check license group is there 60 | assert.strictEqual( $fixture.find( '.mwe-upwiz-deed-license-group' ).length, 1, 'License group created.' ); 61 | 62 | // Check subheader is there 63 | assert.strictEqual( $fixture.find( '.mwe-upwiz-deed-license-group-subhead' ).length, 1, 'License subheader created.' ); 64 | 65 | // Check license is there 66 | assert.strictEqual( $fixture.find( '.mwe-upwiz-deed-license-group .oo-ui-fieldsetLayout-group' ).length, 1, 'License created.' ); 67 | } ); 68 | -------------------------------------------------------------------------------- /tests/qunit/mw.UploadWizardUpload.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the MediaWiki extension UploadWizard. 3 | * 4 | * UploadWizard is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * UploadWizard is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with UploadWizard. If not, see . 16 | */ 17 | 18 | ( function () { 19 | QUnit.module( 'mw.UploadWizardUpload', QUnit.newMwEnvironment() ); 20 | 21 | function createUpload( filename ) { 22 | const oldconf = mw.UploadWizard.config; 23 | 24 | mw.UploadWizard.config = {}; 25 | 26 | const upload = new mw.UploadWizardUpload( { 27 | api: { 28 | defaults: { 29 | ajax: {} 30 | } 31 | } 32 | }, { 33 | name: filename 34 | } ); 35 | 36 | mw.UploadWizard.config = oldconf; 37 | 38 | return upload; 39 | } 40 | 41 | QUnit.test( 'constructor sanity test', ( assert ) => { 42 | const upload = createUpload(); 43 | 44 | assert.true( !!upload ); 45 | } ); 46 | 47 | QUnit.test( 'getBasename', ( assert ) => { 48 | let upload; 49 | 50 | upload = createUpload( 'path/to/filename.png' ); 51 | assert.strictEqual( upload.getBasename(), 'filename.png', 'Path is stripped' ); 52 | 53 | upload = createUpload( 'filename.png' ); 54 | assert.strictEqual( upload.getBasename(), 'filename.png', 'Only filename is left alone' ); 55 | 56 | upload = createUpload( '///////////' ); 57 | assert.strictEqual( upload.getBasename(), '', 'Nonsensical path is just removed' ); 58 | } ); 59 | }() ); 60 | -------------------------------------------------------------------------------- /tests/qunit/mw.fileApi.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the MediaWiki extension UploadWizard. 3 | * 4 | * UploadWizard is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * UploadWizard is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with UploadWizard. If not, see . 16 | */ 17 | 18 | ( function () { 19 | QUnit.module( 'mw.fileApi', QUnit.newMwEnvironment() ); 20 | 21 | QUnit.test( 'isPreviewableFile', function ( assert ) { 22 | const testFile = {}; 23 | 24 | testFile.type = 'image/png'; 25 | testFile.size = 5 * 1024 * 1024; 26 | assert.strictEqual( mw.fileApi.isPreviewableFile( testFile ), true ); 27 | 28 | testFile.type = 'image/gif'; 29 | assert.strictEqual( mw.fileApi.isPreviewableFile( testFile ), true ); 30 | 31 | testFile.type = 'image/jpeg'; 32 | assert.strictEqual( mw.fileApi.isPreviewableFile( testFile ), true ); 33 | 34 | testFile.size = 11 * 1024 * 1024; 35 | assert.strictEqual( mw.fileApi.isPreviewableFile( testFile ), false ); 36 | 37 | testFile.size = 5 * 1024 * 1024; 38 | testFile.type = 'unplayable/type'; 39 | assert.strictEqual( mw.fileApi.isPreviewableFile( testFile ), false ); 40 | 41 | this.sandbox.stub( mw.fileApi, 'isPreviewableVideo' ).returns( true ); 42 | assert.strictEqual( mw.fileApi.isPreviewableFile( testFile ), true ); 43 | } ); 44 | 45 | QUnit.test( 'isPreviewableVideo', function ( assert ) { 46 | const testFile = {}, 47 | fakeVideo = { 48 | canPlayType: this.sandbox.stub().returns( 'yes' ) 49 | }; 50 | 51 | this.sandbox.stub( document, 'createElement' ).returns( fakeVideo ); 52 | let result = mw.fileApi.isPreviewableVideo( testFile ); 53 | document.createElement.restore(); 54 | 55 | assert.strictEqual( result, true ); 56 | assert.strictEqual( fakeVideo.canPlayType.callCount, 1 ); 57 | 58 | fakeVideo.canPlayType = this.sandbox.stub().returns( 'no' ); 59 | this.sandbox.stub( document, 'createElement' ).returns( fakeVideo ); 60 | result = mw.fileApi.isPreviewableVideo( testFile ); 61 | document.createElement.restore(); 62 | 63 | assert.strictEqual( result, false ); 64 | assert.strictEqual( fakeVideo.canPlayType.callCount, 1 ); 65 | } ); 66 | 67 | }() ); 68 | --------------------------------------------------------------------------------