r65230 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r65229‎ | r65230 | r65231 >
Date:14:20, 18 April 2010
Author:siebrand
Status:deferred
Tags:
Comment:
* Rename SpecialForm to Form, including files. Update Translate accordingly.
* stylized Form
Modified paths:
  • /trunk/extensions/Form (added) (history)
  • /trunk/extensions/Form/Form.alias.php (added) (history)
  • /trunk/extensions/Form/Form.body.php (added) (history)
  • /trunk/extensions/Form/Form.i18n.php (added) (history)
  • /trunk/extensions/Form/Form.php (added) (history)
  • /trunk/extensions/Form/README (modified) (history)
  • /trunk/extensions/Form/SpecialForm.alias.php (deleted) (history)
  • /trunk/extensions/Form/SpecialForm.body.php (deleted) (history)
  • /trunk/extensions/Form/SpecialForm.i18n.php (deleted) (history)
  • /trunk/extensions/Form/SpecialForm.setup.php (deleted) (history)
  • /trunk/extensions/SpecialForm (deleted) (history)
  • /trunk/extensions/Translate/groups/mediawiki-defines.txt (modified) (history)

Diff [purge]

Index: trunk/extensions/Translate/groups/mediawiki-defines.txt
@@ -450,6 +450,10 @@
451451
452452 Force Preview
453453
 454+Form
 455+aliasfile = Form/Form.alias.php
 456+ignored = formtemplatepattern
 457+
454458 Format Email
455459 descmsg = email-desc
456460 ignored = email_header
@@ -1063,11 +1067,6 @@
10641068 file = SpecialFileList/SpecialFilelist.i18n.php
10651069 descmsg = filelist-desc
10661070
1067 -Special Form
1068 -aliasfile = SpecialForm/SpecialForm.alias.php
1069 -ignored = formtemplatepattern
1070 -descmsg = form-desc
1071 -
10721071 Sphinx Search
10731072 aliasfile = SphinxSearch/SphinxSearch.alias.php
10741073
Index: trunk/extensions/Form/Form.alias.php
@@ -0,0 +1,182 @@
 2+<?php
 3+/**
 4+ * Aliases for special pages
 5+ *
 6+ */
 7+
 8+$aliases = array();
 9+
 10+$aliases['en'] = array(
 11+ 'Form' => array( 'Form' ),
 12+);
 13+
 14+/** Afrikaans (Afrikaans) */
 15+$aliases['af'] = array(
 16+ 'Form' => array( 'Vorm' ),
 17+);
 18+
 19+/** Arabic (العربية) */
 20+$aliases['ar'] = array(
 21+ 'Form' => array( 'استمارة' ),
 22+);
 23+
 24+/** Egyptian Spoken Arabic (مصرى) */
 25+$aliases['arz'] = array(
 26+ 'Form' => array( 'استمارة' ),
 27+);
 28+
 29+/** German (Deutsch) */
 30+$aliases['de'] = array(
 31+ 'Form' => array( 'Eingabefeld' ),
 32+);
 33+
 34+/** Lower Sorbian (Dolnoserbski) */
 35+$aliases['dsb'] = array(
 36+ 'Form' => array( 'Formular' ),
 37+);
 38+
 39+/** Persian (فارسی) */
 40+$aliases['fa'] = array(
 41+ 'Form' => array( 'فرم' ),
 42+);
 43+
 44+/** Franco-Provençal (Arpetan) */
 45+$aliases['frp'] = array(
 46+ 'Form' => array( 'Formulèro' ),
 47+);
 48+
 49+/** Galician (Galego) */
 50+$aliases['gl'] = array(
 51+ 'Form' => array( 'Formulario' ),
 52+);
 53+
 54+/** Hebrew (עברית) */
 55+$aliases['he'] = array(
 56+ 'Form' => array( 'טופס' ),
 57+);
 58+
 59+/** Upper Sorbian (Hornjoserbsce) */
 60+$aliases['hsb'] = array(
 61+ 'Form' => array( 'Formular' ),
 62+);
 63+
 64+/** Hungarian (Magyar) */
 65+$aliases['hu'] = array(
 66+ 'Form' => array( 'Űrlap' ),
 67+);
 68+
 69+/** Interlingua (Interlingua) */
 70+$aliases['ia'] = array(
 71+ 'Form' => array( 'Formulario' ),
 72+);
 73+
 74+/** Indonesian (Bahasa Indonesia) */
 75+$aliases['id'] = array(
 76+ 'Form' => array( 'FormulirKhusus' ),
 77+);
 78+
 79+/** Italian (Italiano) */
 80+$aliases['it'] = array(
 81+ 'Form' => array( 'Modulo' ),
 82+);
 83+
 84+/** Japanese (日本語) */
 85+$aliases['ja'] = array(
 86+ 'Form' => array( 'フォーム' ),
 87+);
 88+
 89+/** Khmer (ភាសាខ្មែរ) */
 90+$aliases['km'] = array(
 91+ 'Form' => array( 'បែបបទ' ),
 92+);
 93+
 94+/** Korean (한국어) */
 95+$aliases['ko'] = array(
 96+ 'Form' => array( '양식' ),
 97+);
 98+
 99+/** Colognian (Ripoarisch) */
 100+$aliases['ksh'] = array(
 101+ 'Form' => array( 'Fommulaa', 'Formular' ),
 102+);
 103+
 104+/** Luxembourgish (Lëtzebuergesch) */
 105+$aliases['lb'] = array(
 106+ 'Form' => array( 'Formulaire' ),
 107+);
 108+
 109+/** Macedonian (Македонски) */
 110+$aliases['mk'] = array(
 111+ 'Form' => array( 'Образец' ),
 112+);
 113+
 114+/** Malayalam (മലയാളം) */
 115+$aliases['ml'] = array(
 116+ 'Form' => array( 'ഫോം' ),
 117+);
 118+
 119+/** Marathi (मराठी) */
 120+$aliases['mr'] = array(
 121+ 'Form' => array( 'छापीलनमूना' ),
 122+);
 123+
 124+/** Maltese (Malti) */
 125+$aliases['mt'] = array(
 126+ 'Form' => array( 'Formola' ),
 127+);
 128+
 129+/** Nedersaksisch (Nedersaksisch) */
 130+$aliases['nds-nl'] = array(
 131+ 'Form' => array( 'Formelier' ),
 132+);
 133+
 134+/** Dutch (Nederlands) */
 135+$aliases['nl'] = array(
 136+ 'Form' => array( 'Formulier' ),
 137+);
 138+
 139+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬) */
 140+$aliases['no'] = array(
 141+ 'Form' => array( 'Skjema' ),
 142+);
 143+
 144+/** Occitan (Occitan) */
 145+$aliases['oc'] = array(
 146+ 'Form' => array( 'Formulari' ),
 147+);
 148+
 149+/** Polish (Polski) */
 150+$aliases['pl'] = array(
 151+ 'Form' => array( 'Formularz' ),
 152+);
 153+
 154+/** Slovak (Slovenčina) */
 155+$aliases['sk'] = array(
 156+ 'Form' => array( 'Formulár' ),
 157+);
 158+
 159+/** Albanian (Shqip) */
 160+$aliases['sq'] = array(
 161+ 'Form' => array( 'Formë' ),
 162+);
 163+
 164+/** Swedish (Svenska) */
 165+$aliases['sv'] = array(
 166+ 'Form' => array( 'Formulär' ),
 167+);
 168+
 169+/** Swahili (Kiswahili) */
 170+$aliases['sw'] = array(
 171+ 'Form' => array( 'Fomu' ),
 172+);
 173+
 174+/** Thai (ไทย) */
 175+$aliases['th'] = array(
 176+ 'Form' => array( 'ฟอร์ม' ),
 177+);
 178+
 179+/** Tagalog (Tagalog) */
 180+$aliases['tl'] = array(
 181+ 'Form' => array( 'Pormularyo' ),
 182+);
 183+
Property changes on: trunk/extensions/Form/Form.alias.php
___________________________________________________________________
Name: svn:keywords
1184 + Id
Name: svn:eol-style
2185 + native
Index: trunk/extensions/Form/Form.body.php
@@ -0,0 +1,510 @@
 2+<?php
 3+/**
 4+ * Form.php -- Use a form-based interface to start new articles
 5+ * Copyright 2007 Vinismo, Inc. (http://vinismo.com/)
 6+ *
 7+ * This program is free software; you can redistribute it and/or modify
 8+ * it under the terms of the GNU General Public License as published by
 9+ * the Free Software Foundation; either version 2 of the License, or
 10+ * (at your option) any later version.
 11+ *
 12+ * This program is distributed in the hope that it will be useful,
 13+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 15+ * GNU General Public License for more details.
 16+ *
 17+ * You should have received a copy of the GNU General Public License
 18+ * along with this program; if not, write to the Free Software
 19+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 20+ *
 21+ * @file
 22+ * @ingroup Extensions
 23+ * @author Evan Prodromou <evan@vinismo.com>
 24+ */
 25+
 26+if ( !defined( 'MEDIAWIKI' ) ) {
 27+ exit( 1 );
 28+}
 29+
 30+require_once( 'XmlFunctions.php' );
 31+
 32+class SpecialForm extends SpecialPage {
 33+
 34+ /**
 35+ * Constructor
 36+ */
 37+ public function __construct() {
 38+ parent::__construct( 'Form' );
 39+ }
 40+
 41+ /**
 42+ * Show the special page
 43+ *
 44+ * @param $par Mixed: parameter passed to the page or null
 45+ */
 46+ public function execute( $par ) {
 47+ global $wgRequest, $wgOut;
 48+
 49+ wfLoadExtensionMessages( 'Form' );
 50+
 51+ # Must have a name, like Special:Form/Nameofform
 52+ # XXX: instead of an error, show a list of available forms
 53+ if ( !$par ) {
 54+ $wgOut->showErrorPage( 'formnoname', 'formnonametext' );
 55+ return;
 56+ }
 57+
 58+ $form = $this->loadForm( $par );
 59+
 60+ # Bad form
 61+ if ( !$form ) {
 62+ $wgOut->showErrorPage( 'formbadname', 'formbadnametext' );
 63+ return;
 64+ }
 65+
 66+ if ( $wgRequest->wasPosted() ) {
 67+ # POST is to create an article
 68+ $this->createArticle( $form );
 69+ } else {
 70+ # GET (HEAD?) is to show the form
 71+ $this->showForm( $form );
 72+ }
 73+ }
 74+
 75+ # Load and parse a form article from the DB
 76+ function loadForm( $name ) {
 77+ $nt = Title::makeTitleSafe( NS_MEDIAWIKI, wfMsgForContent( 'formpattern', $name ) );
 78+
 79+ # article exists?
 80+ if ( !$nt || $nt->getArticleID() == 0 ) {
 81+ return null;
 82+ }
 83+
 84+ $article = new Article( $nt );
 85+
 86+ assert( $article );
 87+
 88+ $text = $article->getContent( true );
 89+
 90+ # Form constructor does the parsing
 91+ return new Form( $name, $text );
 92+ }
 93+
 94+ function showForm( $form, $errmsg = null ) {
 95+ global $wgOut, $wgRequest, $wgParser, $wgUser, $wgSpecialFormRecaptcha;
 96+
 97+ $self = SpecialPage::getTitleFor( wfMsgForContent( 'form' ) . '/' . $form->name );
 98+
 99+ $wgOut->setPageTitle( $form->title );
 100+
 101+ if ( !is_null( $form->instructions ) ) {
 102+
 103+ $wgOut->addHTML( Xml::openElement( 'div', array( 'class' => 'instructions' ) ) .
 104+ $wgOut->parse( $form->instructions ) .
 105+ Xml::closeElement( 'div' ) .
 106+ Xml::element( 'br' ) );
 107+ }
 108+
 109+ if ( !is_null( $errmsg ) ) {
 110+ $wgOut->addHTML( Xml::openElement( 'div', array( 'class' => 'error' ) ) .
 111+ $wgOut->parse( $errmsg ) .
 112+ Xml::closeElement( 'div' ) .
 113+ Xml::element( 'br' ) );
 114+ }
 115+
 116+ $wgOut->addHTML(
 117+ Xml::openElement( 'form', array(
 118+ 'method' => 'post',
 119+ 'action' => $self->getLocalURL()
 120+ )
 121+ )
 122+ );
 123+
 124+ foreach ( $form->fields as $field ) {
 125+ $wgOut->addHTML( $field->render( $wgRequest->getText( $field->name ) ) . Xml::element( 'br' ) . "\n" );
 126+ }
 127+
 128+ # Anonymous user, use recaptcha
 129+ if ( $wgUser->getId() == 0 && $wgSpecialFormRecaptcha ) {
 130+ require_once( 'recaptchalib.php' );
 131+ global $recaptcha_public_key; # same as used by Recaptcha plugin
 132+ $wgOut->addHTML( recaptcha_get_html( $recaptcha_public_key ) );
 133+ }
 134+
 135+ $wgOut->addHTML( Xml::element( 'input', array( 'type' => 'submit',
 136+ 'value' => wfMsg( 'formsave' ) ) ) );
 137+
 138+ $wgOut->addHTML( Xml::closeElement( 'form' ) );
 139+ }
 140+
 141+ function createArticle( $form ) {
 142+ global $wgOut, $wgRequest, $wgLang, $wgUser, $wgSpecialFormRecaptcha;
 143+
 144+ # Check recaptcha
 145+ if ( $wgUser->getId() == 0 && $wgSpecialFormRecaptcha ) {
 146+ require_once( 'recaptchalib.php' );
 147+ global $recaptcha_private_key; # same as used by Recaptcha plugin
 148+ $resp = recaptcha_check_answer(
 149+ $recaptcha_private_key,
 150+ $_SERVER['REMOTE_ADDR'],
 151+ $wgRequest->getText( 'recaptcha_challenge_field' ),
 152+ $wgRequest->getText( 'recaptcha_response_field' )
 153+ );
 154+
 155+ if ( !$resp->is_valid ) {
 156+ $this->showForm( $form, wfMsg( 'formbadrecaptcha' ) );
 157+ return;
 158+ }
 159+ }
 160+
 161+ # Check for required fields
 162+ $missedFields = array();
 163+
 164+ foreach ( $form->fields as $name => $field ) {
 165+ $value = $wgRequest->getText( $name );
 166+ if ( $field->isOptionTrue( 'required' ) && ( is_null( $value ) || strlen( $value ) == 0 ) ) {
 167+ $missedFields[] = $field->label;
 168+ }
 169+ }
 170+
 171+ # On error, show the form again with some error text.
 172+ $missedFieldsCount = count( $missedFields );
 173+ if ( $missedFieldsCount > 0 ) {
 174+ $msg = wfMsgExt( 'formrequiredfielderror', 'parsemag', $wgLang->listToText( $missedFields ), $missedFieldsCount );
 175+ $this->showForm( $form, $msg );
 176+ return;
 177+ }
 178+
 179+ # First, we make sure we have all the titles
 180+ $nt = array();
 181+
 182+ for ( $i = 0; $i < count( $form->template ); $i++ ) {
 183+
 184+ $namePattern = $form->namePattern[$i];
 185+ $template = $form->template[$i];
 186+
 187+ if ( !$namePattern || !$template ) {
 188+ $wgOut->showErrorPage( 'formindexmismatch-title', 'formindexmismatch', array( $i ) );
 189+ return;
 190+ }
 191+
 192+ wfDebug( __METHOD__ . ": for index '$i', namePattern = '$namePattern' and template = '$template'.\n" );
 193+
 194+ $title = $this->makeTitle( $form, $namePattern );
 195+
 196+ $nt[$i] = Title::newFromText( $title );
 197+
 198+ if ( !$nt[$i] ) {
 199+ $wgOut->showErrorPage( 'formbadpagename', 'formbadpagenametext', array( $title ) );
 200+ return;
 201+ }
 202+
 203+ if ( $nt[$i]->getArticleID() != 0 ) {
 204+ $wgOut->showErrorPage( 'formarticleexists', 'formarticleexists', array( $title ) );
 205+ return;
 206+ }
 207+ }
 208+
 209+ # At this point, all $nt titles should be valid, although we're subject to race conditions.
 210+ for ( $i = 0; $i < count( $form->template ); $i++ ) {
 211+
 212+ $template = $form->template[$i];
 213+
 214+ $text = "{{subst:$template";
 215+
 216+ foreach ( $form->fields as $name => $field ) {
 217+ # FIXME: strip/escape template-related chars (|, =, }})
 218+ $text .= "|$name=" . $wgRequest->getText( $name );
 219+ }
 220+
 221+ $text .= '}}';
 222+
 223+ if ( !$this->checkSave( $nt[$i], $text ) ) {
 224+ # Just break here; output already sent
 225+ return;
 226+ }
 227+
 228+ $title = $nt[$i]->GetPrefixedText();
 229+
 230+ wfDebug( __METHOD__ . ": saving article with index '$i' and title '$title'\n" );
 231+
 232+ $article = new Article( $nt[$i] );
 233+
 234+ $status = $article->doEdit( $text, wfMsg( 'formsavesummary', $form->name ), EDIT_NEW );
 235+ if ( $status === false || ( is_object( $status ) && !$status->isOK() ) ) {
 236+ $wgOut->showErrorPage( 'formsaveerror', 'formsaveerrortext', array( $title ) );
 237+ return; # Don't continue
 238+ }
 239+ }
 240+
 241+ # Redirect to the first article
 242+ if ( $nt && $nt[0] ) {
 243+ $wgOut->redirect( $nt[0]->getFullURL() );
 244+ }
 245+ }
 246+
 247+ function makeTitle( $form, $pattern ) {
 248+ global $wgRequest;
 249+
 250+ $title = $pattern;
 251+
 252+ foreach ( $form->fields as $name => $field ) {
 253+ $title = preg_replace( "/{{\{$name\}}}/", $wgRequest->getText( $name ), $title );
 254+ }
 255+
 256+ return $title;
 257+ }
 258+
 259+ # Had to crib some checks from EditPage.php, since they're not done in Article.php
 260+ function checkSave( $nt, $text ) {
 261+ global $wgSpamRegex, $wgFilterCallback, $wgUser, $wgMaxArticleSize, $wgOut;
 262+
 263+ $matches = array();
 264+ $errortext = '';
 265+
 266+ $editPage = new FakeEditPage( $nt );
 267+
 268+ # FIXME: more specific errors, copied from EditPage.php
 269+ if ( $wgSpamRegex && preg_match( $wgSpamRegex, $text, $matches ) ) {
 270+ $wgOut->showErrorPage( 'formsaveerror', 'formsaveerrortext' );
 271+ return false;
 272+ } else if ( $wgFilterCallback && $wgFilterCallback( $nt, $text, 0 ) ) {
 273+ $wgOut->showErrorPage( 'formsaveerror', 'formsaveerrortext' );
 274+ return false;
 275+ } else if ( !wfRunHooks( 'EditFilter', array( $editPage, $text, 0, &$errortext ) ) ) {
 276+ # Hooks usually print their own error
 277+ return false;
 278+ } else if ( $errortext != '' ) {
 279+ $wgOut->showErrorPage( 'formsaveerror', 'formsaveerrortext' );
 280+ return false;
 281+ } else if ( $wgUser->isBlockedFrom( $nt, false ) ) {
 282+ $wgOut->showErrorPage( 'formsaveerror', 'formsaveerrortext' );
 283+ return false;
 284+ } else if ( (int)( strlen( $text ) / 1024 ) > $wgMaxArticleSize ) {
 285+ $wgOut->showErrorPage( 'formsaveerror', 'formsaveerrortext' );
 286+ return false;
 287+ } else if ( !$wgUser->isAllowed( 'edit' ) ) {
 288+ $wgOut->showErrorPage( 'formsaveerror', 'formsaveerrortext' );
 289+ return false;
 290+ } else if ( wfReadOnly() ) {
 291+ $wgOut->showErrorPage( 'formsaveerror', 'formsaveerrortext' );
 292+ return false;
 293+ } else if ( $wgUser->pingLimiter() ) {
 294+ $wgOut->showErrorPage( 'formsaveerror', 'formsaveerrortext' );
 295+ return false;
 296+ }
 297+
 298+ return true;
 299+ }
 300+}
 301+
 302+# Dummy class for extensions that support EditFilter hook
 303+class FakeEditPage {
 304+ var $mTitle;
 305+
 306+ function FakeEditPage( &$nt ) {
 307+ $this->mTitle = $nt;
 308+ }
 309+}
 310+
 311+class Form {
 312+ var $name;
 313+ var $title;
 314+ var $template;
 315+ var $instructions;
 316+ var $fields;
 317+ var $namePattern;
 318+
 319+ function Form( $name, $text ) {
 320+ $this->name = $name;
 321+ $this->title = wfMsgForContent( 'formtitlepattern', $name );
 322+ $this->template = array();
 323+ $this->template[0] = wfMsgForContent( 'formtemplatepattern', $name );
 324+
 325+ $this->fields = array();
 326+ $this->namePattern = array();
 327+ $this->instructions = null;
 328+
 329+ # XXX: may be some faster ways to do this
 330+ $lines = explode( "\n", $text );
 331+
 332+ foreach ( $lines as $line ) {
 333+
 334+ if ( preg_match( '/^(\w+)=(.*)$/', $line, $matches ) ) {
 335+ if ( strcasecmp( $matches[1], 'template' ) == 0 ) {
 336+ $this->template[0] = $matches[2];
 337+ } else if ( preg_match( '/template(\d+)/i', $matches[1], $tmatches ) ) {
 338+ $this->template[intval( $tmatches[1] )] = $matches[2];
 339+ } else if ( strcasecmp( $matches[1], 'namePattern' ) == 0 ) {
 340+ $this->namePattern[0] = $matches[2];
 341+ } else if ( preg_match( '/namePattern(\d+)/i', $matches[1], $tmatches ) ) {
 342+ $this->namePattern[intval( $tmatches[1] )] = $matches[2];
 343+ } else if ( strcasecmp( $matches[1], 'title' ) == 0 ) {
 344+ $this->title = $matches[2];
 345+ } else if ( strcasecmp( $matches[1], 'instructions' ) == 0 ) {
 346+ $this->instructions = $matches[2];
 347+ wfDebug( __METHOD__ . ": Got instructions: '" . $this->instructions . "'.\n" );
 348+ } else {
 349+ wfDebug( __METHOD__ . ": unknown form attribute '$matches[1]'; skipping.\n" );
 350+ }
 351+ } else if ( preg_match( '/^(\w+)\|([^\|]+)\|(\w+)(\|([^\|]+)(\|(.*))?)?$/', $line, $matches ) ) {
 352+ # XXX: build an inheritance tree for different kinds of fields
 353+ $field = new FormField();
 354+ $field->setName( $matches[1] );
 355+ $field->setLabel( $matches[2] );
 356+ $field->setFieldType( $matches[3] );
 357+ if ( count( $matches ) > 4 && $matches[4] ) {
 358+ $field->setDescription( $matches[5] );
 359+ if ( count( $matches ) > 6 && $matches[6] ) {
 360+ $rawOptions = explode( ',', $matches[7] );
 361+ foreach ( $rawOptions as $rawOption ) {
 362+ if ( preg_match( '/^(\w+)=(.+)/', $rawOption, $optMatches ) ) {
 363+ $field->setOption( $optMatches[1], $optMatches[2] );
 364+ } else {
 365+ wfDebug( __METHOD__ . ": unrecognized form field option: '$rawOption'; skipping.\n" );
 366+ }
 367+ }
 368+ }
 369+ }
 370+ $this->fields[$field->name] = $field;
 371+ } else {
 372+ wfDebug( __METHOD__ . ": unrecognized form line: '$line'; skipping.\n" );
 373+ }
 374+ }
 375+ }
 376+}
 377+
 378+class FormField {
 379+ var $name;
 380+ var $type;
 381+ var $label;
 382+ var $description;
 383+ var $options;
 384+
 385+ function FormField() {
 386+ $this->name = null;
 387+ $this->type = null;
 388+ $this->label = null;
 389+ $this->description = null;
 390+ $this->options = array();
 391+ }
 392+
 393+ function setName( $name ) {
 394+ $this->name = $name;
 395+ }
 396+
 397+ function setFieldType( $type ) {
 398+ $this->type = $type;
 399+ }
 400+
 401+ function setLabel( $label ) {
 402+ $this->label = $label;
 403+ }
 404+
 405+ function setDescription( $description ) {
 406+ $this->description = $description;
 407+ }
 408+
 409+ function setOption( $key, $value ) {
 410+ $this->options[$key] = $value;
 411+ }
 412+
 413+ function getOption( $key, $default = null ) {
 414+ if ( array_key_exists( $key, $this->options ) ) {
 415+ return $this->options[$key];
 416+ } else {
 417+ return $default;
 418+ }
 419+ }
 420+
 421+ function isOptionTrue( $key, $default = false ) {
 422+ $value = $this->getOption( $key, $default );
 423+ return ( ( strcasecmp( $value, 'on' ) == 0 ) ||
 424+ ( strcasecmp( $value, 'yes' ) == 0 ) ||
 425+ ( strcasecmp( $value, 'true' ) == 0 ) ||
 426+ ( strcasecmp( $value, '1' ) == 0 ) );
 427+ }
 428+
 429+ function render( $def = null ) {
 430+ global $wgOut;
 431+
 432+ switch( $this->type ) {
 433+ case 'textarea':
 434+ return Xml::openElement( 'h2' ) .
 435+ Xml::element( 'label', array( 'for' => $this->name ), $this->label ) .
 436+ Xml::closeElement( 'h2' ) .
 437+ ( ( $this->description ) ?
 438+ ( Xml::openElement( 'div' ) . $wgOut->parse( $this->description ) . Xml::closeElement( 'div' ) ) : '' ) .
 439+ Xml::openElement( 'textarea',
 440+ array(
 441+ 'name' => $this->name,
 442+ 'id' => $this->name,
 443+ 'rows' => $this->getOption( 'rows', 6 ),
 444+ 'cols' => $this->getOption( 'cols', 80 )
 445+ )
 446+ ) .
 447+ ( ( is_null( $def ) ) ? '' : $def ) .
 448+ Xml::closeElement( 'textarea' );
 449+ break;
 450+ case 'text':
 451+ return Xml::element( 'label', array( 'for' => $this->name ), $this->label ) . wfMsg( 'colon-separator' ) .
 452+ Xml::element( 'input',
 453+ array(
 454+ 'type' => 'text',
 455+ 'name' => $this->name,
 456+ 'id' => $this->name,
 457+ 'value' => ( ( is_null( $def ) ) ? '' : $def ),
 458+ 'size' => $this->getOption( 'size', 30 )
 459+ )
 460+ );
 461+ break;
 462+ case 'checkbox':
 463+ $attrs = array(
 464+ 'type' => 'checkbox',
 465+ 'name' => $this->name,
 466+ 'id' => $this->name
 467+ );
 468+ if ( $def == 'checked' ) {
 469+ $attrs['checked'] = 'checked';
 470+ }
 471+ return Xml::element( 'label', array( 'for' => $this->name ), $this->label ) . wfMsg( 'colon-separator' ) .
 472+ Xml::element( 'input', $attrs );
 473+ break;
 474+ case 'radio':
 475+ $items = array();
 476+ $rawitems = explode( ';', $this->getOption( 'items' ) );
 477+ foreach ( $rawitems as $item ) {
 478+ $attrs = array(
 479+ 'type' => 'radio',
 480+ 'name' => $this->name,
 481+ 'value' => $item
 482+ );
 483+ if ( $item == $def ) {
 484+ $attrs['checked'] = 'checked';
 485+ }
 486+ $items[] = Xml::openElement( 'input', $attrs ) .
 487+ Xml::element( 'label', null, $item ) .
 488+ Xml::closeElement( 'input' );
 489+ }
 490+ return Xml::element( 'span', null, $this->label ) . Xml::element( 'br' ) . implode( '', $items );
 491+ break;
 492+ case 'select':
 493+ $items = array();
 494+ $rawitems = explode( ';', $this->getOption( 'items' ) );
 495+ foreach ( $rawitems as $item ) {
 496+ $items[] = Xml::element( 'option',
 497+ ( $item == $def ) ? array( 'selected' => 'selected' ) : null,
 498+ $item );
 499+ }
 500+
 501+ return Xml::element( 'label', array( 'for' => $this->name ), $this->label ) . wfMsg( 'colon-separator' ) .
 502+ Xml::openElement( 'select', array( 'name' => $this->name, 'id' => $this->name ) ) .
 503+ implode( '', $items ) .
 504+ Xml::closeElement( 'select' );
 505+ break;
 506+ default:
 507+ wfDebug( __METHOD__ . ": unknown form field type '$this->type', skipping.\n" );
 508+ return '';
 509+ }
 510+ }
 511+}
\ No newline at end of file
Property changes on: trunk/extensions/Form/Form.body.php
___________________________________________________________________
Name: svn:eol-style
1512 + native
Index: trunk/extensions/Form/MediaWiki-Sample-form.wiki
@@ -0,0 +1,9 @@
 2+title=Ew-nay Ample-say
 3+namePattern={{{topic}}}
 4+instructions=You can use this page to create a new article on a sample topic.
 5+topic|Topic|text|Topic of the article.
 6+purpose|Purpose|select|Purpose of the
 7+article|items=Business;Pleasure;Other
 8+intro|Introduction|textarea|An introductory paragraph about the topic.
 9+color|Color|radio|Color of the article|items=Red;Blue;Green
 10+conclusion|Conclusion|textarea|The conclusions of the topic.
Property changes on: trunk/extensions/Form/MediaWiki-Sample-form.wiki
___________________________________________________________________
Name: svn:eol-style
111 + native
Index: trunk/extensions/Form/TODO
@@ -0,0 +1,18 @@
 2++ set title correctly
 3+- add a token to session, store it in the form, and check that they
 4+ match on submit, to prevent automated creation
 5++ create a new article on submit
 6++ required/optional fields
 7+- add a bit of text to indicate required fields
 8+- client-side validation of required fields
 9++ check for existing article before saving
 10++ add a default value if passed in using GET
 11++ test setting custom title in form description
 12++ test setting custom template in form description
 13++ parse instructions from wikitext to HTML
 14++ parse descriptions from wikitext to HTML
 15+- automatic type-ahead fields
 16++ create more than one article from one form
 17+- text field validation with regexes on client and server
 18+- file upload fields (for uploading an associated image)
 19+- add new page creations to a special:log file
Property changes on: trunk/extensions/Form/TODO
___________________________________________________________________
Name: svn:eol-style
120 + native
Index: trunk/extensions/Form/Form.i18n.php
@@ -0,0 +1,1690 @@
 2+<?php
 3+/**
 4+ * Form.i18n.php -- I18N for form-based interface to start new pages
 5+ * Copyright 2007 Vinismo, Inc. (http://vinismo.com/)
 6+ *
 7+ * This program is free software; you can redistribute it and/or modify
 8+ * it under the terms of the GNU General Public License as published by
 9+ * the Free Software Foundation; either version 2 of the License, or
 10+ * (at your option) any later version.
 11+ *
 12+ * This program is distributed in the hope that it will be useful,
 13+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 15+ * GNU General Public License for more details.
 16+ *
 17+ * You should have received a copy of the GNU General Public License
 18+ * along with this program; if not, write to the Free Software
 19+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 20+ *
 21+ * @author Evan Prodromou <evan@vinismo.com>
 22+ * @ingroup Extensions
 23+ */
 24+
 25+$messages = array();
 26+
 27+/** English
 28+ * @author Evan Prodromou <evan@vinismo.com>
 29+ */
 30+$messages['en'] = array(
 31+ 'form-desc' => 'A [[Special:Form|form interface]] to start new pages',
 32+ 'form' => 'Form',
 33+ 'formnoname' => 'No form name',
 34+ 'formnonametext' => 'You must provide a form name, like "Special:Form/Nameofform".',
 35+ 'formbadname' => 'Bad form name',
 36+ 'formbadnametext' => 'There is no form by that name.',
 37+ 'formpattern' => '$1-form',
 38+ 'formtemplatepattern' => '$1', # Do not translate this message
 39+ 'formtitlepattern' => 'Add new $1',
 40+ 'formsave' => 'Save',
 41+ 'formindexmismatch-title' => 'Name pattern and template mismatch',
 42+ 'formindexmismatch' => 'This form has mismatched name patterns and templates starting at index $1.',
 43+ 'formarticleexists' => 'Page exists',
 44+ 'formarticleexiststext' => 'The page [[$1]] already exists.',
 45+ 'formbadpagename' => 'Bad page name',
 46+ 'formbadrecaptcha' => 'Incorrect values for reCaptcha. Try again.',
 47+ 'formbadpagenametext' => 'The form data you entered makes a bad page name, "$1".',
 48+ 'formrequiredfielderror' => 'The {{PLURAL:$2|field $1 is|fields $1 are}} required for this form.
 49+Please fill {{PLURAL:$2|it|them}} in.',
 50+ 'formsavesummary' => 'New page using [[Special:Form/$1|form $1]]',
 51+ 'formsaveerror' => 'Error saving form',
 52+ 'formsaveerrortext' => 'There was an unknown error saving page \'$1\'.',
 53+);
 54+
 55+/** Message documentation (Message documentation)
 56+ * @author Fryed-peach
 57+ * @author Jon Harald Søby
 58+ * @author Purodha
 59+ * @author Raymond
 60+ */
 61+$messages['qqq'] = array(
 62+ 'form-desc' => 'Short description of the Form extension, shown on [[Special:Version]]. Do not translate or change links.',
 63+ 'formpattern' => 'The pattern of page names of form definitions. $1 is a given name for a form definition.',
 64+ 'formsave' => '{{Identical|Save}}',
 65+ 'formrequiredfielderror' => '* $1 is a comma separated list of missing fields
 66+* $2 is the number of missing fields',
 67+);
 68+
 69+/** Afrikaans (Afrikaans)
 70+ * @author SPQRobin
 71+ */
 72+$messages['af'] = array(
 73+ 'formsave' => 'Stoor',
 74+);
 75+
 76+/** Aragonese (Aragonés)
 77+ * @author Juanpabl
 78+ */
 79+$messages['an'] = array(
 80+ 'formsave' => 'Alzar',
 81+);
 82+
 83+/** Arabic (العربية)
 84+ * @author Meno25
 85+ * @author OsamaK
 86+ */
 87+$messages['ar'] = array(
 88+ 'form-desc' => '[[Special:Form|واجهة استمارة]] لبدء الصفحات الجديدة',
 89+ 'form' => 'استمارة',
 90+ 'formnoname' => 'لا اسم استمارة',
 91+ 'formnonametext' => 'يجب أن توفر اسم استمارة، مثل "Special:Form/Nameofform".',
 92+ 'formbadname' => 'اسم استمارة سيء',
 93+ 'formbadnametext' => 'لا توجد استمارة بهذا الاسم.',
 94+ 'formpattern' => '$1-استمارة',
 95+ 'formtitlepattern' => 'أضف $1 جديدا',
 96+ 'formsave' => 'احفظ',
 97+ 'formindexmismatch-title' => 'نمط الاسم والقالب لا يتطابقان',
 98+ 'formindexmismatch' => 'هذه الاستمارة بها أنماط أسماء وقوالب غير متطابقة بدءا عند الفهرس $1.',
 99+ 'formarticleexists' => 'الصفحة موجودة',
 100+ 'formarticleexiststext' => 'الصفحة [[$1]] موجودة بالفعل.',
 101+ 'formbadpagename' => 'اسم صفحة سيء',
 102+ 'formbadrecaptcha' => 'قيم غير صحيحة لreCaptcha. حاول مرة ثانية.',
 103+ 'formbadpagenametext' => 'بيانات الاستمارة التي أدخلتها تصنع اسم صفحة سيئا، "$1".',
 104+ 'formrequiredfielderror' => '{{PLURAL:$2||الحقل $1 مطلوب|الحقلان $1 مطلوبان|الحقول $1 مطلوبة}} لهذه الاستمارة.
 105+من فضلك {{PLURAL:$2||املأه|املأهما|املأها}}.',
 106+ 'formsavesummary' => 'صفحة جديدة باستخدام [[Special:Form/$1|الاستمارة $1]]',
 107+ 'formsaveerror' => 'خطأ في حفظ الاستمارة',
 108+ 'formsaveerrortext' => "حدث خطأ غير معروف أثناء حفظ الاستمارة '$1'.",
 109+);
 110+
 111+/** Egyptian Spoken Arabic (مصرى)
 112+ * @author Meno25
 113+ */
 114+$messages['arz'] = array(
 115+ 'form-desc' => '[[Special:Form|واجهة استمارة]] لبدء الصفحات الجديدة',
 116+ 'form' => 'استمارة',
 117+ 'formnoname' => 'لا اسم استمارة',
 118+ 'formnonametext' => 'يجب أن توفر اسم استمارة، مثل "Special:Form/Nameofform".',
 119+ 'formbadname' => 'اسم استمارة سيء',
 120+ 'formbadnametext' => 'لا توجد استمارة بهذا الاسم.',
 121+ 'formpattern' => '$1-استمارة',
 122+ 'formtitlepattern' => 'أضف $1 جديدا',
 123+ 'formsave' => 'حفظ',
 124+ 'formindexmismatch-title' => 'نمط الاسم والقالب لا يتطابقان',
 125+ 'formindexmismatch' => 'هذه الاستمارة بها أنماط أسماء وقوالب غير متطابقة بدءا عند الفهرس $1.',
 126+ 'formarticleexists' => 'الصفحة موجودة',
 127+ 'formarticleexiststext' => 'الصفحة [[$1]] موجودة بالفعل.',
 128+ 'formbadpagename' => 'اسم صفحة سيء',
 129+ 'formbadrecaptcha' => 'قيم غير صحيحة لreCaptcha. حاول مرة ثانية.',
 130+ 'formbadpagenametext' => 'بيانات الاستمارة التى أدخلتها تصنع اسم صفحة سيئا، "$1".',
 131+ 'formrequiredfielderror' => '{{PLURAL:$2|الحقل $1 مطلوب|الحقول $1 مطلوبة}} لهذه الإستمارة.
 132+من فضلك {{PLURAL:$2|املأه|املأها}}.',
 133+ 'formsavesummary' => 'صفحة جديدة باستخدام [[Special:Form/$1|الاستمارة $1]]',
 134+ 'formsaveerror' => 'خطأ فى حفظ الاستمارة',
 135+ 'formsaveerrortext' => "حدث خطأ غير معروف أثناء حفظ الاستمارة '$1'.",
 136+);
 137+
 138+/** Bikol Central (Bikol Central)
 139+ * @author Filipinayzd
 140+ */
 141+$messages['bcl'] = array(
 142+ 'formtitlepattern' => 'Magdugang nin Bâgong $1',
 143+ 'formsave' => 'Itagama',
 144+);
 145+
 146+/** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
 147+ * @author EugeneZelenko
 148+ * @author Jim-by
 149+ * @author Red Winged Duck
 150+ */
 151+$messages['be-tarask'] = array(
 152+ 'form-desc' => '[[Special:Form|Форма інтэрфэйсу]] для стварэньня новых старонак',
 153+ 'form' => 'Форма',
 154+ 'formnoname' => 'Няма назвы формы',
 155+ 'formnonametext' => 'Вам трэба падаць назву формы, напрыклад, «Special:Form/Назва_формы».',
 156+ 'formbadname' => 'Няслушная назва формы',
 157+ 'formbadnametext' => 'Няма формы з такой назвай.',
 158+ 'formpattern' => 'форма $1',
 159+ 'formtitlepattern' => 'Дадаць новую $1',
 160+ 'formsave' => 'Захаваць',
 161+ 'formindexmismatch-title' => 'Узор назвы і шаблён не спалучаюцца',
 162+ 'formindexmismatch' => 'Гэтая форма ўтрымлівае ўзоры назваў і шаблёнаў, якія не спалучаюцца, пачынаючы зь індэксу $1.',
 163+ 'formarticleexists' => 'Старонка існуе',
 164+ 'formarticleexiststext' => 'Старонка [[$1]] ужо існуе.',
 165+ 'formbadpagename' => 'Няслушная назва старонкі',
 166+ 'formbadrecaptcha' => 'Памылковыя значэньні reCaptcha. Паспрабуйце ізноў.',
 167+ 'formbadpagenametext' => 'Зьвесткі, якія Вы ўвялі ў форме, робяць назву старонкі няслушнай, «$1».',
 168+ 'formrequiredfielderror' => 'У гэтай форме {{PLURAL:$2|патрабуецца поле|патрабуюцца палі}} $1.
 169+Калі ласка, запоўніце {{PLURAL:$2|яго|іх}}.',
 170+ 'formsavesummary' => 'Новая старонка створаная з дапамогай [[Special:Form/$1|формы $1]]',
 171+ 'formsaveerror' => 'Памылка захаваньня формы',
 172+ 'formsaveerrortext' => "Адбылася невядомая памылка пад час захаваньня старонкі '$1'.",
 173+);
 174+
 175+/** Bulgarian (Български)
 176+ * @author DCLXVI
 177+ */
 178+$messages['bg'] = array(
 179+ 'form-desc' => '[[Special:Form|Формуляр]] за започване на нови страници',
 180+ 'form' => 'Формуляр',
 181+ 'formnoname' => 'Липсва име на формуляра',
 182+ 'formnonametext' => 'Необходимо е да се посочи име на формуляр, напр. „Special:Form/ИмеНаФормуляр“',
 183+ 'formbadname' => 'Грешно име на формуляр',
 184+ 'formbadnametext' => 'Не съществува формуляр с това име.',
 185+ 'formsave' => 'Съхранение',
 186+ 'formarticleexists' => 'Страницата съществува',
 187+ 'formarticleexiststext' => 'Страницата [[$1]] вече съществува.',
 188+ 'formbadpagename' => 'Грешно име на страница',
 189+ 'formbadrecaptcha' => 'Неправилни стойности за reCaptcha. Опитайте отново.',
 190+ 'formrequiredfielderror' => 'Този формуляр изисква {{PLURAL:$2|полето $1 да бъде попълнено|полетата $1 да бъдат попълнени}}.
 191+Необходимо е да {{PLURAL:$2|го попълните|ги попълните}}.',
 192+ 'formsaveerror' => 'Грешка при съхранение на формуляра',
 193+ 'formsaveerrortext' => "Възникна непозната грешка при опит да се съхрани страницата '$1'.",
 194+);
 195+
 196+/** Bengali (বাংলা)
 197+ * @author Bellayet
 198+ */
 199+$messages['bn'] = array(
 200+ 'form-desc' => 'নতুন পাতা শুরু করতে [[Special:Form|ফরম ইন্টারফেস]]',
 201+ 'form' => 'ফরম',
 202+ 'formnoname' => 'কোনো ফরম নাম নাই',
 203+ 'formbadname' => 'মন্দ ফরম নাম',
 204+ 'formbadnametext' => 'এই নামে কোনো ফরম নাই।',
 205+ 'formpattern' => '$1-ফরম',
 206+ 'formtitlepattern' => 'নতুন $1 যোগ',
 207+ 'formsave' => 'সংরক্ষণ',
 208+ 'formarticleexists' => 'পাতা রয়েছে',
 209+ 'formbadpagename' => 'পাতার মন্দ নাম',
 210+ 'formsaveerror' => 'ফরম সংরক্ষণে ত্রুটি',
 211+);
 212+
 213+/** Breton (Brezhoneg)
 214+ * @author Fohanno
 215+ * @author Fulup
 216+ * @author Y-M D
 217+ */
 218+$messages['br'] = array(
 219+ 'form-desc' => 'Un [[Special:Form|etrefas furmskrid]] evit kregiñ gant pajennoù nevez',
 220+ 'form' => 'Furmskrid',
 221+ 'formnoname' => 'Anv ebet',
 222+ 'formnonametext' => 'Roit anv ar furmskrid, gant ar stumm "Ispisial:Furmskrid/AnvArFurmskrid".',
 223+ 'formbadname' => 'Anv furmskrid fall',
 224+ 'formbadnametext' => "N'eus furmskrid ebet gant an anv-se.",
 225+ 'formpattern' => 'furmskrid-$1',
 226+ 'formtitlepattern' => 'Ouzhpennañ un $1 nevez',
 227+ 'formsave' => 'Enrollañ',
 228+ 'formindexmismatch-title' => 'Ne glot ket livaoueg an anvioù gant ar patrom',
 229+ 'formindexmismatch' => 'Ar furm skrid-mañ en deus patromoù ne glotont ket adalek $1.',
 230+ 'formarticleexists' => 'Ar bajenn zo anezhi dija',
 231+ 'formarticleexiststext' => 'Ar bajenn [[$1]] zo anezhi dija.',
 232+ 'formbadpagename' => 'Anv fall evit ar bajenn',
 233+ 'formbadrecaptcha' => 'Talvoudoù fall evit reCaptcha. Klaskit adarre.',
 234+ 'formbadpagenametext' => 'Ar roadennoù o peus lakaet a grou un anv fall evit ar bajenn, "$1".',
 235+ 'formrequiredfielderror' => "Ezhomm 'zo eus ar maezienn{{PLURAL:$2||où}} $1 er furmskrid.
 236+Mar plij leunit {{PLURAL:$2|anezhañ|anezho}}.",
 237+ 'formsavesummary' => "Pajenn nevez oc'h implijout [[Special:Form/$1|ar furmskrid $1]]",
 238+ 'formsaveerror' => 'Fazi en ur enrollañ ar furmskrid',
 239+ 'formsaveerrortext' => "Ur fazi zo bet e-ser enrollañ ar bajenn '$1'.",
 240+);
 241+
 242+/** Bosnian (Bosanski)
 243+ * @author CERminator
 244+ */
 245+$messages['bs'] = array(
 246+ 'form-desc' => '[[Special:Form|Interfejs obrazac]] za započinjanje novih stranica',
 247+ 'form' => 'Obrazac',
 248+ 'formnoname' => 'Nema imena obrasca',
 249+ 'formnonametext' => 'Morate navesti naziv obrasca, poput "Special:Form/Nameofform".',
 250+ 'formbadname' => 'Loš naziv obrasca',
 251+ 'formbadnametext' => 'Ne postoji obrazac s takvim imenom.',
 252+ 'formpattern' => '$1-obrazac',
 253+ 'formtitlepattern' => 'Dodaj novi $1',
 254+ 'formsave' => 'Sačuvaj',
 255+ 'formindexmismatch-title' => 'Naslov šeme i šablona se ne podudaraju',
 256+ 'formindexmismatch' => 'Ovaj obrazac ne odgovara šemi imena i šablona koja započinje indeksom $1.',
 257+ 'formarticleexists' => 'Stranica postoji',
 258+ 'formarticleexiststext' => 'Stranica [[$1]] već postoji.',
 259+ 'formbadpagename' => 'Loš naziv stranice',
 260+ 'formbadrecaptcha' => 'Netačne vrijednosti za reCaptcha. Pokušajte ponovno.',
 261+ 'formbadpagenametext' => 'Podaci iz obrasca koje ste unijeli su napravili pogrešno ime stranice, "$1".',
 262+ 'formrequiredfielderror' => '{{PLURAL:$2|Polje $1 je neophodno|Polja $1 su neophodna}} za ovaj obrazac.
 263+Molimo popunite {{PLURAL:$2|ga|ih}}.',
 264+ 'formsavesummary' => 'Nova stranica koristeći [[Special:Form/$1|obrazac $1]]',
 265+ 'formsaveerror' => 'Greška pri spremanju obrasca',
 266+ 'formsaveerrortext' => "Desila se nepoznata greška pri spremanju stranice '$1'.",
 267+);
 268+
 269+/** Catalan (Català)
 270+ * @author Paucabot
 271+ */
 272+$messages['ca'] = array(
 273+ 'form' => 'Formulari',
 274+ 'formbadname' => 'Nom del formulari incorrecte',
 275+ 'formtitlepattern' => 'Afegeix un nou $1',
 276+ 'formsave' => 'Desa',
 277+ 'formsaveerror' => 'Error desant el formulari',
 278+);
 279+
 280+/** Czech (Česky)
 281+ * @author Danny B.
 282+ * @author Li-sung
 283+ * @author Matěj Grabovský
 284+ */
 285+$messages['cs'] = array(
 286+ 'form' => 'Formulář',
 287+ 'formnoname' => 'Nebyl zadán název formuláře',
 288+ 'formnonametext' => 'Musíte zadat název formuláře ve tavru „Special:Form/Názevformuláře“',
 289+ 'formbadname' => 'Špatný název formuláře',
 290+ 'formbadnametext' => 'Formulář se zadaným názvem neexistuje',
 291+ 'formpattern' => 'formulář-$1',
 292+ 'formtitlepattern' => 'Přidat nový $1',
 293+ 'formsave' => 'Uložit',
 294+ 'formarticleexists' => 'Stránka existuje',
 295+ 'formarticleexiststext' => 'Stránka [[$1]] už existuje',
 296+ 'formbadpagename' => 'Špatný název stránky',
 297+ 'formbadpagenametext' => "Údaj formuláře, který jste zadali tvoří chybný název stránky - ''$1''.",
 298+ 'formrequiredfielderror' => 'Pole $1 {{plural:$2|je v tomto formuláři vyžadováno|jsou v tomto formuláři vyžadována}}.
 299+Prosíme, vyplňte {{plural:$2|jej|je}}.',
 300+ 'formsavesummary' => 'Nová stránka pomocí [[Special:Form/$1|formuláře $1]]',
 301+ 'formsaveerror' => 'Chyba při ukládání formuláře',
 302+ 'formsaveerrortext' => "Při ukládání formuláře se vyskytla neznámá chyba: ''$1''.",
 303+);
 304+
 305+/** German (Deutsch)
 306+ * @author Als-Holder
 307+ * @author Melancholie
 308+ * @author Umherirrender
 309+ */
 310+$messages['de'] = array(
 311+ 'form-desc' => 'Eine [[Special:Form|Eingabemaske]] für das Erzeugen von neuen Seiten',
 312+ 'form' => 'Formular',
 313+ 'formnoname' => 'Kein Formularname',
 314+ 'formnonametext' => 'Du musst einen Formularnamen angeben, z. B. „{{#special:Form}}/Formularname“.',
 315+ 'formbadname' => 'Falscher Formularname',
 316+ 'formbadnametext' => 'Es gibt kein Formular mit diesem Namen.',
 317+ 'formpattern' => '$1-Formular',
 318+ 'formtitlepattern' => 'Füge neue $1 hinzu',
 319+ 'formsave' => 'Speichern',
 320+ 'formindexmismatch-title' => 'Ungleichgewicht zwischen Namensmustern und Vorlagen',
 321+ 'formindexmismatch' => 'Dieses Formular hat ein Ungleichgewicht zwischen Namensmustern und Vorlagen, beginnend bei Index $1.',
 322+ 'formarticleexists' => 'Seite bereits vorhanden',
 323+ 'formarticleexiststext' => 'Die Seite „[[$1]]“ ist bereits vorhanden.',
 324+ 'formbadpagename' => 'Unzulässiger Seitenname',
 325+ 'formbadrecaptcha' => 'Ungültige Werte für reCaptcha. Versuche es nochmals.',
 326+ 'formbadpagenametext' => 'Die eingegebenen Formulardaten erzeugen einen unzulässigen Seitennamen: „$1“.',
 327+ 'formrequiredfielderror' => '{{PLURAL:$2|Das Feld $1 ist ein Pfichtfeld|Die Felder $1 sind Pfichtfelder}}.
 328+Bitte fülle {{PLURAL:$2|es|sie}} aus.',
 329+ 'formsavesummary' => 'Neue Seite, die auf dem [[Special:Form/$1|Formular $1]] basiert',
 330+ 'formsaveerror' => 'Fehler beim Speichern des Formulares',
 331+ 'formsaveerrortext' => 'Es gab einen unbekannten Fehler beim Speichern der Seite „$1“.',
 332+);
 333+
 334+/** German (formal address) (Deutsch (Sie-Form))
 335+ * @author Imre
 336+ * @author Umherirrender
 337+ */
 338+$messages['de-formal'] = array(
 339+ 'formnonametext' => 'Sie müssen einen Formularnamen angeben, z. B. „{{#special:Form}}/Formularname“.',
 340+ 'formrequiredfielderror' => '{{PLURAL:$2|Das Feld $1 ist ein Pfichtfeld|Die Felder $1 sind Pfichtfelder}}.
 341+Bitte füllen Sie {{PLURAL:$2|es|sie}} aus.',
 342+);
 343+
 344+/** Lower Sorbian (Dolnoserbski)
 345+ * @author Michawiki
 346+ */
 347+$messages['dsb'] = array(
 348+ 'form-desc' => '[[Special:Form|Formular]] za napóranje nowych bokow',
 349+ 'form' => 'Formular',
 350+ 'formnoname' => 'Žedno formularowe mě',
 351+ 'formnonametext' => 'Musyš formularowe mě pódaś, na pś. "Special:Form/Měformulara".',
 352+ 'formbadname' => 'Wopacne formularowe mě',
 353+ 'formbadnametext' => 'Njejo formular z tym mjenim.',
 354+ 'formpattern' => '$1-formular',
 355+ 'formtitlepattern' => 'Nowy $1 pśidaś',
 356+ 'formsave' => 'Składowaś',
 357+ 'formindexmismatch-title' => 'Mjenjowy muster a pśedłog se njewótpowědujotej',
 358+ 'formindexmismatch' => 'Toś ten formular ma njejadnake mjenjowe mustry a pśedłogi, zachopinajucy se wót indeksa $1.',
 359+ 'formarticleexists' => 'Bok eksistěrujo',
 360+ 'formarticleexiststext' => 'bok [[$1]] južo eksistěrujo.',
 361+ 'formbadpagename' => 'Wopacne mě boka',
 362+ 'formbadrecaptcha' => 'Njepłaśiwe gódnoty za reCaptcha. Wopytaj hyšći raz.',
 363+ 'formbadpagenametext' => 'Formularne daty, kótarež sy zapódał, napóraju njepłaśiwe mě boka, "$1".',
 364+ 'formrequiredfielderror' => '{{PLURAL:$2|Pólo $1 jo trěbne|Póli $1 stej trěbnej|Póla $1 su trěbne|Póla $1 su trěbne}} za toś ten fromular.
 365+Pšosym wupołń {{PLURAL:$2|jo|jej|je|je}}.',
 366+ 'formsavesummary' => 'Nowy bok z pomocu [[Special:Form/$1|formulara $1]]',
 367+ 'formsaveerror' => 'Zmólka pśi składowanju formulara',
 368+ 'formsaveerrortext' => "Njeznata zmólka jo nastała pśi składowanju boka '$1'.",
 369+);
 370+
 371+/** Greek (Ελληνικά)
 372+ * @author Consta
 373+ * @author Dada
 374+ * @author Omnipaedista
 375+ * @author ZaDiak
 376+ */
 377+$messages['el'] = array(
 378+ 'form-desc' => 'Μια [[Special:Form|φόρμα επιφάνειας]] για έναρξη νέων σελίδων',
 379+ 'form' => 'Φόρμα',
 380+ 'formnoname' => 'Κανένα όνομα φόρμας',
 381+ 'formbadname' => 'Κακό όνομα φόρμας',
 382+ 'formbadnametext' => 'Δεν υπάρχει καμιά φόρμα με αυτό το όνομα.',
 383+ 'formpattern' => '$1-φόρμα',
 384+ 'formtitlepattern' => 'Προσθήκη νέου $1',
 385+ 'formsave' => 'Αποθηκεύστε',
 386+ 'formindexmismatch-title' => 'Αναντιστοιχία μεταξύ μοτίβου ονόματος και προτύπου',
 387+ 'formindexmismatch' => 'Αυτή η φόρμα παρουσιάζει αναντιστοιχία μεταξύ μοτίβου ονόματος και προτύπου στον δείκτη $1.',
 388+ 'formarticleexists' => 'Η σελίδα υπάρχει',
 389+ 'formarticleexiststext' => 'Η σελίδα [[$1]] υπάρχει ήδη.',
 390+ 'formbadpagename' => 'Κακό όνομα σελίδας',
 391+ 'formsavesummary' => 'Νέα σελίδα που χρησιμοποιεί τη [[Special:Form/$1|φόρμα $1]]',
 392+ 'formsaveerror' => 'Σφάλμα στην αποθήκευση της φόρμας',
 393+ 'formsaveerrortext' => 'Παρουσιάστηκε άγνωστο σφάλμα κατά την αποθήκευση της σελίδας $ 1.',
 394+);
 395+
 396+/** Esperanto (Esperanto)
 397+ * @author Melancholie
 398+ * @author Michawiki
 399+ * @author Yekrats
 400+ */
 401+$messages['eo'] = array(
 402+ 'form' => 'Formulario',
 403+ 'formnoname' => 'Neniu nomo de kamparo',
 404+ 'formnonametext' => 'Vi devas provizi formularan nomon, ekzemple "Special:Form/NomoDeFormularo".',
 405+ 'formbadname' => 'Malbona nomo de formularo',
 406+ 'formbadnametext' => 'Ne estas formularo kun tiu nomo.',
 407+ 'formpattern' => '$1-formularo',
 408+ 'formtitlepattern' => 'Aldoni nova $1',
 409+ 'formsave' => 'Konservi',
 410+ 'formarticleexists' => 'Paĝo ekzistas',
 411+ 'formarticleexiststext' => 'La paĝo [[$1]] jam ekzistas.',
 412+ 'formbadpagename' => 'Fuŝa paĝnomo',
 413+ 'formbadrecaptcha' => 'Malkorektaj valoroj por reCaptcha. Reprovu.',
 414+ 'formrequiredfielderror' => 'La {{PLURAL:$2|kampo $1 estas deviga|kampoj $1 estas devigaj}} por ĉi tiu formulario.
 415+Bonvolu plenigi {{PLURAL:$2|ĝin|ilin}}.',
 416+ 'formsaveerror' => 'Eraro konservante formularon',
 417+ 'formsaveerrortext' => "Estis nekonata eraro konservante paĝon '$1'.",
 418+);
 419+
 420+/** Spanish (Español)
 421+ * @author Crazymadlover
 422+ * @author Imre
 423+ * @author Sanbec
 424+ */
 425+$messages['es'] = array(
 426+ 'form-desc' => 'Una [[Special:Form|interface de formulario]] para comenzar nuevas páginas',
 427+ 'form' => 'Formulario',
 428+ 'formnoname' => 'Formulario sin nombre',
 429+ 'formnonametext' => 'Debes proveer un nombre de formulario, como "Special:Form/Nameofform".',
 430+ 'formbadname' => 'Mal nombre de formulario',
 431+ 'formbadnametext' => 'No har formulario para ese nombre',
 432+ 'formpattern' => 'Formulario de $1',
 433+ 'formtitlepattern' => 'Agregar nuevo $1',
 434+ 'formsave' => 'Guardar',
 435+ 'formindexmismatch-title' => 'No se corresponde el nombre del modelo y la plantilla',
 436+ 'formindexmismatch' => 'Este formulario tiene nombres de patrones y plantillas que no coinciden, comenzando por $1.',
 437+ 'formarticleexists' => 'La página existe',
 438+ 'formarticleexiststext' => 'La página [[$1]] ya existe.',
 439+ 'formbadpagename' => 'Mal nombre de página',
 440+ 'formbadrecaptcha' => 'Valores incorrectos para reCaptcha. Intente nuevamente.',
 441+ 'formbadpagenametext' => 'Los datos de formulario que ingresó hacen un mal nombre de página, "$1".',
 442+ 'formrequiredfielderror' => 'Los {{PLURAL:$2|campo $1 es|campos $1 son}} requeridos para este formulario.
 443+Por favor {{PLURAL:$2|rellénelo|rellénelos}}.',
 444+ 'formsavesummary' => 'Nueva página usando [[Special:Form/$1|formulario $1]]',
 445+ 'formsaveerror' => 'Error grabando formulario',
 446+ 'formsaveerrortext' => "Hubo un error desconocido grabando la página '$1'.",
 447+);
 448+
 449+/** Basque (Euskara)
 450+ * @author An13sa
 451+ * @author Kobazulo
 452+ */
 453+$messages['eu'] = array(
 454+ 'form' => 'Formularioa',
 455+ 'formsave' => 'Gorde',
 456+ 'formarticleexists' => 'Orrialdea existitzen da',
 457+);
 458+
 459+/** Finnish (Suomi)
 460+ * @author Centerlink
 461+ * @author Cimon Avaro
 462+ * @author Crt
 463+ * @author Jack Phoenix
 464+ * @author ZeiP
 465+ */
 466+$messages['fi'] = array(
 467+ 'form-desc' => '[[Special:Form|Lomake]] uusien sivujen luomiseen',
 468+ 'form' => 'Lomake',
 469+ 'formnoname' => 'Ei lomakkeen nimeä',
 470+ 'formnonametext' => 'Sinun tulee antaa lomakkeen nimi, kuten "Special:Form/Lomakkeennimi".',
 471+ 'formbadname' => 'Huono lomakkeen nimi',
 472+ 'formbadnametext' => 'Haluamallasi nimellä ei ole lomaketta.',
 473+ 'formpattern' => '$1-lomake',
 474+ 'formtitlepattern' => 'Lisää uusi $1',
 475+ 'formsave' => 'Tallenna',
 476+ 'formindexmismatch-title' => 'Nimimalli- ja mallinetäsmäämättömyys',
 477+ 'formindexmismatch' => 'Tällä lomakkeella on yhteensopimattomat nimi- ja mallinekaavat alkaen riviltä $1.',
 478+ 'formarticleexists' => 'Sivu on jo olemassa',
 479+ 'formarticleexiststext' => 'Sivu [[$1]] on jo olemassa.',
 480+ 'formbadpagename' => 'Huono sivun nimi',
 481+ 'formbadrecaptcha' => 'Väärät vastausarvot reCaptcha-varmistukselle. Yritä uudestaan.',
 482+ 'formbadpagenametext' => 'Antamasi lomakkeen tiedot tekevät huonon sivun nimen, "$1".',
 483+ 'formrequiredfielderror' => '{{PLURAL:$2|Kenttä $1 on|Kentät $1 ovat}} pakollisia tässä lomakkeessa.
 484+Ole hyvä ja täytä {{PLURAL:$2|se|ne}}.',
 485+ 'formsavesummary' => 'Uusi sivu käyttäen [[Special:Form/$1]]',
 486+ 'formsaveerror' => 'Virhe lomaketta tallennettaessa',
 487+ 'formsaveerrortext' => "Tuntematon virhe tapahtui sivua '$1' tallennettaessa.",
 488+);
 489+
 490+/** French (Français)
 491+ * @author Crochet.david
 492+ * @author Grondin
 493+ * @author IAlex
 494+ * @author McDutchie
 495+ * @author Omnipaedista
 496+ * @author Sherbrooke
 497+ */
 498+$messages['fr'] = array(
 499+ 'form-desc' => 'Une [[Special:Form|interface de formulaire]] pour commencer des nouvelles pages',
 500+ 'form' => 'Formulaire',
 501+ 'formnoname' => 'Aucun nom',
 502+ 'formnonametext' => 'Veuillez spécifier le nom du formulaire, sous la forme « Special:Formulaire/NomDuFormulaire ».',
 503+ 'formbadname' => 'Nom incorrect',
 504+ 'formbadnametext' => 'Le nom choisi pour le formulaire est incorrect. Aucun formulaire n’existe sous ce nom.',
 505+ 'formpattern' => 'formulaire-$1',
 506+ 'formtitlepattern' => 'Ajouter un(e) $1',
 507+ 'formsave' => 'Sauvegarder',
 508+ 'formindexmismatch-title' => 'Inadéquation entre la palette de nom et le modèle',
 509+ 'formindexmismatch' => 'Ce formulaire a des patrons et des modèles qui ne correspondent pas à partir de $1.',
 510+ 'formarticleexists' => 'La page existe déjà.',
 511+ 'formarticleexiststext' => 'La page nommée [[$1]] existe déjà.',
 512+ 'formbadpagename' => 'Mauvais nom de page',
 513+ 'formbadrecaptcha' => 'Valeur incorrecte pour reCaptcha. Essayez à nouveau',
 514+ 'formbadpagenametext' => 'Les données saisies forment un mauvais nom de page, « $1 ».',
 515+ 'formrequiredfielderror' => '{{PLURAL:$2|Le champ $1 est|Les champs $1 sont}} requis dans ce formulaire.
 516+Vous devez le{{PLURAL:$2||s}} remplir.',
 517+ 'formsavesummary' => 'Nouvelle page utilisant [[Special:Form/$1|le formulaire $1]]',
 518+ 'formsaveerror' => 'Une erreur s’est produite pendant la sauvegarde.',
 519+ 'formsaveerrortext' => "Une erreur inconnue s’est produite pendant la sauvegarde de ''$1''.",
 520+);
 521+
 522+/** Franco-Provençal (Arpetan)
 523+ * @author Cedric31
 524+ */
 525+$messages['frp'] = array(
 526+ 'formsave' => 'Sôvar',
 527+);
 528+
 529+/** Western Frisian (Frysk)
 530+ * @author Snakesteuben
 531+ */
 532+$messages['fy'] = array(
 533+ 'formsave' => 'Fêstlizze',
 534+);
 535+
 536+/** Galician (Galego)
 537+ * @author Alma
 538+ * @author Toliño
 539+ * @author Xosé
 540+ */
 541+$messages['gl'] = array(
 542+ 'form-desc' => 'Un [[Special:Form|formulario como interface]] para comezar páxinas novas',
 543+ 'form' => 'Formulario',
 544+ 'formnoname' => 'Formulario sen Nome',
 545+ 'formnonametext' => 'Tenlle que dar un nome ao formulario, como "Special:Form/Nomedoformulario".',
 546+ 'formbadname' => 'Formulario con Nome incorrecto',
 547+ 'formbadnametext' => 'Non hai ningún formulario con ese nome.',
 548+ 'formpattern' => 'formulario-$1',
 549+ 'formtitlepattern' => 'Engadir Novo $1',
 550+ 'formsave' => 'Gardar',
 551+ 'formindexmismatch-title' => 'O nome do patrón e o modelo son incompatibles',
 552+ 'formindexmismatch' => 'Este formulario ten nomes de patróns e modelos que non coinciden, comezando por $1.',
 553+ 'formarticleexists' => 'A páxina Existe',
 554+ 'formarticleexiststext' => 'A páxina [[$1]] xa existe.',
 555+ 'formbadpagename' => 'Nome de Páxina incorrecto',
 556+ 'formbadrecaptcha' => 'Valores incorrectos na reCaptcha. Inténteo de novo.',
 557+ 'formbadpagenametext' => 'O formulario de datos que vostede introduciu fixo un nome de páxina incorrecto, "$1".',
 558+ 'formrequiredfielderror' => '{{PLURAL:$2|O campo $1 é requirido|Os campos $1 son requiridos}} para este formulario. Por favor, {{PLURAL:$2|énchao|énchaos}}.',
 559+ 'formsavesummary' => 'Nova páxina usando [[Special:Form/$1|o formulario $1]]',
 560+ 'formsaveerror' => 'Erro ao gardar o formulario',
 561+ 'formsaveerrortext' => "Houbo un erro descoñecido ao gardar a páxina '$1'.",
 562+);
 563+
 564+/** Ancient Greek (Ἀρχαία ἑλληνικὴ)
 565+ * @author Crazymadlover
 566+ * @author Omnipaedista
 567+ */
 568+$messages['grc'] = array(
 569+ 'formsave' => 'Γράφειν',
 570+ 'formbadpagename' => 'Κακὸν ὄνομα δέλτου',
 571+);
 572+
 573+/** Swiss German (Alemannisch)
 574+ * @author Als-Holder
 575+ */
 576+$messages['gsw'] = array(
 577+ 'form-desc' => 'E [[Special:Form|Yygabmaschke]] zum Aalege vu neje Syte',
 578+ 'form' => 'Formular',
 579+ 'formnoname' => 'Kei Formularname',
 580+ 'formnonametext' => 'Du muesch e Formularnamen aagee, z. B. „{{ns:Special}}:Form/Formularname“.',
 581+ 'formbadname' => 'Falscher Formularname',
 582+ 'formbadnametext' => 'S git kei Formular mit däm Name.',
 583+ 'formpattern' => '$1-Formular',
 584+ 'formtitlepattern' => 'Fieg neji $1 zue',
 585+ 'formsave' => 'Spychere',
 586+ 'formindexmismatch-title' => 'Uuglyychgwicht zwische Namemuschter un Vorlage',
 587+ 'formindexmismatch' => 'Des Formular het e Uuglyychgwicht zwische Namemuschter un Vorlagen, wu aafangt bim Index $1.',
 588+ 'formarticleexists' => 'Syt git s scho',
 589+ 'formarticleexiststext' => 'D Syte „[[$1]]“ git s scho.',
 590+ 'formbadpagename' => 'Nit zuelässige Sytename',
 591+ 'formbadrecaptcha' => 'Nit giltigi Wärt fir reCaptcha. Versuech s nomol.',
 592+ 'formbadpagenametext' => 'D Formulardate, wu yygee wore sin, gän e nit zuelässige Sytename: „$1“.',
 593+ 'formrequiredfielderror' => '{{PLURAL:$2|S Fäld $1 isch e Pfichtfäld|D Fälder $1 sin Pfichtfälder}}.
 594+Bitte fill {{PLURAL:$2|s|si}} uus.',
 595+ 'formsavesummary' => 'Neji Syte, wu uf em [[Special:Form/$1|Formular $1]] basiert',
 596+ 'formsaveerror' => 'Fähler bim Spychere vum Formular',
 597+ 'formsaveerrortext' => 'S het e nit bekannte Fähler gee bim Spychere vu dr Syte „$1“.',
 598+);
 599+
 600+/** Hebrew (עברית)
 601+ * @author Rotemliss
 602+ * @author YaronSh
 603+ */
 604+$messages['he'] = array(
 605+ 'form-desc' => '[[Special:Form|ממשק טופס]] ליצירת דפים חדשים',
 606+ 'form' => 'טופס',
 607+ 'formnoname' => 'אין שם לטופס',
 608+ 'formnonametext' => 'עליכם לספק שם לטופס, כגון "Special:Form/Nameofform".',
 609+ 'formbadname' => 'שם הטופס אינו תקין',
 610+ 'formbadnametext' => 'אין טופס בשם זה.',
 611+ 'formpattern' => 'טופס־$1',
 612+ 'formtitlepattern' => 'הוספת $1 חדש',
 613+ 'formsave' => 'שמירה',
 614+ 'formindexmismatch-title' => 'מבנה השם והתבנית אינם תואמים',
 615+ 'formindexmismatch' => 'טופס זה אינו תואם את מבנה השם ואת התבניות המתחילות באינדקס $1.',
 616+ 'formarticleexists' => 'הדף קיים',
 617+ 'formarticleexiststext' => 'הדף [[$1]] כבר קיים.',
 618+ 'formbadpagename' => 'שם הדף אינו תקין',
 619+ 'formbadrecaptcha' => 'הערכים שהוזנו ל־reCaptcha שגויים. נסו שוב.',
 620+ 'formbadpagenametext' => 'נתוני הטופס ששלחתם יוצרים דף בעל שם בלתי תקין, "$1".',
 621+ 'formrequiredfielderror' => 'מילוי {{PLURAL:$2|השדה $1|השדות $1}} נדרש להשלמת טופס זה.
 622+אנא מלאו {{PLURAL:$2|אותו|אותם}}.',
 623+ 'formsavesummary' => 'דף חדש באמצעות [[Special:Form/$1|טופס $1]]',
 624+ 'formsaveerror' => 'שגיאה בשמירת הטופס',
 625+ 'formsaveerrortext' => "אירעה שגיאה בלתי ידועה בעת שמירת הדף '$1'.",
 626+);
 627+
 628+/** Croatian (Hrvatski)
 629+ * @author Dalibor Bosits
 630+ */
 631+$messages['hr'] = array(
 632+ 'formsave' => 'Spremi',
 633+);
 634+
 635+/** Upper Sorbian (Hornjoserbsce)
 636+ * @author Michawiki
 637+ */
 638+$messages['hsb'] = array(
 639+ 'form-desc' => '[[Special:Form|Formularny interfejs]] za wutworjenje nowych stronow',
 640+ 'form' => 'Formular',
 641+ 'formnoname' => 'Žane formularne mjeno',
 642+ 'formnonametext' => 'Dyrbiš formularne mjeno podać, na př. „{{ns:Special}}:Form/Formularnemjeno“.',
 643+ 'formbadname' => 'Wopačne formularne mjeno',
 644+ 'formbadnametext' => 'Njeje formular z tutym mjenom',
 645+ 'formpattern' => '$1 formular',
 646+ 'formtitlepattern' => 'Nowe $1 přidać',
 647+ 'formsave' => 'Składować',
 648+ 'formindexmismatch-title' => 'Mjenowy muster a předłoha so njewotpowědujetej',
 649+ 'formindexmismatch' => 'Tutón formular ma njejenake mjenowe mustry a předłohi wot indeksa $1.',
 650+ 'formarticleexists' => 'Nastawk hižo eksistuje',
 651+ 'formarticleexiststext' => 'Nastawk [[$1]] hižo eksistuje.',
 652+ 'formbadpagename' => 'Njedowolene mjeno strony',
 653+ 'formbadrecaptcha' => 'Njekorektne hódnoty za reCaptcha. Spytaj hišće raz.',
 654+ 'formbadpagenametext' => 'Zapodate formularne daty tworja njedowolene mjeno strony: "$1".',
 655+ 'formrequiredfielderror' => '{{PLURAL:$2|Polo $1 je trěbne|Poli $1 stej trěbnej|Pola $1 su trěbne|Pola $1 su trěbne}} za tutón formular. Prošu wupjelń {{PLURAL:$2|jo|jej|je|je}}.',
 656+ 'formsavesummary' => 'Nowa strona, kotraž [[Special:Form/$1|formular $1]] wužiwa.',
 657+ 'formsaveerror' => 'Zmylk při składowanju formulara',
 658+ 'formsaveerrortext' => 'Bě njeznaty zmylk při składowanju nastawka "$1".',
 659+);
 660+
 661+/** Hungarian (Magyar)
 662+ * @author Dani
 663+ * @author Glanthor Reviol
 664+ */
 665+$messages['hu'] = array(
 666+ 'form-desc' => '[[Special:Form|Űrlap interfész]] új lapok létrehozásához',
 667+ 'form' => 'Űrlap',
 668+ 'formnoname' => 'Nincs űrlapnév',
 669+ 'formnonametext' => 'Meg kell adnod egy űrlapnevet, mint például „{{#special:Form}}/Űrlapneve”',
 670+ 'formbadname' => 'Hibás űrlapnév',
 671+ 'formbadnametext' => 'Nincs ilyen nevű űrlap.',
 672+ 'formpattern' => '$1 űrlap',
 673+ 'formtitlepattern' => 'Új $1 hozzáadása',
 674+ 'formsave' => 'Mentés',
 675+ 'formindexmismatch-title' => 'A név minta és a sablon nem egyezik',
 676+ 'formindexmismatch' => 'Ez az űrlap nem egyező névmintákat és sablonokat tartalmaz, a $1 indextől kezdve.',
 677+ 'formarticleexists' => 'A lap már létezik',
 678+ 'formarticleexiststext' => 'A(z) [[$1]] lap már létezik.',
 679+ 'formbadpagename' => 'Hibás lapnév',
 680+ 'formbadrecaptcha' => 'Helytelen értékek a reCaptchához. Próbáld újra.',
 681+ 'formbadpagenametext' => 'A beírt űrlapadat hibás lapcímet generál: „$1”.',
 682+ 'formrequiredfielderror' => 'A {{PLURAL:$2|$1 mező|$1 mezők}} kitöltése kötelező ennél az űrlapnál.
 683+Kérlek {{PLURAL:$2|töltsd ki|töltsd ki őket}}.',
 684+ 'formsavesummary' => 'Új lap a(z) [[Special:Form/$1|$1 űrlap]] használatával',
 685+ 'formsaveerror' => 'Hiba az űrlap mentésekor',
 686+ 'formsaveerrortext' => 'A(z) „$1” lap mentésekor ismeretlen hiba történt.',
 687+);
 688+
 689+/** Interlingua (Interlingua)
 690+ * @author McDutchie
 691+ */
 692+$messages['ia'] = array(
 693+ 'form-desc' => 'Un [[Special:Form|interfacie de formulario]] pro initiar nove paginas',
 694+ 'form' => 'Formulario',
 695+ 'formnoname' => 'Nulle nomine del formulario',
 696+ 'formnonametext' => 'Tu debe fornir un nomine pro le formulario, como "Special:Formulario/NomineDelFormulario".',
 697+ 'formbadname' => 'Nomine de formulario invalide',
 698+ 'formbadnametext' => 'Non existe un formulario con iste nomine.',
 699+ 'formpattern' => 'formulario-$1',
 700+ 'formtitlepattern' => 'Adder nove $1',
 701+ 'formsave' => 'Salveguardar',
 702+ 'formindexmismatch-title' => 'Non-correspondentia inter forma de nomine e patrono',
 703+ 'formindexmismatch' => 'Iste formulario ha formas de nomine e patronos non correspondente a partir del indice $1.',
 704+ 'formarticleexists' => 'Pagina existe',
 705+ 'formarticleexiststext' => 'Le pagina [[$1]] existe ja.',
 706+ 'formbadpagename' => 'Nomine de pagina invalide',
 707+ 'formbadrecaptcha' => 'Valores incorrecte pro reCaptcha. Reproba.',
 708+ 'formbadpagenametext' => 'Le datos de formulario que tu entrava resulta in un nomine de pagina invalide, "$1".',
 709+ 'formrequiredfielderror' => 'Le {{PLURAL:$2|campo|campos}} $1 es requirite pro iste formulario.
 710+Per favor completa {{PLURAL:$2|lo|los}}.',
 711+ 'formsavesummary' => 'Nove pagina con [[Special:Form/$1|le formulario $1]]',
 712+ 'formsaveerror' => 'Error durante le salveguarda del formulario',
 713+ 'formsaveerrortext' => "Il occurreva un error incognite durante le salveguarda del pagina '$1'.",
 714+);
 715+
 716+/** Indonesian (Bahasa Indonesia)
 717+ * @author Irwangatot
 718+ * @author IvanLanin
 719+ */
 720+$messages['id'] = array(
 721+ 'form-desc' => 'Suatu [[Special:Form|antarmuka formulir]] untuk membuat halaman baru',
 722+ 'form' => 'Formulir',
 723+ 'formnoname' => 'Nama formulir kosong',
 724+ 'formnonametext' => 'Anda harus memasukkan nama formulir seperti "Special:Form/Namaformulir".',
 725+ 'formbadname' => 'Nama formulir salah',
 726+ 'formbadnametext' => 'Tidak ada formulir dengan nama itu.',
 727+ 'formpattern' => '$1-form',
 728+ 'formtitlepattern' => 'Tambah $1 baru',
 729+ 'formsave' => 'Simpan',
 730+ 'formindexmismatch-title' => 'Pola nama dan templat tidak cocok',
 731+ 'formindexmismatch' => 'Formulir ini tidak cocok dengan pola nama dan templat dimulai dari indeks $1.',
 732+ 'formarticleexists' => 'Halaman telah ada',
 733+ 'formarticleexiststext' => 'Halaman [[$1]] telah ada.',
 734+ 'formbadpagename' => 'Nama halaman salah',
 735+ 'formbadrecaptcha' => 'Nilai reCaptcha salah. Coba lagi.',
 736+ 'formbadpagenametext' => 'Data formulir yang Anda masukkan mengandung nama halaman yang salah, "$1".',
 737+ 'formrequiredfielderror' => '{{PLURAL:$2|Isian $1|Isian $1}} diperlukan oleh formulir ini.
 738+Silakan masukkan {{PLURAL:$2|isian|isian}} itu.',
 739+ 'formsavesummary' => 'Halaman baru menggunakan [[Special:Form/$1|formulir $1]]',
 740+ 'formsaveerror' => 'Kesalahan penyimpanan formulir',
 741+ 'formsaveerrortext' => "Terjadi kesalahan yang tak dikenal sewaktu menyimpan halaman '$1'.",
 742+);
 743+
 744+/** Ido (Ido)
 745+ * @author Malafaya
 746+ */
 747+$messages['io'] = array(
 748+ 'formsave' => 'Registragar',
 749+);
 750+
 751+/** Icelandic (Íslenska)
 752+ * @author S.Örvarr.S
 753+ */
 754+$messages['is'] = array(
 755+ 'formsave' => 'Vista',
 756+);
 757+
 758+/** Italian (Italiano)
 759+ * @author Darth Kule
 760+ */
 761+$messages['it'] = array(
 762+ 'form-desc' => "Un'[[Special:Form|interfaccia di modulo]] per iniziare nuove pagine",
 763+ 'form' => 'Modulo',
 764+ 'formnoname' => 'Nessun nome per il modulo',
 765+ 'formnonametext' => 'È necessario fornire un nome per il modulo, come "Special:Form/Nomedelmodulo"',
 766+ 'formbadname' => 'Nome modulo errato',
 767+ 'formbadnametext' => 'Non ci sono moduli con quel nome.',
 768+ 'formpattern' => '$1-modulo',
 769+ 'formtitlepattern' => 'Aggiungere un nuovo $1',
 770+ 'formsave' => 'Salva',
 771+ 'formindexmismatch-title' => 'Modello del nome e template non corrispondono',
 772+ 'formindexmismatch' => "Questo modulo ha modelli di nome e template che non corrispondono a partire dall'indice $1.",
 773+ 'formarticleexists' => 'La pagina esiste',
 774+ 'formarticleexiststext' => 'La pagina [[$1]] esiste già.',
 775+ 'formbadpagename' => 'Nome pagina errato',
 776+ 'formbadrecaptcha' => 'Valori errati per reCaptcha. Provare di nuovo.',
 777+ 'formbadpagenametext' => 'I dati inseriti nel modulo generano un nome pagina errato, "$1".',
 778+ 'formrequiredfielderror' => '{{PLURAL:$2|Il campo $1 è richiesto|I campi $1 sono richiesti}} per questo modulo.
 779+{{PLURAL:$2|Compilarlo|Compilarli}}.',
 780+ 'formsavesummary' => 'Nuova pagina utilizzando il [[Special:Form/$1|modulo $1]]',
 781+ 'formsaveerror' => 'Errore durante il salvataggio del modulo',
 782+ 'formsaveerrortext' => "Si è verificato un errore sconosciuto durante il salvataggio della pagina '$1'.",
 783+);
 784+
 785+/** Japanese (日本語)
 786+ * @author Aotake
 787+ * @author Fryed-peach
 788+ * @author Hosiryuhosi
 789+ */
 790+$messages['ja'] = array(
 791+ 'form-desc' => 'ページを作成する[[Special:Form|フォーム形式のインタフェース]]',
 792+ 'form' => 'フォーム',
 793+ 'formnoname' => 'フォーム名がありません',
 794+ 'formnonametext' => 'フォームの名前を決めなければなりません。(例: Special:Form/Nameofform)',
 795+ 'formbadname' => '不正なフォーム名',
 796+ 'formbadnametext' => 'その名前のフォームはありません。',
 797+ 'formpattern' => '$1-form',
 798+ 'formtitlepattern' => '新規$1を追加',
 799+ 'formsave' => '保存',
 800+ 'formindexmismatch-title' => '名前パターンとテンプレートの不整合',
 801+ 'formindexmismatch' => 'このフォームには、インデックス $1 で始まる名前パターンとテンプレートの不整合があります。',
 802+ 'formarticleexists' => 'ページが存在します',
 803+ 'formarticleexiststext' => 'そのページ [[$1]] は既に存在します。',
 804+ 'formbadpagename' => '不正なページ名',
 805+ 'formbadrecaptcha' => 'reCAPTCHA 用の値が不正です。再度試してください。',
 806+ 'formbadpagenametext' => 'あなたが入力したフォームのデータは不正なページ名「$1」を作ります。',
 807+ 'formrequiredfielderror' => '{{PLURAL:$2|欄 $1}}はこのフォームで必須です。{{PLURAL:$2|入力}}してください。',
 808+ 'formsavesummary' => '[[Special:Form/$1|$1フォーム]]を使ってページ作成',
 809+ 'formsaveerror' => 'フォーム保存時のエラー',
 810+ 'formsaveerrortext' => 'ページ「$1」の保存時に不明なエラーがありました。',
 811+);
 812+
 813+/** Javanese (Basa Jawa)
 814+ * @author Meursault2004
 815+ * @author Pras
 816+ */
 817+$messages['jv'] = array(
 818+ 'form-desc' => 'Sawijining [[Special:Form|antarmuka formulir]] kanggo miwiti kaca-kaca anyar',
 819+ 'form' => 'Formulir',
 820+ 'formnoname' => 'Ora ana jeneng formulir',
 821+ 'formnonametext' => 'Panjenengan kudu maringi jeneng formulir, kaya "Special:Form/Nameofform".',
 822+ 'formbadname' => 'Jeneng formulir ala',
 823+ 'formbadnametext' => 'Ora ana formulir mawa jeneng iku.',
 824+ 'formpattern' => 'Formulir-$1',
 825+ 'formtitlepattern' => 'Tambah $1 anyar',
 826+ 'formsave' => 'Simpen',
 827+ 'formindexmismatch-title' => 'Pola jeneng lan cithakan ora cocog',
 828+ 'formindexmismatch' => 'Ing formulir iki ora cocog antara pola jeneng lan cithakan miwiti ing indèks $1.',
 829+ 'formarticleexists' => 'Kacané ana',
 830+ 'formarticleexiststext' => 'Kaca [[$1]] wis ana.',
 831+ 'formbadpagename' => 'Jeneng kaca ala',
 832+ 'formrequiredfielderror' => '{{PLURAL:$2|Field $1 |Fields $1 }} diperlokaké kanggo formulir iki.
 833+Mangga diisi {{PLURAL:$2|iki|iki}}.',
 834+ 'formsavesummary' => 'Kaca anyar nganggo [[Special:Form/$1|formulir $1]]',
 835+ 'formsaveerror' => 'Ana kaluputan nalika nyimpen formulir',
 836+ 'formsaveerrortext' => "Ana kaluputan sing ora dimangertèni nalika nyimpen kaca '$1'.",
 837+);
 838+
 839+/** Khmer (ភាសាខ្មែរ)
 840+ * @author Chhorran
 841+ * @author Thearith
 842+ * @author គីមស៊្រុន
 843+ */
 844+$messages['km'] = array(
 845+ 'form-desc' => '[[Special:Form|ទម្រង់​អន្តរមុខ]]មួយ​ដើម្បី​ចាប់ផ្ដើម​ទំព័រ​ថ្មីនានា',
 846+ 'form' => 'សំណុំបែបបទ',
 847+ 'formnoname' => 'គ្មានឈ្មោះសំណុំបែបបទ',
 848+ 'formnonametext' => 'អ្នក​ត្រូវតែ​ផ្ដល់​សំណុំបែបបទ ដូចជា "Special:Form/សំណុំបែបបទ"​។',
 849+ 'formbadname' => 'ឈ្មោះសំណុំបែបបទមិនល្អ',
 850+ 'formbadnametext' => 'គ្មានឈ្មោះបែបបទ នោះទេ ។',
 851+ 'formpattern' => '$1-សំណុំបែបបទ',
 852+ 'formtitlepattern' => 'បន្ថែម $1 ថ្មី',
 853+ 'formsave' => 'រក្សាទុក',
 854+ 'formarticleexists' => 'ទំព័រ​មានរួចហើយ',
 855+ 'formarticleexiststext' => 'ទំព័រ [[$1]] មានរួចហើយ។',
 856+ 'formbadpagename' => 'ឈ្មោះទំព័រមិនល្អ',
 857+ 'formsavesummary' => 'ទំព័រ​ប្រើប្រាស់​ថ្មី [[Special:Form/$1|ទម្រង់ $1]]',
 858+ 'formsaveerror' => 'កំហុសរក្សាទុកសំណុំបែបបទ',
 859+ 'formsaveerrortext' => "មានកំហុសមិនស្គាល់មួយក្នុងការរក្សាទុកទំព័រ '$1'។",
 860+);
 861+
 862+/** Ripoarisch (Ripoarisch)
 863+ * @author Purodha
 864+ */
 865+$messages['ksh'] = array(
 866+ 'form-desc' => 'En [[Special:Form|Schnettstell met Fommulaare]] fö neu Sigge aanzefange.',
 867+ 'form' => 'Fommulaa',
 868+ 'formnoname' => 'Keine Name för en Fommulaa',
 869+ 'formnonametext' => 'Do moß ene Name för dat Fommulaa aanjevve, en dä Aat wi „{{ns:Special}}:Form/Fommulaaname“.',
 870+ 'formbadname' => 'Ene verkeehte Name fö dat Fommulaa',
 871+ 'formbadnametext' => 'Mer han kei Fommulaa met dämm Name.',
 872+ 'formpattern' => '$1-Fommulaa',
 873+ 'formtitlepattern' => 'Donn neu $1 dobei',
 874+ 'formsave' => 'Afspeichere',
 875+ 'formindexmismatch-title' => 'Et Moster för dä Name un de Schablon passe nit zosamme',
 876+ 'formindexmismatch' => 'Dat Fommulaa hee hät unejaal fill Namens-Muster un Schablone, aff dä Nommer $1.',
 877+ 'formarticleexists' => 'Die Sigg jitt et ald',
 878+ 'formarticleexiststext' => 'Di Sigg „[[$1]]“ es ald doh.',
 879+ 'formbadpagename' => 'Dat es keine Name för en Sigg',
 880+ 'formbadrecaptcha' => 'Ferkeehte Wäät för e widderhollt Kaptache. Moß De norr_ens versöke.',
 881+ 'formbadpagenametext' => 'Di enjejovve Date fun dämm Fommulaa jevve „[[$1]]“ — dat es enne kapodde Name för en Sigg.',
 882+ 'formrequiredfielderror' => '{{PLURAL:$2|Dat Feld|De Felder|Nix}} $1 {{PLURAL:$2|moß|mösse|moß}} aanjejovve wäde. Donn {{PLURAL:$2|et|se|nix}} ußfölle.',
 883+ 'formsavesummary' => 'En neu Sigg, di op dämm [[Special:Form/$1|Fommulaa $1]] opbout.',
 884+ 'formsaveerror' => 'Fäähler beim Fommulaa afspeichere',
 885+ 'formsaveerrortext' => 'Mer hatte ene Fähler — de Aat es onbikannt — beim Afspeichere fun de Sigg „$1“.',
 886+);
 887+
 888+/** Latin (Latina)
 889+ * @author SPQRobin
 890+ */
 891+$messages['la'] = array(
 892+ 'formsave' => 'Servare',
 893+ 'formarticleexiststext' => 'Pagina [[$1]] iam existit.',
 894+);
 895+
 896+/** Luxembourgish (Lëtzebuergesch)
 897+ * @author Les Meloures
 898+ * @author Robby
 899+ */
 900+$messages['lb'] = array(
 901+ 'form-desc' => 'E [[Special:Form|Formulaire]] fir nei Säiten unzefänken',
 902+ 'form' => 'Formulaire',
 903+ 'formnoname' => 'Keen Numm vum Formulaire',
 904+ 'formnonametext' => 'Dir musst en Numm vum Formulaire uginn, zum Beispill "Special:Form/NummvumFormulaire".',
 905+ 'formbadname' => 'Falschen Numm vum Formulaire',
 906+ 'formbadnametext' => 'Et gëtt kee Formulaire mat dem Numm.',
 907+ 'formpattern' => '$1-Formulaire',
 908+ 'formtitlepattern' => 'Nei $1 derbäisetzen',
 909+ 'formsave' => 'Späicheren',
 910+ 'formindexmismatch-title' => 'Duercherneen tëschent dem Numm an der Schabloun',
 911+ 'formindexmismatch' => "Dëse Formulaire ass net richteg configuréiert wat d'Schablounen an d'Modeller vun den Donnéeën. De Feeler fänkt beim Index $1 un.",
 912+ 'formarticleexists' => "D'Säit gëtt et schonn.",
 913+ 'formarticleexiststext' => "D'Säit [[$1]] gëtt et schonn.",
 914+ 'formbadpagename' => 'Falsche Säitennumm',
 915+ 'formbadrecaptcha' => 'Falsche Wert fir reCaptcha. Probéiert nach emol.',
 916+ 'formbadpagenametext' => 'Déi Donnéeën déi Dir an de Formulaire aginn hutt erginn e Säitennumm, den net ka gespäichert ginn: "$1".',
 917+ 'formrequiredfielderror' => "D'{{PLURAL:$2|Feld $1 muss|Felder $1 mussen}} an dësem Formulaire ausgefëllt ginn.
 918+Fëllt {{PLURAL:$2|et|se}} w.e.g. aus.",
 919+ 'formsavesummary' => 'Nei Säit, déi de [[Special:Form/$1|Formulaire $1]] benotzt',
 920+ 'formsaveerror' => 'Feeler beim Späichere vum Formulaire',
 921+ 'formsaveerrortext' => "Et gouf een onbekannte Feeler beim späichere vun der Säit '$1'.",
 922+);
 923+
 924+/** Eastern Mari (Олык Марий)
 925+ * @author Сай
 926+ */
 927+$messages['mhr'] = array(
 928+ 'formsave' => 'Аралаш',
 929+);
 930+
 931+/** Macedonian (Македонски)
 932+ * @author Bjankuloski06
 933+ */
 934+$messages['mk'] = array(
 935+ 'form-desc' => '[[Special:Form|Интерфејс]] за започнување нови страници',
 936+ 'form' => 'Образец',
 937+ 'formnoname' => 'Нема име на образецот',
 938+ 'formnonametext' => 'Мора да наведете име на образецот, како да речеме „Special:Form/ИмеНаОбразец“',
 939+ 'formbadname' => 'Лошо име на образецот',
 940+ 'formbadnametext' => 'Нема образец со тоа име.',
 941+ 'formpattern' => '$1-образец',
 942+ 'formtitlepattern' => 'Додај нов $1',
 943+ 'formsave' => 'Зачувај',
 944+ 'formindexmismatch-title' => 'Несоодветно име и шаблон',
 945+ 'formindexmismatch' => 'Овој образец има несоодветни имиња и шаблони во позиција $1.',
 946+ 'formarticleexists' => 'Страницата постои',
 947+ 'formarticleexiststext' => 'Страницата [[$1]] веќе постои.',
 948+ 'formbadpagename' => 'Лошо име на страницата',
 949+ 'formbadrecaptcha' => 'Неточни вредности за reCaptcha. Обидете се повторно.',
 950+ 'formbadpagenametext' => 'Внесените податоци во образецот доведуваат до погрешен назив на страницата, „$1“.',
 951+ 'formrequiredfielderror' => '{{PLURAL:$2|Полето $1 е задолжително во овој образец|Полињата $1 се задолжителни во овој образец}}.
 952+Пополнете {{PLURAL:$2|го|ги}}.',
 953+ 'formsavesummary' => 'Нова страница, користејќи го [[Special:Form/$1|образецот $1]]',
 954+ 'formsaveerror' => 'Грешка при зачувување на образецот',
 955+ 'formsaveerrortext' => 'Се појави непозната грешка при зачувувањето на страницата „$1“.',
 956+);
 957+
 958+/** Malayalam (മലയാളം)
 959+ * @author Shijualex
 960+ */
 961+$messages['ml'] = array(
 962+ 'form' => 'ഫോം',
 963+ 'formnoname' => 'ഫോമിനു പേരില്ല',
 964+ 'formnonametext' => 'ഫോമിനു ഒരു പേരു നിർബന്ധമായും കൊടുക്കണം, ഉദാ: "Special:Form/Nameofform".',
 965+ 'formbadname' => 'അസാധുവായ ഫോം നാമം',
 966+ 'formbadnametext' => 'ആ പേരിൽ ഒരു ഫോമില്ല.',
 967+ 'formpattern' => '$1-ഫോം',
 968+ 'formtitlepattern' => 'പുതിയ $1 ചേർക്കുക',
 969+ 'formsave' => 'സേവ് ചെയ്യുക',
 970+ 'formarticleexists' => 'താൾ നിലവിലുണ്ട്',
 971+ 'formarticleexiststext' => '[[$1]] എന്ന താൾ നിലവിലുണ്ട്.',
 972+ 'formbadpagename' => 'അസാധുവായ താൾ നാമം',
 973+);
 974+
 975+/** Marathi (मराठी)
 976+ * @author Kaustubh
 977+ * @author Mahitgar
 978+ */
 979+$messages['mr'] = array(
 980+ 'form' => 'अर्ज',
 981+ 'formnoname' => 'अर्ज नाव नाही',
 982+ 'formnonametext' => 'तुम्ही एक अर्ज नाव देणे आवश्यक आहे, उदा "Special:Form/अर्जनाव".',
 983+ 'formbadname' => 'चुकीचे अर्ज नाव',
 984+ 'formbadnametext' => 'या नावाचा अर्ज अस्तित्वात नाही.',
 985+ 'formpattern' => '$1-अर्ज',
 986+ 'formtitlepattern' => 'नवीन वाढवा $1',
 987+ 'formsave' => 'जतन करा',
 988+ 'formindexmismatch' => 'या अर्जामध्ये चुकीचे नाव रकाने तसेच साचे जे $1 पासून सुरु होतात, आहेत.',
 989+ 'formarticleexists' => 'पान अस्तित्वात आहे',
 990+ 'formarticleexiststext' => '[[$1]] हे पान अगोदरच अस्तित्वात आहे',
 991+ 'formbadpagename' => 'चुकीचे पान नाव',
 992+ 'formbadpagenametext' => 'तुम्ही दिलेल्या अर्ज माहितीमुळे चुकीचे पृष्ठ नाव तयार होत आहे, "$1".',
 993+ 'formrequiredfielderror' => '$1 रकाना या अर्जाकरिता आवश्यक आहेत.
 994+कृपया ते भरा.',
 995+ 'formsavesummary' => '[[Special:Form/$1]] वापरुन नवीन पान',
 996+ 'formsaveerror' => 'अर्ज जतन करण्यात त्रुटी',
 997+ 'formsaveerrortext' => "'$1' पान जतन करण्यामध्ये अनोळखी त्रुटी आलेली आहे.",
 998+);
 999+
 1000+/** Malay (Bahasa Melayu)
 1001+ * @author Izzudin
 1002+ */
 1003+$messages['ms'] = array(
 1004+ 'form-desc' => 'Sebuah [[Special:Form|antara muka borang]] untuk mulakan halaman baru',
 1005+ 'form' => 'Borang',
 1006+ 'formnoname' => 'Borang tanpa nama',
 1007+ 'formnonametext' => 'Anda perlu meletakkan nama borang, seperti "Special:Form/Namaborang".',
 1008+ 'formbadname' => 'Nama borang tidak sesuai',
 1009+ 'formbadnametext' => 'Tiada borang dengan nama itu.',
 1010+ 'formpattern' => 'borang $1',
 1011+ 'formtitlepattern' => 'Tambahkan $1 baru',
 1012+ 'formsave' => 'Simpan',
 1013+);
 1014+
 1015+/** Erzya (Эрзянь)
 1016+ * @author Botuzhaleny-sodamo
 1017+ */
 1018+$messages['myv'] = array(
 1019+ 'formsave' => 'Ванстомс',
 1020+);
 1021+
 1022+/** Nahuatl (Nāhuatl)
 1023+ * @author Fluence
 1024+ */
 1025+$messages['nah'] = array(
 1026+ 'formtitlepattern' => 'Ticcēntilīz yancuīc $1',
 1027+ 'formsave' => 'Ticpiyāz',
 1028+ 'formarticleexists' => 'Zāzanilli ia',
 1029+ 'formarticleexiststext' => 'Zāzanilli [[$1]] ye ia.',
 1030+ 'formbadpagename' => 'Ahcualli zāzaniltōcāitl',
 1031+);
 1032+
 1033+/** Low German (Plattdüütsch)
 1034+ * @author Slomox
 1035+ */
 1036+$messages['nds'] = array(
 1037+ 'form' => 'Formular',
 1038+ 'formsave' => 'Spiekern',
 1039+ 'formarticleexists' => 'Sied gifft dat al',
 1040+);
 1041+
 1042+/** Dutch (Nederlands)
 1043+ * @author Siebrand
 1044+ * @author Tvdm
 1045+ */
 1046+$messages['nl'] = array(
 1047+ 'form-desc' => "Een [[Special:Form|formulierinterface]] om nieuwe pagina's te starten",
 1048+ 'form' => 'Formulier',
 1049+ 'formnoname' => 'Geen formuliernaam',
 1050+ 'formnonametext' => 'Geef een formuliernaam op, bijvoorbeeld "Special:Form/Formuliernaam".',
 1051+ 'formbadname' => 'Ongeldige formuliernaam',
 1052+ 'formbadnametext' => 'Er bestaat geen formulier met die naam.',
 1053+ 'formpattern' => '$1-formulier',
 1054+ 'formtitlepattern' => 'Voeg nieuw $1 toe',
 1055+ 'formsave' => 'Opslaan',
 1056+ 'formindexmismatch-title' => 'Naampatroon- en sjabloonmismatch',
 1057+ 'formindexmismatch' => 'Dit formulier heeft ongekoppelde naampatronen en sjablonen vanaf index $1.',
 1058+ 'formarticleexists' => 'Pagina bestaat al',
 1059+ 'formarticleexiststext' => 'De pagina [[$1]] bestaat al.',
 1060+ 'formbadpagename' => 'Onjuiste paginanaam',
 1061+ 'formbadrecaptcha' => 'Incorrecte waarden voor reCaptcha.
 1062+Probeer het opnieuw.',
 1063+ 'formbadpagenametext' => 'De formuliergegevens die u hebt opgegeven zorgen voor een onjuiste pagina, "$1".',
 1064+ 'formrequiredfielderror' => '{{PLURAL:$2|Het veld $1 is|De velden $1 zijn}} benodigd voor dit formulier.
 1065+Vul {{PLURAL:$2|dit|deze}} alstublieft in.',
 1066+ 'formsavesummary' => 'Nieuwe pagina via [[Special:Form/$1|formulier $1]]',
 1067+ 'formsaveerror' => 'Fout bij opslaan formulier',
 1068+ 'formsaveerrortext' => "Er is een onbekende fout opgetreden bij het opslaan van pagina '$1'.",
 1069+);
 1070+
 1071+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
 1072+ * @author Frokor
 1073+ * @author Harald Khan
 1074+ * @author Jon Harald Søby
 1075+ */
 1076+$messages['nn'] = array(
 1077+ 'form-desc' => 'Eit [[Special:Form|skjema]] for å opprette nye sider',
 1078+ 'form' => 'Skjema',
 1079+ 'formnoname' => 'Skjemanamn finst ikkje',
 1080+ 'formnonametext' => 'Du må gje eit skjemanamn, som «Special:Form/Skjemanamn».',
 1081+ 'formbadname' => 'Ugyldig skjemanamn',
 1082+ 'formbadnametext' => 'Det finst ingen skjema med det namnet.',
 1083+ 'formpattern' => '$1-skjema',
 1084+ 'formtitlepattern' => 'Legg til nytt $1',
 1085+ 'formsave' => 'Lagre',
 1086+ 'formindexmismatch-title' => 'Namnemønster- og malfeil',
 1087+ 'formindexmismatch' => 'Dette skjemaet har upassande namnemønster og malar som startar på indeks $1.',
 1088+ 'formarticleexists' => 'Sida eksisterer',
 1089+ 'formarticleexiststext' => 'Sida [[$1]] eksisterer alt.',
 1090+ 'formbadpagename' => 'Ugyldig sidenamn',
 1091+ 'formbadrecaptcha' => 'Gale verdiar frå reCaptcha. Prøv igjen.',
 1092+ 'formbadpagenametext' => 'Skjemadataa du skreiv inn utgjevr eit ugyldig sidenamn, «$1».',
 1093+ 'formrequiredfielderror' => '{{PLURAL:$2|Feltet $1 er påkravd |Felta $1 er påkravde}} for dette skjemaet. Ver venleg og fyll {{PLURAL:$2|det|dei}} inn.',
 1094+ 'formsavesummary' => 'Ny side vha. [[Special:Form/$1|skjemaet $1]]',
 1095+ 'formsaveerror' => 'Feil under skjemalagring',
 1096+ 'formsaveerrortext' => 'Det var ein ukjend feil under lagring av sida ‘$1’.',
 1097+);
 1098+
 1099+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
 1100+ * @author Jon Harald Søby
 1101+ * @author Nghtwlkr
 1102+ */
 1103+$messages['no'] = array(
 1104+ 'form-desc' => 'Et [[Special:Form|skjema]] for å opprette nye sider',
 1105+ 'form' => 'Skjema',
 1106+ 'formnoname' => 'Intet skjemanavn',
 1107+ 'formnonametext' => 'Du må angi et skjemanavn, som «Special:Form/Skjemanavn».',
 1108+ 'formbadname' => 'Ugyldig skjemanavn',
 1109+ 'formbadnametext' => 'Det er ingen skjema ved det navnet.',
 1110+ 'formpattern' => '$1-skjema',
 1111+ 'formtitlepattern' => 'Legger til nytt $1',
 1112+ 'formsave' => 'Lagre',
 1113+ 'formindexmismatch-title' => 'Navnemønster og malfeil',
 1114+ 'formindexmismatch' => 'Dette skjemaet har upassende navnemønstre og maler som starter på indeks $1.',
 1115+ 'formarticleexists' => 'Siden eksisterer',
 1116+ 'formarticleexiststext' => 'Siden [[$1]] eksisterer allerede.',
 1117+ 'formbadpagename' => 'Ugyldig sidenavn',
 1118+ 'formbadrecaptcha' => 'Gale verdier fro reCaptcha. Prøv igjen.',
 1119+ 'formbadpagenametext' => 'Skjemadataene du skrev inn utgjør et ugyldig sidenavn, «$1».',
 1120+ 'formrequiredfielderror' => '{{PLURAL:$2|Feltet $1 er obligatorisk|Feltene $1 er obligatoriske}} for dette skjemaet. Vær vennlig og fyll {{PLURAL:$2|det|dem}} ut.',
 1121+ 'formsavesummary' => 'Ny side vha. [[Special:Form/$1|skjemaet $1]]',
 1122+ 'formsaveerror' => 'Feil under skjemalagring',
 1123+ 'formsaveerrortext' => 'Det var en ukjent feil under lagring av siden ‘$1’.',
 1124+);
 1125+
 1126+/** Occitan (Occitan)
 1127+ * @author Cedric31
 1128+ */
 1129+$messages['oc'] = array(
 1130+ 'form-desc' => 'Un [[Special:Form|formulari d’interfàcia]] per començar de paginas novèlas',
 1131+ 'form' => 'Formulari',
 1132+ 'formnoname' => 'Cap de nom',
 1133+ 'formnonametext' => 'Especificatz lo nom del formulari, jos la forma "Special:Formulari/NomDelFormulari".',
 1134+ 'formbadname' => 'Nom incorrècte',
 1135+ 'formbadnametext' => 'Lo nom causit pel formulari es incorrècte. Cap de formulari existís jos aqueste nom.',
 1136+ 'formpattern' => 'formulari-$1',
 1137+ 'formtitlepattern' => 'Apondre un(a) $1',
 1138+ 'formsave' => 'Salvar',
 1139+ 'formindexmismatch-title' => 'Paleta de nom e error de modèl',
 1140+ 'formindexmismatch' => 'Aqueste formulari a de patrons e de modèls que correspòndon pas a partir de $1.',
 1141+ 'formarticleexists' => "L'article existís ja.",
 1142+ 'formarticleexiststext' => "L'article nomenat [[$1]] existís ja.",
 1143+ 'formbadpagename' => 'Marrit nom de pagina',
 1144+ 'formbadrecaptcha' => 'Valor incorrècta per reCaptcha. Ensajatz tornamai',
 1145+ 'formbadpagenametext' => 'Las donadas picadas fòrman un marrit nom de pagina, « $1 ».',
 1146+ 'formrequiredfielderror' => '{{PLURAL:$2|Lo camp $1 es|Los camps $1 son}} requesits dins aqueste formulari.
 1147+Vos {{PLURAL:$2|lo|los}} cal emplenar.',
 1148+ 'formsavesummary' => "Crear un article novèl amb l'ajuda de [[Special:Form/$1|formulari $1]]",
 1149+ 'formsaveerror' => "Una error s'es producha pendent lo salvament.",
 1150+ 'formsaveerrortext' => "Una error desconeguda s'es producha pendent lo salvament de ''$1''.",
 1151+);
 1152+
 1153+/** Ossetic (Иронау)
 1154+ * @author Amikeco
 1155+ */
 1156+$messages['os'] = array(
 1157+ 'formsave' => 'Афтæ уæд',
 1158+);
 1159+
 1160+/** Polish (Polski)
 1161+ * @author Derbeth
 1162+ * @author Leinad
 1163+ * @author Sp5uhe
 1164+ * @author Wpedzich
 1165+ */
 1166+$messages['pl'] = array(
 1167+ 'form-desc' => '[[Special:Form|Formularz interfejsu]] do rozpoczynania nowych stron',
 1168+ 'form' => 'Formularz',
 1169+ 'formnoname' => 'Brak nazwy formularza',
 1170+ 'formnonametext' => 'Musisz podać nazwę formularza, np. „{{ns:special}}:Formularz/Nazwaformularza”.',
 1171+ 'formbadname' => 'Zła nazwa formularza',
 1172+ 'formbadnametext' => 'Brak formularza o takiej nazwie.',
 1173+ 'formpattern' => 'formularz $1',
 1174+ 'formtitlepattern' => 'Dodaj nowy $1',
 1175+ 'formsave' => 'Zapisz',
 1176+ 'formindexmismatch-title' => 'Wzorzec nazwy i szablon nie pasują',
 1177+ 'formindexmismatch' => 'W poniższym zestawieniu znajdują się niepasujące wzorce nazw i szablony, rozpoczynając od indeksu $1.',
 1178+ 'formarticleexists' => 'Strona istnieje',
 1179+ 'formarticleexiststext' => 'Strona [[$1]] już istnieje.',
 1180+ 'formbadpagename' => 'Zła nazwa strony',
 1181+ 'formbadrecaptcha' => 'Niepoprawne wartości reCaptcha. Spróbuj ponownie.',
 1182+ 'formbadpagenametext' => 'Dane wpisane do formularza tworzą niepoprawną nazwę strony, „$1”.',
 1183+ 'formrequiredfielderror' => '{{PLURAL:$2|Pole $1 jest|Pola $2 są}} wymagane w tym formularzu. Wypełnij je.',
 1184+ 'formsavesummary' => 'Nowa strona za pomocą [[Special:Form/$1|formularza $1]]',
 1185+ 'formsaveerror' => 'Błąd przy zapisywaniu formularza',
 1186+ 'formsaveerrortext' => "Wystąpił nieznany błąd przy zapisywaniu strony '$1'.",
 1187+);
 1188+
 1189+/** Piedmontese (Piemontèis)
 1190+ * @author Bèrto 'd Sèra
 1191+ * @author Dragonòt
 1192+ */
 1193+$messages['pms'] = array(
 1194+ 'form-desc' => "N'[[Special:Form|antëfacia ëd forma]] për fé parte neuve pàgine",
 1195+ 'form' => 'Domanda',
 1196+ 'formnoname' => 'Domanda sensa tìtol',
 1197+ 'formnonametext' => 'A venta deje un tìtol al mòdulo ëd domanda, coma "Special:Form/nòm_dla_domanda".',
 1198+ 'formbadname' => 'Nòm dla domanda nen bon',
 1199+ 'formbadnametext' => "A-i é pa gnun mòdulo ëd domanda ch'as ciama parej.",
 1200+ 'formpattern' => '$1-domanda',
 1201+ 'formtitlepattern' => 'Gionté $1 neuv',
 1202+ 'formsave' => 'Salvé',
 1203+ 'formindexmismatch-title' => 'Model dël nòm e stamp a corispondo pa',
 1204+ 'formindexmismatch' => "Ës mòdulo-sì a l'ha në schema ëd nòm e stamp malcobià a parte da 'nt l'ìndess $1.",
 1205+ 'formarticleexists' => 'La pàgina a-i é',
 1206+ 'formarticleexiststext' => 'La pàgina [[$1]] a-i é già',
 1207+ 'formbadpagename' => 'Nòm ëd pàgina pa bon',
 1208+ 'formbadrecaptcha' => 'Valor pa giust për reCaptcha. Prova torna.',
 1209+ 'formbadpagenametext' => 'Ij dat ant sël mòdulo ëd domanda ch\'a l\'ha butà a dan un nòm ëd pàgina nen bon, "$1".',
 1210+ 'formrequiredfielderror' => "{{PLURAL:$2|Ël camp $1 a l'é|Ij camp $1 a son}} obligatòri për ës mòdulo ëd domanda-sì.
 1211+Për piasì, {{PLURAL:$2|ch'a lo|ch'a-j}} compila.",
 1212+ 'formsavesummary' => "Neuva pàgina ch'a dòvra [[Special:Form/$1|mòdul $1]]",
 1213+ 'formsaveerror' => 'Eror ën salvand ël mòdulo ëd domanda',
 1214+ 'formsaveerrortext' => "A-i é sta-ie n'eror amprevist ën salvand la pàgina '$1'.",
 1215+);
 1216+
 1217+/** Pashto (پښتو)
 1218+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
 1219+ */
 1220+$messages['ps'] = array(
 1221+ 'formsave' => 'خوندي کول',
 1222+);
 1223+
 1224+/** Portuguese (Português)
 1225+ * @author 555
 1226+ * @author Lijealso
 1227+ * @author Malafaya
 1228+ * @author Waldir
 1229+ */
 1230+$messages['pt'] = array(
 1231+ 'form-desc' => 'Uma [[Special:Form|interface em formulário]] para criar novas páginas',
 1232+ 'form' => 'Formulário',
 1233+ 'formnoname' => 'Sem nome de formulário',
 1234+ 'formnonametext' => 'Tem de fornecer um nome para o formulário, tal como "Special:Form/Nomedoformulario".',
 1235+ 'formbadname' => 'Nome de formulário incorreto',
 1236+ 'formbadnametext' => 'Não existe nenhum formulário com esse nome.',
 1237+ 'formpattern' => 'formulário $1',
 1238+ 'formtitlepattern' => 'Adicionar Novo $1',
 1239+ 'formsave' => 'Gravar',
 1240+ 'formindexmismatch-title' => 'Padrão do nome e predefinição não correspondem',
 1241+ 'formindexmismatch' => 'Este formulário tem padrões de nome e predefinições não correspondentes a partir do índice $1.',
 1242+ 'formarticleexists' => 'A página existe',
 1243+ 'formarticleexiststext' => 'A página [[$1]] já existe.',
 1244+ 'formbadpagename' => 'Nome de página incorreto',
 1245+ 'formbadrecaptcha' => 'Valores de reCaptha incorretos. Tente novamente.',
 1246+ 'formbadpagenametext' => 'Os dados que introduziu no formulário formam um nome de página incorreto, "$1".',
 1247+ 'formrequiredfielderror' => '{{PLURAL:$2|O campo $1 é obrigatório|Os campos $1 são obrigatórios}} neste formulário.
 1248+Por favor, {{PLURAL:$2|preencha-o|preencha-os}}.',
 1249+ 'formsavesummary' => 'Nova página usando [[Special:Form/$1|formulário $1]]',
 1250+ 'formsaveerror' => 'Erro ao gravar formulário',
 1251+ 'formsaveerrortext' => "Houve um erro desconhecido ao gravar a página '$1'.",
 1252+);
 1253+
 1254+/** Brazilian Portuguese (Português do Brasil)
 1255+ * @author Eduardo.mps
 1256+ * @author Malafaya
 1257+ */
 1258+$messages['pt-br'] = array(
 1259+ 'form-desc' => 'Uma [[Special:Form|interface em formulário]] para criar novas páginas',
 1260+ 'form' => 'Formulário',
 1261+ 'formnoname' => 'Sem nome de formulário',
 1262+ 'formnonametext' => 'Tem de fornecer um nome para o formulário, tal como "Special:Form/Nomedoformulario".',
 1263+ 'formbadname' => 'Nome de formulário incorreto',
 1264+ 'formbadnametext' => 'Não existe nenhum formulário com esse nome.',
 1265+ 'formpattern' => 'formulário $1',
 1266+ 'formtitlepattern' => 'Adicionar Novo $1',
 1267+ 'formsave' => 'Salvar',
 1268+ 'formindexmismatch-title' => 'Padrão do nome e predefinição não correspondem',
 1269+ 'formindexmismatch' => 'Este formulário tem padrões de nome e predefinições não correspondentes a partir do índice $1.',
 1270+ 'formarticleexists' => 'A página existe',
 1271+ 'formarticleexiststext' => 'A página [[$1]] já existe.',
 1272+ 'formbadpagename' => 'Nome de página incorreto',
 1273+ 'formbadrecaptcha' => 'Valores de reCaptha incorretos. Tente novamente.',
 1274+ 'formbadpagenametext' => 'Os dados que introduziu no formulário formam um nome de página incorreto, "$1".',
 1275+ 'formrequiredfielderror' => '{{PLURAL:$2|O campo $1 é obrigatório|Os campos $1 são obrigatórios}} neste formulário.
 1276+Por favor, {{PLURAL:$2|preencha-o|preencha-os}}.',
 1277+ 'formsavesummary' => 'Nova página usando [[Special:Form/$1|formulário $1]]',
 1278+ 'formsaveerror' => 'Erro ao gravar formulário',
 1279+ 'formsaveerrortext' => "Houve um erro desconhecido ao salvar a página '$1'.",
 1280+);
 1281+
 1282+/** Romanian (Română)
 1283+ * @author Firilacroco
 1284+ * @author KlaudiuMihaila
 1285+ */
 1286+$messages['ro'] = array(
 1287+ 'form' => 'Formular',
 1288+ 'formnoname' => 'Niciun nume pentru formular',
 1289+ 'formbadname' => 'Nume incorect',
 1290+ 'formtitlepattern' => 'Adaugă nou $1',
 1291+ 'formsave' => 'Salvează',
 1292+ 'formarticleexists' => 'Pagina există',
 1293+ 'formarticleexiststext' => 'Pagina [[$1]] deja există.',
 1294+ 'formsaveerror' => 'Eroare la salvarea formularului',
 1295+ 'formsaveerrortext' => "A intervenit o eroare necunoscută la salvarea paginii '$1'.",
 1296+);
 1297+
 1298+/** Tarandíne (Tarandíne)
 1299+ * @author Joetaras
 1300+ */
 1301+$messages['roa-tara'] = array(
 1302+ 'formsave' => 'Reggistre',
 1303+);
 1304+
 1305+/** Russian (Русский)
 1306+ * @author Innv
 1307+ * @author Rubin
 1308+ * @author Александр Сигачёв
 1309+ */
 1310+$messages['ru'] = array(
 1311+ 'form-desc' => '[[Special:Form|Интерфейс]] (в виде формы) для создания новых страниц',
 1312+ 'form' => 'Форма',
 1313+ 'formnoname' => 'Нет имени формы',
 1314+ 'formnonametext' => 'Вы должны указать имя формы, в виде как «Special:Form/Имяформы».',
 1315+ 'formbadname' => 'Плохое имя формы',
 1316+ 'formbadnametext' => 'Нет формы с таким именем.',
 1317+ 'formpattern' => '$1-форма',
 1318+ 'formtitlepattern' => 'Добавить новый $1',
 1319+ 'formsave' => 'Сохранить',
 1320+ 'formindexmismatch-title' => 'Несоответствие образца и шаблона',
 1321+ 'formindexmismatch' => 'В этой форме есть несоответствие имени и шаблона в позиции $1.',
 1322+ 'formarticleexists' => 'Страница существует',
 1323+ 'formarticleexiststext' => 'Страница [[$1]] уже существует.',
 1324+ 'formbadpagename' => 'Плохое имя страницы',
 1325+ 'formbadrecaptcha' => 'Неправильное значение reCaptcha. Попробуйте ещё раз.',
 1326+ 'formbadpagenametext' => 'Введённые вами данные формы, приводят к ошибочному имени страницы, «$1».',
 1327+ 'formrequiredfielderror' => 'В этой форме требуется заполнить {{PLURAL:$2|$2 поле|$2 поля|$2 полей}}: $1.
 1328+Пожалуйста дозаполните {{PLURAL:$2|это поле|эти поля}}.',
 1329+ 'formsavesummary' => 'Новая страница, с помощью [[Special:Form/$1|формы $1]]',
 1330+ 'formsaveerror' => 'Ошибка при сохранении формы',
 1331+ 'formsaveerrortext' => 'При сохранении страницы «$1» возникла неизвестная ошибка.',
 1332+);
 1333+
 1334+/** Sinhala (සිංහල)
 1335+ * @author චතුනි අලහප්පෙරුම
 1336+ */
 1337+$messages['si'] = array(
 1338+ 'formarticleexists' => 'පිටුව පවතියි',
 1339+ 'formarticleexiststext' => '[[$1]] පිටුව දැනටමත් පවතියි.',
 1340+ 'formbadpagename' => 'නොමනා පිටු නාමය',
 1341+ 'formbadrecaptcha' => 'reCaptcha වෙනුවෙන් සාවද්‍යය අගයන් සැපයුමකි. යළි උත්සාහ කරන්න.',
 1342+);
 1343+
 1344+/** Slovak (Slovenčina)
 1345+ * @author Helix84
 1346+ */
 1347+$messages['sk'] = array(
 1348+ 'form-desc' => '[[Special:Form|Formulárové rozhranie]] na zakladanie nových stránok',
 1349+ 'form' => 'Formulár',
 1350+ 'formnoname' => 'Nezadali ste názov formulára',
 1351+ 'formnonametext' => 'Musíte zadať názov formulára v tvare „Special:Form/Názovformulára“',
 1352+ 'formbadname' => 'Chybný názov formulára',
 1353+ 'formbadnametext' => 'Formulár s takým názvom neexistuje.',
 1354+ 'formpattern' => 'formulár-$1',
 1355+ 'formtitlepattern' => 'Pridať nový $1',
 1356+ 'formsave' => 'Uložiť',
 1357+ 'formindexmismatch-title' => 'Vzor názvu a šablóna si nezodpovedajú.',
 1358+ 'formindexmismatch' => 'Vzory názvu tohto formulára sa nezhodujú a šablóny začínajú od indexu $1.',
 1359+ 'formarticleexists' => 'Stránka existuje',
 1360+ 'formarticleexiststext' => 'Stránka [[$1]] už existuje.',
 1361+ 'formbadpagename' => 'Chybný názov stránky',
 1362+ 'formbadrecaptcha' => 'Neplatné hodnoty reCaptcha. Skúste to znova.',
 1363+ 'formbadpagenametext' => 'Údaje formulára, ktoré ste zadali tvoria chybný názov stránky - „$1“.',
 1364+ 'formrequiredfielderror' => 'Tento formulár vyžaduje vyplnenie {{PLURAL:$2|poľa $1|polí $1}}. Prosím, vyplňte {{PLURAL:$2|ho|ich}}.',
 1365+ 'formsavesummary' => 'Nová stránka pomocou [[Special:Form/$1|formulára $1]]',
 1366+ 'formsaveerror' => 'Chyba pri ukladaní formulára',
 1367+ 'formsaveerrortext' => 'Pri ukladaní formulára sa vyskytla neznáma chyba „$1“.',
 1368+);
 1369+
 1370+/** Somali (Soomaaliga)
 1371+ * @author Yariiska
 1372+ */
 1373+$messages['so'] = array(
 1374+ 'formsave' => 'Kaydi',
 1375+);
 1376+
 1377+/** Serbian Cyrillic ekavian (Српски (ћирилица))
 1378+ * @author Sasa Stefanovic
 1379+ */
 1380+$messages['sr-ec'] = array(
 1381+ 'formsave' => 'Сачувај',
 1382+ 'formarticleexists' => 'Страна постоји',
 1383+);
 1384+
 1385+/** Serbian Latin ekavian (Srpski (latinica))
 1386+ * @author Michaello
 1387+ */
 1388+$messages['sr-el'] = array(
 1389+ 'formsave' => 'Sačuvaj',
 1390+ 'formarticleexists' => 'Strana postoji',
 1391+);
 1392+
 1393+/** Seeltersk (Seeltersk)
 1394+ * @author Pyt
 1395+ */
 1396+$messages['stq'] = array(
 1397+ 'form' => 'Formular',
 1398+ 'formnoname' => 'Naan Formularnoome',
 1399+ 'formnonametext' => 'Du moast n Formularnoome ounreeke, t.B. „{{ns:Special}}:Form/Formularnoome“.',
 1400+ 'formbadname' => 'Falsken Formularnoome',
 1401+ 'formbadnametext' => 'Dät rakt neen Formular mäd dissen Noome',
 1402+ 'formpattern' => '$1-Formular',
 1403+ 'formtitlepattern' => 'Föigje näie $1 bietou',
 1404+ 'formsave' => 'Spiekerje',
 1405+ 'formindexmismatch' => 'Dit Formular häd n Uungliekgewicht twiske Noomensmustere un Foarloagen, ounfangend bie Index $1.',
 1406+ 'formarticleexists' => 'Siede is al deer',
 1407+ 'formarticleexiststext' => 'Ju Siede „[[$1]]“ is al deer.',
 1408+ 'formbadpagename' => 'Ferkierde Siedennoome',
 1409+ 'formbadpagenametext' => 'Do ienroate Formulardoaten moakje n ferkierden Siedennoome: „$1“.',
 1410+ 'formrequiredfielderror' => 'Dät Fäild $1 is n Plichtfäild. Jädden uutfälle.',
 1411+ 'formsavesummary' => 'Näie Siede, ju der ap [[{{ns:Special}}:Form/$1]] basiert',
 1412+ 'formsaveerror' => 'Failer bie dät Spiekerjen fon dät Formular',
 1413+ 'formsaveerrortext' => 'Dät roate n uunbekoanden Failer bie dät Spiekerjen fon ju Siede „$1“.',
 1414+);
 1415+
 1416+/** Sundanese (Basa Sunda)
 1417+ * @author Irwangatot
 1418+ * @author Kandar
 1419+ */
 1420+$messages['su'] = array(
 1421+ 'form' => 'Formulir',
 1422+ 'formnoname' => 'Formulir can dingaranan',
 1423+ 'formnonametext' => 'Formulir anjeun kudu boga ngaran, misalna waé "Husus:Formulir/Ngaranformulir".',
 1424+ 'formbadname' => 'Ngaran formulirna teu payus.',
 1425+ 'formbadnametext' => 'Euweuh formulir nu ngaranna kitu.',
 1426+ 'formpattern' => 'Formulir-$1',
 1427+ 'formtitlepattern' => 'Tambahan $1 Anyar',
 1428+ 'formsave' => 'Simpen',
 1429+ 'formindexmismatch' => 'Ieu formulir mibanda pola jeung citakan ngaran nu pasalia ti indéks $1 ka handap.',
 1430+ 'formarticleexists' => 'Kaca Aya',
 1431+ 'formarticleexiststext' => 'Kaca [[$1]] geus aya.',
 1432+ 'formbadpagename' => 'Ngaran judul goréng',
 1433+ 'formbadpagenametext' => 'Data formulir nu diasupkeun ngahasilkeun ngaran kaca nu teu payus, "$1".',
 1434+ 'formsaveerrortext' => "Aya éror nu teu kanyahoan nalika nyimpen kaca '$1'.",
 1435+);
 1436+
 1437+/** Swedish (Svenska)
 1438+ * @author Boivie
 1439+ * @author Lejonel
 1440+ * @author M.M.S.
 1441+ * @author Najami
 1442+ */
 1443+$messages['sv'] = array(
 1444+ 'form-desc' => 'Ett [[Special:Form|formulär]] för att börja på nya sidor',
 1445+ 'form' => 'Formulär',
 1446+ 'formnoname' => 'Formulärnamn saknas',
 1447+ 'formnonametext' => 'Du måste ange ett formulärnamn på formen "Special:Form/Formulärnamn".',
 1448+ 'formbadname' => 'Felaktigt formulärnamn',
 1449+ 'formbadnametext' => 'Det finns inget formulär med det namnet.',
 1450+ 'formpattern' => '$1-formulär',
 1451+ 'formtitlepattern' => 'Lägg till ny $1',
 1452+ 'formsave' => 'Spara',
 1453+ 'formindexmismatch-title' => 'Namnmönster och mallfel',
 1454+ 'formindexmismatch' => 'Det här formuläret har opassande namnmönster och mallar som startar på index $1.',
 1455+ 'formarticleexists' => 'Sidan existerar',
 1456+ 'formarticleexiststext' => 'Sidan [[$1]] finns redan.',
 1457+ 'formbadpagename' => 'Dåligt sidnamn',
 1458+ 'formbadrecaptcha' => 'Ogiltiga värden från reCaptcha. Pröva igen.',
 1459+ 'formbadpagenametext' => 'Formulärdatan du skrev in utgör ett ogiltigt sidnamn, "$1".',
 1460+ 'formrequiredfielderror' => '{{PLURAL:$2|Fältet $1|Fälten $1}} behövs för det här formuläret.
 1461+Var god fyll i {{PLURAL:$1|det|dem}}.',
 1462+ 'formsavesummary' => 'Ny sida använder [[Special:Form/$1|formuläret $1]]',
 1463+ 'formsaveerror' => 'Fel under sparning av formuläret',
 1464+ 'formsaveerrortext' => 'Det uppstod ett okänt fel under sparning av sidan "$1".',
 1465+);
 1466+
 1467+/** Swahili (Kiswahili)
 1468+ * @author Lloffiwr
 1469+ */
 1470+$messages['sw'] = array(
 1471+ 'formsave' => 'Hifadhi',
 1472+);
 1473+
 1474+/** Telugu (తెలుగు)
 1475+ * @author Veeven
 1476+ */
 1477+$messages['te'] = array(
 1478+ 'form-desc' => 'కొత్త పేజీలను మొదలుపెట్టడానికి ఒక [[Special:Form|ఫారం]]',
 1479+ 'form' => 'ఫారం',
 1480+ 'formnoname' => 'ఫారం పేరు లేదు',
 1481+ 'formnonametext' => 'మీరు తప్పనిసరిగా ఫారానికి ఓ పేరు, "Special:Form/Nameofform" వంటిది ఇవ్వాలి.',
 1482+ 'formbadname' => 'తప్పుడు ఫారం పేరు',
 1483+ 'formbadnametext' => 'అటువంటి పేరుతో ఫారం లేదు.',
 1484+ 'formsave' => 'భద్రపరచు',
 1485+ 'formarticleexists' => 'పేజీ ఉంది',
 1486+ 'formarticleexiststext' => '[[$1]] అనే పేజీ ఇప్పటికే ఉంది.',
 1487+ 'formbadpagename' => 'తప్పుడు పేజీ పేరు',
 1488+ 'formbadrecaptcha' => 'రీకాప్చాకి తప్పుడు విలువలు. మళ్ళీ ప్రయత్నించండి.',
 1489+ 'formsavesummary' => '[[Special:Form/$1|$1 ఫారాన్ని]] వాడి కొత్త పేజీ',
 1490+ 'formsaveerror' => 'ఫారాన్ని భద్రపరచడంలో పొరపాటు',
 1491+ 'formsaveerrortext' => "'$1' పేజీని భద్రపరచడంలో ఏదో తెలియని పొరపాటు జరిగింది.",
 1492+);
 1493+
 1494+/** Tajik (Cyrillic) (Тоҷикӣ (Cyrillic))
 1495+ * @author Ibrahim
 1496+ */
 1497+$messages['tg-cyrl'] = array(
 1498+ 'formnonametext' => 'Шумо бояд номи формро, ба монанди "Special:Form/Nameofform" пешниҳод кунед.',
 1499+ 'formbadname' => 'Номи форми номуносиб',
 1500+ 'formbadnametext' => 'Ҳеҷ форме бо он ном нест.',
 1501+ 'formtitlepattern' => 'Илова $1и нав',
 1502+ 'formsave' => 'Захира кардан',
 1503+ 'formarticleexists' => 'Саҳифа вуҷуд дорад',
 1504+ 'formarticleexiststext' => 'Саҳифа [[$1]] аллакай вуҷуд дорад.',
 1505+ 'formbadpagename' => 'Номи саҳифа номуносиб',
 1506+ 'formbadpagenametext' => 'Додаи форме, ки шумо ворид кардаед номи номуносибе ба саҳифа, "$1" мекунад.',
 1507+ 'formsaveerror' => 'Хато дар ҳоли захираи форм',
 1508+ 'formsaveerrortext' => "Дар ҳоли захираи саҳифаи '$1' хатои ношиносе буд.",
 1509+);
 1510+
 1511+/** Tajik (Latin) (Тоҷикӣ (Latin))
 1512+ * @author Liangent
 1513+ */
 1514+$messages['tg-latn'] = array(
 1515+ 'formnonametext' => 'Şumo bojad nomi formro, ba monandi "Special:Form/Nameofform" peşnihod kuned.',
 1516+ 'formbadname' => 'Nomi formi nomunosib',
 1517+ 'formbadnametext' => 'Heç forme bo on nom nest.',
 1518+ 'formtitlepattern' => 'Ilova $1i nav',
 1519+ 'formsave' => 'Zaxira kardan',
 1520+ 'formarticleexists' => 'Sahifa vuçud dorad',
 1521+ 'formarticleexiststext' => 'Sahifa [[$1]] allakaj vuçud dorad.',
 1522+ 'formbadpagename' => 'Nomi sahifa nomunosib',
 1523+ 'formbadpagenametext' => 'Dodai forme, ki şumo vorid kardaed nomi nomunosibe ba sahifa, "$1" mekunad.',
 1524+ 'formsaveerror' => 'Xato dar holi zaxirai form',
 1525+ 'formsaveerrortext' => "Dar holi zaxirai sahifai '$1' xatoi noşinose bud.",
 1526+);
 1527+
 1528+/** Thai (ไทย)
 1529+ * @author Passawuth
 1530+ */
 1531+$messages['th'] = array(
 1532+ 'formsave' => 'บันทึก',
 1533+);
 1534+
 1535+/** Turkmen (Türkmençe)
 1536+ * @author Hanberke
 1537+ */
 1538+$messages['tk'] = array(
 1539+ 'formsave' => 'Ýazdyr',
 1540+);
 1541+
 1542+/** Tagalog (Tagalog)
 1543+ * @author AnakngAraw
 1544+ */
 1545+$messages['tl'] = array(
 1546+ 'form-desc' => 'Isang [[Special:Form|ugnayang-hangganan ng pormularyo]] upang makapagsimula ng bagong mga pahina',
 1547+ 'form' => 'Pormularyo',
 1548+ 'formnoname' => 'Walang pangalan ng pormularyo',
 1549+ 'formnonametext' => 'Dapat kang magbigay ng isang pangalan ng pormularyo, katulad ng "Special:Form/Pangalanngpormularyo".',
 1550+ 'formbadname' => 'Masamang pangalan ng pormularyo',
 1551+ 'formbadnametext' => 'Walang pormularyong may ganyang pangalan.',
 1552+ 'formpattern' => 'Pormularyong $1',
 1553+ 'formtitlepattern' => 'Magdagdag ng bagong $1',
 1554+ 'formsave' => 'Sagipin',
 1555+ 'formindexmismatch-title' => 'Maling pagtutugma ng kabuoan ng pangalan at suleras',
 1556+ 'formindexmismatch' => 'Ang pormularyong ito ay mayroong hindi magkakatugmang mga kabuoan ng pangalan at mga suleras na nagsisimula sa paksaan/indeks na $1.',
 1557+ 'formarticleexists' => 'Umiiral na ang pahina',
 1558+ 'formarticleexiststext' => 'Umiiral na ang pahinang [[$1]].',
 1559+ 'formbadpagename' => 'Masamang pangalan ng pahina',
 1560+ 'formbadrecaptcha' => "Hindi tamang mga halaga para sa muling pag-Captcha (''reCaptcha''). Subuking muli.",
 1561+ 'formbadpagenametext' => 'Ang ipinasok mong dato sa pormularyo ay gumagawa ng isang masamang pangalan ng pahina, "$1".',
 1562+ 'formrequiredfielderror' => 'Ang {{PLURAL:$2|hanay na $1 ay|mga hanay na $1 ay}} kailangan para sa pormularyong ito.
 1563+Pakipunuan {{PLURAL:$2|ito|sila}} ng laman.',
 1564+ 'formsavesummary' => 'Bagong pahinang gumagamit ng [[Special:Form/$1|pormularyong $1]]',
 1565+ 'formsaveerror' => 'Kamalian sa pagsagip ng pormularyo',
 1566+ 'formsaveerrortext' => "Nagkaroon ng isang hindi nalalamang kamalian habang sinasagip ang pahinang '$1'.",
 1567+);
 1568+
 1569+/** Turkish (Türkçe)
 1570+ * @author Karduelis
 1571+ * @author Vito Genovese
 1572+ */
 1573+$messages['tr'] = array(
 1574+ 'form' => 'Form',
 1575+ 'formnoname' => 'Form adı yok',
 1576+ 'formbadnametext' => 'Bu isimde bir form yok.',
 1577+ 'formtitlepattern' => 'Yeni $1 ekle',
 1578+ 'formsave' => 'Kaydet',
 1579+ 'formarticleexists' => 'Sayfa mevcut',
 1580+ 'formbadpagename' => 'Kötü madde adı',
 1581+ 'formsaveerror' => 'Formu kaydetmede hata',
 1582+);
 1583+
 1584+/** Tatar (Cyrillic) (Татарча/Tatarça (Cyrillic))
 1585+ * @author Timming
 1586+ */
 1587+$messages['tt-cyrl'] = array(
 1588+ 'formsavesummary' => 'Яңа бит, [[Special:Form/$1|$1 формасы]] ярдәмендә',
 1589+);
 1590+
 1591+/** Ukrainian (Українська)
 1592+ * @author Aleksandrit
 1593+ */
 1594+$messages['uk'] = array(
 1595+ 'formsave' => 'Зберегти',
 1596+ 'formarticleexists' => 'Сторінка існує',
 1597+);
 1598+
 1599+/** Veps (Vepsan kel')
 1600+ * @author Игорь Бродский
 1601+ */
 1602+$messages['vep'] = array(
 1603+ 'form' => 'Form',
 1604+ 'formnoname' => 'Ei ole forman nimed',
 1605+ 'formbadname' => 'Hond forman nimi',
 1606+ 'formpattern' => '$1-form',
 1607+ 'formsave' => 'Panda muštho',
 1608+ 'formbadpagename' => 'Vär lehtpolen nimi',
 1609+);
 1610+
 1611+/** Vietnamese (Tiếng Việt)
 1612+ * @author Minh Nguyen
 1613+ */
 1614+$messages['vi'] = array(
 1615+ 'form' => 'Biểu mẫu',
 1616+ 'formnoname' => 'Biểu mẫu không có tên',
 1617+ 'formtitlepattern' => 'Thêm $1 mới',
 1618+ 'formsave' => 'Lưu',
 1619+ 'formarticleexists' => 'Trang đã tồn tại',
 1620+ 'formarticleexiststext' => 'Trang [[$1]] đã tồn tại.',
 1621+ 'formsavesummary' => 'Trang mới theo [[Special:Form/$1|biểu mẫu $1]]',
 1622+ 'formsaveerror' => 'Lỗi lưu biểu mẫu',
 1623+);
 1624+
 1625+/** Volapük (Volapük)
 1626+ * @author Smeira
 1627+ */
 1628+$messages['vo'] = array(
 1629+ 'form-desc' => '[[Special:Form|Fomet]] ad primön padis nulik',
 1630+ 'form' => 'Fomet',
 1631+ 'formnoname' => 'Fometanem nonik',
 1632+ 'formnonametext' => 'Mutol penön fometanemi, a.s. „Special:Form/Fometanem“.',
 1633+ 'formbadname' => 'Fometanem no lonöföl',
 1634+ 'formbadnametext' => 'No dabinon fomet labü nem at.',
 1635+ 'formpattern' => 'fomet-$1',
 1636+ 'formtitlepattern' => 'Läükön $1i nulik',
 1637+ 'formsave' => 'Dakipön',
 1638+ 'formarticleexists' => 'Pad dabinon',
 1639+ 'formarticleexiststext' => 'Pad at: [[$1]] ya dabinon.',
 1640+ 'formbadpagename' => 'Padanem no lonöföl',
 1641+ 'formbadpagenametext' => 'Fometanünods fa ol pepenöls jafons padanemi no lonöföl: „$1“.',
 1642+ 'formrequiredfielderror' => 'Fel: $1 paflagon in fomet at.
 1643+Fulükolös oni.',
 1644+ 'formsavesummary' => 'Pad nulik me [[Special:Form/$1|fomet: $1]]',
 1645+ 'formsaveerror' => 'Pöl pö dakip fometa',
 1646+ 'formsaveerrortext' => 'Pöl nesevädik ejenon dü dakip pada: „$1“.',
 1647+);
 1648+
 1649+/** Yiddish (ייִדיש)
 1650+ * @author פוילישער
 1651+ */
 1652+$messages['yi'] = array(
 1653+ 'formsave' => 'אויפֿהיטן',
 1654+);
 1655+
 1656+/** Simplified Chinese (‪中文(简体)‬)
 1657+ * @author Gzdavidwong
 1658+ * @author Liangent
 1659+ */
 1660+$messages['zh-hans'] = array(
 1661+ 'form' => '表单',
 1662+ 'formnoname' => '没有表单名',
 1663+ 'formnonametext' => '你必须提供一个表单名,如“Special:Form/表单名”。',
 1664+ 'formbadname' => '错误的表单名',
 1665+ 'formbadnametext' => '没有这个名字的表单。',
 1666+ 'formpattern' => '$1-表单',
 1667+ 'formtitlepattern' => '添加新的$1',
 1668+ 'formsave' => '保存',
 1669+ 'formarticleexists' => '页面存在',
 1670+ 'formbadpagename' => '错误的表单名',
 1671+ 'formsaveerror' => '储存表格时发生错误',
 1672+);
 1673+
 1674+/** Traditional Chinese (‪中文(繁體)‬)
 1675+ * @author Liangent
 1676+ * @author Wrightbus
 1677+ */
 1678+$messages['zh-hant'] = array(
 1679+ 'form' => '表格',
 1680+ 'formnoname' => '未有表格名稱',
 1681+ 'formnonametext' => '你必須提供一個表單名,如“Special:Form/表單名”。',
 1682+ 'formbadname' => '錯誤的表單名',
 1683+ 'formbadnametext' => '沒有這個名字的表單。',
 1684+ 'formpattern' => '$1-表單',
 1685+ 'formtitlepattern' => '添加新的$1',
 1686+ 'formsave' => '儲存',
 1687+ 'formarticleexists' => '頁面存在',
 1688+ 'formbadpagename' => '錯誤的表單名',
 1689+ 'formsaveerror' => '儲存表格時發生錯誤',
 1690+);
 1691+
Property changes on: trunk/extensions/Form/Form.i18n.php
___________________________________________________________________
Name: svn:eol-style
11692 + native
Index: trunk/extensions/Form/Form.php
@@ -0,0 +1,47 @@
 2+<?php
 3+/**
 4+ * Form.php -- Use a form-based interface to start new articles
 5+ * Copyright 2007 Vinismo, Inc. (http://vinismo.com/)
 6+ *
 7+ * This program is free software; you can redistribute it and/or modify
 8+ * it under the terms of the GNU General Public License as published by
 9+ * the Free Software Foundation; either version 2 of the License, or
 10+ * (at your option) any later version.
 11+ *
 12+ * This program is distributed in the hope that it will be useful,
 13+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 15+ * GNU General Public License for more details.
 16+ *
 17+ * You should have received a copy of the GNU General Public License
 18+ * along with this program; if not, write to the Free Software
 19+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 20+ *
 21+ * @file
 22+ * @ingroup Extensions
 23+ * @author Evan Prodromou <evan@vinismo.com>
 24+ */
 25+
 26+if ( !defined( 'MEDIAWIKI' ) ) {
 27+ exit( 1 );
 28+}
 29+
 30+// Set up the new special page
 31+$dir = dirname( __FILE__ ) . '/';
 32+$wgAutoloadClasses['SpecialForm'] = $dir . 'Form.body.php'; # Tell MediaWiki to load the extension body.
 33+$wgExtensionMessagesFiles['Form'] = $dir . 'Form.i18n.php'; # Load internationalization file
 34+$wgExtensionAliasesFiles['Form'] = $dir . 'Form.alias.php';
 35+$wgSpecialPages['Form'] = 'SpecialForm'; # Let MediaWiki know about your new special page.
 36+
 37+// Extension credits that will show up on Special:Version
 38+$wgExtensionCredits['specialpage'][] = array(
 39+ 'path' => __FILE__,
 40+ 'name' => 'Form',
 41+ 'version' => '0.5.0',
 42+ 'author' => 'Evan Prodromou',
 43+ 'url' => 'http://www.mediawiki.org/wiki/Extension:Form',
 44+ 'descriptionmsg' => 'form-desc',
 45+);
 46+
 47+# Use recaptcha; default to false
 48+$wgSpecialFormRecaptcha = false;
Property changes on: trunk/extensions/Form/Form.php
___________________________________________________________________
Name: svn:eol-style
149 + native
Index: trunk/extensions/Form/Template-Sample.wiki
@@ -0,0 +1,15 @@
 2+The topic is {{{topic}}}.
 3+
 4+The purpose is {{{purpose}}}.
 5+
 6+== Introduction ==
 7+
 8+{{{intro}}}
 9+
 10+== Color ==
 11+
 12+{{{color}}}
 13+
 14+== Conclusion ==
 15+
 16+{{{conclusion}}}
Property changes on: trunk/extensions/Form/Template-Sample.wiki
___________________________________________________________________
Name: svn:eol-style
117 + native
Index: trunk/extensions/Form/README
@@ -0,0 +1,211 @@
 2+MediaWiki Form extension
 3+
 4+version 0.2
 5+1 Oct 2007
 6+
 7+This is the README file for the Form extension for MediaWiki
 8+software. The extension is only useful if you've got a MediaWiki
 9+installation; it can only be installed by the administrator of the site.
 10+
 11+The extension lets users create new articles with a form interface.
 12+Administrators configure a "form definition" in the MediaWiki namespace,
 13+and the form can be used to create a new article using a particular
 14+template.
 15+
 16+Typical uses:
 17+
 18+* "New X" interfaces for wiki newbies.
 19+
 20+This is a testing version of the extension and it's almost sure to
 21+have bugs. See the BUGS section below for info on how to report
 22+problems.
 23+
 24+== License ==
 25+
 26+Copyright 2007 Vinismo, Inc. (http://vinismo.com/)
 27+
 28+This program is free software; you can redistribute it and/or modify
 29+it under the terms of the GNU General Public License as published by
 30+the Free Software Foundation; either version 2 of the License, or
 31+(at your option) any later version.
 32+
 33+This program is distributed in the hope that it will be useful,
 34+but WITHOUT ANY WARRANTY; without even the implied warranty of
 35+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 36+GNU General Public License for more details.
 37+
 38+You should have received a copy of the GNU General Public License
 39+along with this program; if not, write to the Free Software
 40+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 41+
 42+== Author ==
 43+
 44+Evan Prodromou <evan@vinismo.com>
 45+
 46+== Pre-requisites ==
 47+
 48+This software was tested with MediaWiki 1.10.0 (which is what
 49+Vinismo was running at the time.) It may or may not work with
 50+earlier or later versions, but please test it.
 51+
 52+== Installation ==
 53+
 54+To install, copy all the files in the archive you downloaded to the
 55+Form subdirectory of the extensions subdirectory of your
 56+MediaWiki installation. Note that the software depends on having its
 57+code all in the "Form" sub-directory; naming it
 58+"Form-Test" or "newextension1" or whatever won't work.
 59+
 60+In your MediaWiki LocalSettings.php, add the following line some place
 61+towards the bottom of the file:
 62+
 63+ require_once("$IP/extensions/Form/Form.php");
 64+
 65+Theoretically it should work out of the box.
 66+
 67+== Preparing forms ==
 68+
 69+To create a new form, you need to do two things:
 70+
 71+* Create a "form definition" in the MediaWiki namespace.
 72+* Create an output template that describes the structure of the
 73+ resulting articles.
 74+
 75+Form definitions use a special idiosyncratic syntax that may change in
 76+the future.
 77+
 78+Output templates are just regular ol' MediaWiki templates. They should
 79+use ''named'' parameters rather than numbered parameters.
 80+
 81+There is a sample form definition article in
 82+"MediaWiki-Sample-form.wiki" that came with this package, and a
 83+corresponding output template in "Template-Sample.wiki".
 84+
 85+== Form definitions ==
 86+
 87+A form definition article must be named "MediaWiki:nameofform-form",
 88+where "nameofform" is the name you're going to use for the form. (You
 89+can change this pattern by changing MediaWiki:Formpattern, but note
 90+that this will affect all of your forms.)
 91+
 92+Each line in the form definition file is either a form attribute or a
 93+form field definition. Each is described below.
 94+
 95+=== Form attributes ===
 96+
 97+Form attributes define information for the form as a whole. Each
 98+attribute line looks like:
 99+
 100+ name=value
 101+
 102+Note that no whitespace is tolerated before and after the name.
 103+Typically form attributes appear at the beginning of an article, but
 104+they are tolerated anywhere in the article, if you need things that way.
 105+
 106+Valid names for form attributes are as follows:
 107+
 108+* template: name of the output template (without the namespace prefix)
 109+ that will be used for creating new articles. If this is not defined,
 110+ the default name will be "Template:Name", where "name" is the name
 111+ of the form.
 112+* title: title that's shown on the form. By default, this is "Add New
 113+ $1", where $1 is the name of the form. You can change the
 114+ default title pattern with by changing MediaWiki:Formtemplatepattern.
 115+* namePattern: the pattern for new article names. This is based on the
 116+ fields in the form, and uses MediaWiki template-substitution syntax
 117+ (badly... only the simplest syntax is now supported). For example,
 118+ if you are creating articles about sporting events results, and
 119+ there are two form fields "year" and "event", the name pattern might
 120+ be "{{{year}}} {{{event}}} Results". If the user fills in "2004" and
 121+ "World Series", the resulting article will be "2004 World Series
 122+ Results".
 123+* instructions: plain text (no wikitext or HTML... yet) instructions
 124+ for users of the form. Will be shown at the top of the form before
 125+ any fields.
 126+
 127+=== Form field definitions ===
 128+
 129+Each field in the form has a line defining it in the form definition
 130+file. The structure of the field definition lines is:
 131+
 132+ name|label|type|description|options
 133+
 134+The parts of the field definition are separated by pipe ("|")
 135+characters and cannot include pipes themselves (even with "escape"
 136+characters). The parts of the definition are defined below:
 137+
 138+* name: name of the field. It must be unique, and contain only
 139+ alphabetic or numeric characters or the underscore ("_"). This will
 140+ be the parameter name used for the output template.
 141+* label: readable name for the field, used for labels. No
 142+ restrictions, except for the lack of a pipe. No HTML or wikitext
 143+ allowed (yet).
 144+* type: type of the form field (see below).
 145+* description: a user-readable description of the purpose and
 146+ restrictions on the form field. Only shown for 'textarea' fields
 147+ right now, but will eventually be shown for all fields once I figure
 148+ out the layout correctly.
 149+* options: optional parameters for the field, mostly dependent on the
 150+ field type. options always take the form "name=value", and are
 151+ separated by commas (",").
 152+
 153+The description and options parts are optional.
 154+
 155+=== Form field types ===
 156+
 157+The following types of form fields can be created.
 158+
 159+* textarea: an HTML textarea, e.g. a big multi-line entry area. These
 160+ are usually used for lots of paragraphs. The following options are
 161+ supported:
 162+** rows: number of rows; defaults to 6.
 163+** cols: number of columns; defaults to 80.
 164+* text: a one-line text input. Takes these options:
 165+** size: length of the text input; defaults to 30.
 166+* checkbox: a yes-no, on-off choice for the user. Takes no options.
 167+* radio: a group of radio buttons; exclusive choices. Radion button
 168+ groups take the following options:
 169+** items: semicolon-separated (";") list of choices for the user. For
 170+ example, "Blue;Green;Red" will give the user three radio buttons
 171+ labeled "Blue", "Green", and "Red".
 172+* select: a drop-down box showing multiple exclusive choices for the
 173+ user. Select boxes take the following options:
 174+** items: semicolon-separated (";") list of choices for the user. For
 175+ example, "Blue;Green;Red" will give the user a drop-down box with
 176+ three choices, "Blue", "Green", and "Red".
 177+
 178+All field types support the option 'required'. If this option is 'on',
 179+'true', 'yes', or '1', saving the form without that field filled in
 180+will result in an error (and the user is given a chance to enter the
 181+data again).
 182+
 183+== Using forms ==
 184+
 185+To show a user a form, use the following special-page format:
 186+
 187+ Special:Form/Name
 188+
 189+Where "name" is the name of the form. This will load the form
 190+definition from "MediaWiki:Name-form", and by default use
 191+Template:Name for the output template.
 192+
 193+The user can fill in the form fields and hit "save" to save the
 194+article. Note that currently no validation is performed; if the user
 195+fails to complete a required field, it will be rendered empty.
 196+
 197+== Translation ==
 198+
 199+The user interface strings for this extension are configurable through
 200+the same Special:Allmessages page as MediaWiki itself. They all start
 201+with "form", and they're no more or less cryptic than MediaWiki's.
 202+
 203+Translations to other languages besides English are welcome; please
 204+send them along.
 205+
 206+== Bugs and enhancements ==
 207+
 208+Bugs or feature requests can be sent to the author at
 209+evan@vinismo.com. The TODO file in this distribution has stuff I
 210+think needs to be todone; + marks show things I've already done, and -
 211+shows things that are yet to be done.
 212+
Property changes on: trunk/extensions/Form/README
___________________________________________________________________
Name: svn:eol-style
1213 + native

Status & tagging log