r83277 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r83276‎ | r83277 | r83278 >
Date:08:23, 5 March 2011
Author:skizzerz
Status:deferred (Comments)
Tags:
Comment:
* update Maintenance extension to 2.0.0
Modified paths:
  • /trunk/extensions/Maintenance/Maintenance.alias.php (modified) (history)
  • /trunk/extensions/Maintenance/Maintenance.i18n.php (modified) (history)
  • /trunk/extensions/Maintenance/Maintenance.php (modified) (history)
  • /trunk/extensions/Maintenance/Maintenance_body.php (modified) (history)
  • /trunk/extensions/Maintenance/metadata.ini (added) (history)

Diff [purge]

Index: trunk/extensions/Maintenance/Maintenance.alias.php
@@ -6,256 +6,232 @@
77 * @ingroup Extensions
88 */
99
10 -$specialPageAliases = array();
 10+$aliases = array();
1111
1212 /** English
1313 * @author Jon Harald Søby
1414 */
15 -$specialPageAliases['en'] = array(
16 - 'Maintenance' => array( 'Maintenance' ),
 15+$aliases['en'] = array(
 16+ 'Maintenance' => array( 'Maintenance' )
1717 );
1818
1919 /** Arabic (العربية) */
20 -$specialPageAliases['ar'] = array(
 20+$aliases['ar'] = array(
2121 'Maintenance' => array( 'صيانة' ),
2222 );
2323
2424 /** Egyptian Spoken Arabic (مصرى) */
25 -$specialPageAliases['arz'] = array(
 25+$aliases['arz'] = array(
2626 'Maintenance' => array( 'صيانه' ),
2727 );
2828
2929 /** Bulgarian (Български) */
30 -$specialPageAliases['bg'] = array(
 30+$aliases['bg'] = array(
3131 'Maintenance' => array( 'Поддръжка' ),
3232 );
3333
3434 /** Breton (Brezhoneg) */
35 -$specialPageAliases['br'] = array(
36 - 'Maintenance' => array( 'Trezalc\'h' ),
 35+$aliases['br'] = array(
 36+ 'Maintenance' => array( "Trezalc'h" ),
3737 );
3838
3939 /** Bosnian (Bosanski) */
40 -$specialPageAliases['bs'] = array(
 40+$aliases['bs'] = array(
4141 'Maintenance' => array( 'Odrzavanje' ),
4242 );
4343
4444 /** German (Deutsch) */
45 -$specialPageAliases['de'] = array(
 45+$aliases['de'] = array(
4646 'Maintenance' => array( 'Wartung' ),
4747 );
4848
4949 /** Lower Sorbian (Dolnoserbski) */
50 -$specialPageAliases['dsb'] = array(
 50+$aliases['dsb'] = array(
5151 'Maintenance' => array( 'Wótwardowanje' ),
5252 );
5353
5454 /** Spanish (Español) */
55 -$specialPageAliases['es'] = array(
 55+$aliases['es'] = array(
5656 'Maintenance' => array( 'Mantenimiento' ),
5757 );
5858
5959 /** Basque (Euskara) */
60 -$specialPageAliases['eu'] = array(
 60+$aliases['eu'] = array(
6161 'Maintenance' => array( 'Mantenimendua' ),
6262 );
6363
64 -/** Persian (فارسی) */
65 -$specialPageAliases['fa'] = array(
66 - 'Maintenance' => array( 'نگهداری' ),
67 -);
68 -
6964 /** Finnish (Suomi) */
70 -$specialPageAliases['fi'] = array(
 65+$aliases['fi'] = array(
7166 'Maintenance' => array( 'Ylläpito' ),
7267 );
7368
7469 /** Franco-Provençal (Arpetan) */
75 -$specialPageAliases['frp'] = array(
 70+$aliases['frp'] = array(
7671 'Maintenance' => array( 'Mantegnence' ),
7772 );
7873
7974 /** Galician (Galego) */
80 -$specialPageAliases['gl'] = array(
 75+$aliases['gl'] = array(
8176 'Maintenance' => array( 'Mantemento' ),
8277 );
8378
8479 /** Swiss German (Alemannisch) */
85 -$specialPageAliases['gsw'] = array(
 80+$aliases['gsw'] = array(
8681 'Maintenance' => array( 'Wartig' ),
8782 );
8883
8984 /** Hebrew (עברית) */
90 -$specialPageAliases['he'] = array(
 85+$aliases['he'] = array(
9186 'Maintenance' => array( 'תחזוקה' ),
9287 );
9388
9489 /** Croatian (Hrvatski) */
95 -$specialPageAliases['hr'] = array(
 90+$aliases['hr'] = array(
9691 'Maintenance' => array( 'Održavanje' ),
9792 );
9893
9994 /** Upper Sorbian (Hornjoserbsce) */
100 -$specialPageAliases['hsb'] = array(
 95+$aliases['hsb'] = array(
10196 'Maintenance' => array( 'Wothladowanje' ),
10297 );
10398
104 -/** Hungarian (Magyar) */
105 -$specialPageAliases['hu'] = array(
106 - 'Maintenance' => array( 'Karbantartás' ),
107 -);
108 -
10999 /** Interlingua (Interlingua) */
110 -$specialPageAliases['ia'] = array(
 100+$aliases['ia'] = array(
111101 'Maintenance' => array( 'Mantenentia' ),
112102 );
113103
114104 /** Indonesian (Bahasa Indonesia) */
115 -$specialPageAliases['id'] = array(
 105+$aliases['id'] = array(
116106 'Maintenance' => array( 'Pemeliharaan' ),
117107 );
118108
119109 /** Italian (Italiano) */
120 -$specialPageAliases['it'] = array(
 110+$aliases['it'] = array(
121111 'Maintenance' => array( 'Manutenzione' ),
122112 );
123113
124114 /** Japanese (日本語) */
125 -$specialPageAliases['ja'] = array(
 115+$aliases['ja'] = array(
126116 'Maintenance' => array( 'メンテナンス' ),
127117 );
128118
129119 /** Khmer (ភាសាខ្មែរ) */
130 -$specialPageAliases['km'] = array(
 120+$aliases['km'] = array(
131121 'Maintenance' => array( 'ការថែទាំ' ),
132122 );
133123
134124 /** Korean (한국어) */
135 -$specialPageAliases['ko'] = array(
 125+$aliases['ko'] = array(
136126 'Maintenance' => array( '정비' ),
137127 );
138128
139129 /** Colognian (Ripoarisch) */
140 -$specialPageAliases['ksh'] = array(
 130+$aliases['ksh'] = array(
141131 'Maintenance' => array( 'Waadung' ),
142132 );
143133
144 -/** Ladino (Ladino) */
145 -$specialPageAliases['lad'] = array(
146 - 'Maintenance' => array( 'Mantenimiento' ),
147 -);
148 -
149134 /** Luxembourgish (Lëtzebuergesch) */
150 -$specialPageAliases['lb'] = array(
 135+$aliases['lb'] = array(
151136 'Maintenance' => array( 'Ënnerhalt' ),
152137 );
153138
154139 /** Macedonian (Македонски) */
155 -$specialPageAliases['mk'] = array(
 140+$aliases['mk'] = array(
156141 'Maintenance' => array( 'Одржување' ),
157142 );
158143
159144 /** Malayalam (മലയാളം) */
160 -$specialPageAliases['ml'] = array(
 145+$aliases['ml'] = array(
161146 'Maintenance' => array( 'പരിപാലനം' ),
162147 );
163148
164149 /** Marathi (मराठी) */
165 -$specialPageAliases['mr'] = array(
 150+$aliases['mr'] = array(
166151 'Maintenance' => array( 'मेंटेननन्स' ),
167152 );
168153
169154 /** Maltese (Malti) */
170 -$specialPageAliases['mt'] = array(
 155+$aliases['mt'] = array(
171156 'Maintenance' => array( 'Manteniment' ),
172157 );
173158
174159 /** Nedersaksisch (Nedersaksisch) */
175 -$specialPageAliases['nds-nl'] = array(
 160+$aliases['nds-nl'] = array(
176161 'Maintenance' => array( 'Onderhoud' ),
177162 );
178163
179164 /** Dutch (Nederlands) */
180 -$specialPageAliases['nl'] = array(
 165+$aliases['nl'] = array(
181166 'Maintenance' => array( 'Onderhoud' ),
182167 );
183168
184169 /** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬) */
185 -$specialPageAliases['no'] = array(
 170+$aliases['no'] = array(
186171 'Maintenance' => array( 'Vedlikehold' ),
187172 );
188173
189 -/** Polish (Polski) */
190 -$specialPageAliases['pl'] = array(
191 - 'Maintenance' => array( 'Konserwacja' ),
192 -);
193 -
194174 /** Portuguese (Português) */
195 -$specialPageAliases['pt'] = array(
 175+$aliases['pt'] = array(
196176 'Maintenance' => array( 'Manutenção' ),
197177 );
198178
199179 /** Brazilian Portuguese (Português do Brasil) */
200 -$specialPageAliases['pt-br'] = array(
 180+$aliases['pt-br'] = array(
201181 'Maintenance' => array( 'Manutenção' ),
202182 );
203183
204184 /** Sanskrit (संस्कृत) */
205 -$specialPageAliases['sa'] = array(
 185+$aliases['sa'] = array(
206186 'Maintenance' => array( 'निर्वहण' ),
207187 );
208188
209189 /** Slovak (Slovenčina) */
210 -$specialPageAliases['sk'] = array(
 190+$aliases['sk'] = array(
211191 'Maintenance' => array( 'Údržba' ),
212192 );
213193
214194 /** Albanian (Shqip) */
215 -$specialPageAliases['sq'] = array(
 195+$aliases['sq'] = array(
216196 'Maintenance' => array( 'Mirëmbajtje' ),
217197 );
218198
219199 /** Swedish (Svenska) */
220 -$specialPageAliases['sv'] = array(
 200+$aliases['sv'] = array(
221201 'Maintenance' => array( 'Underhåll' ),
222202 );
223203
224204 /** Swahili (Kiswahili) */
225 -$specialPageAliases['sw'] = array(
 205+$aliases['sw'] = array(
226206 'Maintenance' => array( 'Matengenezo' ),
227207 );
228208
229209 /** Thai (ไทย) */
230 -$specialPageAliases['th'] = array(
 210+$aliases['th'] = array(
231211 'Maintenance' => array( 'การบำรุงรักษา' ),
232212 );
233213
234214 /** Tagalog (Tagalog) */
235 -$specialPageAliases['tl'] = array(
 215+$aliases['tl'] = array(
236216 'Maintenance' => array( 'Pagpapanatili' ),
237217 );
238218
239219 /** Turkish (Türkçe) */
240 -$specialPageAliases['tr'] = array(
 220+$aliases['tr'] = array(
241221 'Maintenance' => array( 'Bakım' ),
242222 );
243223
244224 /** Vèneto (Vèneto) */
245 -$specialPageAliases['vec'] = array(
 225+$aliases['vec'] = array(
246226 'Maintenance' => array( 'Manutension' ),
247227 );
248228
249229 /** Simplified Chinese (‪中文(简体)‬) */
250 -$specialPageAliases['zh-hans'] = array(
 230+$aliases['zh-hans'] = array(
251231 'Maintenance' => array( '维护' ),
252232 );
253233
254234 /** Traditional Chinese (‪中文(繁體)‬) */
255 -$specialPageAliases['zh-hant'] = array(
 235+$aliases['zh-hant'] = array(
256236 'Maintenance' => array( '維護' ),
257237 );
258238
259 -/**
260 - * For backwards compatibility with MediaWiki 1.15 and earlier.
261 - */
262 -$aliases =& $specialPageAliases;
\ No newline at end of file
Index: trunk/extensions/Maintenance/Maintenance_body.php
@@ -5,12 +5,11 @@
66 }
77
88 class SpecialMaintenance extends SpecialPage {
9 - var $type = '';
10 - static $scripts = array(
11 - 'changePassword', 'createAndPromote', 'deleteBatch', 'deleteRevision',
12 - 'initEditCount', 'initStats', 'moveBatch', 'runJobs', 'showJobs', 'stats',
13 - 'sql', 'eval', 'reassignEdits',
14 - );
 9+ private $type = '';
 10+ private $metadata = array();
 11+ private $scripts = array();
 12+ private $loc = ''; //for temporary files
 13+ private $errmsg = false; //if this gets set, we halt execution and display this message
1514
1615 /**
1716 * Constructor
@@ -18,6 +17,9 @@
1918 public function __construct() {
2019 parent::__construct( 'Maintenance'/*class*/, 'maintenance'/*restriction*/ );
2120 }
 21+
 22+ public function getType() { return $this->type; }
 23+ public function getMetadata() { return $this->metadata; }
2224
2325 /**
2426 * Show the special page
@@ -44,9 +46,19 @@
4547 $wgOut->permissionRequired( 'maintenance' );
4648 return;
4749 }
 50+
 51+ # Grab the ini file and validate it
 52+ $this->metadata = parse_ini_file( dirname( __FILE__ ) . '/metadata.ini', true );
 53+ $this->scripts = @array_keys( $this->metadata ); //suppress errors since metadata could be false if the metadata.ini file doesn't exist
 54+ $valid = $this->parseMetadata(); //parses the metadata ini and validates it
 55+ if( !$valid ) {
 56+ throw new ErrorPageError( 'error', 'maintenance-error-badini' );
 57+ return;
 58+ }
4859
4960 $this->type = $par ? $par : '';
50 - if( $this->type === '') {
 61+ $this->validateType(); //this checks to ensure $par is valid so we don't execute arbitrary code
 62+ if( $this->type === '' ) {
5163 $this->makeInitialForm();
5264 } elseif( $this->type !== '' && !$wgRequest->wasPosted() ) {
5365 $this->makeForm( $this->type );
@@ -54,19 +66,24 @@
5567 $this->executeScript( $this->type );
5668 }
5769 }
 70+
 71+ private function validateType() {
 72+ if( !in_array( $this->type, $this->scripts ) ) {
 73+ $this->errmsg = 'maintenance-error-invalidtype';
 74+ }
 75+ }
5876
59 - function makeInitialForm() {
 77+ private function makeInitialForm() {
6078 global $wgOut, $wgUser;
6179
62 - wfLoadExtensionMessages( 'Maintenance' );
6380 $this->setHeaders();
6481 $wgOut->addWikiMsg( 'maintenance-header' );
 82+
6583 $sk = $wgUser->getSkin();
6684 $wgOut->addHTML( '<ul>' );
6785
68 - //scripts that we allow to run via this interface. keep them to the same name as the xxx.php in the /maintenance dir
69 - //(minus the .php part... duh)
70 - $scripts = self::$scripts;
 86+ //scripts that we allow to run via this interface, from the metadata.ini file
 87+ $scripts = $this->scripts;
7188 sort( $scripts );
7289 foreach( $scripts as $type ) {
7390 $title = $this->getTitle( $type );
@@ -76,531 +93,548 @@
7794 $wgOut->addHTML( '</ul>' );
7895 }
7996
80 - function makeForm( $type ) {
 97+ private function makeForm( $type ) {
8198 global $wgOut, $wgUser;
82 - wfLoadExtensionMessages( 'Maintenance' );
 99+
83100 $this->setHeaders();
84101 $wgOut->addHTML( $wgUser->getSkin()->makeKnownLinkObj( $this->getTitle(), wfMsgHtml( 'maintenance-backlink' ) ). '<br />' );
85102
86 - if( !in_array( $type, self::$scripts ) ) {
87 - $wgOut->addWikiMsg( 'maintenance-invalidtype' );
 103+ if( $this->errmsg ) {
 104+ $wgOut->addWikiMsg( $this->errmsg );
88105 return;
89106 }
90107
91108 $wgOut->addWikiMsg( 'maintenance-' . $type );
92109
93110 $wgOut->addHTML( Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle( $type )->getFullURL() ) ) );
94 - switch( $type ) {
95 - case 'changePassword':
96 - $wgOut->addHTML( Xml::inputLabel( wfMsg( 'maintenance-name' ), 'wpName', 'wpName' ) . '<br /><br />' );
97 - $wgOut->addHTML( Xml::inputLabel( wfMsg( 'maintenance-password' ), 'wpPassword', 'wpPassword', false, false, array( 'type' => 'password' ) ) . '<br /><br />' );
98 - break;
99 - case 'createAndPromote':
100 - $wgOut->addHTML( Xml::inputLabel( wfMsg( 'maintenance-name' ), 'wpName', 'wpName' ) . '<br /><br />' );
101 - $wgOut->addHTML( Xml::inputLabel( wfMsg( 'maintenance-password' ), 'wpPassword', 'wpPassword', false, false, array( 'type' => 'password' ) ) . '<br /><br />' );
102 - $wgOut->addHTML( Xml::checkLabel( wfMsg('maintenance-bureaucrat'), 'wpBcrat', 'wpBcrat' ) . '<br /><br />' );
103 - break;
104 - case 'deleteBatch':
105 - $wgOut->addHTML('<textarea name="wpDelete" rows="25" cols="80"></textarea><br /><br />');
106 - $wgOut->addHTML( Xml::inputLabel( wfMsg( 'maintenance-reason' ), 'wpReason', 'wpReason', '60', false, array( 'maxlength' => 200 ) ) . '<br /><br />' );
107 - break;
108 - case 'deleteRevision':
109 - $wgOut->addHTML('<textarea name="wpDelete" rows="25" cols="80"></textarea><br /><br />');
110 - break;
111 - case 'eval':
112 - $wgOut->addHTML('<textarea name="wpCode" rows="25" cols="80"></textarea><br /><br />');
113 - break;
114 - case 'initEditCount':
115 - //just hit the button to start this, no additional settings are needed :)
116 - break;
117 - case 'initStats':
118 - $wgOut->addHTML( Xml::checkLabel( wfMsg( 'maintenance-update' ), 'wpUpdate', 'wpUpdate', true ) . '<br /><br />' );
119 - $wgOut->addHTML( Xml::checkLabel( wfMsg( 'maintenance-noviews' ), 'wpNoviews', 'wpNoviews' ) . '<br /><br />' );
120 - break;
121 - case 'moveBatch':
122 - $wgOut->addHTML('<textarea name="wpMove" rows="25" cols="80"></textarea><br /><br />');
123 - $wgOut->addHTML( Xml::inputLabel( wfMsg( 'maintenance-reason' ), 'wpReason', 'wpReason', '60', false, array( 'maxlength' => 200 ) ) . '<br /><br />' );
124 - break;
125 - case 'reassignEdits':
126 - $wgOut->addHTML( Xml::inputLabel( wfMsg( 'maintenance-re-from' ), 'wpFrom', 'wpFrom', '60' ) . '<br /><br />' );
127 - $wgOut->addHTML( Xml::inputLabel( wfMsg( 'maintenance-re-to' ), 'wpTo', 'wpTo', '60' ) . '<br /><br />' );
128 - $wgOut->addHTML( Xml::checkLabel( wfMsg( 'maintenance-re-force' ), 'wpForce', 'wpForce' ) . '<br /><br />' );
129 - $wgOut->addHTML( Xml::checkLabel( wfMsg( 'maintenance-re-rc' ), 'wpRc', 'wpRc' ) . '<br /><br />' );
130 - $wgOut->addHTML( Xml::checkLabel( wfMsg( 'maintenance-re-report' ), 'wpReport', 'wpReport' ) . '<br /><br />' );
131 - break;
132 - case 'runJobs':
133 - //just hit the button to start this, no additional settings are needed :)
134 - break;
135 - case 'showJobs':
136 - //just hit the button to start this, no additional settings are needed :)
137 - break;
138 - case 'stats':
139 - //just hit the button to start this, no additional settings are needed :)
140 - break;
141 - case 'sql':
142 - $wgOut->addHTML('<textarea name="wpQuery" rows="25" cols="80"></textarea><br /><br />');
143 - break;
144 - default:
145 - $wgOut->addHTML( '</form>' );
146 - $wgOut->addWikiMsg( 'maintenance-invalidtype' );
147 - return;
 111+ //build the form
 112+ $options = array_merge( $this->metadata[$type]['option'], $this->metadata[$type]['arg'] );
 113+ foreach( $options as $option ) {
 114+ switch( $option['type'] ) {
 115+ case 'check':
 116+ $wgOut->addHTML( Xml::checkLabel( wfMsg( "maintenance-$type-option-" . $option['name'] ), 'wp' . ucfirst( $option['name'] ), 'wp' . ucfirst( $option['name'] ), $option['default'] ) . '<br /><br />' );
 117+ break;
 118+ case 'input':
 119+ $wgOut->addHTML( Xml::inputLabel( wfMsg( "maintenance-$type-option-" . $option['name'] ), 'wp' . ucfirst( $option['name'] ), 'wp' . ucfirst( $option['name'] ), $option['size'], false, $option['attrib'] ) . '<br /><br />' );
 120+ break;
 121+ case 'password':
 122+ $wgOut->addHTML( Xml::inputLabel( wfMsg( "maintenance-$type-option-" . $option['name'] ), 'wp' . ucfirst( $option['name'] ), 'wp' . ucfirst( $option['name'] ), $option['size'], false, array( 'type' => 'password' ) + $option['attrib'] ) . '<br /><br />' );
 123+ break;
 124+ case 'textarea':
 125+ $wgOut->addHTML( wfMsg( "maintenance-$type-option-" . $option['name'] ) . '<textarea name="wp' . ucfirst( $option['name'] ) . '" rows="25" cols="80"></textarea><br /><br />');
 126+ break;
 127+ }
148128 }
149 - $wgOut->addHTML( Xml::submitButton( wfMsg( 'maintenance-confirm' ), array( 'name' => 'wpConfirm' ) ) . '</form>' );
 129+ $wgOut->addHTML( Xml::checkLabel( wfMsg( 'maintenance-option-quiet' ), 'wpQuiet', 'wpQuiet' ) . '<br /><br />' );
 130+ $wgOut->addHTML( Xml::checkLabel( wfMsg( 'maintenance-option-globals' ), 'wpGlobals', 'wpGlobals' ) . '<br /><br />' );
 131+ if( $this->metadata[$type]['batch'] ) {
 132+ $wgOut->addHTML( Xml::inputLabel( wfMsg( 'maintenance-option-batch-size', $this->metadata[$type]['batch'] ), 'wpBatch-size', 'wpBatch-size' ) . '<br /><br />' );
 133+ }
 134+ $wgOut->addHTML( Xml::submitButton( wfMsg( 'maintenance-option-confirm' ), array( 'name' => 'wpConfirm' ) ) . '</form>' );
150135 return;
151136 }
152137
153 - function executeScript( $type ) {
154 - global $wgOut, $wgRequest, $wgUser;
155 - wfLoadExtensionMessages('Maintenance');
156 - @set_time_limit(0); //if we can, disable the time limit
 138+ private function executeScript( $type ) {
 139+ global $wgOut, $wgRequest, $wgUser, $IP, $wgMaintenanceScripts;
 140+
157141 $this->setHeaders();
158142 $wgOut->addHTML( $wgUser->getSkin()->makeKnownLinkObj( $this->getTitle(), wfMsgHtml( 'maintenance-backlink' ) ). '<br />' );
 143+
 144+ if( $this->errmsg ) {
 145+ $wgOut->addWikiMsg( $this->errmsg );
 146+ return;
 147+ }
 148+
 149+ @set_time_limit( 0 ); //if we can, disable the time limit
 150+ @ini_set('memory_limit', '-1'); //also try to disable the memory limit
 151+ //run the script and capture output
 152+ define( 'MW_NO_SETUP', true ); //we use our own setup method to work with web requests
 153+ $maintClass = false; //initialize
 154+ //some scripts misbehave and use exit at the end, which messes us up. Let's fix those here
 155+ //(EPIC HAX MAGIC FOLLOWS)
 156+ $needhax = false;
159157 switch( $type ) {
160 - case 'changePassword':
161 - $name = $wgRequest->getText( 'wpName' );
162 - $password = $wgRequest->getText( 'wpPassword' );
163 - $user = User::newFromName( $name );
164 - if( !is_object( $user ) || !$user->getId() ) {
165 - $wgOut->addWikiMsg( 'maintenance-invalidname' );
 158+ case 'sql':
 159+ file_put_contents( $fname = tempnam( sys_get_temp_dir(), 'maintenance' ),
 160+ str_replace(
 161+ array( 'dirname( __FILE__ )' ), //search
 162+ array( '"$IP/maintenance"' ), //replace
 163+ preg_replace( '/\s+(exit|die)\s*\(.*?\)\s*;/', ';',
 164+ file_get_contents( "$IP/maintenance/sql.php" )
 165+ )
 166+ )
 167+ );
 168+ $needhax = true;
 169+ break;
 170+ }
 171+ if( $needhax ) {
 172+ require_once( $fname );
 173+ } elseif( file_exists( "$IP/maintenance/$type.php" ) ) {
 174+ require_once( "$IP/maintenance/$type.php" );
 175+ } else {
 176+ require_once( $wgMaintenanceScripts[$type] );
 177+ }
 178+
 179+ //epic hax magic (TODO: figure out a way to do this without using eval, might require core changes)
 180+ eval( 'class WebMaintenanceHack extends ' . $maintClass . ' {
 181+ public $mSpecialMaintenance; //our SpecialMaintenance object
 182+ protected $atLineStart = true;
 183+ protected $lastChannel = null;
 184+
 185+ public function setSpecialMaintenance( &$abj ) {
 186+ $this->mSpecialMaintenance = &$abj;
 187+ }
 188+
 189+ protected function output( $out, $channel = null ) {
 190+ if ( $this->mQuiet ) {
166191 return;
167192 }
168 - $dbw = wfGetDB( DB_MASTER );
169 -
170 - $user->setPassword( $password );
171 - $user->saveSettings();
172 - $wgOut->addWikiMsg( 'maintenance-success', $type );
173 - break;
174 - case 'createAndPromote':
175 - $name = $wgRequest->getText( 'wpName' );
176 - $password = $wgRequest->getText( 'wpPassword' );
177 - $bcrat = $wgRequest->getCheck( 'wpBcrat' );
178 - $user = User::newFromName( $name );
179 - if( !is_object( $user ) ) {
180 - $wgOut->addWikiMsg( 'maintenance-invalidname' );
 193+ if ( $channel === null ) {
 194+ $this->cleanupChanneled();
 195+ $this->outputChanneled( $out );
 196+ } else {
 197+ $out = preg_replace( \'/\n\z/\', \'\', $out );
 198+ $this->outputChanneled( $out, $channel );
 199+ }
 200+ }
 201+
 202+ public function cleanupChanneled() {
 203+ global $wgOut;
 204+ if ( !$this->atLineStart ) {
 205+ $wgOut->addHTML( "\n" );
 206+ $this->atLineStart = true;
 207+ }
 208+ }
 209+
 210+ public function outputChanneled( $msg, $channel = null ) {
 211+ global $wgOut;
 212+
 213+ if ( $msg === false ) {
 214+ // For cleanup
 215+ $this->cleanupChanneled();
181216 return;
182 - } elseif( 0 != $user->idForName() ) {
183 - $wgOut->addWikiMsg( 'maintenance-userexists' );
184 - return;
185217 }
186 - $user->addToDatabase();
187 - $user->setPassword( $password );
188 - $user->saveSettings();
189 - $user->addGroup( 'sysop');
190 - if( $bcrat )
191 - $user->addGroup( 'bureaucrat' );
192 - $ssu = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
193 - $ssu->doUpdate();
194 - $wgOut->addWikiMsg( 'maintenance-success', $type );
195 - break;
196 - case 'deleteBatch':
197 - $reason = $wgRequest->getText( 'wpReason', '' );
198 - $interval = 0;
199 - $pages = $wgRequest->getText( 'wpDelete' );
200 - $dbw = wfGetDB( DB_MASTER );
201 - $lines = explode( "\n", $pages );
202 - foreach( $lines as &$line ) {
203 - $line = trim( $line );
204 - if( $line == '' )
205 - continue;
206 - $page = Title::newFromText( $line );
207 - if( is_null( $page ) ) {
208 - $wgOut->addWikiMsg( 'maintenance-invalidtitle', $line );
209 - continue;
 218+
 219+ // End the current line if necessary
 220+ if ( !$this->atLineStart && $channel !== $this->lastChannel ) {
 221+ $wgOut->addHTML( "\n" );
 222+ }
 223+
 224+ //look up $msg for l10n, treat as plaintext
 225+ $this->output_i18n( $msg, "output" );
 226+
 227+ $this->atLineStart = false;
 228+ if ( $channel === null ) {
 229+ // For unchanneled messages, output trailing newline immediately
 230+ $wgOut->addHTML( "\n" );
 231+ $this->atLineStart = true;
 232+ }
 233+ $this->lastChannel = $channel;
 234+ }
 235+
 236+ protected function error( $err, $die = false ) {
 237+ $this->outputChanneled( false );
 238+
 239+ //look up $err for l10n, treat as plaintext
 240+ $this->output_i18n( $err, "error" );
 241+
 242+ if( $die ) throw new SpecialMaintenanceException();
 243+ }
 244+
 245+ //$type is either "output" or "error"
 246+ private function output_i18n( $msg, $type ) {
 247+ global $wgOut;
 248+
 249+ $found = false;
 250+ $metadata = $this->mSpecialMaintenance->getMetadata();
 251+ $script = $this->mSpecialMaintenance->getType();
 252+ foreach( $metadata[$script][$type] as $a ) {
 253+ if( $a["type"] == "string" ) {
 254+ if( trim( $msg ) == $a["match"] ) {
 255+ $wgOut->addHTML( wfMsgExt( "maintenance-$script-$type-" . $a["name"], array( "escape" ) ) );
 256+ if( $type == "error" ) {
 257+ $wgOut->addHTML( "\n" );
 258+ }
 259+ $found = true;
 260+ break;
 261+ }
 262+ } elseif( $a["type"] == "regex" ) {
 263+ $matches = array();
 264+ if( preg_match( "/^" . $a["match"] . "\$/", trim( $msg ), $matches ) ) {
 265+ //$matches contains the respective $1, $2, $3, $4, etc. in order once we take out the first match
 266+ array_shift( $matches );
 267+ $wgOut->addHTML( wfMsgExt( "maintenance-$script-$type-" . $a["name"], array( "escape" ), $matches ) );
 268+ if( $type == "error" ) {
 269+ $wgOut->addHTML( "\n" );
 270+ }
 271+ $found = true;
 272+ break;
 273+ }
210274 }
211 - if( !$page->exists() ) {
212 - $wgOut->addWikiMsg( 'maintenance-titlenoexist', $line );
213 - continue;
 275+ }
 276+ //not found, so just output it raw
 277+ if( !$found ) {
 278+ $wgOut->addHTML( htmlspecialchars( $msg ) );
 279+ if( $type == "error" ) {
 280+ $wgOut->addHTML( "\n" );
214281 }
215 - $return = '* ' . $page->getPrefixedText();
216 - // Switch the user here from the current user to Delete page script
217 - $OldUser = $wgUser;
218 - $wgUser = User::newFromName( 'Delete page script' );
219 - // Begin transaction
220 - $dbw->begin();
221 - if( $page->getNamespace() == NS_IMAGE ) {
222 - $art = new ImagePage( $page );
223 - $img = wfFindFile( $art->mTitle );
224 - if( !$img || !$img->delete( $reason ) ) {
225 - $return .= '... ' . wfMsg('maintenance-failed');
226 - }
227 - } else {
228 - $art = new Article( $page );
 282+ }
 283+ }
 284+
 285+ protected function validateParamsAndArgs() {
 286+ $die = false;
 287+
 288+ foreach( $this->mParams as $opt => $info ) {
 289+ if( $info["require"] && !$this->hasOption( $opt ) ) {
 290+ $die = true;
229291 }
230 - $success = $art->doDeleteArticle( $reason );
231 - // Commit changes to the database
232 - $dbw->commit();
233 - // ...and switch user back to the old user
234 - $wgUser = $OldUser;
235 - if ( $success ) {
236 - $return .= '... ' . wfMsg( 'maintenance-deleted' );
237 - } else {
238 - $return .= '... ' . wfMsg( 'maintenance-failed' );
239 - }
240 - $wgOut->addWikiText( $return );
241 - waitForSlaves( 5 );
242292 }
243 - $wgOut->addWikiMsg( 'maintenance-success', $type );
244 - break;
245 - case 'deleteRevision':
246 - $delete = $wgRequest->getText( 'wpDelete' );
247 - $revisions = explode( "\n", $delete );
248 - $wgOut->addWikiMsg( 'maintenance-revdelete', implode( ', ', $revisions ), wfWikiID(), count( $revisions ) );
249 - $affected = 0;
250 - // Switch the user here from the current user to Delete page script
251 - $OldUser = $wgUser;
252 - $wgUser = User::newFromName( 'Delete page script' );
253 - $dbw = wfGetDB( DB_MASTER );
254 - foreach ( $revisions as $revID ) {
255 - $dbw->insertSelect( 'archive', array( 'page', 'revision' ),
256 - array(
257 - 'ar_namespace' => 'page_namespace',
258 - 'ar_title' => 'page_title',
259 - 'ar_comment' => 'rev_comment',
260 - 'ar_user' => 'rev_user',
261 - 'ar_user_text' => 'rev_user_text',
262 - 'ar_timestamp' => 'rev_timestamp',
263 - 'ar_minor_edit' => 'rev_minor_edit',
264 - 'ar_rev_id' => 'rev_id',
265 - 'ar_text_id' => 'rev_text_id',
266 - ), array(
267 - 'rev_id' => $revID,
268 - 'page_id = rev_page'
269 - ), __METHOD__
270 - );
271 - if ( !$dbw->affectedRows() ) {
272 - $wgOut->addWikiMsg( 'maintenance-revnotfound', array( $revID ) );
273 - } else {
274 - $affected += $dbw->affectedRows();
275 - $dbw->delete( 'revision', array( 'rev_id' => $revID ) );
 293+ # Check arg list too
 294+ foreach( $this->mArgList as $k => $info ) {
 295+ if( $info["require"] && !$this->hasArg($k) ) {
 296+ $die = true;
276297 }
277298 }
278 - // ...and switch user back to the old user
279 - $wgUser = $OldUser;
280 - $wgOut->addWikiMsg( 'maintenance-success', $type );
281 - break;
282 - case 'eval':
283 - $temp = error_reporting( E_ALL );
284 - ob_start();
285 - $str = eval( $wgRequest->getText( 'wpCode', 'return;' ) );
286 - $ext = ob_get_clean();
287 - error_reporting( 0 );
288 - if( $ext ) {
289 - $wgOut->addHTML( nl2br($ext) . '<hr />' );
 299+
 300+ return $die;
 301+ }
 302+
 303+ public function doValidateParamsAndArgs() {
 304+ return $this->validateParamsAndArgs();
 305+ }
 306+
 307+ public function globals() {
 308+ if( $this->hasOption( "globals" ) ) {
 309+ global $wgOut;
 310+ $wgOut->addHTML( htmlspecialchars( print_r( $GLOBALS, true ) ) );
290311 }
291 - if( !$str ) {
292 - // do nothing
293 - } elseif( is_string( $str ) ) {
294 - $wgOut->addHTML( nl2br($str) . '<hr />' );
295 - } else {
296 - $wgOut->addHTML( nl2br( var_export( $str, true ) ) . '<hr />' );
 312+ }
 313+
 314+ public function memoryLimit() {
 315+ return -1;
 316+ }
 317+
 318+ }' );
 319+
 320+ //run the script, throwing output into a <pre> block
 321+ $wgOut->addHTML( '<pre>' );
 322+ $script = new WebMaintenanceHack();
 323+ $script->setSpecialMaintenance( $this );
 324+ $res = $this->setup( $script );
 325+ if( !$res ) {
 326+ return;
 327+ }
 328+ try {
 329+ $script->execute();
 330+ if( $needhax ) {
 331+ unlink( $fname );
 332+ }
 333+ $script->globals();
 334+ $wgOut->addHTML( wfMsgExt( 'maintenance-output-success', array( 'escape' ), $this->type ) . "\n" );
 335+ } catch( SpecialMaintenanceException $e ) {
 336+ $wgOut->addHTML( wfMsgExt( 'maintenance-output-failure', array( 'escape' ), $this->type ) . "\n" );
 337+ } catch( MWException $mwe ) {
 338+ $wgOut->addHTML( htmlspecialchars( $mwe->getText() ) . "\n" );
 339+ $wgOut->addHTML( wfMsgExt( 'maintenance-output-failure', array( 'escape' ), $this->type ) . "\n" );
 340+ }
 341+ $wgOut->addHTML( '</pre>' );
 342+ $this->scriptDone( $script );
 343+ $wgOut->addHTML( $wgUser->getSkin()->makeKnownLinkObj( $this->getTitle(), wfMsgHtml( 'maintenance-backlink' ) ). '<br />' );
 344+ }
 345+
 346+ private function parseMetadata() {
 347+ global $IP, $wgMaintenanceScripts;
 348+ $metadata = $this->metadata;
 349+ $i = -1;
 350+ foreach( $metadata as $script => &$stuff ) {
 351+ //increment $i, which is the index of the $this->scripts array
 352+ $i++;
 353+
 354+ //is the script disabled for whatever reason?
 355+ if( isset( $stuff['enabled'] ) && !$stuff['enabled'] ) {
 356+ unset( $this->scripts[$i] ); //remove it from the list of scripts
 357+ continue;
 358+ }
 359+
 360+ //make sure that the script exists
 361+ if( !file_exists( "$IP/maintenance/$script.php" ) && !array_key_exists( $script, $wgMaintenanceScripts ) ) {
 362+ return false;
 363+ }
 364+
 365+ //parse options
 366+ if( !isset( $stuff['option'] ) ) {
 367+ $stuff['option'] = array();
 368+ } elseif( !is_array( $stuff['option'] ) ) {
 369+ $stuff['option'] = array( $stuff['option'] );
 370+ }
 371+ foreach( $stuff['option'] as &$option ) {
 372+ $name = strtok( $option, ' ' );
 373+ if( !preg_match( '/^[a-z0-9-]+$/i', $name ) ) {
 374+ return false;
297375 }
298 - $wgOut->addWikiMsg( 'maintenance-success', $type );
299 - break;
300 - case 'initEditCount':
301 - $dbw = wfGetDB( DB_MASTER );
302 - $user = $dbw->tableName( 'user' );
303 - $revision = $dbw->tableName( 'revision' );
304 - $dbver = $dbw->getServerVersion();
305 - $dbr = wfGetDB( DB_SLAVE );
306 - $chunkSize = 100;
307 - $lastUser = $dbr->selectField( 'user', 'MAX(user_id)', '', __FUNCTION__ );
308 - $start = microtime( true );
309 - $migrated = 0;
310 - for( $min = 0; $min <= $lastUser; $min += $chunkSize ) {
311 - $max = $min + $chunkSize;
312 - $result = $dbr->query(
313 - "SELECT
314 - user_id,
315 - COUNT(rev_user) AS user_editcount
316 - FROM $user
317 - LEFT OUTER JOIN $revision ON user_id=rev_user
318 - WHERE user_id > $min AND user_id <= $max
319 - GROUP BY user_id",
320 - 'initEditCount' );
321 - while( $row = $dbr->fetchObject( $result ) ) {
322 - $dbw->update( 'user',
323 - array( 'user_editcount' => $row->user_editcount ),
324 - array( 'user_id' => $row->user_id ),
325 - 'initEditCount' );
326 - ++$migrated;
327 - }
328 - $dbr->freeResult( $result );
329 - waitForSlaves( 10 );
 376+ $type = strtok( ' ' );
 377+ if( !in_array( $type, array( 'check', 'input', 'password', 'textarea' ) ) ) {
 378+ return false;
330379 }
331 - $wgOut->addWikiMsg( 'maintenance-success', $type );
332 - break;
333 - case 'initStats':
334 - $dbr = wfGetDB( DB_SLAVE );
335 - $edits = $dbr->selectField( 'revision', 'COUNT(*)', '', __METHOD__ );
336 - $edits += $dbr->selectField( 'archive', 'COUNT(*)', '', __METHOD__ );
337 - $wgOut->addWikiMsg( 'maintenance-stats-edits', $edits );
338 - global $wgContentNamespaces;
339 - $good = $dbr->selectField( 'page', 'COUNT(*)', array( 'page_namespace' => $wgContentNamespaces, 'page_is_redirect' => 0, 'page_len > 0' ), __METHOD__ );
340 - $wgOut->addWikiMsg( 'maintenance-stats-articles', $good );
341 - $pages = $dbr->selectField( 'page', 'COUNT(*)', '', __METHOD__ );
342 - $wgOut->addWikiMsg( 'maintenance-stats-pages', $pages );
343 - $users = $dbr->selectField( 'user', 'COUNT(*)', '', __METHOD__ );
344 - $wgOut->addWikiMsg( 'maintenance-stats-users', $users );
345 - $admin = $dbr->selectField( 'user_groups', 'COUNT(*)', array( 'ug_group' => 'sysop' ), __METHOD__ );
346 - $wgOut->addWikiMsg( 'maintenance-stats-admins', $admin );
347 - $image = $dbr->selectField( 'image', 'COUNT(*)', '', __METHOD__ );
348 - $wgOut->addWikiMsg( 'maintenance-stats-images', $image );
349 - if( !$wgRequest->getCheck('wpNoview') ) {
350 - $views = $dbr->selectField( 'page', 'SUM(page_counter)', '', __METHOD__ );
351 - $wgOut->addWikiMsg( 'maintenance-stats-views', $views );
352 - }
353 - $wgOut->addWikiMsg('maintenance-stats-update');
354 - $dbw = wfGetDB( DB_MASTER );
355 - $values = array( 'ss_total_edits' => $edits,
356 - 'ss_good_articles' => $good,
357 - 'ss_total_pages' => $pages,
358 - 'ss_users' => $users,
359 - 'ss_admins' => $admin,
360 - 'ss_images' => $image );
361 - $conds = array( 'ss_row_id' => 1 );
362 - $views = array( 'ss_total_views' => isset( $views ) ? $views : 0 );
363 -
364 - if( $wgRequest->getCheck('wpUpdate') ) {
365 - $dbw->update( 'site_stats', $values, $conds, __METHOD__ );
366 - } else {
367 - $dbw->delete( 'site_stats', $conds, __METHOD__ );
368 - $dbw->insert( 'site_stats', array_merge( $values, $conds, $views ), __METHOD__ );
369 - }
370 - $wgOut->addWikiMsg( 'maintenance-success', $type );
371 - break;
372 - case 'moveBatch':
373 - $reason = $wgRequest->getText('wpReason', '');
374 - $interval = 0;
375 - $pages = $wgRequest->getText('wpMove');
376 - $dbw = wfGetDB( DB_MASTER );
377 - $lines = explode( "\n", $pages );
378 - foreach( $lines as $line ) {
379 - $parts = array_map( 'trim', explode( '|', $line ) );
380 - if ( count( $parts ) != 2 ) {
381 - continue;
 380+ if( $type == 'check' ) {
 381+ $default = strtok( ' ' ); //if it's missing, it's automatically false due to how strtok works
 382+ $option = array();
 383+ $option['default'] = $default;
 384+ } elseif( $type == 'input' || $type == 'password' ) {
 385+ $size = strtok( ' ' ); //integer size or false
 386+ if( $size !== false && !ctype_digit( $size ) ) {
 387+ return false;
382388 }
383 - $source = Title::newFromText( $parts[0] );
384 - $dest = Title::newFromText( $parts[1] );
385 - if ( is_null( $source ) || is_null( $dest ) ) {
386 - continue;
 389+ //rest are attributes, we just ignore poorly-formatted ones here instead of rejecting the entire file
 390+ $attrib = array();
 391+ while( ( $attr = strtok( ' ' ) ) !== false ) {
 392+ $bits = explode( '=', $attr, 2 );
 393+ if( count( $bits ) < 2 || !ctype_alpha( $bits[0] ) ) {
 394+ continue;
 395+ }
 396+ $attrib[strtolower( $bits[0] )] = $bits[1]; //$bits[1] gets sanitized by the Sanitizer before being sent off to output
387397 }
388 - $wgOut->addWikiText( '* '.wfMsg( 'maintenance-move', array( $source->getPrefixedText(), $dest->getPrefixedText() ) ) );
389 - $dbw->begin();
390 - $err = $source->moveTo( $dest, false, $reason );
391 - if( $err !== true ) {
392 - $wgOut->addWikiText('** '.wfMsg('maintenance-movefail', array( $err ) ) );
393 - }
394 - $dbw->commit();
395 - waitForSlaves( 5 );
 398+ $option = array();
 399+ $option['size'] = $size;
 400+ $option['attrib'] = $attrib;
 401+ } elseif( $type == 'textarea' ) {
 402+ $tmpfile = strtok( ' ' );
 403+ $option = array();
 404+ $option['tmpfile'] = $tmpfile;
396405 }
397 - $wgOut->addWikiMsg( 'maintenance-success', $type );
398 - break;
399 - case 'reassignEdits':
400 - $wpFrom = $wgRequest->getVal( 'wpFrom' );
401 - $wpTo = $wgRequest->getVal( 'wpTo' );
402 - if( User::isIP( $wpFrom ) ) {
403 - $from = new User();
404 - $from->setId( 0 );
405 - $from->setName( $wpFrom );
406 - } else {
407 - $from = User::newFromName( $wpFrom );
 406+ $option['name'] = $name;
 407+ $option['type'] = $type;
 408+ }
 409+
 410+ //parse args
 411+ if( !isset( $stuff['arg'] ) ) {
 412+ $stuff['arg'] = array();
 413+ } elseif( !is_array( $stuff['arg'] ) ) {
 414+ $stuff['arg'] = array( $stuff['arg'] );
 415+ }
 416+ foreach( $stuff['arg'] as &$arg ) {
 417+ $name = strtok( $arg, ' ' );
 418+ if( !preg_match( '/^[a-z0-9-]+$/i', $name ) ) {
 419+ return false;
408420 }
409 - if( User::isIP( $wpTo ) ) {
410 - $to = new User();
411 - $to->setId( 0 );
412 - $to->setName( $wpTo );
413 - } else {
414 - $to = User::newFromName( $wpTo );
 421+ $type = strtok( ' ' );
 422+ if( !in_array( $type, array( 'check', 'input', 'password', 'textarea' ) ) ) {
 423+ return false;
415424 }
416 - if( $to->getId() || $wgRequest->getCheck( 'wpForce' ) ) {
417 - $report = $wgRequest->getCheck( 'wpReport' );
418 - $dbw = wfGetDB( DB_MASTER );
419 - $dbw->begin();
420 - $rcond = $from->getId() ? array( 'rev_user' => $from->getId() ) : array( 'rev_user_text' => $from->getName() );
421 - $res = $dbw->select( 'revision', 'COUNT(*) AS count', $rcond, 'Maintenance::reassignEdits' );
422 - $row = $dbw->fetchObject( $res );
423 - $cur = $row->count;
424 - $wgOut->addWikiMsg( 'maintenance-re-ce', $cur );
425 - $acond = $from->getId() ? array( 'ar_user' => $from->getId() ) : array( 'ar_user_text' => $from->getName() );
426 - $res = $dbw->select( 'archive', 'COUNT(*) AS count', $acond, 'Maintenance::reassignEdits' );
427 - $row = $dbw->fetchObject( $res );
428 - $del = $row->count;
429 - $wgOut->addWikiMsg( 'maintenance-re-de', $del );
430 - if( !$wgRequest->getCheck( 'wpRc' ) ) {
431 - $ccond = $from->getId() ? array( 'rc_user' => $from->getId() ) : array( 'rc_user_text' => $from->getName() );
432 - $res = $dbw->select( 'recentchanges', 'COUNT(*) AS count', $ccond, 'Maintenance::reassignEdits' );
433 - $row = $dbw->fetchObject( $res );
434 - $rec = $row->count;
435 - $wgOut->addWikiMsg( 'maintenance-re-rce', $rec );
436 - } else {
437 - $rec = 0;
 425+ if( $type == 'check' ) {
 426+ $default = strtok( ' ' ); //if it's missing, it's automatically false due to how strtok works
 427+ $arg = array();
 428+ $arg['default'] = $default;
 429+ } elseif( $type == 'input' || $type == 'password' ) {
 430+ $size = strtok( ' ' ); //integer size or false
 431+ if( $size !== false && !ctype_digit( $size ) ) {
 432+ return false;
438433 }
439 - $total = $cur + $del + $rec;
440 - $wgOut->addWikiMsg( 'maintenance-re-total', $total );
441 - if( !$report ) {
442 - $rspec = array( 'rev_user' => $to->getId(), 'rev_user_text' => $to->getName() );
443 - $res = $dbw->update( 'revision', $rspec, $rcond, 'Maintenance::reassignEdits' );
444 - $aspec = array( 'ar_user' => $to->getId(), 'ar_user_text' => $to->getName() );
445 - $res = $dbw->update( 'archive', $aspec, $acond, 'Maintenance::reassignEdits' );
446 - if( !$wgRequest->getCheck( 'wpRc' ) ) {
447 - $cspec = array( 'rc_user' => $to->getId(), 'rc_user_text' => $to->getName() );
448 - $res = $dbw->update( 'recentchanges', $cspec, $ccond, 'Maintenance::reassignEdits' );
 434+ //rest are attributes, we just ignore poorly-formatted ones here instead of rejecting the entire file
 435+ $attrib = array();
 436+ while( ( $attr = strtok( ' ' ) ) !== false ) {
 437+ $bits = explode( '=', $attr, 2 );
 438+ if( count( $bits ) < 2 || !ctype_alpha( $bits[0] ) ) {
 439+ continue;
449440 }
 441+ $attrib[strtolower( $bits[0] )] = $bits[1]; //$bits[1] gets sanitized by the Sanitizer before being sent off to output
450442 }
451 - $dbw->commit();
452 - if( $report ) {
453 - $wgOut->addWikiMsg( 'maintenance-re-rr', wfMsg( 'maintenance-re-report' ) );
454 - }
455 - } else {
456 - $ton = $to->getName();
457 - $wgOut->addWikiMsg( 'maintenance-re-nf', $ton );
 443+ $arg = array();
 444+ $arg['size'] = $size;
 445+ $arg['attrib'] = $attrib;
 446+ } elseif( $type == 'textarea' ) {
 447+ $tmpfile = strtok( ' ' );
 448+ $arg = array();
 449+ $arg['tmpfile'] = $tmpfile;
458450 }
459 - $wgOut->addWikiMsg( 'maintenance-success', $type );
460 - break;
461 - case 'runJobs':
462 - $maxJobs = 10000;
463 - $dbw = wfGetDB( DB_MASTER );
464 - $n = 0;
465 - while ( $dbw->selectField( 'job', 'count(*)', '', 'runJobs.php' ) ) {
466 - $offset = 0;
467 - for (;;) {
468 - $job = Job::pop($offset);
469 - if ( $job == false )
470 - break;
471 - waitForSlaves( 5 );
472 - $wgOut->addWikiText("* ".$job->id . " " . $job->toString() );
473 - $offset = $job->id;
474 - if ( !$job->run() ) {
475 - $wgOut->addWikiText("** ".wfMsg('maintenance-error', array( $job->error ) ) );
476 - }
477 - if ( $maxJobs && ++$n > $maxJobs ) {
478 - break 2;
479 - }
480 - }
 451+ $arg['name'] = $name;
 452+ $arg['type'] = $type;
 453+ }
 454+
 455+ //parse output messages (for i18n)
 456+ if( !isset( $stuff['output'] ) ) {
 457+ $stuff['output'] = array();
 458+ } elseif( !is_array( $stuff['output'] ) ) {
 459+ $stuff['output'] = array( $stuff['output'] );
 460+ }
 461+ foreach( $stuff['output'] as &$autput ) {
 462+ $bits = explode( ' ', $autput, 3 );
 463+ if( count( $bits ) < 3 ) {
 464+ return false;
481465 }
482 - $wgOut->addWikiMsg( 'maintenance-success', $type );
483 - break;
484 - case 'showJobs':
485 - $dbw = wfGetDB( DB_MASTER );
486 - $count = $dbw->selectField( 'job', 'count(*)', '', 'runJobs.php' );
487 - $wgOut->addHTML( $count );
488 - $wgOut->addWikiMsg( 'maintenance-success', $type );
489 - break;
490 - case 'stats':
491 - global $wgMemc;
492 - if( get_class( $wgMemc ) == 'FakeMemCachedClient' ) {
493 - $wgOut->addWikiMsg('maintenance-memc-fake');
494 - return;
 466+ $autput = array();
 467+ $autput['name'] = strtolower( $bits[0] );
 468+ if( !preg_match( '/^[a-z0-9-]+$/i', $autput['name'] ) ) {
 469+ return false;
495470 }
496 - $wgOut->addWikiText('<h2>'.wfMsg('maintenance-memc-requests').'</h2>');
497 - $session = intval( $wgMemc->get( wfMemcKey('stats', 'request_with_session') ) );
498 - $noSession = intval( $wgMemc->get( wfMemcKey('stats', 'request_without_session') ) );
499 - $total = $session + $noSession;
500 - $requests = sprintf( wfMsg('maintenance-memc-withsession')." %-10d %6.2f%%\n", $session, $session/$total*100 ) . '<br />';
501 - $requests .= sprintf( wfMsg('maintenance-memc-withoutsession')." %-10d %6.2f%%\n", $noSession, $noSession/$total*100 ). '<br />';
502 - $requests .= sprintf( wfMsg('maintenance-memc-total')." %-10d %6.2f%%\n", $total, 100 ). '<br />';
503 - $wgOut->addWikiText($requests);
504 - $wgOut->addWikiText('<h2>'.wfMsg('maintenance-memc-parsercache').'</h2>');
505 - $hits = intval( $wgMemc->get( wfMemcKey('stats', 'pcache_hit') ) );
506 - $invalid = intval( $wgMemc->get( wfMemcKey('stats', 'pcache_miss_invalid') ) );
507 - $expired = intval( $wgMemc->get( wfMemcKey('stats', 'pcache_miss_expired') ) );
508 - $absent = intval( $wgMemc->get( wfMemcKey('stats', 'pcache_miss_absent') ) );
509 - $stub = intval( $wgMemc->get( wfMemcKey('stats', 'pcache_miss_stub') ) );
510 - $total = $hits + $invalid + $expired + $absent + $stub;
511 - $pcache = sprintf( wfMsg('maintenance-memc-hits')." %-10d %6.2f%%\n", $hits, $hits/$total*100 ). '<br />';
512 - $pcache .= sprintf( wfMsg('maintenance-memc-invalid')." %-10d %6.2f%%\n", $invalid, $invalid/$total*100 ). '<br />';
513 - $pcache .= sprintf( wfMsg('maintenance-memc-expired')." %-10d %6.2f%%\n", $expired, $expired/$total*100 ). '<br />';
514 - $pcache .= sprintf( wfMsg('maintenance-memc-absent')." %-10d %6.2f%%\n", $absent, $absent/$total*100 ). '<br />';
515 - $pcache .= sprintf( wfMsg('maintenance-memc-stub')." %-10d %6.2f%%\n", $stub, $stub/$total*100 ). '<br />';
516 - $pcache .= sprintf( wfMsg('maintenance-memc-total')." %-10d %6.2f%%\n", $total, 100 ). '<br />';
517 - $wgOut->addWikiText($pcache);
518 - $hits = intval( $wgMemc->get( wfMemcKey('stats', 'image_cache_hit') ) );
519 - $misses = intval( $wgMemc->get( wfMemcKey('stats', 'image_cache_miss') ) );
520 - $updates = intval( $wgMemc->get( wfMemcKey('stats', 'image_cache_update') ) );
521 - $total = $hits + $misses;
522 - $wgOut->addWikiText('<h2>'.wfMsg('maintenance-memc-imagecache').'</h2>');
523 - $icache = sprintf( wfMsg('maintenance-memc-hits')." %-10d %6.2f%%\n", $hits, $hits/$total*100 ). '<br />';
524 - $icache .= sprintf( wfMsg('maintenance-memc-misses')." %-10d %6.2f%%\n", $misses, $misses/$total*100 ). '<br />';
525 - $icache .= sprintf( wfMsg('maintenance-memc-updates')." %-10d\n", $updates ). '<br />';
526 - $wgOut->addWikiText($icache);
527 - $hits = intval( $wgMemc->get( wfMemcKey('stats', 'diff_cache_hit') ) );
528 - $misses = intval( $wgMemc->get( wfMemcKey('stats', 'diff_cache_miss') ) );
529 - $uncacheable = intval( $wgMemc->get( wfMemcKey('stats', 'diff_uncacheable') ) );
530 - $total = $hits + $misses + $uncacheable;
531 - $wgOut->addWikiText('<h2>'.wfMsg('maintenance-memc-diffcache').'</h2>');
532 - $dcache = sprintf( wfMsg('maintenance-memc-hits')." %-10d %6.2f%%\n", $hits, $hits/$total*100 ). '<br />';
533 - $dcache .= sprintf( wfMsg('maintenance-memc-misses')." %-10d %6.2f%%\n", $misses, $misses/$total*100 ). '<br />';
534 - $dcache .= sprintf( wfMsg('maintenance-memc-uncacheable')." %-10d %6.2f%%\n", $uncacheable, $uncacheable/$total*100 ). '<br />';
535 - $wgOut->addWikiText($dcache);
536 - $wgOut->addWikiMsg( 'maintenance-success', $type );
537 - break;
538 - case 'sql':
539 - $db = wfGetDB( DB_MASTER );
540 - $q = $wgRequest->getText('wpQuery', '');
541 - $db->begin();
542 - try {
543 - $r = $db->query( $q, 'Maintenance::sql.php' );
544 - } catch(DBQueryError $e) {
545 - global $wgShowSQLErrors;
546 - $temp = $wgShowSQLErrors;
547 - $wgShowSQLErrors = true;
548 - $wgOut->addWikiText( '<pre style="overflow: auto">' . $e->getText() . '</pre>' );
549 - $wgShowSQLErrors = $temp;
550 - $r = false;
 471+ $autput['type'] = $bits[1];
 472+ if( !in_array( $autput['type'], array( 'string', 'regex' ) ) ) {
 473+ return false;
551474 }
552 - if($r === true) {
553 - $wgOut->addWikiMsg( 'maintenance-sql-aff', $db->affectedRows() );
554 - } elseif( $r instanceOf ResultWrapper ) {
555 - $res = array();
556 - for( $i = 0; $i < $r->numRows(); $i++ ) {
557 - $row = $r->fetchRow();
558 - $res[] = $row;
559 - foreach( $row as $key => $meh ) {
560 - $names[] = $key;
561 - }
562 - }
563 - $names = array_unique($names);
564 - $rtable = '<table class="wikitable"><tr>';
565 - foreach($names as $name) {
566 - if( is_numeric($name) ) continue;
567 - $rtable .= '<th>' . $name . '</th>';
568 - }
569 - $rtable .= '</tr>';
570 - foreach( $res as $data ) {
571 - $rtable .= '<tr>';
572 - foreach( $data as $key => $value ) {
573 - if( is_numeric($key) ) continue;
574 - $rtable .= '<td><nowiki>' . $value . '</nowiki></td>';
575 - }
576 - $rtable .= '</tr>';
577 - }
578 - $rtable .= '</table>';
579 - $wgOut->addWikiMsg( 'maintenance-sql-res', $r->numRows(), $rtable );
580 - $db->freeResult($r);
 475+ $autput['match'] = $bits[2];
 476+ }
 477+
 478+ //parse error messages (for i18n)
 479+ if( !isset( $stuff['error'] ) ) {
 480+ $stuff['error'] = array();
 481+ } elseif( !is_array( $stuff['error'] ) ) {
 482+ $stuff['error'] = array( $stuff['error'] );
 483+ }
 484+ foreach( $stuff['error'] as &$error ) {
 485+ $bits = explode( ' ', $error, 3 );
 486+ if( count( $bits ) < 3 ) {
 487+ return false;
581488 }
582 - $db->commit();
583 - $wgOut->addWikiMsg( 'maintenance-success', $type );
 489+ $error = array();
 490+ $error['name'] = strtolower( $bits[0] );
 491+ if( !preg_match( '/^[a-z0-9-]+$/i', $error['name'] ) ) {
 492+ return false;
 493+ }
 494+ $error['type'] = $bits[1];
 495+ if( !in_array( $error['type'], array( 'string', 'regex' ) ) ) {
 496+ return false;
 497+ }
 498+ $error['match'] = $bits[2];
 499+ }
 500+
 501+ //parse special options (batch, stdin)
 502+ if( !isset( $stuff['batch'] ) ) {
 503+ $stuff['batch'] = 0;
 504+ }
 505+ if( !isset( $stuff['stdin'] ) ) {
 506+ $stuff['stdin'] = false;
 507+ }
 508+ }
 509+ $this->metadata = $metadata;
 510+ return true;
 511+ }
 512+
 513+ private function setup( $maintenance ) {
 514+ //set the memory limit
 515+ @ini_set( 'memory_limit', $maintenance->memoryLimit() );
 516+
 517+ //set up the params and args
 518+ global $wgRequest;
 519+ $goptions = $this->metadata[$this->type]['option'];
 520+ $gargs = $this->metadata[$this->type]['arg'];
 521+ $opts = $args = null;
 522+ if( $goptions != array() ) {
 523+ $opts = array();
 524+ foreach( $goptions as $a ) {
 525+ if( $a['type'] == 'textarea' && $a['tmpfile'] ) {
 526+ $fname = tempnam( sys_get_temp_dir(), $a['tmpfile'] );
 527+ $f = fopen( $fname, 'wt' );
 528+ fwrite( $f, $wgRequest->getText( 'wp' . ucfirst( $a['name'] ) ) );
 529+ fclose( $f );
 530+ $opts[$a['name']] = $fname;
 531+ } elseif( $a['type'] == 'textarea' ) {
 532+ $opts[$a['name']] = $wgRequest->getText( 'wp' . ucfirst( $a['name'] ) );
 533+ } elseif( $a['type'] != 'check' ) {
 534+ $opts[$a['name']] = $wgRequest->getVal( 'wp' . ucfirst( $a['name'] ) );
 535+ } else {
 536+ $opts[$a['name']] = $wgRequest->getCheck( 'wp' . ucfirst( $a['name'] ) );
 537+ }
 538+ }
 539+ }
 540+ if( $gargs != array() ) {
 541+ $args = array();
 542+ foreach( $gargs as $a ) {
 543+ if( $a['type'] == 'textarea' && $a['tmpfile'] ) {
 544+ $fname = tempnam( sys_get_temp_dir(), $a['tmpfile'] );
 545+ $f = fopen( $fname, 'wt' );
 546+ fwrite( $f, $wgRequest->getText( 'wp' . ucfirst( $a['name'] ) ) );
 547+ fclose( $f );
 548+ $args[] = $fname;
 549+ } elseif( $a['type'] == 'textarea' ) {
 550+ $args[] = $wgRequest->getText( 'wp' . ucfirst( $a['name'] ) );
 551+ } elseif( $a['type'] != 'check' ) {
 552+ $args[] = $wgRequest->getVal( 'wp' . ucfirst( $a['name'] ) );
 553+ } else {
 554+ $args[] = $wgRequest->getCheck( 'wp' . ucfirst( $a['name'] ) );
 555+ }
 556+ }
 557+ }
 558+
 559+ //special opts
 560+ if( $wgRequest->getCheck( 'wpQuiet' ) ) {
 561+ $opts['quiet'] = true;
 562+ }
 563+ if( $wgRequest->getCheck( 'wpGlobals' ) ) {
 564+ $opts['globals'] = true;
 565+ }
 566+ if( $wgRequest->getVal( 'wpBatch-size', false ) ) {
 567+ $opts['batch-size'] = $wgRequest->getVal( 'wpBatch-size' );
 568+ }
 569+
 570+ //per-script special cases
 571+ switch( $this->type ) {
 572+ case 'checkSyntax':
 573+ //need to save list-file to a temp txt file and set list-file to that file's location
 574+ $this->loc = tempnam( sys_get_temp_dir(), "tmpfile" );
 575+ $f = fopen( $this->loc, 'wt' );
 576+ fwrite( $f, $wgRequest->getText( 'wpList-file' ) );
 577+ fclose( $f );
 578+ $opts['list-file'] = $this->loc;
584579 break;
585 - default:
586 - $wgOut->addWikiMsg( 'maintenance-invalidtype' );
587 - return;
588580 }
 581+
 582+ $maintenance->loadParamsAndArgs( $this->type, $opts, $args );
 583+ $die = $maintenance->doValidateParamsAndArgs();
 584+ if( $die ) {
 585+ global $wgOut;
 586+ $wgOut->addHTML( wfMsg( 'maintenance-error-badargs' ) );
 587+ return false;
 588+ }
 589+
 590+ global $IP;
 591+ if( $maintenance->getDbType() === Maintenance::DB_ADMIN ) {
 592+ global $wgDBuser, $wgDBpassword, $wgDBadminuser, $wgDBadminpassword, $wgDBuserold, $wgDBpasswordold;
 593+ if( !isset( $wgDBadminuser ) && is_readable( "$IP/AdminSettings.php" ) ) {
 594+ require( "$IP/AdminSettings.php" );
 595+ }
 596+ if( isset( $wgDBadminuser ) ) {
 597+ $wgDBuserold = $wgDBuser;
 598+ $wgDBpasswordold = $wgDBpassword;
 599+ $wgDBuser = $wgDBadminuser;
 600+ $wgDBpassword = $wgDBadminpassword;
 601+ LBFactory::destroyInstance();
 602+ }
 603+ }
 604+
 605+ return true;
589606 }
590 -}
591 -
592 -function waitForSlaves( $maxLag ) {
593 - if( $maxLag ) {
594 - $lb = wfGetLB();
595 - list( $host, $lag ) = $lb->getMaxLag();
596 - while( $lag > $maxLag ) {
597 - $name = @gethostbyaddr( $host );
598 - if( $name !== false ) {
599 - $host = $name;
 607+
 608+ private function scriptDone( $script ) {
 609+ global $wgDBuser, $wgDBpassword, $wgDBadminuser, $wgDBadminpassword, $wgDBuserold, $wgDBpasswordold;
 610+ if( $script->getDbType() === Maintenance::DB_ADMIN && isset( $wgDBadminuser ) ) {
 611+ $wgDBuser = $wgDBuserold;
 612+ $wgDBpassword = $wgDBpasswordold;
 613+ unset( $GLOBALS['wgDBuserold'], $GLOBALS['wgDBpasswordold'] );
 614+ LBFactory::destroyInstance();
 615+ }
 616+
 617+ $goptions = $this->metadata[$this->type]['option'];
 618+ $gargs = $this->metadata[$this->type]['arg'];
 619+
 620+ if( $goptions != array() ) {
 621+ foreach( $goptions as $a ) {
 622+ if( $a['type'] == 'textarea' && $a['tmpfile'] && file_exists( $a['tmpfile'] ) ) {
 623+ unlink( $a['tmpfile'] );
 624+ }
600625 }
601 - sleep($maxLag);
602 - list( $host, $lag ) = $lb->getMaxLag();
603626 }
 627+
 628+ if( $gargs != array() ) {
 629+ foreach( $gargs as $a ) {
 630+ if( $a['type'] == 'textarea' && $a['tmpfile'] && file_exists( $a['tmpfile'] ) ) {
 631+ unlink( $a['tmpfile'] );
 632+ }
 633+ }
 634+ }
604635 }
605636 }
606637
607 -// Helper classes
 638+class SpecialMaintenanceException extends MWException {
 639+ //don't need anything here since we never print this out
 640+ //only used as an exception for the "die" feature of Maintenance::error() as opposed to terminating the script
 641+}
Index: trunk/extensions/Maintenance/Maintenance.i18n.php
@@ -21,64 +21,247 @@
2222 'right-maintenance' => 'Run maintenance scripts through [[Special:Maintenance]]',
2323 // main form
2424 'maintenance-backlink' => 'Back to script selection',
25 - 'maintenance-header' => 'Please select a script below to execute.
26 -Descriptions are next to each script',
27 - // script descriptions
28 - 'maintenance-changePassword-desc' => "Change a user's password",
29 - 'maintenance-createAndPromote-desc' => 'Create a user and promote to administrator status',
30 - 'maintenance-deleteBatch-desc' => 'Mass-delete pages',
31 - 'maintenance-deleteRevision-desc' => 'Remove revisions from the database',
32 - 'maintenance-eval-desc' => 'Evaluate PHP code in the MediaWiki environment',
33 - 'maintenance-initEditCount-desc' => 'Recalculate the edit counts of users',
34 - 'maintenance-initStats-desc' => 'Recalculate site statistics',
35 - 'maintenance-moveBatch-desc' => 'Mass-move pages',
36 - 'maintenance-reassignEdits-desc' => 'Reassign edits from one user to another',
37 - 'maintenance-runJobs-desc' => 'Run jobs in the job queue',
38 - 'maintenance-showJobs-desc' => 'Show a list of jobs pending in the job queue',
39 - 'maintenance-sql-desc' => 'Execute an SQL query',
40 - 'maintenance-stats-desc' => 'Show Memcached statistics',
 25+ 'maintenance-header' => 'Please select a script below to execute. Descriptions are next to each script',
 26+ // errors
 27+ 'maintenance-error-badini' => 'The metadata.ini file is either corrupted or missing. Please re-download the Maintenance extension',
 28+ 'maintenance-error-invalidtype' => 'The script specified was not found',
 29+ 'maintenance-error-badargs' => 'You did not specify all of the required options',
 30+ // generic includes
 31+ 'maintenance-generic-done' => 'done',
 32+ 'maintenance-generic-username' => 'Username',
 33+ 'maintenance-generic-password' => 'Password',
 34+ 'maintenance-generic-reason' => 'Reason',
 35+ 'maintenance-generic-notrans' => '$1', #Do not translate this message
 36+ // generic messages from cleanupTable.inc
 37+ 'maintenance-cleanupTable-dry-run' => 'Perform a dry run',
 38+ 'maintenance-cleanupTable-check' => 'Checking for bad titles...',
 39+ 'maintenance-cleanupTable-checkfix' => 'Checking and fixing bad titles...',
 40+ 'maintenance-cleanupTable-progress' => '$1 $2: $3% done on $4; ETA $5 [$6/$7] $8/sec <$9% updated>', #$1=wiki id, $2=timestamp, $3=portion done, $4=table name, $5=eta, $6=num processed, $7=total, $8=processed/sec, $9=updated rate
 41+ 'maintenance-cleanupTable-missingparam' => '$1: Missing parameter $2', #$1=method name, $2=list of params missing (hardcoded in cleanupTables.inc to be seperated by a comma and a space, e.g. "param1, param2")
 42+ 'maintenance-cleanupTable-processing' => 'Processing $1...', #$1=table name
 43+ 'maintenance-cleanupTable-finished' => 'Finished $1... $2 of $3 rows updated', #$1=table name, $2=num updated, $3=num processed
 44+ // default options
 45+ 'maintenance-option-quiet' => 'Suppress non-error output',
 46+ 'maintenance-option-globals' => 'Output globals at the end of processing for debugging',
 47+ 'maintenance-option-confirm' => 'Confirm',
 48+ 'maintenance-option-batch-size' => 'Run this many operations per batch, default: $1', #$1=batch size
 49+ 'maintenance-option-required' => '(required)', #not yet used
 50+ 'maintenance-option-optional' => '(optional)', #not yet used
 51+ // default output
 52+ 'maintenance-output-success' => '$1 ran successfully!', #$1=name of script
 53+ 'maintenance-output-failure' => '$1 did not run successfully!', #$1=name of script
 54+ // attachLatest
 55+ 'maintenance-attachLatest' => 'Use this form to fix entries in the page table where page_latest is set to 0',
 56+ 'maintenance-attachLatest-desc' => 'Fix page_latest entries in the page table',
 57+ 'maintenance-attachLatest-option-fix' => 'Actually fix the entries, will dry run otherwise',
 58+ 'maintenance-attachLatest-output-begin' => 'Looking for pages with page_latest set to 0...',
 59+ 'maintenance-attachLatest-output-notime' => '$1 $2 [[$3]] can\'t find the latest rev time?!', #$1=wiki id, $2=page id, $3=page name
 60+ 'maintenance-attachLatest-output-norev' => '$1 $2 [[$3]] latest time $4, can\'t find revision id', #$1=wiki id, $2=page id, $3=page name, $4=latest time
 61+ 'maintenance-attachLatest-output-found' => '$1 $2 [[$3]] latest time $4, rev id $5', #$1=wiki id, $2=page id, $3=page name, $4=latest time, $5=rev id
 62+ 'maintenance-attachLatest-output-done' => 'Done! Processed $1 pages.', #$1=number of pages with page_latest=0
 63+ 'maintenance-attachLatest-output-dryrun' => 'This was a dry run; rerun with "{{int:maintenance-attachLatest-option-fix}}" to update page_latest.',
 64+ // benchmarkPurge
 65+ 'maintenance-benchmarkPurge' => 'Use this form to test how long the Squid purge functions take',
 66+ 'maintenance-benchmarkPurge-desc' => 'Benchmark the Squid purge functions',
 67+ 'maintenance-benchmarkPurge-option-count' => 'How many URLs to feed to Squid for purging',
 68+ 'maintenance-benchmarkPurge-error-nosquid' => "Squid purge benchmark doesn't do much without squid support on.",
 69+ 'maintenance-benchmarkPurge-output-numsquids' => 'There are $1 defined squid servers:', #$1=number of squid servers
 70+ 'maintenance-benchmarkPurge-output-trial' => '$1 titles in $2ms ($3ms each)', #$1=number of titles, $2=total time, $3=average time
4171 // changePassword
4272 'maintenance-changePassword' => "Use this form to change a user's password",
 73+ 'maintenance-changePassword-desc' => "Change a user's password",
 74+ 'maintenance-changePassword-option-user' => '{{int:maintenance-generic-username}}',
 75+ 'maintenance-changePassword-option-password' => '{{int:maintenance-generic-password}}',
 76+ 'maintenance-changePassword-error-nouser' => 'No such user: $1', #$1=username
 77+ 'maintenance-changePassword-output-set' => 'Password set for $1', #$1=username
 78+ // checkAutoLoader
 79+ 'maintenance-checkAutoLoader' => 'Use this form to do some sanity checks on the AutoLoader',
 80+ 'maintenance-checkAutoLoader-desc' => 'AutoLoader sanity checks',
 81+ 'maintenance-checkAutoLoader-output-list1' => "\t'\$1' => '\$2',", #$1=class, $2=file
 82+ 'maintenance-checkAutoLoader-output-list2' => '$1: Wrong file: found in $2, listed in $3', #$1=class, $2=file, $3=file
 83+ // checkBadRedirects
 84+ 'maintenance-checkBadRedirects' => 'Use this form to see if pages marked as redirects really are redirects',
 85+ 'maintenance-checkBadRedirects-desc' => 'Look for bad redirects',
 86+ 'maintenance-checkBadRedirects-output-header' => 'Fetching redirects...',
 87+ 'maintenance-checkBadRedirects-output-found' => "Found \$1 total redirects.\nLooking for bad redirects...\n", #$1=number of redirects
 88+ 'maintenance-checkBadRedirects-output-footer' => "\ndone.",
 89+ // checkImages
 90+ 'maintenance-checkImages' => 'Use this form to see which images on your server are corrupted',
 91+ 'maintenance-checkImages-desc' => 'Check images to see if they exist, are readable, etc',
 92+ 'maintenance-checkImages-output-noaccess' => '$1: not locally accessible', #$1=image name
 93+ 'maintenance-checkImages-output-missing' => '$1: missing', #$1=image name
 94+ 'maintenance-checkImages-output-isdir' => '$1: is a directory', #$1=image name
 95+ 'maintenance-checkImages-output-truncated' => '$1: truncated, was $2', #$1=image name, $2=db size
 96+ 'maintenance-checkImages-output-mismatch' => '$1: size mismatch DB=$2, actual=$3', #$1=image name, $2=db size, $3=actual size
 97+ 'maintenance-checkImages-output-good' => 'Good images: $1/$2', #$1=good images, $2=total images
 98+ // checkSyntax
 99+ 'maintenance-checkSyntax' => 'Use this form to check the syntax of all PHP files in MediaWiki',
 100+ 'maintenance-checkSyntax-desc' => 'Check syntax for all PHP files in MediaWiki',
 101+ 'maintenance-checkSyntax-option-with-extensions' => 'Also recurse the extensions folder',
 102+ 'maintenance-checkSyntax-option-path' => 'Specific path (file or directory) to check, either with absolute path or relative to the root of this MediaWiki installation',
 103+ 'maintenance-checkSyntax-option-list-file' => 'List of files or directories to check',
 104+ 'maintenance-checkSyntax-option-modified' => 'Check only files that were modified (requires SVN command-line client)',
 105+ 'maintenance-checkSyntax-option-syntax-only' => 'Check for syntax validity only, skip code style warnings',
 106+ 'maintenance-checkSyntax-output-parsekit' => 'Checking syntax (using parsekit)',
 107+ 'maintenance-checkSyntax-output-phpl' => 'Checking syntax (using php -l, this can take a long time)',
 108+ 'maintenance-checkSyntax-output-footer' => 'Done! $1 files checked, $2 failures and $3 warnings found', #$1=files checked, $2=php errors, $3=php warnings
 109+ 'maintenance-checkSyntax-output-svnlist' => 'Retrieving list from Subversion...',
 110+ 'maintenance-checkSyntax-output-done' => '{{int:maintenance-generic-done}}',
 111+ 'maintenance-checkSyntax-output-buildlist' => 'Building file list...',
 112+ 'maintenance-checkSyntax-output-error' => 'Error in $1 line $2: $3', #$1=file, $2=line no, $3=error message
 113+ 'maintenance-checkSyntax-output-warning' => 'Warning in file $1: $2 found', #$1=file, $2=warning message
 114+ 'maintenance-checkSyntax-error-nofile' => 'Error: can\'t find file or directory $1', #$1=file or directory path
 115+ 'maintenance-checkSyntax-error-cantopen' => 'Can\'t open file $1', #$1=filename
 116+ 'maintenance-checkSyntax-error-svnerr' => 'Error retrieving list from Subversion!',
 117+ // checkUsernames
 118+ 'maintenance-checkUsernames' => 'Use this form to show which usernames are invalid due to configuration changes. If nothing is listed after running this script, all usernames are valid',
 119+ 'maintenance-checkUsernames-desc' => 'Verify that database usernames are actually valid',
 120+ 'maintenance-checkUsernames-error-notvalid' => 'Invalid username: "$3" (user id $2)', #$1=wiki id, $2=user id, $3=username
 121+ // cleanupCaps
 122+ 'maintenance-cleanupCaps' => 'Use this form to fix broken pages caused by modifying $wgCapitalLinks',
 123+ 'maintenance-cleanupCaps-desc' => 'Script to cleanup capitalization',
 124+ 'maintenance-cleanupCaps-option-dry-run' => '{{int:maintenance-cleanupTable-dry-run}}',
 125+ 'maintenance-cleanupCaps-option-namespace' => 'Namespace number to run caps cleanup on',
 126+ 'maintenance-cleanupCaps-output-islower' => '"$1" already lowercase.', #$1=page name
 127+ 'maintenance-cleanupCaps-output-clash' => '"$1" skipped; "$2" already exists', #$1=upppercase page name, $2=lowercase page name
 128+ 'maintenance-cleanupCaps-output-dryrun' => '"$1" -> "$2": DRY RUN, NOT MOVED', #$1=upppercase page name, $2=lowercase page name
 129+ 'maintenance-cleanupCaps-output-moved' => '"$1" -> "$2": $3', #$1=upppercase page name, $2=lowercase page name, $3=status of move (ok or not)
 130+ 'maintenance-cleanupCaps-output-check' => '{{int:maintenance-cleanupTable-check}}',
 131+ 'maintenance-cleanupCaps-output-checkfix' => '{{int:maintenance-cleanupTable-checkfix}}',
 132+ 'maintenance-cleanupCaps-output-progress' => '{{int:maintenance-cleanupTable-progress|$1|$2|$3|$4|$5|$6|$7|$8|$9}}',
 133+ 'maintenance-cleanupCaps-output-processing' => '{{int:maintenance-cleanupTable-processing|$1}}',
 134+ 'maintenance-cleanupCaps-output-finished' => '{{int:maintenance-cleanupTable-check|$1|$2|$3}}',
 135+ 'maintenance-cleanupCaps-error-missingparam' => '{{int:maintenance-cleanupTable-missingparam|$1|$2}}',
 136+ 'maintenance-cleanupCaps-error-noneed' => '$wgCapitalLinks is on -- no need for caps links cleanup.',
 137+ // cleanupImages
 138+ // cleanupSpam
 139+ // cleanupTitles
 140+ // cleanupWatchlist
 141+ // clear_interwiki_cache
 142+ // clear_stats
 143+ // convertLinks
 144+ // convertUserOptions
43145 // createAndPromote
44 - 'maintenance-createAndPromote' => 'Use this form to create a new user and promote it to administrator.
45 -Check the bureaucrat box if you wish to promote to bureaucrat as well',
 146+ 'maintenance-createAndPromote' => 'Use this form to create a new user and promote it to administrator. Check the bureaucrat box if you wish to promote to bureaucrat as well',
 147+ 'maintenance-createAndPromote-desc' => 'Create a user and promote to administrator status',
 148+ 'maintenance-createAndPromote-option-bureaucrat' => 'Promote user to bureaucrat status',
 149+ // deleteArchivedFiles
 150+ // deleteArchivedRevisions
46151 // deleteBatch
47 - 'maintenance-deleteBatch' => 'Use this form to mass-delete pages.
48 -Put only one page per line',
 152+ 'maintenance-deleteBatch' => 'Use this form to mass-delete pages. Put only one page per line',
 153+ 'maintenance-deleteBatch-desc' => 'Mass-delete pages',
 154+ // deleteDefaultMessages
 155+ // deleteImageMemcached
 156+ // deleteOldRevisions
 157+ // deleteOrphanedRevisions
49158 // deleteRevision
50 - 'maintenance-deleteRevision' => 'Use this form to mass-delete revisions.
51 -Put only one revision number per line',
 159+ 'maintenance-deleteRevision' => 'Use this form to mass-delete revisions. Put only one revision number per line',
 160+ 'maintenance-deleteRevision-desc' => 'Remove revisions from the database',
 161+ // deleteSelfExternals
 162+ // dumpLinks
 163+ // dumpSisterSites
 164+ // dumpUploads
 165+ // edit
 166+ // fetchText
 167+ // findhooks
 168+ // fixSlaveDesync
 169+ // fixTimestamps
 170+ // fixUserRegistration
 171+ // generateSitemap
 172+ // getLagTimes
 173+ // getSlaveServer
 174+ // getText
 175+ // httpSessionDownload
52176 // initEditCount
53177 'maintenance-initEditCount' => '',
 178+ 'maintenance-initEditCount-desc' => 'Recalculate the edit counts of users',
54179 // initStats
55180 'maintenance-initStats' => 'Use this form to recalculate site statistics, specifying if you want to recalculate page views as well',
 181+ 'maintenance-initStats-desc' => 'Recalculate site statistics',
 182+ // lag
 183+ // mctest
 184+ // mergeMessageFileList
 185+ // migrateUserGroup
 186+ // minify
56187 // moveBatch
57 - 'maintenance-moveBatch' => 'Use this form to mass-move pages.
58 -Each line should specify a source page and destination page separated by a pipe',
 188+ 'maintenance-moveBatch' => 'Use this form to mass-move pages. Each line should specify a source page and destination page separated by a pipe',
 189+ 'maintenance-moveBatch-desc' => 'Mass-move pages',
 190+ // namespaceDupes
 191+ // nextJobDB
 192+ // nukeNS
 193+ // nukePage
 194+ // orphans
 195+ // patchSql
 196+ // populateCategory
 197+ // populateLogSearch
 198+ // populateLogUsertext
 199+ // populateParentId
 200+ // populateRevisionLength
 201+ // populateSha1
 202+ // protect
 203+ // purgeList
 204+ // purgeOldText
 205+ // reassignEdits
 206+ 'maintenance-reassignEdits-desc' => 'Reassign edits from one user to another',
 207+ // rebuildall
 208+ // rebuildFileCache
 209+ // rebuildLocalisationCache
 210+ // rebuildmessages
 211+ // rebuildrecentchanges
 212+ // rebuildtextindex
 213+ // refreshCategoryCounts
 214+ // refreshImageCount
 215+ // refreshLinks
 216+ // removeUnusedAccounts
 217+ // renameDbPrefix
 218+ // renderDump
 219+ // rollbackEdits
 220+ // runBatchedQuery
59221 // runJobs
60222 'maintenance-runJobs' => '',
 223+ 'maintenance-runJobs-desc' => 'Run jobs in the job queue',
 224+ 'maintenance-runJobs-option-maxjobs' => 'Maximum number of jobs to run',
 225+ 'maintenance-runJobs-option-type' => 'Type of job to run',
 226+ 'maintenance-runJobs-option-procs' => 'Number of processes to use', #currently not used
 227+ 'maintenance-runJobs-option-exclusive' => 'Run only one exclusive runJobs script at a time. Timeout is 1800 seconds.',
 228+ 'maintenance-runJobs-output-job' => '{{int:maintenance-generic-notrans|$1}}', #$1=job result
 229+ 'maintenance-runJobs-error-invalidprocs' => 'You must specify between 1 and 1000 processes', #currently not used
61230 // showJobs
62231 'maintenance-showJobs' => '',
 232+ 'maintenance-showJobs-desc' => 'Show a list of jobs pending in the job queue',
 233+ 'maintenance-showJobs-option-group' => 'Show number of jobs per job type',
 234+ 'maintenance-showJobs-output-job' => '{{int:maintenance-generic-notrans|$1}}', #$1=job info
 235+ // showStats
 236+ // sql
 237+ 'maintenance-sql' => 'Use this form to execute a SQL query on the database.',
 238+ 'maintenance-sql-desc' => 'Execute an SQL query',
 239+ 'maintenance-sql-option-file' => 'SQL to execute',
 240+ 'maintenance-sql-output-row' => '{{int:maintenance-generic-notrans|$1}}', #$1=print_r result of row
 241+ 'maintenance-sql-output-aff' => 'Query OK, $1 {{PLURAL:$1|row|rows}} affected',
 242+ 'maintenance-sql-error-cantopen' => 'Unable to open input file',
 243+ 'maintenance-sql-error-sql' => '{{int:maintenance-generic-notrans|$1}}', #$1=sql error
 244+ // sqlite
63245 // stats
64246 'maintenance-stats' => '',
65 - // invalid type
66 - 'maintenance-invalidtype' => 'Invalid type!',
67 - // changePassword + createAndPromote
68 - 'maintenance-name' => 'Username',
69 - 'maintenance-password' => 'Password',
70 - // createAndPromote
71 - 'maintenance-bureaucrat' => 'Promote user to bureaucrat status',
72 - // deleteBatch, moveBatch, etc.
73 - 'maintenance-reason' => 'Reason',
 247+ 'maintenance-stats-desc' => 'Show Memcached statistics',
 248+ // undelete
 249+ // updateArticleCount
 250+ // updateDoubleWidthSearch
 251+ // updateRestrictions
 252+ // updateSearchIndex
 253+ // updateSpecialPages
 254+ // waitForSlave
 255+##########---------- UNSORTED AND/OR OLD MESSAGES BELOW THIS POINT ----------##########
 256+ // eval
 257+ 'maintenance-eval' => 'Use this form to evaluate PHP code in the MediaWiki environment.',
 258+ 'maintenance-eval-desc' => 'Evaluate PHP code in the MediaWiki environment',
74259 // initStats
75260 'maintenance-update' => 'Use UPDATE when updating a table? Unchecked uses DELETE/INSERT instead.',
76261 'maintenance-noviews' => 'Check this to prevent updating the number of pageviews',
77 - // all scripts
78 - 'maintenance-confirm' => 'Confirm',
79262 // createAndPromote, perhaps others
80263 'maintenance-invalidname' => 'Invalid username!',
81264 // all scripts
82 - 'maintenance-success' => '$1 ran successfully!',
 265+ 'maintenance-output-success' => '$1 ran successfully!',
83266 // createAndPromote
84267 'maintenance-userexists' => 'User already exists!',
85268 // deleteBatch, moveBatch, perhaps others
@@ -91,11 +274,6 @@
92275 // deleteRevisions
93276 'maintenance-revdelete' => 'Deleting {{PLURAL:$3|revision|revisions}} $1 from wiki $2',
94277 'maintenance-revnotfound' => 'Revision $1 not found!',
95 - // sql
96 - 'maintenance-sql' => 'Use this form to execute a SQL query on the database.',
97 - 'maintenance-sql-aff' => 'Affected rows: $1',
98 - 'maintenance-sql-res' => '$1 {{PLURAL:$1|row|rows}} returned:
99 -$2',
100278 // stats
101279 'maintenance-stats-edits' => 'Number of edits: $1',
102280 'maintenance-stats-articles' => 'Number of pages in the main namespace: $1',
@@ -128,8 +306,6 @@
129307 'maintenance-memc-updates' => 'updates:',
130308 'maintenance-memc-uncacheable' => 'uncacheable:',
131309 'maintenance-memc-diffcache' => 'Diff Cache',
132 - // eval
133 - 'maintenance-eval' => 'Use this form to evaluate PHP code in the MediaWiki environment.',
134310 // reassignEdits
135311 'maintenance-reassignEdits' => 'Use this form to reassign edits from one user to another.',
136312 'maintenance-re-from' => 'Name of the user to assign edits from',
@@ -154,11 +330,10 @@
155331 * @author Lloffiwr
156332 * @author Purodha
157333 * @author Siebrand
158 - * @author The Evil IP address
159334 * @author Translationista
160335 */
161336 $messages['qqq'] = array(
162 - 'maintenance-desc' => '{{desc}}',
 337+ 'maintenance-desc' => 'Short description of the Maintenance extension, shown in [[Special:Version]]. Do not translate or change links.',
163338 'right-maintenance' => '{{doc-right}}',
164339 'maintenance-name' => '{{Identical|Username}}',
165340 'maintenance-password' => '{{Identical|Password}}',
@@ -166,7 +341,7 @@
167342 'maintenance-update' => "This message appears next to a checkbox. 'Unchecked' means that the checkbox has not been 'checked'. Words having the same meaning as 'checked' in this sentence are 'marked', 'ticked' and 'selected'.
168343
169344 Are UPDATE and DELETE/INSERT also translatable?",
170 - 'maintenance-confirm' => '{{Identical|Confirm}}',
 345+ 'maintenance-option-confirm' => '{{Identical|Confirm}}',
171346 'maintenance-deleted' => '{{Identical|Deleted}}',
172347 'maintenance-revdelete' => '* $1 is a list of revisions numbers
173348 * $2 is the local wiki id (string containing database name and tables prefix, if any)',
@@ -200,7 +375,7 @@
201376 'maintenance-name' => 'Gebruikersnaam',
202377 'maintenance-password' => 'Wagwoord',
203378 'maintenance-reason' => 'Rede',
204 - 'maintenance-confirm' => 'Bevestig',
 379+ 'maintenance-option-confirm' => 'Bevestig',
205380 'maintenance-invalidname' => 'Ongeldige gebruikersnaam!',
206381 'maintenance-invalidtitle' => 'Ongeldige bladsynaam: "$1"!',
207382 'maintenance-deleted' => 'Geskrap',
@@ -224,7 +399,7 @@
225400 * @author Juanpabl
226401 */
227402 $messages['an'] = array(
228 - 'maintenance-confirm' => 'Confirmar',
 403+ 'maintenance-option-confirm' => 'Confirmar',
229404 );
230405
231406 /** Arabic (العربية)
@@ -234,7 +409,7 @@
235410 */
236411 $messages['ar'] = array(
237412 'maintenance' => 'تشغيل سكريبتات الصيانة',
238 - 'maintenance-desc' => '[[Special:Maintenance|واجهة وب]] لسكربتات صيانة مختلفة',
 413+ 'maintenance-desc' => '[[Special:Maintenance|واجهة ويب]] لسكريبتات صيانة مختلفة',
239414 'right-maintenance' => 'تشغيل سكريبتات الصيانة من خلال [[Special:Maintenance]]',
240415 'maintenance-backlink' => 'الرجوع إلى اختيار السكريبت',
241416 'maintenance-header' => 'من فضلك اختر سكريبت بالأسفل للتنفيذ.
@@ -262,16 +437,16 @@
263438 'maintenance-initStats' => 'استخدم هذه الاستمارة لإعادة حساب إحصاءات الموقع، محددا ما إذا كنت ترغب في إعادة حساب مشاهدات الصفحات أيضا',
264439 'maintenance-moveBatch' => 'استخدم هذه الاستمارة لنقل الصفحات بشكل كمي.
265440 كل سطر ينبغي أن يحدد صفحة مصدر وصفحة هدف مفصولين ببايب',
266 - 'maintenance-invalidtype' => 'نوع غير صحيح!',
 441+ 'maintenance-error-invalidtype' => 'نوع غير صحيح!',
267442 'maintenance-name' => 'اسم مستخدم',
268443 'maintenance-password' => 'كلمة السر',
269444 'maintenance-bureaucrat' => 'ترقية مستخدم إلى حالة بيروقراط',
270445 'maintenance-reason' => 'سبب',
271446 'maintenance-update' => 'استخدم UPDATE عند تحديث جدول غير المعلم يستخدم DELETE/INSERT بدلا من ذلك.',
272447 'maintenance-noviews' => 'علم على هذا لمنع تحديث عدد عرض الصفحات',
273 - 'maintenance-confirm' => 'تأكيد',
 448+ 'maintenance-option-confirm' => 'تأكيد',
274449 'maintenance-invalidname' => 'اسم مستخدم غير صحيح!',
275 - 'maintenance-success' => '$1 عمل بنجاح!',
 450+ 'maintenance-output-success' => '$1 عمل بنجاح!',
276451 'maintenance-userexists' => 'المستخدم موجود حاليا!',
277452 'maintenance-invalidtitle' => 'عنوان غير صحيح "$1"!',
278453 'maintenance-titlenoexist' => 'العنوان المحدد ("$1") غير موجود!',
@@ -380,16 +555,16 @@
381556 'maintenance-initStats' => 'استخدم هذه الإستمارة لإعادة حساب إحصاءات الموقع، محددا ما إذا كنت ترغب فى إعادة حساب مشاهدات الصفحات أيضا',
382557 'maintenance-moveBatch' => 'استخدم هذه الإستمارة لنقل الصفحات بشكل كمى.
383558 كل سطر ينبغى أن يحدد صفحة مصدر وصفحة هدف مفصولين ببايب',
384 - 'maintenance-invalidtype' => 'نوع غير صحيح!',
 559+ 'maintenance-error-invalidtype' => 'نوع غير صحيح!',
385560 'maintenance-name' => 'اسم يوزر',
386561 'maintenance-password' => 'كلمة السر',
387562 'maintenance-bureaucrat' => 'ترقية مستخدم إلى حالة بيروقراط',
388563 'maintenance-reason' => 'سبب',
389564 'maintenance-update' => 'استخدم UPDATE عند تحديث جدول غير المعلم يستخدم DELETE/INSERT بدلا من ذلك.',
390565 'maintenance-noviews' => 'علم على هذا لمنع تحديث عدد عرض الصفحات',
391 - 'maintenance-confirm' => 'تأكيد',
 566+ 'maintenance-option-confirm' => 'تأكيد',
392567 'maintenance-invalidname' => 'اسم يوزر مش صحيح !',
393 - 'maintenance-success' => '$1 عمل بنجاح!',
 568+ 'maintenance-output-success' => '$1 عمل بنجاح!',
394569 'maintenance-userexists' => 'اليوزر موجود دلوقتى!',
395570 'maintenance-invalidtitle' => 'عنوان غير صحيح "$1"!',
396571 'maintenance-titlenoexist' => 'العنوان المحدد ("$1") غير موجود!',
@@ -445,14 +620,6 @@
446621 'maintenance-re-re' => 'جارى إعادة إلحاق التعديلات... تم',
447622 );
448623
449 -/** Belarusian (Беларуская)
450 - * @author Тест
451 - */
452 -$messages['be'] = array(
453 - 'maintenance-reason' => 'Прычына',
454 - 'maintenance-confirm' => 'Пацвердзіць',
455 -);
456 -
457624 /** Belarusian (Taraškievica orthography) (‪Беларуская (тарашкевіца)‬)
458625 * @author EugeneZelenko
459626 * @author Jim-by
@@ -487,16 +654,16 @@
488655 'maintenance-initStats' => 'Выкарыстоўвайце гэтую форму для перападліку статыстыкі сайта. Пазначце, калі Вы таксама жадаеце перападлічыць прагляд старонак',
489656 'maintenance-moveBatch' => 'Выкарыстоўвайце гэтую форму для масавага пераносу старонак.
490657 У кожным радку павінна быць крынічная старонка і мэтавая старонка, падзеленыя сымбалем «|»',
491 - 'maintenance-invalidtype' => 'Няслушны тып!',
 658+ 'maintenance-error-invalidtype' => 'Няслушны тып!',
492659 'maintenance-name' => 'Імя ўдзельніка',
493660 'maintenance-password' => 'Пароль',
494661 'maintenance-bureaucrat' => 'Надаць удзельніку статус бюракрата',
495662 'maintenance-reason' => 'Прычына',
496663 'maintenance-update' => 'Выкарыстоўвайце UPDATE для абнаўленьня табліцы? Паспрабуйце выкарыстоўваць замест гэтага DELETE/INSERT.',
497664 'maintenance-noviews' => 'Пазначце гэта, каб не абнаўляць колькасьць праглядаў старонак',
498 - 'maintenance-confirm' => 'Пацьвердзіць',
 665+ 'maintenance-option-confirm' => 'Пацьвердзіць',
499666 'maintenance-invalidname' => 'Няслушнае імя ўдзельніка!',
500 - 'maintenance-success' => '$1 пасьпяхова запушчаны!',
 667+ 'maintenance-output-success' => '$1 пасьпяхова запушчаны!',
501668 'maintenance-userexists' => 'Удзельнік ужо існуе!',
502669 'maintenance-invalidtitle' => 'Няслушная назва «$1»!',
503670 'maintenance-titlenoexist' => 'Пазначаная назва («$1») не існуе!',
@@ -575,16 +742,16 @@
576743 Всеки ред трябва да съдържа по един номер на версия',
577744 'maintenance-moveBatch' => 'Този формуляр служи за масово преместване на страници.
578745 Всеки ред трябва да съдържа основна страница и целева страница, разделени с отвесна черта',
579 - 'maintenance-invalidtype' => 'Невалиден тип!',
 746+ 'maintenance-error-invalidtype' => 'Невалиден тип!',
580747 'maintenance-name' => 'Потребителско име',
581748 'maintenance-password' => 'Парола',
582749 'maintenance-bureaucrat' => 'Предоставяне на права на бюрократ',
583750 'maintenance-reason' => 'Причина',
584751 'maintenance-update' => 'Използване на UPDATE при обновяване на таблиците? Без отметка се използва DELETE/INSERT.',
585752 'maintenance-noviews' => 'Поставянето на отметка ще спре обновяването на броя прегледи на страниците',
586 - 'maintenance-confirm' => 'Потвърждаване',
 753+ 'maintenance-option-confirm' => 'Потвърждаване',
587754 'maintenance-invalidname' => 'Невалидно потребителско име!',
588 - 'maintenance-success' => '$1 беше изпълнен успешно!',
 755+ 'maintenance-output-success' => '$1 беше изпълнен успешно!',
589756 'maintenance-userexists' => 'Този потребител вече съществува!',
590757 'maintenance-invalidtitle' => 'Невалидно заглавие „$1“!',
591758 'maintenance-titlenoexist' => 'Посоченото заглавие („$1“) не съществува!',
@@ -663,7 +830,7 @@
664831 'maintenance-noviews' => 'Askit kement-mañ evit enebiñ ouzh hizivadenn an niver a weladennoù evit ar pajennoù.',
665832 'maintenance-confirm' => 'Kadarnaat',
666833 'maintenance-invalidname' => 'Anv implijer fall !',
667 - 'maintenance-success' => '$1 zo aet da benn vat !',
 834+ 'maintenance-output-success' => '$1 zo aet da benn vat !',
668835 'maintenance-userexists' => 'An implijer zo anezhañ dija !',
669836 'maintenance-invalidtitle' => 'Titl fall "$1" !',
670837 'maintenance-titlenoexist' => 'N\'eus ket eus an titl bet lakaet ("$1") !',
@@ -752,16 +919,16 @@
753920 'maintenance-initStats' => 'Koristite ovaj obrazac za ponovo računanje statistika sajta, navodeći da li želite i ponovo računanje pregleda stranice',
754921 'maintenance-moveBatch' => 'Koristite ovaj obrazac za masovno premještanje stranica.
755922 Svaka linija treba navesti izvornu stranicu i odredišnu stranicu razdvojene uspravnom linijom',
756 - 'maintenance-invalidtype' => 'Nevaljan tip!',
 923+ 'maintenance-error-invalidtype' => 'Nevaljan tip!',
757924 'maintenance-name' => 'Korisničko ime',
758925 'maintenance-password' => 'Šifra',
759926 'maintenance-bureaucrat' => 'Unaprijedi korisnika u birokratu',
760927 'maintenance-reason' => 'Razlog',
761928 'maintenance-update' => 'Koristite UPDATE kada ažurirate tabelu? Umjesto toga ukloni upotrebu DELETE/INSERT.',
762929 'maintenance-noviews' => 'Odaberite ovo za prevenciju ažuriranja broja pogleda na stranicu',
763 - 'maintenance-confirm' => 'Potvrdi',
 930+ 'maintenance-option-confirm' => 'Potvrdi',
764931 'maintenance-invalidname' => 'Nevaljano korisničko ime!',
765 - 'maintenance-success' => '$1 je bio pokrenut uspješno!',
 932+ 'maintenance-output-success' => '$1 je bio pokrenut uspješno!',
766933 'maintenance-userexists' => 'Korisnik već postoji!',
767934 'maintenance-invalidtitle' => 'Nevaljan naslov "$1"!',
768935 'maintenance-titlenoexist' => 'Navedeni naslov ("$1") ne postoji!',
@@ -825,7 +992,7 @@
826993 'maintenance-changePassword-desc' => "Canvia la contrasenya d'un usuari",
827994 'maintenance-deleteBatch-desc' => 'Eliminació massiva de pàgines',
828995 'maintenance-reason' => 'Motiu',
829 - 'maintenance-confirm' => 'Confirma',
 996+ 'maintenance-option-confirm' => 'Confirma',
830997 'maintenance-invalidname' => "Nom d'usuari no vàlid!",
831998 'maintenance-deleted' => 'ELIMINAT',
832999 'maintenance-stats-edits' => "Nombre d'edicions: $1",
@@ -838,18 +1005,6 @@
8391006 'maintenance-reason' => 'Бахьан',
8401007 );
8411008
842 -/** Sorani (کوردی) */
843 -$messages['ckb'] = array(
844 - 'maintenance-reason' => 'هۆکار',
845 - 'maintenance-confirm' => 'پشتدار بکەرەوە',
846 -);
847 -
848 -/** Czech (Česky) */
849 -$messages['cs'] = array(
850 - 'maintenance-password' => 'Heslo',
851 - 'maintenance-confirm' => 'Potvrdit',
852 -);
853 -
8541009 /** Church Slavic (Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ)
8551010 * @author ОйЛ
8561011 */
@@ -900,16 +1055,16 @@
9011056 'maintenance-initStats' => 'Verwende diese Maske, um die Seitenstatistiken neu zu berechnen und gib dabei an, ob du auch die Seitenaufrufe neu berechnen möchtest.',
9021057 'maintenance-moveBatch' => 'Verwende diese Maske, um viele Seiten zu verschieben.
9031058 Jede Zeile sollte eine Quellseite und eine Zielseite angeben, durch einen Senkrechtstrich getrennt',
904 - 'maintenance-invalidtype' => 'Ungültiger Typ!',
 1059+ 'maintenance-error-invalidtype' => 'Ungültiger Typ!',
9051060 'maintenance-name' => 'Benutzername',
9061061 'maintenance-password' => 'Passwort',
9071062 'maintenance-bureaucrat' => 'Benutzer zum Bürokraten machen',
9081063 'maintenance-reason' => 'Grund',
9091064 'maintenance-update' => 'UPDATE zum Aktualisieren von Tabellen verwenden? Wenn nicht aktiviert, wird DELETE/INSERT verwendet.',
9101065 'maintenance-noviews' => 'Aktualisierung des Seitenaufrufszählers deaktivieren',
911 - 'maintenance-confirm' => 'Bestätigen',
 1066+ 'maintenance-option-confirm' => 'Bestätigen',
9121067 'maintenance-invalidname' => 'Ungültiger Benutzername!',
913 - 'maintenance-success' => '$1 erfolgreich ausgeführt!',
 1068+ 'maintenance-output-success' => '$1 erfolgreich ausgeführt!',
9141069 'maintenance-userexists' => 'Benutzer existiert bereits!',
9151070 'maintenance-invalidtitle' => 'Ungültiger Titel „$1“!',
9161071 'maintenance-titlenoexist' => 'Der angegebene Titel („$1“) existiert nicht!',
@@ -1018,16 +1173,16 @@
10191174 'maintenance-initStats' => 'Wužyj toś ten formular, aby znowego woblicył statistiku sedła. Pódaj, lěc coš zwobraznjenja boka teke znowego woblicyś.',
10201175 'maintenance-moveBatch' => 'Wužyj toś ten formular, aby pśesunuł boki z kopicami.
10211176 Kužda smužka by měła žrědłowy bok a celowy bok pódaś, kótrejž stej pśez znamješko rołka (|) wótźělonej',
1022 - 'maintenance-invalidtype' => 'Njepłaśiwy typ!',
 1177+ 'maintenance-error-invalidtype' => 'Njepłaśiwy typ!',
10231178 'maintenance-name' => 'Wužywarske mě',
10241179 'maintenance-password' => 'Gronidło',
10251180 'maintenance-bureaucrat' => 'Do statusa běrokrata pózwignuś',
10261181 'maintenance-reason' => 'Pśicyna',
10271182 'maintenance-update' => 'UPDATE za aktualizěrowanje tabele wužywaś? Jolic to njejo wubrane, DELETE/INSERT se wužywa.',
10281183 'maintenance-noviews' => 'Wubjeŕ to, aby zajźował aktualizaciji licby zwobraznjenjow boka',
1029 - 'maintenance-confirm' => 'Wobkšuśiś',
 1184+ 'maintenance-option-confirm' => 'Wobkšuśiś',
10301185 'maintenance-invalidname' => 'Njepłaśiwe wužywarske mě!',
1031 - 'maintenance-success' => '$1 wuspěšnje wuwjeźony!',
 1186+ 'maintenance-output-success' => '$1 wuspěšnje wuwjeźony!',
10321187 'maintenance-userexists' => 'Wužywaŕ južo eksistěrujo!',
10331188 'maintenance-invalidtitle' => 'Njepłaśiwy titel "$1"!',
10341189 'maintenance-titlenoexist' => 'Pódany titel ("$1") njeeksistěrujo!',
@@ -1095,14 +1250,14 @@
10961251 'maintenance-initStats-desc' => 'Επανυπολογισμός των στατιστικών του ιστοτόπου',
10971252 'maintenance-moveBatch-desc' => 'Μαζική μετακίνηση σελίδων',
10981253 'maintenance-sql-desc' => 'Εκτέλεση ενός αιτήματος SQL',
1099 - 'maintenance-invalidtype' => 'Μη έγκυρος τύπος!',
 1254+ 'maintenance-error-invalidtype' => 'Μη έγκυρος τύπος!',
11001255 'maintenance-name' => 'Όνομα χρήστη',
11011256 'maintenance-password' => 'Κωδικός',
11021257 'maintenance-bureaucrat' => 'Προαγωγή χρήστη σε γραφειοκράτη',
11031258 'maintenance-reason' => 'Λόγος',
1104 - 'maintenance-confirm' => 'Επιβεβαίωση',
 1259+ 'maintenance-option-confirm' => 'Επιβεβαίωση',
11051260 'maintenance-invalidname' => 'Μη έγκυρο όνομα χρήστη!',
1106 - 'maintenance-success' => 'Το $1 έτρεξε επιτυχώς!',
 1261+ 'maintenance-output-success' => 'Το $1 έτρεξε επιτυχώς!',
11071262 'maintenance-userexists' => 'Ο χρήστης υπάρχει ήδη!',
11081263 'maintenance-invalidtitle' => 'Μη έγκυρος τίτλος "$1"!',
11091264 'maintenance-titlenoexist' => 'Ο τίτλος που δόθηκε ("$1") δεν υπάρχει!',
@@ -1153,13 +1308,13 @@
11541309 'maintenance-deleteBatch-desc' => 'Amasforigi paĝojn',
11551310 'maintenance-initStats-desc' => 'Rekalkuli retejan statistikon',
11561311 'maintenance-moveBatch-desc' => 'Amasmovi paĝojn',
1157 - 'maintenance-invalidtype' => 'Nevalida speco!',
 1312+ 'maintenance-error-invalidtype' => 'Nevalida speco!',
11581313 'maintenance-name' => 'Salutnomo',
11591314 'maintenance-password' => 'Pasvorto',
11601315 'maintenance-reason' => 'Kialo',
1161 - 'maintenance-confirm' => 'Konfirmi',
 1316+ 'maintenance-option-confirm' => 'Konfirmi',
11621317 'maintenance-invalidname' => 'Nevalida salutnomo!',
1163 - 'maintenance-success' => '$1 sukcesis!',
 1318+ 'maintenance-output-success' => '$1 sukcesis!',
11641319 'maintenance-userexists' => 'Uzanto jam ekzistas!',
11651320 'maintenance-invalidtitle' => 'Nevalida titolo "$1"!',
11661321 'maintenance-failed' => 'MALSUKCESIS',
@@ -1228,16 +1383,16 @@
12291384 'maintenance-initStats' => 'Usar este formulario para recalcular estadísticas del sitio, especificando si deseas recalcular vistas de página también',
12301385 'maintenance-moveBatch' => 'Use este formulario para mover páginas en masa.
12311386 Cada línea debería especificar una página fuente y página destino separadas por una barra (“|”)',
1232 - 'maintenance-invalidtype' => 'Tipo inválido!',
 1387+ 'maintenance-error-invalidtype' => 'Tipo inválido!',
12331388 'maintenance-name' => 'Nombre de usuario',
12341389 'maintenance-password' => 'Contraseña',
12351390 'maintenance-bureaucrat' => 'Promover usuario al status de burócrata',
12361391 'maintenance-reason' => 'Motivo',
12371392 'maintenance-update' => '¿Utilizar UPDATE cuando se actualiza una tabla? Si está desmarcado utiliza DELETE/INSERT en lugar de UPDATE.',
12381393 'maintenance-noviews' => 'Verificar esto para evitar la actualización del número de vistas a la página',
1239 - 'maintenance-confirm' => 'Confirmar',
 1394+ 'maintenance-option-confirm' => 'Confirmar',
12401395 'maintenance-invalidname' => 'Nombre de usuario inválido!',
1241 - 'maintenance-success' => '$1 se ejecutó con éxito!',
 1396+ 'maintenance-output-success' => '$1 se ejecutó con éxito!',
12421397 'maintenance-userexists' => 'Usuario ya existe!',
12431398 'maintenance-invalidtitle' => 'Título inválido "$1"!',
12441399 'maintenance-titlenoexist' => 'Título especificado ("$1") no existe!',
@@ -1300,7 +1455,7 @@
13011456 $messages['et'] = array(
13021457 'maintenance-changePassword-desc' => 'Muuda kasutajate paroole',
13031458 'maintenance-deleteBatch-desc' => 'Lehekülgede lauskustutamine',
1304 - 'maintenance-invalidtype' => 'Vigane tüüp!',
 1459+ 'maintenance-error-invalidtype' => 'Vigane tüüp!',
13051460 'maintenance-name' => 'Kasutajanimi',
13061461 'maintenance-password' => 'Parool',
13071462 'maintenance-bureaucrat' => 'Eduta kasutajat bürokraadi staatusesse',
@@ -1317,7 +1472,7 @@
13181473 'maintenance-password' => 'Pasahitza',
13191474 'maintenance-bureaucrat' => 'Lankidea burokrata bihurtu',
13201475 'maintenance-reason' => 'Arrazoia',
1321 - 'maintenance-confirm' => 'Baieztatu',
 1476+ 'maintenance-option-confirm' => 'Baieztatu',
13221477 'maintenance-invalidname' => 'Lankide izen okerra!',
13231478 'maintenance-deleted' => 'EZABATUA',
13241479 'maintenance-memc-total' => 'guztira:',
@@ -1363,16 +1518,16 @@
13641519 'maintenance-initStats' => 'Käytä tätä lomaketta sivuston tilastojen uudelleenlaskemiseen, määritellen myös, haluatko uudelleenlaskea sivujen näyttökerrat',
13651520 'maintenance-moveBatch' => 'Käytä tätä lomaketta sivujen massasiirtoon.
13661521 Jokaisella rivillä tulisi olla lähdesivu ja kohdesivu pystyviivan erottamina',
1367 - 'maintenance-invalidtype' => 'Kelvoton tyyppi!',
 1522+ 'maintenance-error-invalidtype' => 'Kelvoton tyyppi!',
13681523 'maintenance-name' => 'Käyttäjätunnus',
13691524 'maintenance-password' => 'Salasana',
13701525 'maintenance-bureaucrat' => 'Ylennä käyttäjä byrokraatiksi',
13711526 'maintenance-reason' => 'Syy',
13721527 'maintenance-update' => 'Käytä UPDATE-lausekkeita taulua päivitettäessä? Jos tätä ei ole valittu, DELETE/INSERT-lausekkeita käytetään sen sijaan.',
13731528 'maintenance-noviews' => 'Valitse tämä estääksesi sivujen näyttökertojen päivittämisen',
1374 - 'maintenance-confirm' => 'Vahvista',
 1529+ 'maintenance-option-confirm' => 'Vahvista',
13751530 'maintenance-invalidname' => 'Virheellinen käyttäjätunnus.',
1376 - 'maintenance-success' => '$1 ajettiin onnistuneesti.',
 1531+ 'maintenance-output-success' => '$1 ajettiin onnistuneesti.',
13771532 'maintenance-userexists' => 'Käyttäjä on jo olemassa.',
13781533 'maintenance-invalidtitle' => 'Kelvoton otsikko "$1"!',
13791534 'maintenance-titlenoexist' => 'Määritellyn otsikon ("$1") mukaista artikkelia ei ole olemassa!',
@@ -1466,16 +1621,16 @@
14671622 'maintenance-initStats' => 'Utilisez ce formulaire pour recalculer les statistiques du site, en indiquant, le cas échéant, si vous désirez le recalcul du nombre de visites par page.',
14681623 'maintenance-moveBatch' => 'Utilisez ce formulaire pour déplacer en masse des pages.
14691624 Chaque ligne devra indiquer la page d’origine et celle de destination, lesquelles devront être séparées par un « <nowiki>|</nowiki> »',
1470 - 'maintenance-invalidtype' => 'Type incorrect !',
 1625+ 'maintenance-error-invalidtype' => 'Type incorrect !',
14711626 'maintenance-name' => 'Nom d’utilisateur',
14721627 'maintenance-password' => 'Mot de passe',
14731628 'maintenance-bureaucrat' => 'Promouvoir l’utilisateur au statut de bureaucrate',
14741629 'maintenance-reason' => 'Motif',
14751630 'maintenance-update' => 'Voulez-vous utiliser la méthode « UPDATE » pour la mise à jour directe d’une table ? Décochez l’option pour utiliser plutôt « DELETE / INSERT » (suppression puis réinsertion).',
14761631 'maintenance-noviews' => 'Cocher ceci pour empêcher la mise à jour du nombre de visites des pages.',
1477 - 'maintenance-confirm' => 'Confirmer',
 1632+ 'maintenance-option-confirm' => 'Confirmer',
14781633 'maintenance-invalidname' => 'Nom d’utilisateur incorrect !',
1479 - 'maintenance-success' => '$1 s’est déroulé avec succès !',
 1634+ 'maintenance-output-success' => '$1 s’est déroulé avec succès !',
14801635 'maintenance-userexists' => 'L’utilisateur existe déjà !',
14811636 'maintenance-invalidtitle' => 'Titre incorrect « $1 » !',
14821637 'maintenance-titlenoexist' => 'Le titre indiqué (« $1 ») n’existe pas !',
@@ -1536,7 +1691,7 @@
15371692 */
15381693 $messages['frp'] = array(
15391694 'maintenance-reason' => 'Rêson',
1540 - 'maintenance-confirm' => 'Confirmar',
 1695+ 'maintenance-option-confirm' => 'Confirmar',
15411696 'maintenance-stats-pages' => 'Nombro de pâges : $1',
15421697 'maintenance-stats-users' => 'Nombro d’utilisators : $1',
15431698 'maintenance-stats-admins' => 'Nombro d’administrators : $1',
@@ -1600,16 +1755,16 @@
16011756 'maintenance-initStats' => 'Use este formulario para volver calcular as estatísticas do sitio, especificando se tamén quere calcular de novo as vistas por páxina',
16021757 'maintenance-moveBatch' => 'Use este formulario para mover páxinas en masa.
16031758 Cada liña debería especificar unha fonte e destino da páxina separados por unha barra (“|”)',
1604 - 'maintenance-invalidtype' => 'Tipo inválido!',
 1759+ 'maintenance-error-invalidtype' => 'Tipo inválido!',
16051760 'maintenance-name' => 'Nome de usuario',
16061761 'maintenance-password' => 'Contrasinal',
16071762 'maintenance-bureaucrat' => 'Promover este usuario ao status de burócrata',
16081763 'maintenance-reason' => 'Motivo',
16091764 'maintenance-update' => 'Desexa usar ACTUALIZAR ao actualizar unha táboa? Se non marca a opción, usarase, no canto diso, BORRAR/INSERTAR.',
16101765 'maintenance-noviews' => 'Comprove isto para previr a actualización do número de vistas por páxina',
1611 - 'maintenance-confirm' => 'Confirmar',
 1766+ 'maintenance-option-confirm' => 'Confirmar',
16121767 'maintenance-invalidname' => 'Nome de usuario inválido!',
1613 - 'maintenance-success' => '$1 executouse con éxito!',
 1768+ 'maintenance-output-success' => '$1 executouse con éxito!',
16141769 'maintenance-userexists' => 'O usuario xa existe!',
16151770 'maintenance-invalidtitle' => 'Título inválido "$1"!',
16161771 'maintenance-titlenoexist' => 'O título especificado ("$1") non existe!',
@@ -1673,7 +1828,7 @@
16741829 'maintenance-name' => 'Ὄνομα χρωμένου',
16751830 'maintenance-password' => 'Σύνθημα',
16761831 'maintenance-reason' => 'Αἰτία',
1677 - 'maintenance-confirm' => 'Κυροῦν',
 1832+ 'maintenance-option-confirm' => 'Κυροῦν',
16781833 'maintenance-failed' => 'ΑΠΕΤΕΥΧΘΗ',
16791834 'maintenance-deleted' => 'ΔΙΕΓΡΑΦΗ',
16801835 'maintenance-memc-requests' => 'Αἰτήσεις',
@@ -1713,16 +1868,16 @@
17141869 'maintenance-initStats' => 'Nimm die Maschke go d Sytestatischtike nej z rächne un gib debyy aa, eb Du au d Syteufruef witt nej rächne.',
17151870 'maintenance-moveBatch' => 'Nimm die Maschke go vil Syte verschiebe.
17161871 Jedi Zyyle sott e Quällsyten un e Ziilsyten aagee, dur e Sänkrächtstrich trännt',
1717 - 'maintenance-invalidtype' => 'Nit giltige Typ!',
 1872+ 'maintenance-error-invalidtype' => 'Nit giltige Typ!',
17181873 'maintenance-name' => 'Benutzername',
17191874 'maintenance-password' => 'Passwort',
17201875 'maintenance-bureaucrat' => 'Benutzer zum Bürokrat mache',
17211876 'maintenance-reason' => 'Grund',
17221877 'maintenance-update' => 'UPDATE zum Aktualisiere vu Tabälle neh? Wänn nit aktiviert, wird DELETE/INSERT bruucht.',
17231878 'maintenance-noviews' => 'Aktualisierig vum Sytenufruefzeller deaktiviere',
1724 - 'maintenance-confirm' => 'Bstätige',
 1879+ 'maintenance-option-confirm' => 'Bstätige',
17251880 'maintenance-invalidname' => 'Nit giltige Benutzername!',
1726 - 'maintenance-success' => '$1 erfolgrych uusgfiert!',
 1881+ 'maintenance-output-success' => '$1 erfolgrych uusgfiert!',
17271882 'maintenance-userexists' => 'Benutzer git s scho!',
17281883 'maintenance-invalidtitle' => 'Nit giltige Titel „$1“!',
17291884 'maintenance-titlenoexist' => 'Dr Titel („$1“), wu Du aagee hesch, git s nit!',
@@ -1785,11 +1940,6 @@
17861941 'maintenance-name' => 'સભ્ય નામ',
17871942 );
17881943
1789 -/** Hausa (هَوُسَ) */
1790 -$messages['ha'] = array(
1791 - 'maintenance-reason' => 'Dalili',
1792 -);
1793 -
17941944 /** Hakka (Hak-kâ-fa)
17951945 * @author Hakka
17961946 */
@@ -1840,16 +1990,16 @@
18411991 'maintenance-initStats' => 'השתמשו בטופס זה כדי לחשב מחדש את סטטיסטיקות האתר, וציינו האם ברצונכם לחשב מחדש גם את סטטיסטיקות הצפיות בדפים',
18421992 'maintenance-moveBatch' => 'השתמשו בטופס זה להעברה המונית של דפים.
18431993 כל שורה אמורה לציין דף מקור ודף יעד המופרדים ב־"|"',
1844 - 'maintenance-invalidtype' => 'הסוג אינו תקין!',
 1994+ 'maintenance-error-invalidtype' => 'הסוג אינו תקין!',
18451995 'maintenance-name' => 'שם משתמש',
18461996 'maintenance-password' => 'סיסמה',
18471997 'maintenance-bureaucrat' => 'קידום משתמש למצב ביורוקרט',
18481998 'maintenance-reason' => 'סיבה',
18491999 'maintenance-update' => 'האם להשתמש ב־UPDATE לעדכון הטבלה? אם תבטלו את הסימון, ייעשה שימוש ב־DELETE/INSERT במקום זאת.',
18502000 'maintenance-noviews' => 'סמנו זאת כדי למנוע את עדכון מספרי הצפיות בדפים',
1851 - 'maintenance-confirm' => 'אישור',
 2001+ 'maintenance-option-confirm' => 'אישור',
18522002 'maintenance-invalidname' => 'שם משתמש בלתי תקין!',
1853 - 'maintenance-success' => 'הסקריפט $1 רץ בהצלחה!',
 2003+ 'maintenance-output-success' => 'הסקריפט $1 רץ בהצלחה!',
18542004 'maintenance-userexists' => 'המשתמש כבר קיים!',
18552005 'maintenance-invalidtitle' => 'הכותרת "$1" אינה תקינה!',
18562006 'maintenance-titlenoexist' => 'הכותרת שצוינה ("$1") אינה קיימת!',
@@ -1937,16 +2087,16 @@
19382088 'maintenance-initStats' => 'Koristite ovu stranicu za ponovno izračunavanje statistike, odredite ako želite izračunati i broj gledanja stranica također',
19392089 'maintenance-moveBatch' => 'Koristite ovu stranicu za skupno premještanje stranica.
19402090 Svaki red mora sadržavati polazišnu stranicu i ciljnu stranicu odvojeno kosom crtom "|"',
1941 - 'maintenance-invalidtype' => 'Neispravna vrsta!',
 2091+ 'maintenance-error-invalidtype' => 'Neispravna vrsta!',
19422092 'maintenance-name' => 'Suradničko ime',
19432093 'maintenance-password' => 'Lozinka',
19442094 'maintenance-bureaucrat' => 'Dodjeli suradniku pravo birokrata',
19452095 'maintenance-reason' => 'Razlog',
19462096 'maintenance-update' => 'Koristi UPDATE prilikom ažuriranja tablice? Neoznačeno umjesto toga koristi DELETE/INSERT.',
19472097 'maintenance-noviews' => 'Označite ovo za sprečavanje ažuriranja broja gledanja stranica',
1948 - 'maintenance-confirm' => 'Potvrdi',
 2098+ 'maintenance-option-confirm' => 'Potvrdi',
19492099 'maintenance-invalidname' => 'Nevaljano suradničko ime!',
1950 - 'maintenance-success' => '$1 pokrenut uspješno!',
 2100+ 'maintenance-output-success' => '$1 pokrenut uspješno!',
19512101 'maintenance-userexists' => 'Suradnik već postoji!',
19522102 'maintenance-invalidtitle' => 'Nevaljan naslov "$1"!',
19532103 'maintenance-titlenoexist' => 'Određeni naslov ("$1") ne postoji!',
@@ -2018,16 +2168,16 @@
20192169 'maintenance-initStats' => 'Wužij tutón formular, zo by statistiku sydła znowa wobličił. Podaj, hač chceš zwobraznjenja strony tež znowa wobličić',
20202170 'maintenance-moveBatch' => 'Wužij tutón formular, zo by strony z masami přesunył.
20212171 Kóžda linka měła žórłowu stronu a cilowu stronu podać, wótdźělenej přez znamješko rołka (|)',
2022 - 'maintenance-invalidtype' => 'Njepłaćiwy typ!',
 2172+ 'maintenance-error-invalidtype' => 'Njepłaćiwy typ!',
20232173 'maintenance-name' => 'Wužiwarske mjeno',
20242174 'maintenance-password' => 'Hesło',
20252175 'maintenance-bureaucrat' => 'Wužiwarja do statusa běrokrata pozběhnyć',
20262176 'maintenance-reason' => 'Přičina',
20272177 'maintenance-update' => 'Při aktualizowanju tabele UPDATE wužiwać? Jeli to njeje wubrane, so DELETE/INSERT město toho wužiwa.',
20282178 'maintenance-noviews' => 'Wubjer to, zo by aktualizowanju ličby zwobraznjenjow strony zadźěwał',
2029 - 'maintenance-confirm' => 'Wobkrućić',
 2179+ 'maintenance-option-confirm' => 'Wobkrućić',
20302180 'maintenance-invalidname' => 'Njepłaćiwe wužiwarske mjeno!',
2031 - 'maintenance-success' => '$1 wuspěšnje wuwjedźeny!',
 2181+ 'maintenance-output-success' => '$1 wuspěšnje wuwjedźeny!',
20322182 'maintenance-userexists' => 'Wužiwar hižo eksistuje!',
20332183 'maintenance-invalidtitle' => 'Njepłaćiwy titul "$1"!',
20342184 'maintenance-titlenoexist' => 'Pódaty titul ("$1") njeeksistuje!',
@@ -2117,16 +2267,16 @@
21182268 'maintenance-initStats' => 'Ezen űrlap segítségével újraszámoltathatod az oldal statisztikáit, valamint opcionálisan az oldalmegtekintések számát is',
21192269 'maintenance-moveBatch' => 'Ezen űrlap segítségével tömegesen nevezhetsz át lapokat.
21202270 Minden sorban egy-egy forráslapnak és céllapnak kell szerepelnie, pipe ( | ) karakterrel elválasztva',
2121 - 'maintenance-invalidtype' => 'Érvénytelen típus!',
 2271+ 'maintenance-error-invalidtype' => 'Érvénytelen típus!',
21222272 'maintenance-name' => 'Felhasználói név',
21232273 'maintenance-password' => 'jelszó',
21242274 'maintenance-bureaucrat' => 'Felhasználó előléptetése bürokratává',
21252275 'maintenance-reason' => 'Indoklás',
21262276 'maintenance-update' => 'Használja az UPDATE-et táblák frissítésekor? Ha nem pipálod ki, akkor DELETE/INSERT lesz használva helyette.',
21272277 'maintenance-noviews' => 'Jelöld be ezt, ha nem szeretnéd frissíteni az oldalmegtekintések számát',
2128 - 'maintenance-confirm' => 'Megerősítés',
 2278+ 'maintenance-option-confirm' => 'Megerősítés',
21292279 'maintenance-invalidname' => 'Érvénytelen felhasználói név!',
2130 - 'maintenance-success' => '$1 sikeresen lefutott!',
 2280+ 'maintenance-output-success' => '$1 sikeresen lefutott!',
21312281 'maintenance-userexists' => 'A felhasználó már létezik!',
21322282 'maintenance-invalidtitle' => 'Érvénytelen cím: „$1”!',
21332283 'maintenance-titlenoexist' => 'A megadott cím („$1”) nem létezik!',
@@ -2215,16 +2365,16 @@
22162366 'maintenance-initStats' => 'Usa iste formulario pro recalcular le statisticas del sito. Specifica si tu vole recalcular etiam le visitas de paginas.',
22172367 'maintenance-moveBatch' => 'Usa iste formulario pro renominar paginas in massa.
22182368 Cata linea debe specificar un pagina de origine e un pagina de destination separate per un tubo ("<nowiki>|</nowiki>").',
2219 - 'maintenance-invalidtype' => 'Typo invalide!',
 2369+ 'maintenance-error-invalidtype' => 'Typo invalide!',
22202370 'maintenance-name' => 'Nomine de usator',
22212371 'maintenance-password' => 'Contrasigno',
22222372 'maintenance-bureaucrat' => 'Promover le usator al stato de bureaucrate',
22232373 'maintenance-reason' => 'Motivo',
22242374 'maintenance-update' => 'Usar UPDATE pro actualisar un tabella? Dismarca pro usar DELETE/INSERT in vice.',
22252375 'maintenance-noviews' => 'Marca isto pro impedir le actualisation del numero de visitas de paginas.',
2226 - 'maintenance-confirm' => 'Confirmar',
 2376+ 'maintenance-option-confirm' => 'Confirmar',
22272377 'maintenance-invalidname' => 'Nomine de usator invalide!',
2228 - 'maintenance-success' => '$1 se executava con successo!',
 2378+ 'maintenance-output-success' => '$1 se executava con successo!',
22292379 'maintenance-userexists' => 'Le usator existe ja!',
22302380 'maintenance-invalidtitle' => 'Titulo invalide "$1"!',
22312381 'maintenance-titlenoexist' => 'Le titulo specificate ("$1") non existe!',
@@ -2316,16 +2466,16 @@
23172467 'maintenance-initStats' => 'Gunakan formulir ini untuk menghitung ulang statistik situs. Tentukan jika Anda ingin menghitung ulang juga tampilan halaman',
23182468 'maintenance-moveBatch' => 'Gunakan formulir ini untuk menghapus massal halaman.
23192469 Setiap baris harus mencantumkan halaman sumber dan tujuan, dipisahkan dengan tanda pipa',
2320 - 'maintenance-invalidtype' => 'Tipe tidak benar!',
 2470+ 'maintenance-error-invalidtype' => 'Tipe tidak benar!',
23212471 'maintenance-name' => 'Nama pengguna',
23222472 'maintenance-password' => 'Kata sandi',
23232473 'maintenance-bureaucrat' => 'Promosikan pengguna ke status birokrat',
23242474 'maintenance-reason' => 'Alasan',
23252475 'maintenance-update' => 'Gunakan UPDATE sewaktu memperbarui suatu tabel? Jika tidak, akan digunakan DELETE/INSERT.',
23262476 'maintenance-noviews' => 'Centang ini untuk mencegah pembaruan jumlah tampilan halaman',
2327 - 'maintenance-confirm' => 'Konfirmasi',
 2477+ 'maintenance-option-confirm' => 'Konfirmasi',
23282478 'maintenance-invalidname' => 'Nama pengguna tidak sah!',
2329 - 'maintenance-success' => '$1 berjalan lancar!',
 2479+ 'maintenance-output-success' => '$1 berjalan lancar!',
23302480 'maintenance-userexists' => 'Pengguna sudah ada!',
23312481 'maintenance-invalidtitle' => 'Judul "$1" tidak sah!',
23322482 'maintenance-titlenoexist' => 'Judul yang dimaksud ("$1") tidak ada!',
@@ -2381,11 +2531,9 @@
23822532 'maintenance-re-re' => 'Pengalihan suntingan{{int:ellipsis}} berhasil',
23832533 );
23842534
2385 -/** Igbo (Igbo)
2386 - * @author Ukabia
2387 - */
 2535+/** Igbo (Igbo) */
23882536 $messages['ig'] = array(
2389 - 'maintenance-password' => 'Okwúngáfè',
 2537+ 'maintenance-password' => 'Mkpurụ okwu ejị a gafẹ',
23902538 'maintenance-reason' => 'Mgbaghaputa:',
23912539 );
23922540
@@ -2432,16 +2580,16 @@
24332581 'maintenance-initStats' => 'Usa questo modulo per ricalcolare le statistiche del sito, specificando se vuoi ricalcolare anche il numero di visualizzazioni per pagina',
24342582 'maintenance-moveBatch' => 'Usa questo modulo per spostare pagine in blocco.
24352583 Ogni riga deve indicare una pagina di origine ed una di destinazione, separate da un pipe (|)',
2436 - 'maintenance-invalidtype' => 'Tipo non valido',
 2584+ 'maintenance-error-invalidtype' => 'Tipo non valido',
24372585 'maintenance-name' => 'Nome utente',
24382586 'maintenance-password' => 'Password',
24392587 'maintenance-bureaucrat' => 'Promuovi utente a burocrate',
24402588 'maintenance-reason' => 'Motivo',
24412589 'maintenance-update' => "Usare l'istruzione UPDATE per l'aggiornamento delle tabelle? Se non selezionato, usa DELETE/INSERT.",
24422590 'maintenance-noviews' => "Spuntare la casella per evitare l'aggiornamento del numero di visualizzazioni pagine",
2443 - 'maintenance-confirm' => 'Conferma',
 2591+ 'maintenance-option-confirm' => 'Conferma',
24442592 'maintenance-invalidname' => 'Nome utente non valido!',
2445 - 'maintenance-success' => '$1 eseguito con successo!',
 2593+ 'maintenance-output-success' => '$1 eseguito con successo!',
24462594 'maintenance-userexists' => 'Nome utente già esistente!',
24472595 'maintenance-invalidtitle' => 'Titolo "$1" non valido!',
24482596 'maintenance-titlenoexist' => 'Il titolo indicato ("$1") non esiste!',
@@ -2526,16 +2674,16 @@
25272675 'maintenance-deleteRevision' => 'このフォームを使って版を一括削除する。1行に1版のみ書く',
25282676 'maintenance-initStats' => 'このフォームを使ってサイト統計を再計算する。ページビューも同様に再計算したいか指定する',
25292677 'maintenance-moveBatch' => 'このフォームを使ってページを一括移動する。各行には移動元と移動先ページをパイプで区切って指定する',
2530 - 'maintenance-invalidtype' => '無効なタイプです!',
 2678+ 'maintenance-error-invalidtype' => '無効なタイプです!',
25312679 'maintenance-name' => '利用者名',
25322680 'maintenance-password' => 'パスワード',
25332681 'maintenance-bureaucrat' => '利用者をビューロクラットにする',
25342682 'maintenance-reason' => '理由',
25352683 'maintenance-update' => 'テーブルの更新に UPDATE を使いますか? 未チェックならば DELETE と INSERT を代わりに使います。',
25362684 'maintenance-noviews' => 'ページビュー数の更新を避けるにはここをチェックする',
2537 - 'maintenance-confirm' => '確認',
 2685+ 'maintenance-option-confirm' => '確認',
25382686 'maintenance-invalidname' => '無効な利用者名です!',
2539 - 'maintenance-success' => '$1 の実行は成功しました!',
 2687+ 'maintenance-output-success' => '$1 の実行は成功しました!',
25402688 'maintenance-userexists' => '利用者が既に存在します!',
25412689 'maintenance-invalidtitle' => '「$1」は無効なページ名です!',
25422690 'maintenance-titlenoexist' => '指定した名前 (「$1」) のページは存在しません!',
@@ -2607,14 +2755,14 @@
26082756 'maintenance' => 'ដំណើរការស្រ្គីបតំហែទាំ',
26092757 'maintenance-changePassword-desc' => 'ប្តូរពាក្យសំងាត់របស់អ្នកប្រើប្រាស់',
26102758 'maintenance-createAndPromote-desc' => 'បង្កើត​អ្នកប្រើប្រាស់ និង​ដំឡើង​ទៅជា​អ្នកអភិបាល (sysop status)',
2611 - 'maintenance-invalidtype' => 'គំរូ​មិន​ត្រឹមត្រូវ!',
 2759+ 'maintenance-error-invalidtype' => 'គំរូ​មិន​ត្រឹមត្រូវ!',
26122760 'maintenance-name' => 'អ្នកប្រើប្រាស់',
26132761 'maintenance-password' => 'ពាក្យសំងាត់',
26142762 'maintenance-bureaucrat' => 'ដំឡើង​អ្នកប្រើប្រាស់​ទៅជា​អ្នកការិយាល័យ',
26152763 'maintenance-reason' => 'មូលហេតុ',
2616 - 'maintenance-confirm' => 'អះអាង',
 2764+ 'maintenance-option-confirm' => 'អះអាង',
26172765 'maintenance-invalidname' => 'អ្នកប្រើប្រាស់មិនត្រឹមត្រូវ!',
2618 - 'maintenance-success' => '$1 បាន​ដំណើការ​ដោយ​ជោគជ័យ​!',
 2766+ 'maintenance-output-success' => '$1 បាន​ដំណើការ​ដោយ​ជោគជ័យ​!',
26192767 'maintenance-userexists' => 'អ្នកប្រើប្រាស់មានរួចជាស្រេចហើយ!',
26202768 'maintenance-invalidtitle' => 'ចំណងជើង​មិនត្រឹមត្រូវ "$1"!',
26212769 'maintenance-titlenoexist' => 'ចំណងជើងដែលបានផ្ដល់អោយ ("$1") មិនមានទេ!',
@@ -2662,7 +2810,7 @@
26632811 */
26642812 $messages['ko'] = array(
26652813 'maintenance-password' => '비밀번호',
2666 - 'maintenance-confirm' => '확인',
 2814+ 'maintenance-option-confirm' => '확인',
26672815 );
26682816
26692817 /** Colognian (Ripoarisch)
@@ -2701,16 +2849,16 @@
27022850 'maintenance-moveBatch' => 'Met hee dämm Fommulaa kanns De maßisch Sigge ömnenne.
27032851 En jede Reih sullt ene ahle u nene neue Siggetittel hengereneejn shtonn,
27042852 met enem senkrääschte Shtresh dozwesche, allsu däm „|“',
2705 - 'maintenance-invalidtype' => 'En onjölijje Zoot!',
 2853+ 'maintenance-error-invalidtype' => 'En onjölijje Zoot!',
27062854 'maintenance-name' => 'Metmaacher Name',
27072855 'maintenance-password' => 'Paßwoot',
27082856 'maintenance-bureaucrat' => 'Mach enne Bürrokrad uß ennem Metmaacher',
27092857 'maintenance-reason' => 'Jrond oddo Aanlaß',
27102858 'maintenance-update' => 'Met Höksche: bruch <span style="text-transform:uppercase">update</span> wann de Tabäll jänndert wede soll. Ohne Höksche: nemm <span style="text-transform:uppercase">delete</span> odder <span style="text-transform:uppercase">insert</span> doför.',
27112859 'maintenance-noviews' => 'Maach hee e Hööksche, öm de Aanzahl affjeroofe Sigge nit aanzepacke',
2712 - 'maintenance-confirm' => 'Bestätije',
 2860+ 'maintenance-option-confirm' => 'Bestätije',
27132861 'maintenance-invalidname' => 'Der Metmaacher kenne mer nit!',
2714 - 'maintenance-success' => '„$1“ es met Erfolch jeloufe!',
 2862+ 'maintenance-output-success' => '„$1“ es met Erfolch jeloufe!',
27152863 'maintenance-userexists' => 'Dä Metmaacher jidd_et ald!',
27162864 'maintenance-invalidtitle' => 'Onjöltije Sigge-Tittel: „$1“!',
27172865 'maintenance-titlenoexist' => 'Dä aanjejovve Tittel „$1“ jidd_et nit!',
@@ -2801,16 +2949,16 @@
28022950 'maintenance-initStats' => "Benotzt dëse Formulaire fir d'Statistike vum Site nei ze berechnen, gitt w.e.g. unn ob Dir d'Zuel vun de Säiten-Ufroen och wëllt nei berechent hunn",
28032951 'maintenance-moveBatch' => "Benotzt dëse Formulaire fir eng Grous Zuel vu Säiten ze réckelen.
28042952 An all Linn soll en Quellsäit an eng Zilsäit, getrennt duerch een ''<nowiki>|</nowiki>'', drastoen.",
2805 - 'maintenance-invalidtype' => 'Typ net valabel!',
 2953+ 'maintenance-error-invalidtype' => 'Typ net valabel!',
28062954 'maintenance-name' => 'Benotzernumm',
28072955 'maintenance-password' => 'Passwuert',
28082956 'maintenance-bureaucrat' => 'Engem Benotzer de Bürokrate-Status ginn',
28092957 'maintenance-reason' => 'Grond',
28102958 'maintenance-update' => "UPDATE benotze fir eng Tabell z'aktualiséieren? Wann et net ugekräizt ass gëtt DELETE/INSERT dofir benotzt.",
28112959 'maintenance-noviews' => "Dëst nokucke fir d'Aktualisatioun vun der Zuel vun deVisite vun der Säit ze verhënneren",
2812 - 'maintenance-confirm' => 'Confirméieren',
 2960+ 'maintenance-option-confirm' => 'Confirméieren',
28132961 'maintenance-invalidname' => 'Ongëltege Benotzernumm!',
2814 - 'maintenance-success' => '$1 ass gemaach ginn!',
 2962+ 'maintenance-output-success' => '$1 ass gemaach ginn!',
28152963 'maintenance-userexists' => 'De Benotzer gëtt et schonn!',
28162964 'maintenance-invalidtitle' => 'Ongëltegen Titel "$1"!',
28172965 'maintenance-titlenoexist' => 'Den Titel den dir uginn hutt ("$1") gëtt et net!',
@@ -2916,16 +3064,16 @@
29173065 'maintenance-initStats' => 'Овој образец служи за одново пресметување на статистики, назначувајќи дали сакате да одновно да ги пресметате и прегледите на страниците',
29183066 'maintenance-moveBatch' => 'Овој образец служи за групно преместување на страници.
29193067 ВО секој ред треба да има наведено изворна страница и целна страница, одделени со знакот „|“',
2920 - 'maintenance-invalidtype' => 'Неважечки тип!',
 3068+ 'maintenance-error-invalidtype' => 'Неважечки тип!',
29213069 'maintenance-name' => 'Корисничко име',
29223070 'maintenance-password' => 'Лозинка',
29233071 'maintenance-bureaucrat' => 'Промоција на корисник во бирократ',
29243072 'maintenance-reason' => 'Неважечки тип!',
29253073 'maintenance-update' => 'Да користам UPDATE кога ажурирам табела? Отшриклирајте ако сакате наместо тоа да користам DELETE/INSERT.',
29263074 'maintenance-noviews' => 'Штиклирајте го ова за да го спречите ажурирањето на бројот на прегледи на страниците',
2927 - 'maintenance-confirm' => 'Потврди',
 3075+ 'maintenance-option-confirm' => 'Потврди',
29283076 'maintenance-invalidname' => 'Неважечко корисничко име!',
2929 - 'maintenance-success' => '$1 е успешно извршено!',
 3077+ 'maintenance-output-success' => '$1 е успешно извршено!',
29303078 'maintenance-userexists' => 'Корисникот веќе постои!',
29313079 'maintenance-invalidtitle' => 'Неважечки наслов „$1“!',
29323080 'maintenance-titlenoexist' => 'Назначениот наслов („$1“) не постои.',
@@ -3009,15 +3157,15 @@
30103158 'maintenance-password' => 'രഹസ്യവാക്ക്',
30113159 'maintenance-bureaucrat' => 'ഉപയോക്താവിനെ ബ്യൂറോക്രാറ്റ് പദവിയിലേക്കുയർത്തുക',
30123160 'maintenance-reason' => 'കാരണം',
3013 - 'maintenance-confirm' => 'സ്ഥിരീകരിക്കുക',
 3161+ 'maintenance-option-confirm' => 'സ്ഥിരീകരിക്കുക',
30143162 'maintenance-invalidname' => 'അസാധുവായ ഉപയോക്തൃനാമം!',
3015 - 'maintenance-success' => '$1 വിജയകരമായി ഓടിച്ചിരിക്കുന്നു!',
 3163+ 'maintenance-output-success' => '$1 വിജയകരമായി ഓടിച്ചിരിക്കുന്നു!',
30163164 'maintenance-userexists' => 'ഉപയോക്തൃനാമം നിലവിലുണ്ട്',
30173165 'maintenance-invalidtitle' => 'അസാധുവായ തലക്കെട്ട് "$1"!',
30183166 'maintenance-titlenoexist' => '("$1") എന്ന ശീർഷകത്തിലുള്ള ലേഖനം നിലവിലില്ല',
30193167 'maintenance-failed' => 'പരാജയപ്പെട്ടു',
30203168 'maintenance-deleted' => 'മായ്ച്ചു',
3021 - 'maintenance-revdelete' => '$2 വിക്കിയിൽ നിന്ന് {{PLURAL:$3|ഒരു പതിപ്പ്|പതിപ്പുകൾ}} $1 ഒഴിവാക്കുന്നു',
 3169+ 'maintenance-revdelete' => '$2 വിക്കിയിൽ നിന്ന് $1 പതിപ്പുകൾ ഒഴിവാക്കുന്നു',
30223170 'maintenance-revnotfound' => '$1 എന്ന പതിപ്പ് കണ്ടില്ല!',
30233171 'maintenance-stats-edits' => 'തിരുത്തലുകളുടെ എണ്ണം: $1',
30243172 'maintenance-stats-articles' => 'മുഖ്യ നാമമേഖലയിലുള്ള താളുകളുടെ എണ്ണം: $1',
@@ -3035,24 +3183,12 @@
30363184 'maintenance-memc-withsession' => 'സെഷനോടെ:',
30373185 'maintenance-memc-withoutsession' => 'സെഷനില്ലാതെ:',
30383186 'maintenance-memc-total' => 'ആകെ:',
3039 - 'maintenance-memc-hits' => 'എടുത്തുനോക്കലുകൾ:',
30403187 'maintenance-memc-invalid' => 'അസാധു:',
30413188 'maintenance-memc-expired' => 'കാലാവധി:',
30423189 'maintenance-memc-absent' => 'അഭാവം:',
30433190 'maintenance-memc-updates' => 'അപ്‌ഡേറ്റ്സ്:',
3044 - 'maintenance-re-nf' => '$1 എന്ന ഉപയോക്താവിനെ കണ്ടെത്താനായില്ല',
3045 - 'maintenance-re-ce' => 'ഇപ്പോഴത്തെ തിരുത്തലുകൾ: $1',
3046 - 'maintenance-re-de' => 'മായ്ക്കപ്പെട്ട തിരുത്തലുകൾ: $1',
30473191 );
30483192
3049 -/** Mongolian (Монгол)
3050 - * @author Chinneeb
3051 - */
3052 -$messages['mn'] = array(
3053 - 'maintenance-name' => 'Хэрэглэгчийн нэр',
3054 - 'maintenance-reason' => 'Шалтгаан',
3055 -);
3056 -
30573193 /** Marathi (मराठी)
30583194 * @author Kaustubh
30593195 */
@@ -3082,16 +3218,16 @@
30833219 'maintenance-initStats' => 'हा अर्ज सांख्यिकी पुन्हा मोजण्यासाठी वापरा, त्यामध्ये तुम्ही पान बघण्याची सांख्यिकी सुद्धा पुन्हा मोजू शकता',
30843220 'maintenance-moveBatch' => 'हा अर्ज एकाचवेळी अनेक पाने स्थानांतरीत करण्यासाठी वापरा.
30853221 प्रत्येक ओळीवर स्रोत पान व लक्ष्य पान पाईप चिन्ह वापरून लिहा',
3086 - 'maintenance-invalidtype' => 'चुकीचा प्रकार!',
 3222+ 'maintenance-error-invalidtype' => 'चुकीचा प्रकार!',
30873223 'maintenance-name' => 'सदस्यनाव',
30883224 'maintenance-password' => 'परवलीचा शब्द',
30893225 'maintenance-bureaucrat' => 'सदस्याला अधिकारीपद द्या',
30903226 'maintenance-reason' => 'कारण',
30913227 'maintenance-update' => 'सारणी बदलताना UPDATE चा वापर करायचा का? जर निवडले नाही तर DELETE/INSERT चा वापर होईल.',
30923228 'maintenance-noviews' => 'पान पहाण्याची सांख्यिकी न बदलण्यासाठी हे निवडा',
3093 - 'maintenance-confirm' => 'निश्चित करा',
 3229+ 'maintenance-option-confirm' => 'निश्चित करा',
30943230 'maintenance-invalidname' => 'चुकीचे सदस्यनाव!',
3095 - 'maintenance-success' => '$1 यशस्वीरित्या पूर्ण झाले!',
 3231+ 'maintenance-output-success' => '$1 यशस्वीरित्या पूर्ण झाले!',
30963232 'maintenance-userexists' => 'सदस्य अगोदरच अस्तित्वात आहे!',
30973233 'maintenance-invalidtitle' => 'चुकीचे शीर्षक "$1"!',
30983234 'maintenance-titlenoexist' => 'दिलेले शीर्षक ("$1") अस्तित्वात नाही!',
@@ -3151,7 +3287,7 @@
31523288 'maintenance-name' => 'Теицянь лем',
31533289 'maintenance-password' => 'Совамо вал',
31543290 'maintenance-reason' => 'Тувтал',
3155 - 'maintenance-confirm' => 'Кемекстамс',
 3291+ 'maintenance-option-confirm' => 'Кемекстамс',
31563292 'maintenance-failed' => 'ЭЗЬ ЛИСЕ',
31573293 'maintenance-deleted' => 'НАРДАЗЬ',
31583294 'maintenance-stats-edits' => 'Зяроксть витнезь-петнезь: $1',
@@ -3217,16 +3353,16 @@
32183354 'maintenance-initStats' => 'Gebruik dit formulier de sitestatistieken opnieuw te berekenen. Geef daarbij aan of u de tellingen van het aantal keren dat een pagina is bekeken ook wilt bijwerken',
32193355 'maintenance-moveBatch' => 'Gebruik dit formulier om en masse pagina\'s te hernoemen.
32203356 Iedere regel moet een doelpagina en een bestemmingspagina bevatten, gescheiden door een pipe-teken ("|")',
3221 - 'maintenance-invalidtype' => 'Ongeldig type!',
 3357+ 'maintenance-error-invalidtype' => 'Ongeldig type!',
32223358 'maintenance-name' => 'Gebruiker',
32233359 'maintenance-password' => 'Wachtwoord',
32243360 'maintenance-bureaucrat' => 'De gebruiker bureaucraat maken',
32253361 'maintenance-reason' => 'Reden',
32263362 'maintenance-update' => 'Gebruik UPDATE als u een tabel wilt bijwerken? Unchecked gebruiker in plaats daarvan DELETE/INSERT.',
32273363 'maintenance-noviews' => 'Vink dit aan om te voorkomen dat het aantal keren dat een pagina is bekeken wordt bijgewerkt',
3228 - 'maintenance-confirm' => 'Bevestigen',
 3364+ 'maintenance-option-confirm' => 'Bevestigen',
32293365 'maintenance-invalidname' => 'Ongeldige gebruikersnaam!',
3230 - 'maintenance-success' => '$1 is uitgevoerd!',
 3366+ 'maintenance-output-success' => '$1 is uitgevoerd!',
32313367 'maintenance-userexists' => 'De gebruiker bestaat al!',
32323368 'maintenance-invalidtitle' => 'Ongeldige paginanaam "$1"!',
32333369 'maintenance-titlenoexist' => 'De opgegeven pagina ("$1") bestaat niet!',
@@ -3315,16 +3451,16 @@
33163452 'maintenance-initStats' => 'Nytt dette skjemaet for å rekna ut sidestatistikken på nytt. Spesifiser om du òg ynskjer å rekna ut sidevisingar på nytt',
33173453 'maintenance-moveBatch' => 'Nytt dette skjemaet for å flytta mange sider på éin gong.
33183454 Kvar linja bør oppgje ei kjeldesida og ei målsida skilde med ein strek (|).',
3319 - 'maintenance-invalidtype' => 'Ugyldig type!',
 3455+ 'maintenance-error-invalidtype' => 'Ugyldig type!',
33203456 'maintenance-name' => 'Brukarnamn',
33213457 'maintenance-password' => 'Passord',
33223458 'maintenance-bureaucrat' => 'Gjer ein brukar til byråkrat',
33233459 'maintenance-reason' => 'Årsak',
33243460 'maintenance-update' => 'Nytt UPDATE under oppdatering av tabell? Om uavkryssa vert DELETE/INSERT nytta i staden.',
33253461 'maintenance-noviews' => 'Kryss av her for ikkje å oppdatera sidevisingar',
3326 - 'maintenance-confirm' => 'Stadfest',
 3462+ 'maintenance-option-confirm' => 'Stadfest',
33273463 'maintenance-invalidname' => 'Ugyldig brukarnamn.',
3328 - 'maintenance-success' => '$1 blei køyrt gjennom utan problem.',
 3464+ 'maintenance-output-success' => '$1 blei køyrt gjennom utan problem.',
33293465 'maintenance-userexists' => 'Brukaren finst frå før.',
33303466 'maintenance-invalidtitle' => 'Tittelen «$1» er ugyldig.',
33313467 'maintenance-titlenoexist' => 'Den oppgjevne tittelen («$1») finst ikkje.',
@@ -3415,16 +3551,16 @@
34163552 'maintenance-initStats' => 'Bruk dette skjemaet for å regne ut sidestatistikken på nytt, spesielt om du vil regne ut sidevisninger på nytt',
34173553 'maintenance-moveBatch' => 'Bruk dette skjemaet for å flytte mange sider på én gang.
34183554 Hver linje bør oppgi kildeside og målside adskilt med strek (|)',
3419 - 'maintenance-invalidtype' => 'Ugyldig type!',
 3555+ 'maintenance-error-invalidtype' => 'Ugyldig type!',
34203556 'maintenance-name' => 'Brukernavn',
34213557 'maintenance-password' => 'Passord',
34223558 'maintenance-bureaucrat' => 'Forfrem en bruker til byråkrat',
34233559 'maintenance-reason' => 'Årsak',
34243560 'maintenance-update' => 'Bruk UPDATE under oppdatering av tabell? Om uavkrysset brukes DELETE/INSERT i stedet.',
34253561 'maintenance-noviews' => 'Kryss av her for ikke å oppdatere sidevisninger',
3426 - 'maintenance-confirm' => 'Bekreft',
 3562+ 'maintenance-option-confirm' => 'Bekreft',
34273563 'maintenance-invalidname' => 'Ugyldig brukernavn.',
3428 - 'maintenance-success' => '$1 ble gjennomført uten uhell.',
 3564+ 'maintenance-output-success' => '$1 ble gjennomført uten uhell.',
34293565 'maintenance-userexists' => 'Brukeren finnes allerede.',
34303566 'maintenance-invalidtitle' => 'Ugyldig tittel «$1».',
34313567 'maintenance-titlenoexist' => 'Den oppgitte tittelen («$1») finnes ikke.',
@@ -3509,7 +3645,7 @@
35103646 'maintenance-runJobs-desc' => "Aviar los prètzfaches dins la lista de los d'acomplir",
35113647 'maintenance-showJobs-desc' => "Afichar una lista dels prètzfaches en cors dins la lista de los d'acomplir",
35123648 'maintenance-sql-desc' => 'Executar una requèsta SQL',
3513 - 'maintenance-stats-desc' => 'Afichar las estatisticas de la memòria-escondedor',
 3649+ 'maintenance-stats-desc' => 'Afichar las estatisticas de la memòria-amagatal',
35143650 'maintenance-changePassword' => 'Utilizar aqueste formulari per cambiar lo senhal d’un utilizaire',
35153651 'maintenance-createAndPromote' => 'Utilizar aqueste formulari per crear un utilizaire novèl e per lo promòure administrator.
35163652 Marcar la casa burocrata se li desiratz conferir tanben aqueste estatut.',
@@ -3520,16 +3656,16 @@
35213657 'maintenance-initStats' => 'Utilizatz aqueste formulari per tornar calcular las estatisticas del site, en indicant, se fa mestièr, se desiratz lo recalcul del nombre de visitas per pagina.',
35223658 'maintenance-moveBatch' => 'Utilizatz aqueste formulari per desplaçar en massa las paginas.
35233659 Cada linha deurà indicar la pagina d’origina e la de destinacion ; las qualas deuràn èsser separadas per un « <nowiki>|</nowiki> »',
3524 - 'maintenance-invalidtype' => 'Tipe incorrècte !',
 3660+ 'maintenance-error-invalidtype' => 'Tipe incorrècte !',
35253661 'maintenance-name' => "Nom d'utilizaire",
35263662 'maintenance-password' => 'Senhal',
35273663 'maintenance-bureaucrat' => "Promòure l’utilizaire a l'estatut de burocrata",
35283664 'maintenance-reason' => 'Motiu',
35293665 'maintenance-update' => "Utilizar UPDATE al moment de la mesa a jorn d'una taula ? Desmarcatz l'usatge DELETE/INSERT al luòc d'aquò.",
35303666 'maintenance-noviews' => 'Marcar aquò per evitar la mesa a jorn del nombre de visitas de las paginas.',
3531 - 'maintenance-confirm' => 'Confirmar',
 3667+ 'maintenance-option-confirm' => 'Confirmar',
35323668 'maintenance-invalidname' => 'Nom d’utilizaire incorrècte !',
3533 - 'maintenance-success' => '$1 a marchat amb succès !',
 3669+ 'maintenance-output-success' => '$1 a marchat amb succès !',
35343670 'maintenance-userexists' => 'L’utilizaire existís ja !',
35353671 'maintenance-invalidtitle' => 'Títol incorrècte « $1 » !',
35363672 'maintenance-titlenoexist' => 'Lo títol indicat (« $1 ») existís pas !',
@@ -3558,17 +3694,17 @@
35593695 'maintenance-memc-withsession' => 'amb la sesilha :',
35603696 'maintenance-memc-withoutsession' => 'sens la sesilha :',
35613697 'maintenance-memc-total' => 'soma :',
3562 - 'maintenance-memc-parsercache' => 'Escondedor del parser',
 3698+ 'maintenance-memc-parsercache' => 'Amagatal del parser',
35633699 'maintenance-memc-hits' => 'clics :',
35643700 'maintenance-memc-invalid' => 'invalid :',
35653701 'maintenance-memc-expired' => 'expirats :',
35663702 'maintenance-memc-absent' => 'absent :',
35673703 'maintenance-memc-stub' => 'sulhèt de despart :',
3568 - 'maintenance-memc-imagecache' => 'Escondedor imatge',
 3704+ 'maintenance-memc-imagecache' => 'Amagatal imatge',
35693705 'maintenance-memc-misses' => 'perduts :',
35703706 'maintenance-memc-updates' => 'meses a jorn :',
35713707 'maintenance-memc-uncacheable' => "fòra de l'amagatal :",
3572 - 'maintenance-memc-diffcache' => 'Escondedor dels dif',
 3708+ 'maintenance-memc-diffcache' => 'Amagatal dels dif',
35733709 'maintenance-eval' => 'Utilizatz aquesta forma per avalorar lo còde PHP dins un environament MediaWiki.',
35743710 'maintenance-reassignEdits' => "Utilizatz aqueste formulari per tornar assignar de modificacions d'un utilizaire cap a un autre.",
35753711 'maintenance-re-from' => "Nom de l'utilizaire al qual préner las modificacions",
@@ -3625,16 +3761,11 @@
36263762 'maintenance-changePassword-desc' => 'Zmień hasło użytkownika',
36273763 'maintenance-createAndPromote-desc' => 'Utwórz użytkownika i nadaj mu uprawnienia administratora',
36283764 'maintenance-deleteBatch-desc' => 'Usuń masowo strony',
3629 - 'maintenance-deleteRevision-desc' => 'Usuwanie wersji z bazy danych',
3630 - 'maintenance-eval-desc' => 'Sprawdzanie kodu PHP w środowisku MediaWiki',
36313765 'maintenance-initEditCount-desc' => 'Przelicz ponownie liczniki edycji użytkowników',
36323766 'maintenance-initStats-desc' => 'Przelicz ponownie statystyki strony',
36333767 'maintenance-moveBatch-desc' => 'Przenieś masowo strony',
3634 - 'maintenance-reassignEdits-desc' => 'Przypisanie edycji jednego użytkownika drugiemu',
36353768 'maintenance-runJobs-desc' => 'Uruchom zadania z kolejki',
36363769 'maintenance-showJobs-desc' => 'Pokaż kolejkę zadań oczekujących na wykonanie',
3637 - 'maintenance-sql-desc' => 'Wykonywanie zapytań SQL',
3638 - 'maintenance-stats-desc' => 'Statystyki pamięci podręcznej',
36393770 'maintenance-changePassword' => 'Użyj tego formularza, by zmienić hasło użytkownika',
36403771 'maintenance-createAndPromote' => 'Użyj tego formularza, by utworzyć nowe konto użytkownika i nadać mu uprawnienia administratora.
36413772 Zaznacz pole wyboru poniżej, aby przyznać mu również uprawnienia biurokraty.',
@@ -3642,19 +3773,11 @@
36433774 W każdej linijce podaj tylko jedną nazwę strony.',
36443775 'maintenance-deleteRevision' => 'Używaj tego formularza do masowego usuwania wersji artykułów.
36453776 W każdej linijce podaj tylko jeden numer wersji artykułu.',
3646 - 'maintenance-initStats' => 'Formularz pozwala na przeliczanie statystyk witryny, z możliwością wymuszenia przeliczenia również liczby odsłon',
3647 - 'maintenance-moveBatch' => 'Formularz służy do masowego przenoszenia stron.
3648 -W każdym wierszu należy określić stronę źródłową oraz stronę docelową rozdzielając je pionową kreską',
3649 - 'maintenance-invalidtype' => 'Nieprawidłowy typ!',
36503777 'maintenance-name' => 'Nazwa użytkownika',
36513778 'maintenance-password' => 'Hasło',
36523779 'maintenance-bureaucrat' => 'Przyznaj użytkownikowi uprawnienia biurokraty',
36533780 'maintenance-reason' => 'Powód',
3654 - 'maintenance-update' => 'Użyj UPDATE do aktualizacji tabel. Alternatywą jest zestawienie poleceń DELETE i INSERT.',
3655 - 'maintenance-noviews' => 'Zaznacz aby zapobiec aktualizacji liczników odsłon stron',
3656 - 'maintenance-confirm' => 'Potwierdź',
3657 - 'maintenance-invalidname' => 'Nieprawidłowa nazwa użytkownika!',
3658 - 'maintenance-success' => '$1 uruchomiono!',
 3781+ 'maintenance-option-confirm' => 'Potwierdź',
36593782 'maintenance-userexists' => 'Użytkownik już istnieje!',
36603783 'maintenance-invalidtitle' => 'Niepoprawny tytuł „$1”!',
36613784 'maintenance-titlenoexist' => 'Wybrana nazwa „$1” nie istnieje!',
@@ -3662,10 +3785,6 @@
36633786 'maintenance-deleted' => 'USUNIĘTO',
36643787 'maintenance-revdelete' => 'Usuwanie {{PLURAL:$3|wersji|wersji:}} $1 z wiki $2',
36653788 'maintenance-revnotfound' => 'Wersja $1 nie została odnaleziona!',
3666 - 'maintenance-sql' => 'Formularz ten służy do wykonania zapytania SQL do bazy danych.',
3667 - 'maintenance-sql-aff' => '{{PLURAL:$1|Zmieniono $1 wiersz|Zmieniono $1 wiersze|Zmienionych $1 wierszy}}',
3668 - 'maintenance-sql-res' => 'Zwróciło $1 {{PLURAL:$1|wiersz|wiersze|wierszy}}:
3669 -$2',
36703789 'maintenance-stats-edits' => 'Liczba edycji $1',
36713790 'maintenance-stats-articles' => 'Liczba stron w głównej przestrzeni nazw $1',
36723791 'maintenance-stats-pages' => 'Liczba stron: $1',
@@ -3678,36 +3797,8 @@
36793798 'maintenance-movefail' => 'Wystąpił błąd przy przenoszeniu $1.
36803799 Przenoszenie przerwane.',
36813800 'maintenance-error' => 'Błąd: $1',
3682 - 'maintenance-memc-fake' => 'Korzystasz z FakeMemCachedClient. Statystyk brak',
3683 - 'maintenance-memc-requests' => 'Żądania',
3684 - 'maintenance-memc-withsession' => 'z sesją',
3685 - 'maintenance-memc-withoutsession' => 'bez sesji',
3686 - 'maintenance-memc-total' => 'łącznie',
36873801 'maintenance-memc-parsercache' => 'Pamięć podręczna analizatora składni',
3688 - 'maintenance-memc-hits' => 'trafienia',
3689 - 'maintenance-memc-invalid' => 'nieważne',
3690 - 'maintenance-memc-expired' => 'przeterminowane',
3691 - 'maintenance-memc-absent' => 'nieobecne',
3692 - 'maintenance-memc-stub' => 'próg zalążków',
3693 - 'maintenance-memc-imagecache' => 'Obraz pamięci podręcznej',
3694 - 'maintenance-memc-misses' => 'nietrafionych',
36953802 'maintenance-memc-updates' => 'aktualizacje:',
3696 - 'maintenance-memc-uncacheable' => 'nieobsługiwane przez pamięć podręczną',
3697 - 'maintenance-memc-diffcache' => 'Różnica w pamięci podręcznej',
3698 - 'maintenance-eval' => 'Formularz ten służy do oceny kodu PHP w środowisku MediaWiki.',
3699 - 'maintenance-reassignEdits' => 'Formularz ten służy do przypisania edycji jednego użytkownika drugiemu.',
3700 - 'maintenance-re-from' => 'Nazwa użytkownika, którego edycje mają być przypisane',
3701 - 'maintenance-re-to' => 'Nazwa użytkownika, któremu edycje mają być przypisane',
3702 - 'maintenance-re-force' => 'Przypisz nawet jeśli użytkownik docelowy nie istnieje',
3703 - 'maintenance-re-rc' => 'Nie aktualizuj ostatnich zmian',
3704 - 'maintenance-re-report' => 'Pokaż jakie zmiany zostaną wprowadzone, ale ich nie wykonuj',
3705 - 'maintenance-re-nf' => 'Nie odnaleziono użytkownika $1',
3706 - 'maintenance-re-rr' => 'Uruchom skrypt ponownie, ale bez „$1”.',
3707 - 'maintenance-re-ce' => 'Obecnie {{PLURAL:$1|jest $1 edycja|są $1 edycje|jest $1 edycji}}',
3708 - 'maintenance-re-de' => 'Usunięto $1 {{PLURAL:$1|edycję|edycje|edycji}}',
3709 - 'maintenance-re-rce' => '$1 {{PLURAL:$1|wpis|wpisy|wpisów}} w ostatnich zmianach',
3710 - 'maintenance-re-total' => '{{PLURAL:$1|Jest $1 wpis|Są $1 wpisy|Jest $1 wpisów}} do zmienienia',
3711 - 'maintenance-re-re' => 'Edycje przypisano',
37123803 );
37133804
37143805 /** Piedmontese (Piemontèis)
@@ -3744,16 +3835,16 @@
37453836 'maintenance-initStats' => "Dovré ës formolari për calcolé torna le statìstiche dël sit, spessificand s'a veul ëdcò calcolé torna le vìsite a le pàgine",
37463837 'maintenance-moveBatch' => 'Dovré ës formolari për tramudé dle pàgine a bocc.
37473838 Minca linia a dovrìa spessifiché na pàgina sorgiss e na pàgina destinassion separà da na bara vertical',
3748 - 'maintenance-invalidtype' => 'Sòrt pa bon-a!',
 3839+ 'maintenance-error-invalidtype' => 'Sòrt pa bon-a!',
37493840 'maintenance-name' => 'Nòm utent',
37503841 'maintenance-password' => 'Ciav',
37513842 'maintenance-bureaucrat' => 'Promeuv utent a mangiapapé',
37523843 'maintenance-reason' => 'Rason',
37533844 'maintenance-update' => "Dovré UPDATE an modificand na tàula? Se pa marcà, a sò pòst a l'é dovrà DELETE/INSERT.",
37543845 'maintenance-noviews' => "Marché sòn për ch'as modìfica pa ël nùmer ëd vìsite dle pàgine",
3755 - 'maintenance-confirm' => 'Conferma',
 3846+ 'maintenance-option-confirm' => 'Conferma',
37563847 'maintenance-invalidname' => 'Nòm utent pa bon!',
3757 - 'maintenance-success' => "$1 a l'ha girà da bin!",
 3848+ 'maintenance-output-success' => "$1 a l'ha girà da bin!",
37583849 'maintenance-userexists' => "L'utent a esist già!",
37593850 'maintenance-invalidtitle' => 'Tìtol "$1" pa bon!',
37603851 'maintenance-titlenoexist' => 'Ël tìtol spessificà ("$1") a esist pa!',
@@ -3818,8 +3909,6 @@
38193910 'maintenance-reason' => 'سبب',
38203911 'maintenance-invalidname' => 'ناسم کارن-نوم!',
38213912 'maintenance-userexists' => 'دا کارن د پخوا نه ثبت دی!',
3822 - 'maintenance-deleted' => 'ړنګ شو',
3823 - 'maintenance-stats-edits' => 'د سمونو شمېر: $1',
38243913 'maintenance-stats-pages' => 'د مخونو شمېر: $1',
38253914 'maintenance-stats-users' => 'د کارنانو شمېر: $1',
38263915 'maintenance-stats-admins' => 'د پازوالانو شمېر: $1',
@@ -3864,16 +3953,16 @@
38653954 'maintenance-initStats' => 'Utilize este formulário para recalcular as estatísticas do site, especificando se pretende recalcular também os visionamentos de páginas',
38663955 'maintenance-moveBatch' => 'Utilize este formulário para mover páginas em massa.
38673956 Cada linha deverá especificar uma página fonte e uma página destino, separadas por uma barra vertical ("pipe")',
3868 - 'maintenance-invalidtype' => 'Tipo inválido!',
 3957+ 'maintenance-error-invalidtype' => 'Tipo inválido!',
38693958 'maintenance-name' => 'Nome de utilizador',
38703959 'maintenance-password' => 'Palavra-chave',
38713960 'maintenance-bureaucrat' => 'Promover utilizador a estatuto de burocrata',
38723961 'maintenance-reason' => 'Motivo',
38733962 'maintenance-update' => 'Usar UPDATE para actualizar tabelas? Se desmarcado, será usado DELETE/INSERT.',
38743963 'maintenance-noviews' => 'Marque esta opção para impedir a actualização dos visionamentos de páginas',
3875 - 'maintenance-confirm' => 'Confirmar',
 3964+ 'maintenance-option-confirm' => 'Confirmar',
38763965 'maintenance-invalidname' => 'Nome de utilizador inválido!',
3877 - 'maintenance-success' => '$1 executado com sucesso!',
 3966+ 'maintenance-output-success' => '$1 executado com sucesso!',
38783967 'maintenance-userexists' => 'O utilizador já existe!',
38793968 'maintenance-invalidtitle' => 'Título "$1" inválido!',
38803969 'maintenance-titlenoexist' => 'O título especificado ("$1") não existe!',
@@ -3962,16 +4051,16 @@
39634052 'maintenance-initStats' => 'Utilize este formulário para recalcular as estatísticas do sítio, especificando se pretende recalcular as visualizações de página também',
39644053 'maintenance-moveBatch' => 'Utilize este formulário para mover páginas em massa.
39654054 Cada linha deverá especificar uma página fonte e uma página destino, separadas por uma barra vertical ("pipe")',
3966 - 'maintenance-invalidtype' => 'Tipo inválido!',
 4055+ 'maintenance-error-invalidtype' => 'Tipo inválido!',
39674056 'maintenance-name' => 'Nome de utilizador',
39684057 'maintenance-password' => 'Palavra-chave',
39694058 'maintenance-bureaucrat' => 'Promover utilizador a estatuto de burocrata',
39704059 'maintenance-reason' => 'Motivo',
39714060 'maintenance-update' => 'Usar UPDATE para atualizar uma tabela? Se desselecionado, usa DELETE/INSERT.',
39724061 'maintenance-noviews' => 'Assinale aqui para prevenir a atualização do número de visualizações de página',
3973 - 'maintenance-confirm' => 'Confirmar',
 4062+ 'maintenance-option-confirm' => 'Confirmar',
39744063 'maintenance-invalidname' => 'Nome de utilizador inválido!',
3975 - 'maintenance-success' => '$1 executado com sucesso!',
 4064+ 'maintenance-output-success' => '$1 executado com sucesso!',
39764065 'maintenance-userexists' => 'O utilizador já existe!',
39774066 'maintenance-invalidtitle' => 'Título "$1" inválido!',
39784067 'maintenance-titlenoexist' => 'O título especificado ("$1") não existe!',
@@ -4057,13 +4146,13 @@
40584147 Puneți doar o pagină pe un rând',
40594148 'maintenance-deleteRevision' => 'Utilizați acest formular pentru ștergerea în masă a reviziilor.
40604149 Puneți doar o revizie pe un rând',
4061 - 'maintenance-invalidtype' => 'Tip incorect!',
 4150+ 'maintenance-error-invalidtype' => 'Tip incorect!',
40624151 'maintenance-name' => 'Nume de utilizator',
40634152 'maintenance-password' => 'Parolă',
40644153 'maintenance-reason' => 'Motiv',
4065 - 'maintenance-confirm' => 'Confirmă',
 4154+ 'maintenance-option-confirm' => 'Confirmă',
40664155 'maintenance-invalidname' => 'Nume de utilizator incorect!',
4067 - 'maintenance-success' => '$1 a rulat cu succes!',
 4156+ 'maintenance-output-success' => '$1 a rulat cu succes!',
40684157 'maintenance-userexists' => 'Utilizatorul există deja!',
40694158 'maintenance-invalidtitle' => 'Titlu incorect "$1"!',
40704159 'maintenance-titlenoexist' => 'Titlul specificat ("$1") nu există!',
@@ -4139,16 +4228,16 @@
41404229 'maintenance-initStats' => 'Используйте эту форму для пересчёта статистики сайта, при необходимости укажите, что нужно пересчитывать также просмотры страниц',
41414230 'maintenance-moveBatch' => 'Используйте эту форму для массового переименования страниц.
41424231 Каждая строка должна содержать исходную страницу и её новое название, разделённые знаком «|»',
4143 - 'maintenance-invalidtype' => 'Ошибочный тип!',
 4232+ 'maintenance-error-invalidtype' => 'Ошибочный тип!',
41444233 'maintenance-name' => 'Имя участника',
41454234 'maintenance-password' => 'Пароль',
41464235 'maintenance-bureaucrat' => 'Присвоить участнику статус бюрократа',
41474236 'maintenance-reason' => 'Причина',
41484237 'maintenance-update' => 'Использовать UPDATE для обновления таблицы? Снимите отметку чтобы использовать DELETE/INSERT.',
41494238 'maintenance-noviews' => 'Проверьте это для предотвращения обновления числа просмотров',
4150 - 'maintenance-confirm' => 'Подтвердить',
 4239+ 'maintenance-option-confirm' => 'Подтвердить',
41514240 'maintenance-invalidname' => 'Ошибочное имя участника!',
4152 - 'maintenance-success' => '$1 успешно выполнено!',
 4241+ 'maintenance-output-success' => '$1 успешно выполнено!',
41534242 'maintenance-userexists' => 'Участник уже существует!',
41544243 'maintenance-invalidtitle' => 'Ошибочный заголовок «$1»!',
41554244 'maintenance-titlenoexist' => 'Указанный заголовок («$1») не существует!',
@@ -4204,7 +4293,7 @@
42054294 'maintenance-re-re' => 'Переназначение правок{{int:ellipsis}} завершено',
42064295 );
42074296
4208 -/** Rusyn (Русиньскый)
 4297+/** Rusyn (русиньскый язык)
42094298 * @author Gazeb
42104299 */
42114300 $messages['rue'] = array(
@@ -4245,16 +4334,16 @@
42464335 'maintenance-initStats' => 'Tento formulár slúži na prepočítanie štatistík tejto wiki. Môžete určiť, či chcete prepočítať aj zobrazenia stránok.',
42474336 'maintenance-moveBatch' => 'Tento formulár slúži na hromadné presúvanie stránok.
42484337 Na každom riadku by ste mali určiť zdrojovú a cieľovú stránku oddelenú znakom rúry („|”).',
4249 - 'maintenance-invalidtype' => 'Neplatný typ!',
 4338+ 'maintenance-error-invalidtype' => 'Neplatný typ!',
42504339 'maintenance-name' => 'Používateľské meno',
42514340 'maintenance-password' => 'Heslo',
42524341 'maintenance-bureaucrat' => 'Povýšiť používateľa na stav byrokrat',
42534342 'maintenance-reason' => 'Dôvod',
42544343 'maintenance-update' => 'Použiť na aktualizáciu tabuľky UPDATE? Ak nie, použije sa DELETE/INSERT.',
42554344 'maintenance-noviews' => 'Ak je toto pole označené, nebude sa aktualizovať počet zobrazení stránky',
4256 - 'maintenance-confirm' => 'Potvrdiť',
 4345+ 'maintenance-option-confirm' => 'Potvrdiť',
42574346 'maintenance-invalidname' => 'Neplatné používateľské meno!',
4258 - 'maintenance-success' => '$1 prebehol úspešne!',
 4347+ 'maintenance-output-success' => '$1 prebehol úspešne!',
42594348 'maintenance-userexists' => 'Používateľ už existuje!',
42604349 'maintenance-invalidtitle' => 'Neplatný názov „$1”!',
42614350 'maintenance-titlenoexist' => 'Uvedený názov („$1”) neexistuje!',
@@ -4310,17 +4399,8 @@
43114400 'maintenance-re-re' => 'Zmena pôvodcu úprav{{int:ellipsis}} hotovo',
43124401 );
43134402
4314 -/** Slovenian (Slovenščina)
4315 - * @author Dbc334
4316 - */
4317 -$messages['sl'] = array(
4318 - 'maintenance-password' => 'Geslo',
4319 - 'maintenance-reason' => 'Razlog',
4320 -);
4321 -
43224403 /** Serbian Cyrillic ekavian (‪Српски (ћирилица)‬)
43234404 * @author Rancher
4324 - * @author Жељко Тодоровић
43254405 * @author Михајло Анђелковић
43264406 */
43274407 $messages['sr-ec'] = array(
@@ -4349,15 +4429,15 @@
43504430 'maintenance-initStats' => 'Користите ову форму да бисте освежили статистике сајта, означивши да ли такође желите да освежите и прегледе страница.',
43514431 'maintenance-moveBatch' => 'Користите ову форму да бисте масовно премештали странице.
43524432 У свакој линији треба (тим редом) означити тренутно и циљано име странице, и раздвојити их знаком "|"',
4353 - 'maintenance-invalidtype' => 'Непознат тип!',
 4433+ 'maintenance-error-invalidtype' => 'Непознат тип!',
43544434 'maintenance-name' => 'Корисничко име',
43554435 'maintenance-password' => 'Лозинка',
43564436 'maintenance-bureaucrat' => 'Унапредите корисника у бирократу',
43574437 'maintenance-reason' => 'Разлог',
43584438 'maintenance-noviews' => 'Означите ово да бисте спрежили освежавање броја прегледа страна',
4359 - 'maintenance-confirm' => 'Потврди',
 4439+ 'maintenance-option-confirm' => 'Потврди',
43604440 'maintenance-invalidname' => 'Погрешно корисничко име!',
4361 - 'maintenance-success' => '$1 се успешно извршила!',
 4441+ 'maintenance-output-success' => '$1 се успешно извршила!',
43624442 'maintenance-userexists' => 'Тај корисник већ постоји!',
43634443 'maintenance-invalidtitle' => 'Неисправан наслов "$1"!',
43644444 'maintenance-titlenoexist' => 'Наведени наслов ("$1") не постоји!',
@@ -4370,12 +4450,12 @@
43714451 'maintenance-sql-res' => '{{PLURAL:$1|Враћен је $1 ред|Враћена су $1 реда|Враћено је $1 редова}}:
43724452 $2',
43734453 'maintenance-stats-edits' => 'Број измена: $1',
4374 - 'maintenance-stats-articles' => 'Број страница у главном именском простору: $1',
4375 - 'maintenance-stats-pages' => 'Број страница: $1',
 4454+ 'maintenance-stats-articles' => 'Број страна у главном именском простору: $1',
 4455+ 'maintenance-stats-pages' => 'Број страна: $1',
43764456 'maintenance-stats-users' => 'Број корисника: $1',
43774457 'maintenance-stats-admins' => 'Број администратора: $1',
43784458 'maintenance-stats-images' => 'Број фајлова: $1',
4379 - 'maintenance-stats-views' => 'Број прегледа страница: $1',
 4459+ 'maintenance-stats-views' => 'Број прегледа страна: $1',
43804460 'maintenance-stats-update' => 'Освежавање базе података{{int:ellipsis}}',
43814461 'maintenance-move' => 'Премештање $1 на $2{{int:ellipsis}}',
43824462 'maintenance-movefail' => 'Грешка приликом премештања: $1.
@@ -4437,15 +4517,15 @@
44384518 'maintenance-initStats' => 'Koristite ovu formu da biste osvežili statistike sajta, označivši da li takođe želite da osvežite i preglede stranica.',
44394519 'maintenance-moveBatch' => 'Koristite ovu formu da biste masovno premeštali stranice.
44404520 U svakoj liniji treba (tim redom) označiti trenutno i ciljano ime stranice, i razdvojiti ih znakom "|"',
4441 - 'maintenance-invalidtype' => 'Nepoznat tip!',
 4521+ 'maintenance-error-invalidtype' => 'Nepoznat tip!',
44424522 'maintenance-name' => 'Korisničko ime',
44434523 'maintenance-password' => 'Lozinka',
44444524 'maintenance-bureaucrat' => 'Unapredite korisnika u birokratu',
44454525 'maintenance-reason' => 'Razlog',
44464526 'maintenance-noviews' => 'Označite ovo da biste sprežili osvežavanje broja pregleda strana',
4447 - 'maintenance-confirm' => 'Potvrdi',
 4527+ 'maintenance-option-confirm' => 'Potvrdi',
44484528 'maintenance-invalidname' => 'Pogrešno korisničko ime!',
4449 - 'maintenance-success' => '$1 se uspešno izvršila!',
 4529+ 'maintenance-output-success' => '$1 se uspešno izvršila!',
44504530 'maintenance-userexists' => 'Taj korisnik već postoji!',
44514531 'maintenance-invalidtitle' => 'Neispravan naslov "$1"!',
44524532 'maintenance-titlenoexist' => 'Navedeni naslov ("$1") ne postoji!',
@@ -4541,16 +4621,16 @@
45424622 'maintenance-initStats' => 'Använd detta formulär för att räkna om sajtens statistik, speciellt om du vill räkna om sidvisningar',
45434623 'maintenance-moveBatch' => 'Använd detta formulär för att mass-flytta sidor.
45444624 Varje rad specifierar den nuvarande sidan och destinationssidan separerade med ett lodrätt streck (|)',
4545 - 'maintenance-invalidtype' => 'Ogiltig typ!',
 4625+ 'maintenance-error-invalidtype' => 'Ogiltig typ!',
45464626 'maintenance-name' => 'Användarnamn',
45474627 'maintenance-password' => 'Lösenord',
45484628 'maintenance-bureaucrat' => 'Befodra en användare till en byråkrat',
45494629 'maintenance-reason' => 'Anledning',
45504630 'maintenance-update' => 'Använd UPPDATERA när du uppdaterar en tabell? Okryssade använder RADERA/INFOGA istället.',
45514631 'maintenance-noviews' => 'Kolla det här för att förhindra uppdatering av sidvisningar',
4552 - 'maintenance-confirm' => 'Bekräfta',
 4632+ 'maintenance-option-confirm' => 'Bekräfta',
45534633 'maintenance-invalidname' => 'Ogiltigt användarnamn!',
4554 - 'maintenance-success' => '$1 kördes lyckat!',
 4634+ 'maintenance-output-success' => '$1 kördes lyckat!',
45554635 'maintenance-userexists' => 'Användaren existerar redan!',
45564636 'maintenance-invalidtitle' => 'Ogiltig titel "$1"!',
45574637 'maintenance-titlenoexist' => 'Titeln som specifierades ("$1") finns inte!',
@@ -4606,14 +4686,6 @@
46074687 'maintenance-re-re' => 'Flyttar redigeringar{{int:ellipsis}} klart',
46084688 );
46094689
4610 -/** Tamil (தமிழ்)
4611 - * @author TRYPPN
4612 - */
4613 -$messages['ta'] = array(
4614 - 'maintenance-deleted' => 'நீக்கப்பட்டுவிட்டது',
4615 - 'maintenance-memc-total' => 'மொத்தம்:',
4616 -);
4617 -
46184690 /** Telugu (తెలుగు)
46194691 * @author C.Chandra Kanth Rao
46204692 * @author Veeven
@@ -4622,13 +4694,13 @@
46234695 'maintenance-changePassword-desc' => 'వాడుకరి యొక్క సంకేతపదం మార్చండి',
46244696 'maintenance-initEditCount-desc' => 'వాడుకరులు మార్పుల సంఖ్యను మళ్లీ లెక్కించు',
46254697 'maintenance-initStats-desc' => 'సైటు గణాంకాలని మళ్ళీ లెక్కించు',
4626 - 'maintenance-invalidtype' => 'చెల్లని రకం!',
 4698+ 'maintenance-error-invalidtype' => 'చెల్లని రకం!',
46274699 'maintenance-name' => 'వాడుకరిపేరు',
46284700 'maintenance-password' => 'సంకేతపదం',
46294701 'maintenance-reason' => 'కారణం',
4630 - 'maintenance-confirm' => 'నిర్ధారించండి',
 4702+ 'maintenance-option-confirm' => 'నిర్ధారించండి',
46314703 'maintenance-invalidname' => 'తప్పుడు వాడుకరిపేరు!',
4632 - 'maintenance-success' => '$1 విజయవంతంగా నడిచింది!',
 4704+ 'maintenance-output-success' => '$1 విజయవంతంగా నడిచింది!',
46334705 'maintenance-userexists' => 'వాడుకరి ఇప్పటికే ఉన్నారు!',
46344706 'maintenance-invalidtitle' => 'తప్పుడు శీర్షిక "$1"!',
46354707 'maintenance-failed' => 'విఫలమైనది',
@@ -4644,10 +4716,6 @@
46454717 'maintenance-memc-requests' => 'అభ్యర్థనలు',
46464718 'maintenance-memc-total' => 'మొత్తం:',
46474719 'maintenance-memc-invalid' => 'చెల్లనివి:',
4648 - 'maintenance-memc-updates' => 'తాజాకరణలు:',
4649 - 'maintenance-re-nf' => 'వాడుకరి $1 కనబడలేదు',
4650 - 'maintenance-re-ce' => 'ప్రస్తుత మార్పుల: $1',
4651 - 'maintenance-re-de' => 'తొలగించిన మార్పులు: $1',
46524720 );
46534721
46544722 /** Tetum (Tetun)
@@ -4663,7 +4731,7 @@
46644732 */
46654733 $messages['th'] = array(
46664734 'maintenance-reason' => 'เหตุผล',
4667 - 'maintenance-confirm' => 'ยืนยัน',
 4735+ 'maintenance-option-confirm' => 'ยืนยัน',
46684736 'maintenance-memc-total' => 'รวม:',
46694737 );
46704738
@@ -4707,16 +4775,16 @@
47084776 'maintenance-initStats' => 'Gamitin ang pormularyong ito upang muling tuusin ang mga estadistika ng sityo, na tinutukoy kung nais mo ring tuusing muli ang mga pagtingin sa pahina',
47094777 'maintenance-moveBatch' => "Gamitin ang pormularyong ito upang malawakang makapaglipat ng mga pahina.
47104778 Dapat na tinutukoy ng bawat guhit ang isang pinagmulang pahina at kapupuntahang pahina na pinaghihiwalay ng isang \"tubo\" (''pipe'')",
4711 - 'maintenance-invalidtype' => 'Hindi tanggap na uri!',
 4779+ 'maintenance-error-invalidtype' => 'Hindi tanggap na uri!',
47124780 'maintenance-name' => 'Pangalan ng tagagamit',
47134781 'maintenance-password' => 'Hudyat',
47144782 'maintenance-bureaucrat' => 'Itaas ang tagagamit patungo sa katayuang burokrato',
47154783 'maintenance-reason' => 'Dahilan',
47164784 'maintenance-update' => 'Gamitin ang ISAPANAHON kapag nagsasapanahon ng mga tabla? Sa halip nito, gumagamit ang mga hindi pa nasusuri ng BURAHIN/ISINGIT.',
47174785 'maintenance-noviews' => 'Lagyan ito ng tsek upang maiwasan ang pagsasapanahon ng bilang ng mga pagtingin sa pahina',
4718 - 'maintenance-confirm' => 'Tiyakin',
 4786+ 'maintenance-option-confirm' => 'Tiyakin',
47194787 'maintenance-invalidname' => 'Hindi tanggap na pangalan ng tagagamit!',
4720 - 'maintenance-success' => 'Matagumpay na tumakbo ang $1!',
 4788+ 'maintenance-output-success' => 'Matagumpay na tumakbo ang $1!',
47214789 'maintenance-userexists' => 'Umiiral na ang tagagamit!',
47224790 'maintenance-invalidtitle' => 'Hindi tanggap na pamagat ang "$1"!',
47234791 'maintenance-titlenoexist' => 'Hindi umiiral ang tinukoy na pamagat ("$1")!',
@@ -4790,12 +4858,12 @@
47914859 'maintenance-initStats-desc' => 'Site istatistiklerini tekrar hesapla',
47924860 'maintenance-moveBatch-desc' => 'Sayfaları toplu taşı',
47934861 'maintenance-runJobs-desc' => 'İş kuyruğunda işleri yürüt',
4794 - 'maintenance-invalidtype' => 'Geçersiz tür!',
 4862+ 'maintenance-error-invalidtype' => 'Geçersiz tür!',
47954863 'maintenance-name' => 'Kullanıcı adı',
47964864 'maintenance-password' => 'Parola',
47974865 'maintenance-bureaucrat' => 'Kullanıcıyı bürokrat statüsüne yükselt',
47984866 'maintenance-reason' => 'Neden',
4799 - 'maintenance-confirm' => 'Onayla',
 4867+ 'maintenance-option-confirm' => 'Onayla',
48004868 'maintenance-invalidname' => 'Geçersiz kullanıcı adı!',
48014869 'maintenance-userexists' => 'Kullanıcı zaten mevcut!',
48024870 'maintenance-failed' => 'BAŞARISIZ',
@@ -4834,7 +4902,7 @@
48354903 'maintenance-name' => 'ئىشلەتكۇچى ئىسمى',
48364904 );
48374905
4838 -/** Uighur (Latin) (ئۇيغۇرچە / Uyghurche‎ (Latin))
 4906+/** Uighur (Latin) (Uyghurche‎ / ئۇيغۇرچە (Latin))
48394907 * @author Jose77
48404908 */
48414909 $messages['ug-latn'] = array(
@@ -4846,54 +4914,20 @@
48474915 * @author Тест
48484916 */
48494917 $messages['uk'] = array(
4850 - 'maintenance' => 'Запуск скриптів обслуговування',
4851 - 'maintenance-desc' => '[[Special:Maintenance|Вікі інтерфейс]] для різноманітних скриптів обслуговування',
4852 - 'right-maintenance' => 'Запуск скриптів обслуговування через [[Special:Maintenance]]',
4853 - 'maintenance-backlink' => 'Повернутися до вибору скрипту',
4854 - 'maintenance-initEditCount-desc' => 'Перерахувати кількість редагувань користувачів',
4855 - 'maintenance-initStats-desc' => 'Перерахувати статистику сайту',
4856 - 'maintenance-invalidtype' => 'Невірний тип!',
4857 - 'maintenance-name' => "Ім'я користувача",
4858 - 'maintenance-password' => 'Пароль',
48594918 'maintenance-reason' => 'Причина',
48604919 'maintenance-confirm' => 'Підтвердити',
4861 - 'maintenance-invalidname' => "Неправильне ім'я користувача!",
4862 - 'maintenance-userexists' => 'Користувач вже існує!',
4863 - 'maintenance-invalidtitle' => 'Неприпустима назва "$1"!',
4864 - 'maintenance-titlenoexist' => 'Вказаного заголовку ("$1") не існує!',
4865 - 'maintenance-deleted' => 'ВИЛУЧЕНО',
4866 - 'maintenance-revnotfound' => 'Версію $1 не знайдено!',
4867 - 'maintenance-stats-edits' => 'Кількість редагувань: $1',
4868 - 'maintenance-stats-articles' => 'Кількість сторінок в основному просторі назв: $1',
4869 - 'maintenance-stats-pages' => 'Кількість сторінок: $1',
4870 - 'maintenance-stats-users' => 'Кількість користувачів: $1',
4871 - 'maintenance-stats-admins' => 'Кількість адміністраторів: $1',
4872 - 'maintenance-stats-images' => 'Кількість файлів: $1',
4873 - 'maintenance-stats-views' => 'Кількість переглядів сторінок: $1',
4874 - 'maintenance-stats-update' => 'Оновлення бази даних{{int:ellipsis}}',
4875 - 'maintenance-error' => 'Помилка: $1',
4876 - 'maintenance-memc-requests' => 'Запити',
4877 - 'maintenance-memc-total' => 'всього:',
4878 - 'maintenance-memc-parsercache' => 'Кеш парсера',
4879 - 'maintenance-memc-imagecache' => 'Кеш зображень',
4880 - 'maintenance-re-nf' => 'Користувача $1 не знайдено',
48814920 );
48824921
4883 -/** Urdu (اردو) */
4884 -$messages['ur'] = array(
4885 - 'maintenance-reason' => 'وجہ',
4886 -);
4887 -
48884922 /** Veps (Vepsan kel')
48894923 * @author Игорь Бродский
48904924 */
48914925 $messages['vep'] = array(
4892 - 'maintenance-invalidtype' => 'Vär tip!',
 4926+ 'maintenance-error-invalidtype' => 'Vär tip!',
48934927 'maintenance-name' => 'Kävutajan nimi',
48944928 'maintenance-password' => 'Peitsana',
48954929 'maintenance-bureaucrat' => 'Panda kävutai bürokrataks',
48964930 'maintenance-reason' => 'Sü',
4897 - 'maintenance-confirm' => 'Vahvištoitta',
 4931+ 'maintenance-option-confirm' => 'Vahvištoitta',
48984932 'maintenance-invalidname' => 'Vär kävutajannimi!',
48994933 'maintenance-failed' => 'ONETOMAŠTI',
49004934 'maintenance-deleted' => 'ČUTUD POIŠ',
@@ -4936,16 +4970,16 @@
49374971 'maintenance-initStats' => 'Sử dụng mẫu này để tính lại các thống kê của trang, hãy chỉ rõ nếu bạn cũng muốn tính lại số lần xem trang',
49384972 'maintenance-moveBatch' => 'Sử dụng mẫu này để di chuyển trang hàng loạt.
49394973 Mỗi dòng nên ghi rõ trang nguồn và trang đích, cách nhau bằng dấu sọc đứng',
4940 - 'maintenance-invalidtype' => 'Kiểu không hợp lệ!',
 4974+ 'maintenance-error-invalidtype' => 'Kiểu không hợp lệ!',
49414975 'maintenance-name' => 'Tên người dùng',
49424976 'maintenance-password' => 'Mật khẩu',
49434977 'maintenance-bureaucrat' => 'Thăng người này làm hành chính viên',
49444978 'maintenance-reason' => 'Lý do',
49454979 'maintenance-update' => 'Có sử dụng UPDATE khi cập nhật một bảng? Thay vào đó hãy bỏ chọn cách dùng DELETE/INSERT.',
49464980 'maintenance-noviews' => 'Chọn cái này để ngăn cập nhật số lần xem trang',
4947 - 'maintenance-confirm' => 'Xác nhận',
 4981+ 'maintenance-option-confirm' => 'Xác nhận',
49484982 'maintenance-invalidname' => 'Tên người dùng không hợp lệ!',
4949 - 'maintenance-success' => '$1 đã chạy thành công!',
 4983+ 'maintenance-output-success' => '$1 đã chạy thành công!',
49504984 'maintenance-userexists' => 'Người dùng đã tồn tại!',
49514985 'maintenance-invalidtitle' => 'Tựa đề “$1” không hợp lệ!',
49524986 'maintenance-titlenoexist' => 'Tựa đề chỉ định (“$1”) không tồn tại!',
@@ -5005,12 +5039,12 @@
50065040 'maintenance-initStats' => 'Gebolös fometi at ad dönukalkulön statitis topädik. Mäniotolös, if vilol dönukalkulön i padilogamis.',
50075041 'maintenance-moveBatch' => 'Gebolös fometi at ad topätükön padamödoti.
50085042 Lien alik muton ninädön fonätapadi e zeilapadi pateilölis dub malat: „|“',
5009 - 'maintenance-invalidtype' => 'Sot no lonöföl!',
 5043+ 'maintenance-error-invalidtype' => 'Sot no lonöföl!',
50105044 'maintenance-name' => 'Gebananem',
50115045 'maintenance-password' => 'Letavöd',
50125046 'maintenance-bureaucrat' => 'Gevön gebane stadi bürana',
50135047 'maintenance-reason' => 'Kod',
5014 - 'maintenance-confirm' => 'Fümedön',
 5048+ 'maintenance-option-confirm' => 'Fümedön',
50155049 'maintenance-invalidname' => 'Gebananem no lonöfon!',
50165050 'maintenance-userexists' => 'Geban ya dabinon!',
50175051 'maintenance-invalidtitle' => 'Tiäd no lonöföl: „$1“!',
@@ -5041,13 +5075,6 @@
50425076 'maintenance-re-re' => 'Redakams padönugivülons{{int:ellipsis}} peledunon.',
50435077 );
50445078
5045 -/** Walloon (Walon)
5046 - * @author Lucyin
5047 - */
5048 -$messages['wa'] = array(
5049 - 'maintenance-deleted' => 'DISFACÉ',
5050 -);
5051 -
50525079 /** Wu (吴语) */
50535080 $messages['wuu'] = array(
50545081 'maintenance-reason' => '理由:',
@@ -5060,8 +5087,7 @@
50615088 'maintenance-name' => 'באַניצער נאָמען',
50625089 'maintenance-password' => 'פאַסווארט',
50635090 'maintenance-reason' => 'אורזאַך',
5064 - 'maintenance-confirm' => 'באַשטעטיגן',
5065 - 'maintenance-invalidname' => 'אומגילטיקער באַניצער נאָמען!',
 5091+ 'maintenance-option-confirm' => 'באַשטעטיגן',
50665092 );
50675093
50685094 /** Simplified Chinese (‪中文(简体)‬)
@@ -5073,7 +5099,7 @@
50745100 'maintenance-name' => '使用者名称',
50755101 'maintenance-password' => '密码',
50765102 'maintenance-reason' => '原因',
5077 - 'maintenance-confirm' => '确认',
 5103+ 'maintenance-option-confirm' => '确认',
50785104 'maintenance-memc-requests' => '请求',
50795105 );
50805106
@@ -5089,7 +5115,7 @@
50905116 'maintenance-name' => '使用者名稱',
50915117 'maintenance-password' => '密碼',
50925118 'maintenance-reason' => '原因',
5093 - 'maintenance-confirm' => '確認',
 5119+ 'maintenance-option-confirm' => '確認',
50945120 'maintenance-invalidname' => '無效的使用者名稱!',
50955121 'maintenance-userexists' => '用戶已存在!',
50965122 'maintenance-invalidtitle' => '無效的標題「$1」!',
Index: trunk/extensions/Maintenance/Maintenance.php
@@ -4,7 +4,7 @@
55 *
66 * @file
77 * @ingroup Extensions
8 - * @version 1.0.1
 8+ * @version 2.0.0
99 * @author Ryan Schmidt
1010 * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
1111 * @link http://www.mediawiki.org/wiki/Extension:Maintenance Documentation
@@ -20,7 +20,7 @@
2121 'path' => __FILE__,
2222 'name' => 'Maintenance',
2323 'author' => 'Ryan Schmidt',
24 - 'version' => '1.0.3',
 24+ 'version' => '2.0.0',
2525 'descriptionmsg' => 'maintenance-desc',
2626 'url' => 'http://www.mediawiki.org/wiki/Extension:Maintenance',
2727 );
Index: trunk/extensions/Maintenance/metadata.ini
@@ -0,0 +1,338 @@
 2+;Script metadata file for Special:Maintenance
 3+;used to populate the form as well as localise the output messages
 4+;do not edit this file unless you know what you are doing
 5+;valid keys: option, arg, error, output, stdin, batch, enabled
 6+
 7+[attachLatest]
 8+option = "fix check 0"
 9+output[] = "begin string Looking for pages with page_latest set to 0..."
 10+output[] = "notime regex (.*) (.*) \[\[(.*)\]\] can't find latest rev time\?!"
 11+output[] = "norev regex (.*) (.*) \[\[(.*)\]\] latest time (.*), can't find revision id"
 12+output[] = "found regex (.*) (.*) \[\[(.*)\]\] latest time (.*), rev id (.*)"
 13+output[] = "done regex Done! Processed (.*) pages\."
 14+output[] = "dryrun string This was a dry run; rerun with --fix to update page_latest."
 15+
 16+[benchmarkPurge]
 17+option = "count input"
 18+error = "nosquid string Squid purge benchmark doesn't do much without squid support on."
 19+output[] = "numsquids regex There are (.*) defined squid servers:"
 20+output[] = "trial regex (.*) titles in (.*)ms \((.*)ms each\)"
 21+
 22+[changePassword]
 23+option[] = "user input"
 24+option[] = "password password"
 25+error = "nouser regex No such user: (.*)"
 26+output = "set regex Password set for (.*)"
 27+
 28+[checkAutoLoader]
 29+output[] = "list1 regex \t'(.*)' => '(.*)',"
 30+output[] = "list2 regex (.*): Wrong file: found in (.*), listed in (.*)"
 31+
 32+[checkBadRedirects]
 33+output[] = "header string Fetching redirects..."
 34+output[] = "found regex Found (.*) total redirects\.\nLooking for bad redirects\.\.\."
 35+output[] = "footer string done."
 36+
 37+[checkImages]
 38+batch = 1000
 39+output[] = "noaccess regex (.*): not locally accessible"
 40+output[] = "missing regex (.*): missing"
 41+output[] = "isdir regex (.*): is a directory"
 42+output[] = "truncated regex (.*): truncated, was (.*)"
 43+output[] = "mismatch regex (.*): size mismatch DB=(.*), actual=(.*)"
 44+output[] = "good regex Good images: (.*)\/(.*)"
 45+
 46+[checkSyntax]
 47+option[] = "with-extensions check 0"
 48+option[] = "path input"
 49+option[] = "list-file textarea lstfile.tmp"
 50+option[] = "modified check 0"
 51+option[] = "syntax-only check 0"
 52+output[] = "parsekit string Checking syntax (using parsekit)"
 53+output[] = "phpl string Checking syntax (using php -l, this can take a long time)"
 54+output[] = "footer regex Done! (.*) files checked, (.*) failures and (.*) warnings found"
 55+output[] = "svnlist string Retrieving list from Subversion..."
 56+output[] = "done regex done(\.?)"
 57+output[] = "buildlist string Building file list..."
 58+output[] = "error regex Error in (.*) line (.*): (.*)"
 59+output[] = "warning regex Warning in file (.*): (.*) found"
 60+error[] = "nofile regex Error: can't find file or directory (.*)"
 61+error[] = "cantopen regex Can't open file (.*)"
 62+error[] = "svnerr string Error retrieving list from Subversion!"
 63+
 64+[checkUsernames]
 65+error = "notvalid regex (.*): ([0-9]+): '(.*)'"
 66+
 67+[cleanupCaps]
 68+option[] = "dry-run check 0"
 69+option[] = "namespace input"
 70+output[] = "islower regex \"(.*)\" already lowercase\."
 71+output[] = "clash regex \"(.*)\" skipped; \"(.*)\" already exists"
 72+output[] = "dryrun regex \"(.*)\" -> \"(.*)\": DRY RUN, NOT MOVED"
 73+output[] = "moved regex \"(.*)\" -> \"(.*)\": (.*)"
 74+output[] = "check string Checking for bad titles..."
 75+output[] = "checkfix string Checking and fixing bad titles..."
 76+output[] = "progress regex (.*) (.*): (.*)% done on (.*); ETA (.*) \[(.*)/(.*)\] (.*)\/sec <(.*)% updated>"
 77+output[] = "processing regex Processing (.*)\.\.\."
 78+output[] = "finished regex Finished (.*)\.\.\. (.*) of (.*) rows updated"
 79+error[] = "noneed string $wgCapitalLinks is on -- no need for caps links cleanup."
 80+error[] = "missingparam regex (.*): Missing parameter (.*)"
 81+
 82+[cleanupImages]
 83+enabled = 0
 84+
 85+[cleanupSpam]
 86+enabled = 0
 87+
 88+[cleanupTitles]
 89+enabled = 0
 90+
 91+[cleanupWatchlist]
 92+enabled = 0
 93+
 94+[clear_interwiki_cache]
 95+enabled = 0
 96+
 97+[clear_stats]
 98+enabled = 0
 99+
 100+[convertLinks]
 101+enabled = 0
 102+
 103+[convertUserOptions]
 104+enabled = 0
 105+
 106+[createAndPromote]
 107+enabled = 0
 108+
 109+[deleteArchivedFiles]
 110+enabled = 0
 111+
 112+[deleteArchivedRevisions]
 113+enabled = 0
 114+
 115+[deleteBatch]
 116+enabled = 0
 117+
 118+[deleteDefaultMessages]
 119+enabled = 0
 120+
 121+[deleteImageMemcached]
 122+enabled = 0
 123+
 124+[deleteOldRevisions]
 125+enabled = 0
 126+
 127+[deleteOrphanedRevisions]
 128+enabled = 0
 129+
 130+[deleteRevision]
 131+enabled = 0
 132+
 133+[deleteSelfExternals]
 134+enabled = 0
 135+
 136+[dumpLinks]
 137+enabled = 0
 138+
 139+[dumpSisterSites]
 140+enabled = 0
 141+
 142+[dumpUploads]
 143+enabled = 0
 144+
 145+[edit]
 146+enabled = 0
 147+
 148+[fetchText]
 149+enabled = 0
 150+
 151+[findhooks]
 152+enabled = 0
 153+
 154+[fixSlaveDesync]
 155+enabled = 0
 156+
 157+[fixTimestamps]
 158+enabled = 0
 159+
 160+[fixUserRegistration]
 161+enabled = 0
 162+
 163+[generateSitemap]
 164+enabled = 0
 165+
 166+[getLagTimes]
 167+enabled = 0
 168+
 169+[getSlaveServer]
 170+enabled = 0
 171+
 172+[getText]
 173+enabled = 0
 174+
 175+[httpSessionDownload]
 176+enabled = 0
 177+
 178+[initEditCount]
 179+enabled = 0
 180+
 181+[initStats]
 182+enabled = 0
 183+
 184+[lag]
 185+enabled = 0
 186+
 187+[mctest]
 188+enabled = 0
 189+
 190+[mergeMessageFileList]
 191+enabled = 0
 192+
 193+[migrateUserGroup]
 194+enabled = 0
 195+
 196+[minify]
 197+enabled = 0
 198+
 199+[moveBatch]
 200+enabled = 0
 201+
 202+[namespaceDupes]
 203+enabled = 0
 204+
 205+[nextJobDB]
 206+enabled = 0
 207+
 208+[nukeNS]
 209+enabled = 0
 210+
 211+[nukePage]
 212+enabled = 0
 213+
 214+[orphans]
 215+enabled = 0
 216+
 217+[patchSql]
 218+enabled = 0
 219+
 220+[populateCategory]
 221+enabled = 0
 222+
 223+[populateLogSearch]
 224+enabled = 0
 225+
 226+[populateLogUsertext]
 227+enabled = 0
 228+
 229+[populateParentId]
 230+enabled = 0
 231+
 232+[populateRevisionLength]
 233+enabled = 0
 234+
 235+[populateSha1]
 236+enabled = 0
 237+
 238+[protect]
 239+enabled = 0
 240+
 241+[purgeList]
 242+enabled = 0
 243+
 244+[purgeOldText]
 245+enabled = 0
 246+
 247+[reassignEdits]
 248+enabled = 0
 249+
 250+[rebuildall]
 251+enabled = 0
 252+
 253+[rebuildFileCache]
 254+enabled = 0
 255+
 256+[rebuildLocalisationCache]
 257+enabled = 0
 258+
 259+[rebuildmessages]
 260+enabled = 0
 261+
 262+[rebuildrecentchanges]
 263+enabled = 0
 264+
 265+[rebuildtextindex]
 266+enabled = 0
 267+
 268+[refreshCategoryCounts]
 269+enabled = 0
 270+
 271+[refreshImageCount]
 272+enabled = 0
 273+
 274+[refreshLinks]
 275+enabled = 0
 276+
 277+[removeUnusedAccounts]
 278+enabled = 0
 279+
 280+[renameDbPrefix]
 281+enabled = 0
 282+
 283+[renderDump]
 284+enabled = 0
 285+
 286+[rollbackEdits]
 287+enabled = 0
 288+
 289+[runBatchedQuery]
 290+enabled = 0
 291+
 292+[runJobs]
 293+option[] = "maxjobs input"
 294+option[] = "type input"
 295+;option[] = "procs input" ;Commented out by default since we're running on a web interface
 296+option[] = "exclusive check 0"
 297+output = "job regex (.*)"
 298+error = "invalidprocs string Invalid argument to --procs"
 299+
 300+[showJobs]
 301+option = "group check 0"
 302+output = "job regex (.*)"
 303+
 304+[showStats]
 305+enabled = 0
 306+
 307+[sql]
 308+arg = "file textarea tmpfile"
 309+output[] = "aff regex Query OK, (.*) row\(s\) affected"
 310+output[] = "row regex (.*)"
 311+error[] = "cantopen string Unable to open input file"
 312+error[] = "sql regex (.*)"
 313+
 314+[sqlite]
 315+enabled = 0
 316+
 317+[stats]
 318+enabled = 0
 319+
 320+[undelete]
 321+enabled = 0
 322+
 323+[updateArticleCount]
 324+enabled = 0
 325+
 326+[updateDoubleWidthSearch]
 327+enabled = 0
 328+
 329+[updateRestrictions]
 330+enabled = 0
 331+
 332+[updateSearchIndex]
 333+enabled = 0
 334+
 335+[updateSpecialPages]
 336+enabled = 0
 337+
 338+[waitForSlave]
 339+enabled = 0

Follow-up revisions

RevisionCommit summaryAuthorDate
r83278* revert changes to Maintenance.alias.php introduced in r83277skizzerz08:47, 5 March 2011
r83279* add property svn:eol-style native on metadata.ini fileskizzerz08:50, 5 March 2011

Comments

#Comment by Skizzerz (talk | contribs)   08:51, 5 March 2011

2 follow-up revisions:

  • r83278 reverted the changes to the alias.php file (didn't realize that the file format updated)
  • r83279 adds svn:eol-style native to the metadata.ini file
#Comment by Nikerabbit (talk | contribs)   09:48, 5 March 2011
  • @ should be replaced with wf(Suppress|Restore)Warnings
  • Don't use $wgOut->addHtml( wfMsg() )
  • Latest updates in i18n files seem to have been reverted
  • This nicely exposed all db passwords among others: $wgOut->addHTML( htmlspecialchars( print_r( $GLOBALS, true ) ) );
  • makeKnownLinkObj() is deprecated, it can be replaced with link()
  • What's up with the many new i18n messages which don't seem to be used?
#Comment by Skizzerz (talk | contribs)   11:17, 5 March 2011
  • Will do the warnings thing for next time
  • Yeah, I'm not sure why I did that since I already know about addWikiMsg...
  • I'll take a look at that. I know that the alias.php file got borked so I reverted it back to what it was before this commit, but I didn't see any issues with the i18n file.
  • That is why access should be restricted to this page. Even if that wasn't there, you'd still be able to get at the db passwords by running the sql script.
  • Same as the addWikiMsg thing, knew about it yet somehow didn't fix it...
  • They are used. How this extension now works is that it runs the execute() method of each maintenance script class and then captures its output. It then runs that output through a bunch of string searches/regexes to replace the hardcoded English output with potentially localised output. These rules are found in the metadata.ini file. Is it ugly? Yes, it is, but unfortunately it's the only way to localise maintenance scripts at this point until someone goes through and actually makes the scripts themselves take a language parameter or something similar to output messages in a given language.

Status & tagging log